计算chmod

时间:2010-08-10 23:50:47

标签: chmod

假设我有一个具有权限755 (rwxr-xr-x)的文件。我想chmod g+rw到我的档案。最终得到775.这里发生的数学计算是什么?我不能理解它,谢谢。

或类似地640,到660.公式是什么?

http://articles.slicehost.com/2010/7/17/using-chmod-part-2-octal-mode

由于

2 个答案:

答案 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