0

假设我有一个具有权限的文件755 (rwxr-xr-x)。我想要chmod g+rw我的文件。以 775 结束。这里发生的数学计算是什么?我无法理解它,谢谢。

或者类似地从 640 到 660。发生了什么公式?

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

谢谢

4

2 回答 2

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=其他)

于 2010-08-10T23:52:49.647 回答
1

对于 U、G 和 O 中的每一个,只需将每个 r、w 或 x 替换为二进制 1,并将每个 - 替换为二进制 0。结果是一个二进制数。该数字不能大于二进制 111,它在十进制和八进制中都等于 7。

因此,U、G 和 O 中的每一个都有一个八进制数。现在只需按正确的顺序将它们放在一起。从技术上讲,您将 U 乘以 8^2,G 乘以 8^1,O 乘以 8^0,因为八进制位是 8 的幂。

这一切似乎都在您提供的链接中得到了解释。

编辑:回复

谢谢,我明白这一切,但是如果我在表格或程序中写这个,我会怎么做呢?

这取决于您使用的编程语言。您希望程序转换数字还是实际使用 chmod?

编辑:回答:

输入将是一个权限值,例如 660。旁边是一个字符串,例如。g+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

假设命令是 a+rw 。u 和 g 会发生与上面完全相同的情况,但是当达到 o 时,我们可以看到它是 0,所以我们为 r 加上 4,为 w 加上 2,得到 6。这是一个有效数字,所以我们结合全部返回 666。

*有效组合:

rwx 7

rw- 6

接收 5

r-- 4

于 2010-08-11T00:08:10.297 回答