我是 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
.