为什么 umask 不设置执行位?

为什么 umask 不设置执行位?

我是 Linux 新手。我一直在练习一些命令。我的问题是关于何时使用不同的 umask 创建不同的文件。例如:

umask 222据我了解,与 777 - 222 = 555 相同,所以当我创建一个新文件(称为“新文件”), 然后新文件的权限应该是r-xr-x-r-x(或者我错了?)

任何:“新文件”是使用权限创建的r--r--r--

我的umask价值/etc/profile是:

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi

我的uid是1002。

注意:仅供记录,我已经阅读了所有 umask 问题和文档man,但我还无法理解。

答案1

大多数程序创建的文件没有设置执行位(0666== -rw-rw-rw-)。执行位几乎仅由编译器在安装可执行文件期间设置,或由用户手动设置。

然后应用umask,以确定实际的权限。

create    0666 rw-rw-rw-
umask     0222 r-xr-xr-x
effective 0444 r--r--r--

请注意,它实际上不是减法,而是补码的按位与。

所以它需要0777- 0222= 0555,并且确实

  OCTAL  BINARY       HUMAN-READABLE
  0666   0110110110  -rw-rw-rw-
& 0555   0101101101  -r-xr-xr-x
  0444   0100100100  -r--r--r--

也可以看看无法解释 ACL 行为

答案2

Wiki 有很好的描述掩码。 0 位表示创建过程指定的任何内容都会经过,而 1 表示不会发生。

所以“222”意味着忽略用户、组和其他人的写入权限,但保留读取和执行位。

在您的示例中,无论创建的 newfile 都没有设置执行位(通常当您创建新文件时,您不会使其可执行),这就是为什么您得到的r--r--r--不是r-xr-xr-x.

相关内容