Saya mencoba memahami izin dengan lebih baik, jadi saya melakukan beberapa "latihan". Berikut urutan perintah yang saya gunakan dengan output masing-masing:
$ 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
Itu masuk akal karena kita tahu bahwa hak akses file default adalah 666
( rw-rw-rw-
) dan direktori hak akses default adalah 777
( rwxrwxrwx
). Jika saya kurangi nilai umask dari hak akses default ini saya memiliki
666-022=644
, rw-r--r--
, untuk file1
, sehingga koheren itu dengan keluaran sebelumnya;
777-022=755
,, rwx-r-x-r-x
untuk dir1
, juga koheren.
Tapi jika saya mengubah umask dari 022
ke 021
tidak lagi.
Ini adalah contoh untuk file tersebut:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
hanyalah 646
tetapi seharusnya 666-021=645
. Jadi itu tidak bekerja sesuai dengan perhitungan sebelumnya.
Berikut adalah contoh untuk direktori:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
adalah 756
, 777-021=756
. Jadi dalam hal ini hasilnya koheren dengan perhitungan sebelumnya.
Saya sudah membaca pria itu tetapi saya belum menemukan apa pun tentang perilaku ini.
Adakah yang bisa menjelaskan mengapa?
PENJELASAN
Seperti yang ditunjukkan dalam jawaban: umask
nilai tidak dikurangi secara matematis dari direktori default dan izin file.
Operasi yang terlibat secara efektif adalah kombinasi dari operator boolean AND (&) dan NOT (!). Diberikan:
R = izin yang dihasilkan
D = izin default
U = umask saat ini
R = D &! U
Sebagai contoh:
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
TIP
Cara mudah untuk dengan cepat mengetahui izin yang dihasilkan (setidaknya itu membantu saya) adalah dengan berpikir bahwa kita dapat menggunakan hanya 3 nilai desimal:
r = 100 = 4
w = 010 = 2
x = 001 = 1
Izin akan menjadi kombinasi dari 3 nilai ini.
" "
digunakan untuk menunjukkan bahwa izin relatif tidak diberikan.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Jadi jika umask saya saat ini adalah 0053
saya tahu saya menghapus (4+1)
izin baca dan eksekusi dari grup dan menulis serta eksekusi (2+1)
dari yang lain menghasilkan
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(grup dan lainnya sudah tidak memiliki izin eksekusi)
sumber