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

ddi*_*hev 11 python unix filesystems umask chmod

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

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

Whi*_*ity 11

有没有真正的矛盾,因为之间的关系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().