首页
学习
活动
专区
圈层
工具
发布

计算chmod
EN

Stack Overflow用户
提问于 2010-08-11 07:50:47
回答 2查看 2.8K关注 0票数 0

假设我有一个权限为755 (rwxr-xr-x)的文件。我想用chmod g+rw连接到我的文件。最终得到775。这里发生了什么数学运算来计算它?我不太明白这件事,谢谢。

或者类似的640到660。这个公式是怎么回事?

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

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-11 08:08:10

对于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即可。

代码语言:javascript
复制
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

r-x 5

r-- 4

票数 1
EN

Stack Overflow用户

发布于 2010-08-11 07:52:50

代码语言:javascript
复制
U   G   O
rwx r-x r-x ==
111 101 101 ==
  7   5   5

这里唯一的数学问题是从基数2到基数10 (实际上是8 )的转换。

添加组r/w后,您将获得:

代码语言:javascript
复制
U   G   O
rwx rwx r-x ==
111 111 101 ==
  7   7   5

(U=user G=group O=other)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3454343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档