shell的介绍以及Linux权限的讲解

简介: shell的介绍以及Linux权限的讲解

1 shell命令以及运行原理

1.1 shell命令行的概念

大家在以前的学习中可能会有一个固态的印象:

一台计算机的大概分层为下图

也就是说人可以直接调用计算机的操作系统,但真的是这样吗?

答案是否定的!

其实操作系统还有一个“外壳”:

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通

我们举一个例子:

其实用户就是一个大龄未婚的小伙子,他现在看上了一个如花似玉的姑娘(也就是操作系统),想找他做老婆(用户的需求),但是不好意思去找姑娘,于是就到村里找了个王阿姨(shell)去说媒,这就很好理解了吧

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

1 将使用者的命令翻译给核心(kernel)处理
2 同时,将核心的处理结果翻译给使用者

window系统中的图形界面就是一个shell程序,我们点击图标从而完成相应的需求,但是Linux中,shell主要是对指令进行解析,然后交给kernal,反馈的结果通过kernal运行出结果,通过shell解析给用户

1.2 shell外壳程序的意义

那么问题来了,为什么不直接让用户使用我们的操作系统呢?这样不是更方便吗?

这是因为如果让用户直接访问操作系统,它的成本是很高的,并且犯错率也很高,容易出现很多差错,还不如让shell在中间进行传递,降低成本的同时提高系统的准确率

1 是用户和操作系统交互中间的软件层
2 一定程度上可以保护操作系统

2 Linux权限

2.1 Linux权限的概念

Linux下有两种用户:

超级用户(root)、普通用户

这也从侧面反映了Linux操作系统是多用户操作系统,windows也是

从名字上就能看出来哪个用户的权限大,root在Linux系统中只能用无所不能来形容,就这么说吧,root就像是一个古代的皇帝,其他普通用户就是各个地方的亲王,每年都要上贡,但是在自己管辖的区域有一定的权力

我们可以用指令su来切换用户

但是需要密码

su 【用户名】

例如:

指令exit可以用来切换到上一次所使用的用户:

2.2 Linux权限管理

2.2.1 文件访问者的分类(人)

文件的访问者一共可以分为三种:

文件和文件目录的拥有者:u---User
文件和文件目录的所有者所在的组的用户(所属组):g---Group
其它用户:o---Others

例如:

下图中的文件的拥有者和所属组都是root

而其他用户就是说操作系统内其他的普通用户

2.2.2 文件权限值的表示方法

r代表可读,w代表可写,x代表可执行

读r:Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写w:Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行x:execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“—”表示不具有该项权限

文件的权限是用来限制访问的,权限值可以分为两种方法:

字符表示法:

八进制表示法:

2.2.3 文件类型和访问权限(事物属性)

其实每个文件访问者对于各个文件其实都有一定的访问权限

我们先来了解一下文件类型

d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件

为了大家更好地理解上图,请看具体的例子:

2.2.4 文件访问权限的相关设置方法

chmod

功能: 设置文件的访问权限

格式: chmod [用户] +/- 权限 文件名

这里大家要注意一个点:

只有文件的拥有者和root才可以改变文件的权限!

各个字符表示的意思如下:

+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:   
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户

例如:

下图中的文件:

我需要给mytest2改权限:

chmod u+x mytest2  给拥有者加上可执行权限
chmod g+x mytest2 给mytest2文件所属组用户加上可执行权限
chmod o+x mytest2 给其他用户加上可执行权限
chmod a+x mytest2 给所有用户加上可执行权限

此外还有一种八进制的方式:

例如:

chmod 664 mytest2  
chmod 640 mytest2

chown

功能: 修改文件的拥有者

格式: chown [参数] 用户名 文件名

例如:

chown root mytest2   将mytest2的拥有者改为root

可以看到,改变拥有者后jh变成了 root

chgrp

功能: 修改文件或目录的所属组

格式: chgrp [参数] 用户组名 文件名

例如:

chgrp root mytest2  将mytest2的所属组改为root

但是大家有没有发现:

chown和chgrp我在这两个指令之前加入了一个sudo,这是为什么呢?

实际上也可以切换为root来执行这个指令,但是为了方便,我将jh这个普通用户放入了我的信任列表里,至于怎么放,稍后解答!

umask

功能:
查看或修改文件掩码
新建文件默认权限=0666
新建目录默认权限=0777

前面的0不用管,默认第一位都是0,文件夹666就是都没有执行权限,目录777就是三个所有权限都有,我们来验证一下啊:

我们新建了一个文件夹3_20,一个文件3_20_test,这么他们的访问权限和我们默认生成制定的规则不一样呢?

**原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: **

mask & ~umask

umask我们可以叫它权限掩码

那么我们可以查看我们当前系统的umask,也可以设置:

umask  查看系统的权限掩码值

umask 0003  修改权限掩码值

2.3 file指令

功能说明: 辨识文件类型。

语法: file [选项] 文件或目录…

常用选项:

-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-z 尝试去解读压缩文件的内容。

例如:

file 3_20

使用 sudo分配权限

想使用sudo指令,我们首先要将当前的用户加入信任列表:

我们需要用vim指令打开一个文件进行修改:

vim /etc/sudoers

至于如何修改,我们下篇博文在做讲解,因为本篇博文还有未涉及到的知识

然后我们就可以调用sudo分配权限了

2.4 目录的权限

在目录中各种权限的解释如下:

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

那么我们就有一个问题出现了:

我们有一个需要注意的点:

一个文件是否能被删除取决于这个文件所在的目录

那么也就是说,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限,但是这明显有问题啊

我创建的文件,这么情敌还能删除掉我的文件呢?

为了解决这个问题:

就引出了粘滞位!

2.5 粘滞位

当一个目录被设置为**“粘滞位”(用chmod +t)**,则该目录下的文件只能由:

一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除

例如:

chmod o+t yw_test

可以看到other用户的可执行权限变成了t,不能删除它

此外,粘滞位大家要注意啊:

1 粘滞位只能给目录设置,文件不能
2 粘滞位设置后一般不能被取消

2.6 权限的总结

1 目录的可执行权限是表示你可否在目录下执行命令

2 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目录, 即使目录有-r 读权限(这

个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)

3 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读
权限
,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档

好了,今天的分享到这里就结束了,感谢大家的支持!

相关文章
|
6月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
569 9
|
6月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
6月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
565 2
|
8月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
959 1
|
11月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
1321 25
|
10月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
299 4
|
10月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
547 3
|
11月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
252 18
|
12月前
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
728 6
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
258 0