【问题标题】:Why is the argument of os.umask() inverted? (umask 0o000 makes chmod 0o777)为什么 os.umask() 的论点是倒置的? (umask 0o000 使 chmod 0o777)
【发布时间】:2012-07-02 21:23:21
【问题描述】:

在大多数地方,权限被定义为0777 格式的八进制数。但是UNIX的umask命令(因此os.umask())需要0o000来产生0o7770o022的权限位等于0o755

听说 UNIX 的 umask 因某种原因被倒置,我不明白背后的原因。有人可以解释一下这种不一致吗?

【问题讨论】:

  • 这是一个“面具”——这就是这个词在上下文中的意思;只让未设置的位通过的东西(想想用于绘画、芯片制造等的掩模)。如果它不以这种方式运行,它就会被称为别的东西。

标签: python unix filesystems chmod umask


【解决方案1】:

没有真正的不一致,因为umaskchmod 之间的关系完全可以用方程式写下来。显然,umask 设置了 chmod 的对立面,它在过去是这样创建的。

示例:022(默认常用umask)创建755。它的工作原理是这样的:

  • 7 - 0 = 7 成为第一个字节
  • 7 - 2 = 5 成为第二个和第三个字节

使用此示例,umask 777 创建一个带有chmod 000 的文件,umask 112 将等于chmod 664。据我所知,这是因为最初创建了 umask 命令以指示文件在创建后将具有哪些权限位(因此反转)。

虽然它可能很烦人,但要习惯它真的不难。想想你会如何chmod 你的文件,然后从7 中减去你想要的字节,你就会得到umask 的值。或者,当您在 IDE 中编写代码时,不要使用 umask,而是创建文件(当然使用默认的 umask),然后在 Python 中使用 os.chmod()

【讨论】:

  • “据我所知,发生这种情况是因为最初创建 umask 命令是为了指示文件在创建后将没有哪些权限位(因此反转)。”精彩的答案!现在我可以平静地生活了! :)
  • “面具”是您“掩盖”或“移除”的东西。这就是我们使用按位与(C 中的“&”)来“屏蔽”事物的原因。
猜你喜欢
  • 1970-01-01
  • 2018-08-14
  • 2018-03-15
  • 1970-01-01
  • 2012-01-10
  • 2012-08-20
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多