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

ali*_*cef 1 permissions

为什么 Unix 权限系统使用 1 2 3 4... 值?

为什么不只是 3 位;每个设置读写和执行的位。例如

( rwx ) 110 => r=1 w=1 x=0
Run Code Online (Sandbox Code Playgroud)

kar*_*rel 5

使用 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


Byt*_*der 5

因为我们有这 3 位 (r/w/x) 3 次,一次用于用户(所有者)权限,一次用于组权限,一次用于其他所有人的权限。

这就是为什么例如在ls -l您获得文本权限表示的输出中,它看起来像-rwxr-xr-x(第一个-只是指示文件类型,即它是否是目录)。

(实际上还有三个位 - SUID、SGID 和 Sticky - 但如果您有兴趣,可以自行查看这些更高级的权限。)