umask 值的第一个数字是什么?

umask 值的第一个数字是什么?

如果我理解正确的话,文件权限有一个关联的 3 位数字,用于指定读/写/执行权限。

umask 值是从默认值中减去的默认“掩码”。那么对于 umask 值为 0022 的默认值 777 会变成 755 吗?

这是正确的吗?如果正确,umask 值中的第一个 0 是什么?

答案1

您的示例中未使用第一个数字 0。 umask 从右向左读取,尾随零将被忽略。但是,它可用于设置特殊权限,例如sticky bitSet GUIDSet UID如下所示。

0755  —- None of the special bits set
1755  —- Sticky bit set
2755  —- SGID bit set
4755  —- SUID bit set

您是正确的,umask 0022 将屏蔽默认的 777(目录)权限,在新创建的目录上变为 755。

八进制编号的工作方式与前三组类似:用户、组、世界/其他。

读/写/执行rwx值以八进制形式表示,相应的值总计最多为 7:

4 - Read 
2 - Write 
1 - Execute

因此对于 0755: 0 被忽略。 7 (4+2+1) 等于 /owner 的读、写和执行user。 5(4+1)等于对 的读取和执行group,剩下的 5(也是 4+1)给予other/world 的读取和执行权限。

答案2

我想说前导 0 来自 C 语言(八进制数的语法)并且没有其他含义。来自man 2 umask,即底层 C 库调用:

umask() 将调用进程的文件模式创建掩码(umask)设置为 mask & 0777(即仅使用 mask 的文件权限位),并返回掩码的先前值。


umask不是简单的减法,而是按位进行处理。 umask 中设置的位在结果文件模式中被清除。

相关内容