12

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

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

4

1 回答 1

12

没有真正的不一致,因为 和 之间的关系umask可以chmod纯粹用方程式写下来。显然,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()

于 2012-07-02T13:05:57.473 回答