问题 为什么os.umask()的参数是倒置的? (umask 0o000使chmod 0o777)


在大多数地方,权限被定义为格式为的八进制数 0777。但UNIX的 umask 命令(因此 os.umask())需要 0o000 生成权限位 0o777 和 0o022 等于 0o755 在我的理解中。

我听说过UNIX的 umask 由于某种原因倒转,我不明白其背后的原因。有人可以解释这个不一致吗?


6024
2017-07-02 12:52


起源

这是一个“面具” - 这就是这个词在这个背景下的含义;只允许未设置的位通过的东西(想想用于绘画,芯片制作等的掩模)。如果它不以这种方式运行,它将被称为其他东西。 - Charles Duffy


答案:


没有真正的不一致,因为它们之间的关系 umask 和 chmod 纯粹可以用方程写下来。显然, umask 与此相反 chmod,它在过去就像这样创造出来了。

例: 022 (默认通常 umask)创造 755。它的工作原理如下:

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

使用这个例子, umask 777 用。创建一个文件 chmod 000umask 112 将等于 chmod 664。据我所知,这发生的原因是因为 umask 最初创建命令是为了指示文件的权限位  在它创建之后(因此转换)。

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


11
2017-07-02 13:05



“据我所知,发生这种情况是因为最初创建的umask命令是为了指示文件在创建后不会具有哪些权限位(因此是反转)。”精彩的回答!现在我可以和平相处! :) - ddinchev
“面具”是你“掩盖”或“移除”的东西。这就是我们使用按位AND(C中的“&”)来“掩盖”事物的原因。 - Fixee