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-xdla dir1, również spójny.
Ale jeśli zmienię umask z 022na 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, 646ale 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: umaskwartość 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 0053to, 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)