在大多数地方,权限被定义为 . 格式的八进制数0777
。但是UNIX的umask
命令(因此os.umask()
)需要0o000
产生我理解的0o777
和0o022
等于的权限位。0o755
我听说 UNIXumask
出于某种原因被倒置,我不明白其背后的原因。有人可以解释这种不一致吗?
在大多数地方,权限被定义为 . 格式的八进制数0777
。但是UNIX的umask
命令(因此os.umask()
)需要0o000
产生我理解的0o777
和0o022
等于的权限位。0o755
我听说 UNIXumask
出于某种原因被倒置,我不明白其背后的原因。有人可以解释这种不一致吗?
没有真正的不一致,因为 和 之间的关系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()
。