Tôi đang cố gắng để hiểu các quyền tốt hơn, vì vậy tôi đang thực hiện một số "bài tập". Đây là một chuỗi các lệnh mà tôi đang sử dụng với đầu ra tương ứng của chúng:
$ 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
Điều đó có ý nghĩa bởi vì chúng tôi biết rằng các quyền của tệp mặc định là 666
( rw-rw-rw-
) và quyền mặc định của thư mục là 777
( rwxrwxrwx
). Nếu tôi trừ đi giá trị umask từ các quyền mặc định mà tôi có
666-022=644
, rw-r--r--
thì file1
, vì vậy, nó phù hợp với đầu ra trước đó;
777-022=755
,, rwx-r-x-r-x
cho dir1
, cũng mạch lạc.
Nhưng nếu tôi thay đổi ô từ 022
sang 021
nó thì không còn nữa.
Dưới đây là ví dụ cho tệp:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
là 646
nhưng nó phải là 666-021=645
. Vì vậy, nó không hoạt động theo tính toán trước đó.
Dưới đây là ví dụ cho thư mục:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
là 756
, 777-021=756
. Vì vậy, trong trường hợp này kết quả là phù hợp với tính toán trước đó.
Tôi đã đọc người đàn ông nhưng tôi không tìm thấy bất cứ điều gì về hành vi này.
Ai đó có thể giải thích tại sao?
GIẢI TRÌNH
Như đã chỉ ra trong các câu trả lời: umask
giá trị của toán học không bị trừ về mặt toán học khỏi các quyền của thư mục và tệp mặc định.
Hoạt động có liên quan hiệu quả là sự kết hợp của các toán tử boolean AND (&) và KHÔNG (!). Được:
R = quyền kết quả
D = quyền mặc định
U = ô hiện tại
R = D &! U
Ví dụ:
666 &! 0053 = 110 110 110 & ! 000 101 011 110 110 110 & 111 010 100 = 110 010 100 = 624 = rw - wr--
777 &! 0022 = 111 111 111 & ! 000 010 010 111 111 111 & 111 101 101 = 111 101 101 = 755 = rwxr - xr-x
TIỀN BOA
Một cách dễ dàng để nhanh chóng biết các quyền kết quả (ít nhất là nó đã giúp tôi) là nghĩ rằng chúng ta có thể sử dụng chỉ 3 giá trị thập phân:
r = 100 = 4
w = 010 = 2
x = 001 = 1
Quyền sẽ là sự kết hợp của 3 giá trị này.
" "
được sử dụng để chỉ ra rằng sự cho phép tương đối không được đưa ra.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Vì vậy, nếu ô hiện tại của tôi là 0053
tôi biết tôi đang xóa quyền đọc và thực thi (4+1)
khỏi nhóm và viết và thực thi (2+1)
từ các kết quả khác dẫn đến
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(nhóm và khác đã không được phép thực thi)