假设我有一个具有权限755 (rwxr-xr-x)
的文件。我想chmod g+rw
到我的档案。最终得到775.这里发生的数学计算是什么?我不能理解它,谢谢。
或类似地640,到660.公式是什么?
http://articles.slicehost.com/2010/7/17/using-chmod-part-2-octal-mode
由于
答案 0 :(得分:2)
U G O
rwx r-x r-x ==
111 101 101 ==
7 5 5
这里唯一的数学是从base-2到base 10的转换(实际上是8)。
添加组r / w后,您将获得:
U G O
rwx rwx r-x ==
111 111 101 ==
7 7 5
(U =用户G =组O =其他)
答案 1 :(得分:1)
对于U,G和O中的每一个,只需用二进制1替换每个r,w或x,每个用二进制0替换。 结果是二进制数。 该数字不能大于二进制111,它在十进制和八进制中都等于7。
因此,U,G和O各有一个八进制数。现在只需按正确的顺序将它们组合在一起。从技术上讲,你将U乘以8 ^ 2,G乘以8 ^ 1,O乘以8 ^ 0,因为八进制位数是8的幂。
这一切似乎都在您提供的链接中进行了解释。
编辑:回复
谢谢,我理解这一切,但是如果我在表格或程序中写这个怎么样呢?
这取决于您使用的编程语言。你想让程序转换数字还是实际使用chmod?
编辑:回答:
输入将是权限值,例如660.沿着一个字符串,例如。克+ RW。程序计算新的权限值。
好的,首先将当前权限分为U,G和O,然后使用该字符串来告知要修改哪些权限。您可以从数字中唯一地找到权限,反之亦然*,并且您知道r = 4,w = 2和x = 1,因此每当遇到没有设置适当条件的数字时,您将添加4 ,2或1。之后,您应该检查结果是否有效。如果没有,只需将其设置为0。
Example: current=660 command=g+rw
u = 6
g = 6
o = 0
from string: we know we are modifying g only
g = 6 means: rw-
since rw is already set, we do not change anything
result = u+g+o = 660
return result
让我们说命令是+ rw。与u和g完全相同,但是当达到o时,我们可以看到它为0,所以我们为r添加4,为w添加2,给我们6.这是一个有效数字,所以我们结合他们全部并返回666。
*有效组合:
rwx 7
rw-6
r-x 5
r-- 4