umask는 값을 적용할 때 이상한 결과를 표시합니다: 0666
umask 값을 하나라도 적용하면 예상대로 작동하는데, 0666을 적용하면 디렉터리는 올바른 권한 값을 가져오지만 파일은 이상한 값을 가져옵니다.
$ mkdir demo
$ cd demo
$ umask 0666 ../demo
$ mkdir d1 && touch f1
$ umask 0333 ../demo
$ mkdir d2 && touch f2
$ ls -l
drwxrwxr-x 4 riajul riajul 4096 Mar 27 17:33 ./
drwxr-xr-x 4 riajul riajul 4096 Mar 27 17:30 ../
d--x--x--x 2 riajul riajul 4096 Mar 27 17:32 d1/
dr--r--r-- 2 riajul riajul 4096 Mar 27 17:33 d2/
---------- 1 riajul riajul 0 Mar 27 17:32 f1
-r--r--r-- 1 riajul riajul 0 Mar 27 17:33 f2
f1이 d1과 다른 권한을 갖는 이유는 무엇입니까?
예: 이미지
답변1
umask는 마스크입니다, 파일 권한에 적용됩니다.touch
기본적으로 권한이 666인 파일이 생성됩니다.;마스크 0666을 사용하면 이러한 모든 권한 비트가 마스크되므로 권한 비트가 설정되지 않은 파일이 됩니다.
umask는 특정 디렉터리에 설정되지 않고 프로세스별로 관리되며 프로세스가 시작될 때 상위 프로세스에서 상속됩니다. umask 0666
또는 를 실행하면 umask 0333
현재 쉘의 umask가 지정된 값으로 설정되며 추가 인수는 무시됩니다.
답변2
umask
약간의 혼란이 생겼기 때문에 일부 문서를 읽은 후 명확한 아이디어를 얻었습니다.
umask: [ u => 사용자 ]
- 파일이나 디렉터리를 만들 때 이러한 파일에는 몇 가지 기본 권한이 부여됩니다.
- 마스크는 사진 편집 도구에서와 똑같이 작동합니다. 권한을 설정하는 것이 아니라 주어진 권한을 제거합니다.
기본 권한 = 사전 정의된 초기 권한 - umask_permissions
미리 정의된 권한은 고정되어 있으며 변경할 수 없습니다.
- 디렉토리: 777
- 파일: 666
사용자의 기본 umask 권한:
- 루트 사용자: 0022
- 일반 사용자: 0002
따라서 기본 umask 권한을 변경하지 않고 다음을 수행합니다.
+---------------------------------------------------+
| User | Directory | File |
|---------------+-----------------------+-----------|
| |
| <user> | 777 - x => y | 666 - x => y |
| root | 777 - 022 => 755 | 666 - 022 => 644 |
| normal | 777 - 002 => 775 | 666 - 002 => 664 |
| |
| |
| NB: 1st bit (0) of umask values: not effect |
| permission so it ignored from calculation. |
| |
| |
+---------------------------------------------------+
Umask 권한 변경은 두 가지 유형이 될 수 있습니다.
- 임시:
umask
명령을 통해 셸을 닫고 기본값으로 재설정합니다. - 영구: UMASK 값을 다음 위치에 설정:
- 사용자 수준:
~/.profile
또는.bashrc
- 글로벌:
/etc/profile
,/etc/bashrc
, 또는/etc/login.defs
- 사용자 수준:
참고: umask
특정 디렉터리가 아닌 사용자로부터 권한을 뺍니다.
- umask: 생성 전에 권한을 설정합니다.
- chmod: 생성 후 권한을 변경합니다.
$ umask --help
-S : makes the output symbolic; otherwise an octal number is output
-p : if MODE is omitted, output in a form that may be reused as input
$ umask # Show umask of user
$ umask -S # Show umask of user as symbol instead of number
$ umask 0022 # Set Umask.