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

时间:2012-07-02 12:52:39

标签: python unix filesystems chmod umask

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

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

1 个答案:

答案 0 :(得分:11)

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

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

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

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

虽然它可能令人讨厌,但它并不难以适应它。只需考虑如何chmod您的文件,并从7中减去所需的字节,您将获得umask值。或者,当您在IDE中编写代码时,不要使用umask,而是创建文件(当然使用默认的umask),然后在Python中使用{ {1}}而不是。