Linux 的文件权限

Linux 的文件权限

前言

记录一些常见的权限管理规则与命令.

权限位标志

测试数据

使用 root 账户执行以下命令

1
2
3
4
5
6
7
8
# 创建临时目录
mkdir /tmp/test
cd /tmp/test
echo "from root!" >> root.txt
echo "echo print from root!" >> root.sh
touch pipe
# 单列打印所有文件附文件类型
ls -alF

以下是打印列表列表, 分别为 标志位/路径数量/所属用户/所属组/大小/创建时间/路径

1
2
3
4
5
drwxr-xr-x  2 siweipancc siweipancc 4096 Apr 21 20:02 ./
drwxrwxrwt 17 root root 4096 Apr 21 19:50 ../
-rw-r--r-- 1 root root 0 Apr 21 20:02 pipe
-rw-r--r-- 1 root root 17 Apr 21 20:01 root.sh
-rw-r--r-- 1 root root 11 Apr 21 20:01 root.txt

尝试执行 ./root.sh 会抛出一个 Permission denied 错误. 使用 chmod +x root.sh 修正后执行. 以下是最终列表:

1
2
3
4
5
drwxr-xr-x  2 siweipancc siweipancc 4096 Apr 21 20:02 ./
drwxrwxrwt 17 root root 4096 Apr 21 19:50 ../
-rw-r--r-- 1 root root 0 Apr 21 20:02 pipe
-rwxr--r-- 1 root root 17 Apr 21 20:01 root.sh*
-rw-r--r-- 1 root root 11 Apr 21 20:01 root.txt

尝试以其它用户编辑 nano root.sh 得到一个 [ File 'root.sh' is unwritable ] 错误.

标志组成

使用 man chmod 查看文档, 在线参考, 红帽参考.

标志由 1+3+3+3 组成, 1 位为 文件夹d 或者 文件f, 剩下的每 三位代表 读/写/执行 权限, 分别归属 当前登录用户/组用户/其他用户.

chmod 命令

  1. 用户标志
    1. u 代表当前用户
    2. g 代表和当前用户在同一个组的用户
    3. o 代表其他用户
    4. a 代表所有用户
  2. 权限值
    1. r 代表 权限以及八进制数 4
    2. w 代表 权限以及八进制数 2
    3. x 代表 执行 权限以及八进制数 1
  3. 权限增删
    1. + 代表添加目标用户相应的权限
    2. - 代表删除目标用户相应的权限
    3. = 代表添加目标用户相应的权限

使用例

  1. chmod u+w root.sh/chmod u-w root.sh: 添加/删除当前用户的写权限
  2. chmod u=rwx root.sh: 设置当前用户的 读/写/执行 权限
  3. chmod u=rwx g=rw o=r root.sh: 设置当前用户 读/写/执行 权限, 组用户为 读/写, 其他用户为 读
  4. chmod 761 root.sh: 等价于上边的命令, 计算规则为 7=4(读)+2(写)+1(执行)
  5. chmod --reference=./pipe ./root.txt: 以文件 pipe 为范例设置 root.txt 的权限
  6. chmod -R 555 c1/: 以递归方式修改文件夹 c1 的权限, 当前用户必须保留执行权限, 即 第一位必须为奇数

额外

递归修改权限遇到 Permission denied 错误

在任意目录执行 ls -alF , 诸如 ../ c1/ 等路径导航必须有 执行标志 x, 否则无法进入;

当执行 rm -rf ./test/ 遇到以上类别的错误, 可以尝试以 root 用户组 执行chmod -R +x ./test/ && rm -rf ./test/

相关文章

Linux 的用户与用户组