04.08 umask 设置屏蔽字
umask
系统调用
这样理解屏蔽字:当某一位被设置为 1,这一位就不起作用。umask
把当前进程的文件创建屏蔽字设置为 mask & 0777
,也就是只有文件权限位是受到屏蔽的。umask
能影响 open
和 mkdir
等系统调用,这相当于每次传入它们的 mode_t
参数都用 umask 屏蔽了给定的位。
Tip
- 文件打开标志中(
int flags
),读、写、读写三个状态被设置成了互斥的,读和写不能简单叠加得到读写。它们的宏以O_
开头(可能表示 open),分别是O_RDONLY
/O_WRONLY
/O_RDWR
,访问前要先用O_ACCMODE
掩码对 flags 做好处理。 - 文件访问权限模式(
mode_t mode
)读、写、执行可以叠加。它们的宏以S_I
开头(可能表示 stat、inode),然后跟R
/W
/X
中的一个,再跟USR
/GRP
/OTH
中的一个。
Tip
掩码和屏蔽字好像都是 mask。前者的用法是 x & mask
,后者的用法是 x & ~mask
。
默认的 umask
值是 S_IWGRP | S_IWOTH
,也就是 022
,这表示如果无其他修改,我们无法简单地创建 group 和 others 可以写入的文件。
当文件父目录被设置了 ACL 时,umask
被忽略。
umask
命令
Single UNIX Specification 规定 shell 有 umask
命令。umask
可以用来显示或设置当前的 shell 的 umask。
umask
默认显示模式是数字,这和我们传入 mode 很像。但是 umask
的符号模式(-S
)显示的内容形如 u=rwx,g=rx,o=rx
,看上去是和我们设置的屏蔽字反着的,意义变成了掩码。