马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
权限是理解 Linux 运行机制的一把钥匙。它和 Windows 差别很大:Linux 严格意义上的「系统」是内核,普通用户不能直接碰内核,得通过 shell 这个外壳来沟通。本文从 shell 讲起,把两种用户、九位权限、chmod/chown/chgrp/umask、目录权限和粘滞位一次讲透。
shell 命令以及运行原理
Linux 内核(kernel)普通用户无法直接使用,需要通过 kernel 的外壳程序也就是 shell 来与内核沟通。Shell 最简单的定义是命令行解释器(command interpreter),干两件事:把用户的命令翻译给内核处理,再把内核的处理结果翻译回用户。
对比 Windows GUI:我们用 Windows 不是直接用内核,而是通过图形接口点来点去(比如双击 D 盘盘符就跑起一个应用)。Linux 的 shell 起的是同样的作用——分析指令交给内核,内核跑完结果再由 shell 呈现给用户。
Linux 权限的概念
Linux 下有两种用户:
- 超级用户(root):可以做任何事,不受限制,命令提示符是
#。
- 普通用户:做事情受限,命令提示符是
$。
切换用户的命令是 su [用户名]:从 root 切到普通用户写 su user;从普通用户回 root 写 su root(root 可省略),系统会提示输入 root 口令。
权限管理
文件访问者分类
- u—User:文件和目录的所有者。
- g—Group:所有者所属组的其他用户。
- o—Others:其他用户。
文件类型
d 文件夹
- 普通文件
l 软链接(类似 Windows 快捷方式)
b 块设备文件(硬盘、光驱等)
p 管道文件
c 字符设备文件(屏幕、串口等)
s 套接口文件
三种基本权限
- 读(r/4):对文件是读取内容,对目录是查看目录信息。
- 写(w/2):对文件是修改内容,对目录是删除、移动目录内文件。
- 执行(x/1):对文件是执行,对目录是进入目录。
- 表示不具有该项权限。
权限既能用字符显示,也能用八进制数值显示,两者等价。
chmod:设置访问权限
格式:chmod [参数] 权限 文件名,常用选项 -R 递归修改目录内文件权限。注意,只有文件拥有者和 root 能改文件权限。
写法一是「用户符号 + 权限字符」:
+ 向权限范围增加某项权限
- 取消某项权限
= 赋予某项权限
用户符号:u 拥有者、g 同组用户、o 其他用户、a 全部用户。
chmod u+w /home/abc.txt
chmod o-x /home/abc.txt
chmod a=x /home/abc.txt
写法二是三位八进制数字:
chmod 664 /home/abc.txt
chmod 640 /home/abc.txt
chown 与 chgrp
chown 修改文件拥有者,格式 chown [参数] 用户名 文件名:
chown user1 f1
chown -R user1 filegroup1
chgrp 修改文件或目录的所属组,格式 chgrp [参数] 用户组名 文件名,-R 为递归:
chgrp users /abc/f2
umask:权限掩码
新建文件默认权限是 0666,新建目录默认 0777,但你实际看到的往往不是这两个值——因为创建时还要受 umask 影响,实际权限是「默认权限 & ~umask」(mask 与 umask 取反后按位与)。
格式是 umask 权限值。超级用户默认掩码 0022,普通用户默认 0002。
umask 755 # 设置
umask # 查看
umask 044 # 设置
file:辨识文件类型
格式 file [选项] 文件或目录…,常用选项:
-c 详细显示指令执行过程,便于排错或分析运行环境。
-z 去解读压缩文件的内容。
用 sudo 分配权限
改 /etc/sudoers 文件来分配:
chmod 740 /etc/sudoers
vi /etc/sudoers
格式为「担当权限的用户 登录的主机=(执行命令的用户)命令」。授权后用 sudo -u 用户名 命令 调用:
sudo -u root /usr/sbin/useradd u2
目录的权限
- 没有可执行权限:无法 cd 进目录。
- 没有可读权限:无法用 ls 等命令查看目录内容。
- 没有可写权限:无法在目录里创建或删除文件。
粘滞位
给目录加粘滞位(chmod +t)之后,该目录下的文件只能由 root、目录所有者、文件所有者删除:
chmod +t /home/
ls -ld /home/
# drwxrwxrwt. 3 root root 4096 ... /home/
su - litao
rm /home/abc.c
# rm: 无法删除 "/home/abc.c": 不允许的操作
总结
最容易踩的坑是目录权限:没有 -x 就完全进不去目录,哪怕它还有 -r 读权限;反过来有 -x 没 -r,能进去能执行,却列不出目录内容。把「目录看 x、文件看 x、写权限管创建删除」这三条记牢,权限问题基本都能自己排。
qidao123.com企服评测-应用市场 编辑提示 |