phe*_*mer 21
Ramesh 的回答非常准确,但我想插话并提供更深入的文件模式解释。
虽然数字喜欢755和777似乎文件模式特殊,只意味着什么,它们实际上是非常基本的。
这些数字实际上是八进制数。十进制数是基数为 10,十六进制数是基数为 16,二进制数是基数为 2,八进制数是基数为 8。这意味着当你数数时,你去1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 ...。所以数字007,只是八进制7。八进制数755只是一个数字,相当于493十进制数。
现在如何区分八进制数与任何其他基数是八进制数以 为前缀0。所以说755是八进制,你真的应该把它称为0755. 该chmod命令只是假设所有输入数字都是八进制,因为这是引用文件模式的最常见方式。
现在,为什么文件模式使用八进制?首先我们需要了解模式只是一个看起来像这样的位掩码:
111111111111 - 12 binary bits
============
1 - Other execute
1 - Other write
1 - Other read
1 - Group execute
1 - Group write
1 - Group read
1 - User execute
1 - User write
1 - User read
1 - Sticky bit
1 - Set group ID
1 - Set user ID
Run Code Online (Sandbox Code Playgroud)
请注意,“其他”、“组”和“用户”各有 3 位。二进制111是7,这是最高的个位数八进制值。因此,通过使用八进制编号,其他、组和用户权限中的每一个都获得一个数字,再加上一个额外的数字用于粘性+setuid+setgid。
所以有了这个,我们可以回到你最初的“什么是chmod 7”的问题?
好吧,现在我们知道它只是一个八进制数,而且它只是一个位掩码,我们可以弄清楚这一点。八进制7是二进制111。使用上述位位置,我们可以确定这设置了所有 3 个“其他”位,授予“其他”执行、读取和写入访问权限。由于这只是一个数字,所有其他位都为 0,并且未设置。
Ram*_*esh 19
正好相反。它会给其他人rwx许可。
touch samplefile
ls -l samplefile
-rw-rw-r-- 1 ramesh ramesh 0 Oct 16 22:29 samplefile
Run Code Online (Sandbox Code Playgroud)
现在在我执行命令后,我得到的输出为,
chmod 7 samplefile
ls -l samplefile
-------rwx 1 ramesh ramesh 0 Oct 16 22:29 samplefile
Run Code Online (Sandbox Code Playgroud)
从手册页chmod,
数字模式是从 1 到 4 个八进制数字 (0-7),通过将值 4、2 和 1 的位相加得出。 省略的数字假定为前导零。
现在,我们可以通过执行以下命令来验证相同的内容,
chmod 47 samplefile
ls -l samplefile
----r--rwx 1 ramesh ramesh 0 Oct 16 22:29 samplefile
Run Code Online (Sandbox Code Playgroud)
我们可以看到,与chmod 47上一个文件会给读权限组和读,写和执行许可他人。