Próbuję lepiej zrozumieć uprawnienia, więc wykonuję kilka „ćwiczeń”. Oto sekwencja poleceń, których używam z ich odpowiednimi danymi wyjściowymi:
$ 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
Ma to sens, ponieważ wiemy, że domyślnymi uprawnieniami do plików są 666
( rw-rw-rw-
), a domyślnymi uprawnieniami do katalogów są 777
( rwxrwxrwx
). Gdybym odjąć wartość umask z tych uprawnień domyślnych mam
666-022=644
, rw-r--r--
, dla file1
, więc jest to spójne z poprzedniego wyjścia;
777-022=755
, rwx-r-x-r-x
dla dir1
, również spójny.
Ale jeśli zmienię umask z 022
na 021
, to już nie będzie.
Oto przykład pliku:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
jest, 646
ale powinno być 666-021=645
. Więc to nie działa zgodnie z poprzednim obliczeniem.
Oto przykład katalogu:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
jest 756
, 777-021=756
. Zatem w tym przypadku wynik jest spójny z poprzednim obliczeniem.
Przeczytałem mężczyznę, ale nie znalazłem nic na temat tego zachowania.
Czy ktoś może wyjaśnić, dlaczego?
WYJAŚNIENIE
Jak wskazano w odpowiedziach: umask
wartość nie jest matematycznie odejmowana od domyślnych uprawnień do katalogu i pliku.
Efektywnie zaangażowana operacja jest kombinacją operatorów logicznych AND (&) i NOT (!). Dany:
R = wynikające uprawnienia
D = domyślne uprawnienia
U = aktualne umask
R = D i! U
Na przykład:
666 i! 0053 = 110 110 110 i ! 000 101 011 110 110 110 i 111 010 100 = 110 010 100 = 624 = rw - wr--
777 i! 0022 = 111 111 111 i ! 000 010 010 111 111 111 i 111 101 101 = 111 101 101 = 755 = rwxr - xr-x
WSKAZÓWKA
Prostym sposobem na szybkie poznanie wynikowych uprawnień (przynajmniej mi pomogło) jest myślenie, że możemy użyć tylko 3 wartości dziesiętnych:
r = 100 = 4
w = 010 = 2
x = 001 = 1
Uprawnienia będą kombinacją tych 3 wartości.
" "
służy do wskazania, że względne pozwolenie nie zostało udzielone.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Więc jeśli moim aktualnym umask jest 0053
to, wiem, że usuwam (4+1)
uprawnienia do odczytu i wykonywania z grupy oraz zapisywania i wykonywania (2+1)
z innych, co powoduje
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(grupa i inne osoby nie miały już uprawnień do wykonywania)