为什么 Unix 权限系统使用 1 2 3 4... 值?
为什么不只是 3 位;每个设置一个位来读取、写入和执行。例如
( rwx ) 110 => r=1 w=1 x=0
答案1
使用 1-7 之间的整数更为紧凑,这些整数是以下三个八进制权限表示数字的总和,4(读取)、2(写入)和 1(执行)相加,因为所有 Unix 权限都可以用一个从 1 到 7 的整数来表示,而不是使用 3 个数字来表示 Unix 权限。
使用示例
数字 八进制 权限 表示 参考 0 没有权限 --- 1 执行权限--x 2 写权限 -w- 3 执行和写入权限:1(执行)+2(写入)=3 -wx 4 读取权限 r-- 5 读取和执行权限:4(读取)+1(执行)= 5 rx 6 读写权限:4(读)+2(写)= 6 rw- 7 所有权限:4(读)+2(写)+1(执行)=7 rwx
答案2
因为我们有这 3 位(r/w/x)3 次,一次用于用户(所有者)权限,一次用于组权限,一次用于其他所有人的权限。
这就是为什么例如在您获得文本权限表示的输出中ls -l
它看起来像-rwxr-xr-x
(第一个-
仅指示文件类型,即它是否是目录)。
(实际上还有三位 - SUID、SGID 和 Sticky - 但如果您有兴趣,您可以自己查找这些更高级的权限。)
答案3
为了表示rwx
它恰好使用 3(0 或 1)位:
Decimal | Binary
--------------------
1 | 001
2 | 010
3 | 011
4 | 100
5 | 101
6 | 110
7 | 111
因此,当您使用“3”时,您实际上是在将位设置为:011
等于-wx
,正如您所想的那样。但是,不要忘记 SUID、SGID 和粘性位作为额外位。