私はumaskを正しく理解しようとしています。
umask を 0000 に設定してファイルを生成すると、次の権限が得られます。
-RW-RW-RW-
値(または権限セット)がumaskマスクが適用されると思います。
マスクされていないか生の値が何であるかを決定するものは何ですか?つまり、umaskはどの値に適用されますか?
助けてくれてありがとう。
答え1
始めるには - からオープン(2)マンページ( man -S2 open
):
O_CREAT If the file does not exist it will be created. The owner (user ID) of the file is set to the effective user ID of the process. The group ownership (group ID) is set either to the effective group ID of the process or to the group ID of the parent direc‐ tory (depending on filesystem type and mount options, and the mode of the parent directory, see the mount options bsdgroups and sysvgroups described in mount(8)). mode specifies the permissions to use in case a new file is cre‐ ated. This argument must be supplied when O_CREAT is specified in flags; if O_CREAT is not specified, then mode is ignored. The effective permissions are modified by the process's umask in the usual way: The permissions of the created file are (mode & ~umask). Note that this mode applies only to future accesses of the newly created file; the open() call that creates a read-only file may well return a read/write file descriptor.
strace
コマンドを使用してtouch
新しいファイルを作成すると、渡されたモードがopen()
0666(つまり-rw-rw-rw-
)であることがわかります。 umask マスクがモードに適用されます。
$ strace -e open touch my-new-file
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("my-new-file", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
+++ exited with 0 +++
$