4.8 权限
权限表达式
首先观察以下命令输出:
# ls -al /home/ykla # 显示 /home/ykla 目录下的详细文件列表
total 74
drwxr-xr-x 17 ykla ykla 27 Mar 19 17:57 .
drwxr-xr-x 3 root wheel 4 Mar 19 16:05 ..
drwx------ 4 ykla ykla 4 Mar 10 16:21 .mozilla
-rw-r--r-- 1 ykla ykla 966 Feb 24 12:18 .profile
-rw------- 1 ykla ykla 200 Mar 19 17:57 .sh_history
-rw-r--r-- 1 ykla ykla 1003 Feb 24 12:18 .shrc
drwxr-xr-x 2 ykla ykla 2 Mar 9 23:48 .themes
drwxr-xr-x 2 ykla ykla 2 Mar 9 20:45 桌面再观察:
---------- 1 root wheel 0 Mar 19 22:26 testFreeBSD 文件访问权限可以用 10 个标志位来表示(请读者数一数第一列是否为 10 位),而这 10 个标志位由 4 个部分组成:
用斜杠分割:-/---/---/---
- / --- / --- / ---
| | | |
| | | └─── 其他用户权限(others)
| | └───────── 同组用户权限(group)
| └─────────────── 所有者权限(owner)
└─────────────────── 文件类型 / 设备类型第一部分是第 1 位,用 d 表示目录,- 表示普通文件,l 表示符号链接文件,b 表示块设备文件,p 表示管道文件,c 表示字符设备文件,s 表示套接字文件;
第二部分是第 2、3、4 位,用于标识文件所属用户对文件的访问权限,用 rwx 表示读、写、执行权限(对于目录来说即访问权限,如 ls、cd),无权限则写成 -;
第三部分是第 5、6、7 位,用于标识文件所属组成员对文件的访问权限。
第四部分是第 8、9、10 位,用于标识文件其他用户对文件的访问权限。
读、写、执行权限除了用 rwx 表示外,也可以分别对应为数字 4、2、1,无权限即 0。每三位权限对应的数字相加后,组合在一起,就形成 3 位数字的表示方式。(记忆口诀:“读 4 写 2 执行 1”)。
如:
-rwxrwxrwx
777
所有人都可读、写、执行的普通文件
-rwxr-xr-x
755
这是一个普通文件,所属用户有读、写、执行权限;同组用户和其他用户只能读或执行,不可写入
思考题
drw-------,即600,这是一个目录,只有所属用户可以读、写。上面的说法正确吗,有意义吗,为什么?读者如何理解这种设计上的逻辑悖论?
技巧
关于上面数字代表权限的代码可以在 main/sys/sys/stat.h 备份 找到,由 IEEE Std 1003.1 所规范:
chmod 命令
chmod 命令操作符方式
赋予所有用户对 test.sh 脚本的执行权限:
在 a+x 中:
a表示操作对象为所有用户。可选项还有:u表示所属用户,g表示所属组,o表示其他用户,若省略则依照系统默认对象操作;+是操作符。意为是增加权限。而可选项-则是移除权限;rwx是权限模式。r意为读、w即写、x执行。可选项s表示在文件执行时将进程的属主或属组设置为文件的属主或属组。
数字方式
设置 test.sh 的权限为:所有者可读写执行,组用户可读执行,其他用户无权限:
其中:
7:所属用户拥有读、写、执行的权限5:同组用户有读和执行的权限0:其他用户则没有任何权限
此处,选项 -R 可递归修改权限信息。
示例:
chown 命令
chown 命令用于修改文件的属主信息,包括所属用户和所属组。
示例:
修改
t.sh属主为用户test1
修改
t.sh属主为用户test1、组test
修改
/tmp目录下所有文件的属主为用户test1、组test:
此处,选项 -R 可递归修改属主信息。
最后更新于