umask에 적용되는 값은 어디서 나오나요?

umask에 적용되는 값은 어디서 나오나요?

나는 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 +++
$ 

관련 정보