📌 umask
유닉스계열에서 사용하는 새로생성된 파일 혹은
디렉토리의 접근권한값을 설정 하는 명령어이다.
✅ 현재 mask값 확인하는 명령어
-S 옵션이 붙으면 8진수가 아닌 문자로 출력한다.
이미지와 같이 test 파일을 생성했을때 rw-rw-r-- (664) 라는 권한을 갖는 이유는
mask 값이 0002 이기 때문인것인데, 아래 풀이를 참고 하면되겠다.
📜 일반파일
일반파일이 가지는 최대권한은 rw-rw-rw- (666) 이다.
일반파일의 성격상 실행이 필요한 대상(.sh 파일 제외)이
아니기 때문에 x(excute)의 값은 가지지 않는다.
📂 디렉토리
디렉토리가 가질수 있는 최대권한은 rwxrwxrwx (777) 이다.
디렉토리를 접근하기 위해 이동하는것이 x(excute) 하는 개념이기때문이다.
따라서 mask는 최대권한값을 기준(666,777) 으로 설정된 값(0002)을 연산한다.
umask의 기본접근권한은
2진수값 ➡️ 현재mask값 ➡️ XOR연산 ➡️ 8진수 순으로 출력 된다.
✅ XOR Gate (Exclusive OR 로 발음한다.)
연산 시 표기는 ⊕ 기호로 나타낸다.
XOR는 각 비트수를 가지고 연산을 하게 되는데
둘 중 비교한 값이 같으면 0, 둘 중 비교한 값이 다르면 1로 출력한다.
Input | Output | Input, Output examples | |
A | B | A XOR B | |
0 | 0 | 0 | 0⊕0 ➡️ 0 |
0 | 1 | 1 | 0⊕1 ➡️ 1 |
1 | 0 | 1 | 1⊕0 ➡️ 1 |
1 | 1 | 0 | 1⊕1 ➡️ 0 |
✅ umask 값이 0002일때 일반파일 권한 풀이
user | group | others | |
문자표기 | rw- | rw- | rw- |
2진수 | 110 | 110 | 110 |
mask(002 기준) | 000 | 000 | 010 |
XOR | 110 | 110 | 100 |
8진수 | 6 | 6 | 4 |
2진수 : 권한이 있으면 1, 없으면 0
mask(002 기준) : 십진수 "2" 를 이진수로 변환하면 "10"
XOR : 2진수값과 mask 값을 연산
8진수 : XOR값을 10진수로 변환 후 8진수로 표기
따라서 상기 이미지의 test 파일을 새로 생성 했을때 rw-rw-r-- (664)의 권한이 있는것이다.
그런데 매번 설정시 복잡하게 계산을 해야할까? (귀찮게)
💡 그냥 권한의 최대값에서 mask값을 빼면 된다. 💡
디렉토리가 가지는 권한 최대가 아까 777이라고 하였다.
umask값이 022 이라면 777-022=755 (!)
굳이 풀이를 하자면 아래와 같이 정리 할 수 있겠다.
✅ umask 값이 0022일때 디렉토리 권한 풀이
user | group | others | |
문자표기 | rwx | rwx | rwx |
2진수 | 111 | 111 | 111 |
mask(022 기준) | 000 | 010 | 010 |
XOR | 111 | 101 | 101 |
8진수 | 7 | 5 | 5 |
✅ 그런데 666-777=? 으로 연산을 해야 할 경우에는 -111일까?
리눅스 시스템에서는 umask 진리표를 기준으로 파일,디렉토리 권한을 부여하기때문에
진리표에 의해서 0으로 계산한다.
umask 진리표 |
||||
요청 권한 | 1 | 1 | 0 (값이 작은경우 : 666) | 0 |
마스크 | 1 | 0 | 1 (값이 큰 경우 : 777) | 0 |
부여된 권한 | 0 | 1 | 0 (해당 예제가 여기에 해당됨) | 0 |
✅ 666-777=000 풀이
user | group | others | |
문자표기 | rw- | rw- | rw- |
2진수 | 110 | 110 | 110 |
mask (777기준) | 111 | 111 | 111 |
XOR | 001 | 001 | 001 |
umask 진리표 | 000 | 000 | 000 |
마스크값을 적용하는 과정에서
마스크값이 2진수값보다 작을때는 XOR으로 연산 하고
2진수값보다 마스크값이 더 클때 진리표에 의해서 0으로 연산 한다.
✅ 일반적으로 많이 사용하는 mask값
mask값 | 일반파일 8진수 | 파일 권한 | 디렉토리 8진수 | 디렉토리 권한 |
022 | 644 | rw-r--r-- | 755 | rwxr-xr-x |
027 | 640 | rw-r----- | 750 | rwxr-x--- |
077 | 600 | rw------- | 700 | rwx------ |
잘못계산되었거나 틀린사실이 있으면 댓글로 알려주세요. 정정하겠습니다 😀
참고한 사이트
'Programming > Linux' 카테고리의 다른 글
[Ubuntu] yarn 설치 및 버전 확인 (0) | 2023.05.30 |
---|---|
[Linux] grep 설명/사용방법/간단예 (0) | 2023.01.27 |
[Linux] 파일/디렉토리 접근권한 제어 (chmod) (0) | 2022.10.02 |
[Linux] 하드링크, 심볼릭링크의 차이와 inode의 관계 (1) | 2022.09.21 |
[Unix/Linux] bash 중복 제거하기 (sort, awk) (1) | 2022.08.29 |