값 0666을 적용할 때 Umask가 파일에 이상한 결과를 설정함

값 0666을 적용할 때 Umask가 파일에 이상한 결과를 설정함

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.

관련 정보