为什么 umask 不设置执行位?

Osc*_*car 8 fedora umask

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

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

无论如何:“newfile”是使用r--r--r--权限创建的。

我的umask价值/etc/profile是:

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002
else
    umask 022
fi
Run Code Online (Sandbox Code Playgroud)

我的 uid 是 1002。

注意:只是为了记录,我已经阅读了所有 umask 问题和文档man,但我还不能理解。

Mik*_*kel 13

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

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

create    0666 rw-rw-rw-
umask     0222 r-xr-xr-x
effective 0444 r--r--r--
Run Code Online (Sandbox Code Playgroud)

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

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

  OCTAL  BINARY       HUMAN-READABLE
  0666   0110110110  -rw-rw-rw-
& 0555   0101101101  -r-xr-xr-x
  0444   0100100100  -r--r--r--
Run Code Online (Sandbox Code Playgroud)

另请参阅无法解释 ACL 行为


roc*_*cky 3

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

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

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