umask 对文本文件的影响
Effect of umask on text files
在处理可执行文件或目录的权限时,我了解 umask 的工作原理,至少是基本的工作原理。但是,当谈到 umask 如何将其规则应用于文本文件时,我感到很纠结。
例如,考虑 umask 037。在新创建的可执行文件或目录上,我知道权限将来自一个简单的减法 (777-037 = 740)。不过,我的问题是,明显的减法如何确定默认权限为 666 的文本文件的权限。
要清楚减法是如何完成的(666-037 = 637?)显然有一个可执行文本文件是没有意义的,根据我执行的一些例子我知道这样的文件权限案例应该达到 640。
这个减法是怎么做的?我们如何得出 666-037 = 640?
这不是减法。它是掩码:布尔值 "AND" 使用 umask
的按位补码 ("NOT")。因此,将 umask
视为应从模式中删除的位。
Create mode 0666 (octal) = 110110110 (binary)
Mask 037 (octal) = 000011111 (binary)
(Complement of mask) = 111100000 (binary) = 111100000 (binary) &
---------
Result 0640 110100000
另见 http://en.wikipedia.org/wiki/Boolean_algebra#Basic_operations
在处理可执行文件或目录的权限时,我了解 umask 的工作原理,至少是基本的工作原理。但是,当谈到 umask 如何将其规则应用于文本文件时,我感到很纠结。
例如,考虑 umask 037。在新创建的可执行文件或目录上,我知道权限将来自一个简单的减法 (777-037 = 740)。不过,我的问题是,明显的减法如何确定默认权限为 666 的文本文件的权限。
要清楚减法是如何完成的(666-037 = 637?)显然有一个可执行文本文件是没有意义的,根据我执行的一些例子我知道这样的文件权限案例应该达到 640。
这个减法是怎么做的?我们如何得出 666-037 = 640?
这不是减法。它是掩码:布尔值 "AND" 使用 umask
的按位补码 ("NOT")。因此,将 umask
视为应从模式中删除的位。
Create mode 0666 (octal) = 110110110 (binary)
Mask 037 (octal) = 000011111 (binary)
(Complement of mask) = 111100000 (binary) = 111100000 (binary) &
---------
Result 0640 110100000
另见 http://en.wikipedia.org/wiki/Boolean_algebra#Basic_operations