目录
Shell 命令及运行原理
Shell 与 Kernel
Linux 权限的概念
命令提示符
Linux 权限管理
1. 访问者的分类 ugo
2. 类型和访问权限
3. 权限值表示方法
4. chmod 访问权限设置
掩码命令:umask
5.目录权限
粘滞位:
文章手稿见文末
Shell 命令及运行原理
Shell 与 Kernel
Linux 严格意义上讲是一个操作系统的核心(Kernel),但一般用户不能直接使用 Kernel,而是通过 Kernel 的“外壳”程序,即 Shell,与 Kernel 进行通信。
Shell 的定义:
- 命令行解释器 (Command Interpreter):将用户的命令翻译给内核 (Kernel) 处理,同时将内核的处理结果翻译给用户。
举例:
- 在 Windows 上,我们通过图形接口 (GUI) 操作系统。而在 Linux 上,用户通过 Shell 输入命令,Shell 解析命令并交给 Kernel 执行。
帮助理解:Shell 就像是操作系统内核和用户之间的“媒婆”,负责传达信息和执行操作。
Linux 权限的概念
Linux 下有两种用户:超级用户 (root) 和普通用户。
- 超级用户 (root):可以在 Linux 系统下做任何事情,不受限制。
- 普通用户:只能做有限的事情。
命令提示符
- 超级用户的命令提示符是
#
- 普通用户的命令提示符是
$
切换用户的命令:
- 使用
su [用户名]
命令。- 从 root 用户切换到普通用户
user
:su user
- 从普通用户
user
切换到 root 用户:su
(默认 root)
- 从 root 用户切换到普通用户
Linux 权限管理
权限=人+事物属性
1. 访问者的分类 ugo
分类 | 符号 | 解释 |
---|---|---|
文件和目录的所有者 | u | User |
文件和目录的所有者所在组的用户 | g | Group |
其它用户 | o | Others |
2. 类型和访问权限
文件类型:
符号 | 解释 |
---|---|
d | 文件夹 |
- | 普通文件 |
l | 软链接 (类似 Windows 快捷方式) |
b | 块设备文件 (如硬盘、光驱等) |
p | 管道文件 |
c | 字符设备文件 (如屏幕等串口设备) |
s | 套接口文件 |
基本权限:
符号 | 权限 | 解释 |
---|---|---|
r | 读 | Read,对文件而言,读取文件内容权限;对目录而言,浏览该目录信息权限 |
w | 写 | Write,对文件而言,修改文件内容权限;对目录而言,删除和移动目录内文件的权限 |
x | 执行 | Execute,对文件而言,执行文件权限;对目录而言,进入目录的权限 |
- | 无 | 拥有该项权限 |
3. 权限值表示方法
表示方法 | 解释 |
---|---|
字符表示方法 | rwx |
8 进制数值表示方法 | 755 |
默认起始是666和777,下面让我们来进行一些尝试
关于超级用户root :
4. chmod 访问权限设置
修改权限命令:chmod
- 功能: 设置文件的访问权限。
- 格式:
chmod [参数] 权限 文件名
- 常用选项:
-R
递归修改目录文件的权限
用户表示符与权限字符:
符号 | 解释 |
---|---|
+ | 增加权限 |
- | 取消权限 |
= | 赋予权限 |
用户符号:
符号 | 解释 |
---|---|
u | 拥有者 |
g | 拥有者同组用户 |
o | 其它用户 |
a | 所有用户 |
实例:
给所有用户赋权的三种复合使用方法
chmod a=x /home/abc.txt # 设置文件所有用户有执行权限
chmod 755 /home/abc.txt # 使用三位8进制表示法
chmod u+x,g+x,o+wx ./abc3.txt
修改文件拥有者命令:chown
- 功能: 修改文件的拥有者。
- 格式:
chown [参数] 用户名 文件名
- 实例:
chown user1 f1
chown -R user1 filegroup1
一个文件的创建者和拥有者一定是同一个人吗?
通过我们刚才修改文件的拥有者,我们就能得出 —— 不一定。
修改文件或目录所属组命令:chgrp
- 功能: 修改文件或目录的所属组。
- 格式:
chgrp [参数] 用户组名 文件名
- 常用选项:
-R
递归修改文件或目录的所属组 - 实例:
chgrp users /abc/f2
掩码命令:umask
为什么创建目录的默认权限是 775,而创建普通文件的默认权限是 664 ?
不同系统可能有差异吗?
创建的时候为什么不可以都是 777?
这些都是因为权限掩码的存在。
其中的0002就是掩码
-
功能: 查看或修改文件掩码。
- 新建文件默认权限:
- 新建文件夹默认权限:0666
- 新建目录默认权限:0777
- 默认掩码 0002
实例:
umask 755 # 设置掩码
umask # 查看当前掩码
umask 044 # 设置掩码
掩码的计算:取反 &
file 指令
- 功能说明: 辨识文件类型。
- 语法:
file [选项] 文件或目录...
- 常用选项:
选项 | 解释 |
---|---|
-c | 详细显示指令执行过程 |
-z | 尝试解读压缩文件的内容 |
使用 sudo 分配权限
- 修改
/etc/sudoers
文件分配权限 - 使用
sudo
调用授权的命令
- 实例:
sudo -u 用户名 命令
sudo -u root /usr/sbin/use
5.目录权限
我们来去掉r 权限,看看到底能不能进入这个 dir:
如果目录只没有 r 权限,允许进入、允许在该目录下创建(写入)文件,只不过是不允许查看
💡 Linux 下一切皆文件,目录也是文件。再结合 "文件 = 内容 + 属性" 去理解。
目录里面保存的是部分文件的 "属性" 。
权限 | 解释 |
---|---|
可执行权限 | 如果目录没有可执行权限,则无法 cd 到目录中。 |
可读权限 | 如果目录没有可读权限,则无法用 ls 等命令查看目录中的文件内容。 |
可写权限 | 如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。 |
粘滞位:
共享目录
Linux 下可以存在一些目录,拥有者和所属组是 root,
其他人允许以 other 的身份在该目录下进行文件的创建、读取、删除和修改等操作:
想在共享目录下形成临时文件,但又怕别人给你删了,
你可以给共享的 <目录> 加上粘滞位来解决。
注意,是给目录加粘滞位!即你共享哪个目录,你就在哪个目录下加上粘滞位。
粘滞位
💭 以 root 身份给 all 目录添置粘滞位:
这样用户就无法随意删了
当一个目录设置为"粘滞位" (用 chmod +t
),则该目录下的文件删除权限如下:
- 超级管理员可以删除
- 目录所有者可以删除
- 文件所有者可以删除
实例:
目录设置了粘滞位 后,作为 other 就无法随意地删除其他用户的文件了: