권한을 더 잘 이해하려고 노력하고 있으므로 “운동”을하고 있습니다. 다음은 각각의 출력과 함께 사용하는 일련의 명령입니다.
$ umask
0022
$ touch file1
$ ls -l file1
-rw-r--r-- 1 user group 0 Mar 16 12:55 file1
$ mkdir dir1
$ ls -ld dir1
drwxr-xr-x 2 user group 4096 Mar 16 12:55 dir1
기본 파일 권한은 666
( rw-rw-rw-
)이고 디렉토리 기본 권한은 777
( rwxrwxrwx
) 이라는 것을 알고 있기 때문에 의미 가 있습니다. 이 기본 권한에서 umask 값을 빼면
666-022=644
, rw-r--r--
에 대해 file1
이전 출력과 일관성이 있습니다.
777-022=755
, rwx-r-x-r-x
상기에 대해 dir1
, 또한 응집성.
그러나 umask를 022
으로 바꾸면 021
더 이상 없습니다.
파일의 예는 다음과 같습니다.
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
이다 646
그러나해야한다 666-021=645
. 따라서 이전 계산에 따라 작동하지 않습니다.
디렉토리의 예는 다음과 같습니다.
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
이다 756
, 777-021=756
. 따라서이 경우 결과는 이전 계산과 일관됩니다.
나는 그 남자를 읽었지만이 행동에 대해 아무것도 찾지 못했습니다.
누군가 이유를 설명 할 수 있습니까?
설명
답변에서 지적한 바와 같이 : umask
의 값은 기본 디렉토리 및 파일의 권한에서 수학적으로 빼지 않습니다 .
효과적으로 관련된 연산은 AND (&) 및 NOT (!) 부울 연산자의 조합입니다. 주어진:
R = 결과 권한
D = 기본 권한
U = 현재 umask
R = D &! U
예를 들면 다음과 같습니다.
666 &! 0053 = 110110110 및 ! 000 101 011 110110110 및 111010100 = 110 010 100 = 624 = rw--wr--
777 &! 0022 = 111111111 및 ! 000 010 010 111 111 111 및 111 101 101 = 111101101 = 755 = rwxr--xr-x
팁
결과 권한을 신속하게 알 수있는 쉬운 방법 (최소한 도움이 되었음)은 소수점 이하 세 자리 만 사용할 수 있다고 생각하는 것입니다.
r = 100 = 4
w = 010 = 2
x = 001 = 1
권한은이 3 가지 값의 조합입니다.
" "
상대 권한이 부여되지 않았 음을 나타내는 데 사용됩니다.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
따라서 현재 umask가 0053
내가 알고 있다면 (4+1)
그룹에서 읽기 및 실행 권한을 제거하고 (2+1)
다른 결과에서 쓰기 및 실행
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(그룹 및 기타는 이미 실행 권한이 없었습니다)
답변
umask
A는 마스크 그것은 뺀 값이 아니다. 그러므로:
- 모드 666, 마스크 022 : 결과는 666 & ~ 022, 즉 666 & 755, 644이며;
- 모드 666, 마스크 021 : 결과는 666 & ~ 021, 즉 666 & 756, 646입니다.
관련된 비트를 생각하십시오. 모드에서 6은 비트 1과 2가 설정, 읽기 및 쓰기를 의미합니다. 마스크의 2는 비트 1, 쓰기 비트를 마스크합니다. 마스크의 1은 비트 0, 실행 비트를 마스크합니다.
이를 나타내는 또 다른 방법은 권한을 텍스트 형식으로 보는 것입니다. 666은 rw-rw-rw-
이고; 022는 ----w--w-
이고; 021은 ----w---x
입니다. 마스크 때문에, 모드 세트로부터 비트를 삭제 rw-rw-rw-
함으로써 마스크 ----w--w-
된다 rw-r--r--
의해 마스크, ----w---x
해진다 rw-r--rw-
.
답변
십진수가 아닌 이진수로 생각해야합니다. 특히 소유자, 그룹 및 기타에 각각 하나씩 3 개의 3 비트 이진수가 있습니다. 각각 000에서 111 사이의 값을 갖습니다 (10 진수로 0-7).
예를 들어 rw-rw-rw (666)는 110110110입니다.
이 umask
값은 새 파일이나 디렉토리를 만들 때 어떤 비트가 켜지거나 꺼질 지 (1 또는 0)를 지정하는 마스크입니다. 예 : 022 10 진수는 000 010 010 이진수이고 021 10 진수는 000 010 001입니다
권한 비트는 부정 된 umask와 함께 AND-ed되어 최종 값에 도달합니다. “negated”는 모든 비트가 반전됨을 의미합니다. 즉, 모든 1이 0으로 반전되고 그 반대도 마찬가지입니다. 예 :NOT 022 (000 010 010) = 755 (111 101 101)
예 : 666 & !022 = 644
. 이진수로,
Owner Group Other mode
110 110 110 666
& 111 101 101 755 (this is the negated 022)
--- --- --- ---
110 100 100 644
또한 777 & !022 = 755
:
Owner Group Other mode
111 111 111 777
& 111 101 101 755
--- --- --- ---
111 101 101 755
각 비트의 최종 값이 원래 권한 값 (666 또는 777) 과 부정 된 umask 모두 에서 1 인 경우에만 1이 될 수 있습니다 . 둘 중 하나가 0이면 결과는 0입니다. 즉, 1 & 1 = 1 이고 1 & 0 = 0 입니다.
엄밀히 말하면 setuid, setgid 및 sticky 비트에 대한 네 번째 3 비트 이진수가 있습니다. 그렇기 때문에 선행 0 (또는 0 ~ 7의 다른 선행 번호)으로 지정된 권한과 마스크가 종종 표시됩니다. 예 : 0777 또는 2755