在面试中有人问我为什么777被分配为文件的全部权限。为什么不是555呢?他说每个事物都有原因。那么,777的原因是什么?为什么不是其他任何数字?这个数字有特殊意义吗?
在面试中有人问我为什么777被分配为文件的全部权限。为什么不是555呢?他说每个事物都有原因。那么,777的原因是什么?为什么不是其他任何数字?这个数字有特殊意义吗?
u g o
rwx rwx rwx
其中,u=用户,g=组,o=其他。
现在,想象一下你将这些组表示为二进制。1代表true,0代表false。
如果你想给每个人完全访问权限,你会按照以下二进制分配权限:
u g o
rwx rwx rwx
111 111 111
现在,如果你知道二进制,你会意识到当你把111
从二进制转换为十进制时,得到7
。
因此,你可以把完全访问表示为777
。
注意:实际上我们是从二进制转换成八进制。请参见下面的编辑。
这对于所有其他访问模式也适用。
例如,我们可以通过将每个5
转换为二进制并按照上述格式书写来轻松计算出555
的含义。二进制中的5
是101
,因此我们有以下权限:
u g o
r-x r-x r-x
101 101 101
5 5 5
u g o
rwx r-- r--
111 100 100
7 4 4
111
等于十进制中的7
,而二进制中的100
等于十进制中的4
。因此,权限将是744
。
从技术上讲,如@LưuVĩnhPhúc和@Braiam所指出的那样,我们正在将二进制转换为八进制,如下所述。然而,小于8的十进制和八进制表示是相同的,所以对于具有3位数或更少的二进制数,十进制和八进制表示是相同的。
当作为八进制数表示时,不需要将其分成三组,并对每组进行二进制到十进制的转换,实际上可以将所有三个组一起作为一个单独的二进制数,并转换为八进制。
例如,这是一些二进制到八进制的转换:
0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744
oct(0b111111111)
bin(0o555)
chmod 1777 /tmp
以设置粘滞位。请参阅http://unix.stackexchange.com/questions/71622/what-are-common-rights-for-tmp-i-unintentionnally-set-it-all-public-recursive - Rmano7
是相同的。然而,数字777
则不同。当谈到翻转比特时,这就有了差别。 - Sam Dufel777
的根用户有时也被称为上帝。 - eyoung100读取文件权限表示为4
,写入文件权限表示为2
,执行文件权限表示为1
。
因此,总和为7
。
那么777是什么意思:第一个7
是文件所有者的权限,这意味着文件所有者具有读取、正确和执行权限。
第二个7
是文件所属的组,它表示该组也具有所有读取、写入和执行权限。
第三个7
是其他人的权限。
如果您给文件权限555
,则文件所有者、组和其他人
只具有读取
和执行
权限,没有写入
权限,因为读取权限表示为4,执行权限表示为1,所以总共得到5
。
简单来说:
每个文件有3种权限选项:读取、写入和执行。你可以选择其中之一,两个,或者全部:
C(3,0) + C(3,1) + C(3,2) + C(3,3) = 8
1 + 3 + 3 + 1 = 8
所以,总共有8种组合;8种权限选项。从0开始计数,最后一个数字是7(从0到7)。因此,用数字表示,以下是所有的选项:
0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
0 - nothing
1 - execute
2 - write
3 - read
4 - execute + read (1 + 3)
5 - write + read (2 + 3)
6 - execute + write + read (3 + 2 + 1)
7 - ????? no way to get this with the 3 basic options (and we are missing execute + write)
0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
8 - love
9 - execute + love (1 + 8)
10 - write + love (2 + 8)
11 - execute + write + love (1 + 2 + 8)
12 - read + love (4 + 8)
13 - execute + read + love (1 + 4 + 8)
14 - write + read + love (2 + 4 + 8)
15 - execute + write + read + love (1 + 2 + 4 + 8)