为什么 umask 是 AND NOT 掩码操作

为什么 umask 是 AND NOT 掩码操作

为什么 umask 是 $perms AND NOT $mask 而不是简单的 $perms AND $mask ?

换句话说,为什么其中有一个 NOT;为什么它没有作为 and 掩码来实现?

举个例子,666 加 700,结果是 600?

答案1

关键在于 umask (“用户掩码”) 旨在阻止进程创建具有不应使用的权限位的文件。如果从这个角度来看,umask 的概念可能更有意义;特别是,常见的 umask 022 可防止进程创建可由组或世界写入的文件,这通常是您想要的。

答案2

输入值是八进制的,可能需要以 0 开头才能正确解析。由于所有者掩码几乎总是 0,因此可以输入三位数字的掩码。作为 AND 掩码,需要输入 0755 或 0750。

将其定义为 AND NOT 操作可使掩码中缺少字符时更加安全。如果 umask 是 AND 操作,umask 5则将仅允许有限的世界访问,umask 0情况会更糟。 umasq 75解析为十进制值将有效,umask 113这将不允许读取访问。

编辑:从另一个角度来看,掩码是您想要屏蔽的位列表。因此,您需要像 这样的掩码,026而不是0751。内部表示可能是07751或任何适合进行 AND 运算的内容。如果不是,则转换相对简单,并且从总体上看,掩码并不经常应用。

相关内容