为什么 Unix 权限系统使用 1 2 3 4... 值而不是 1 或 0?

为什么 Unix 权限系统使用 1 2 3 4... 值而不是 1 或 0?

为什么 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 和粘性位作为额外位。

相关内容