Sto cercando di capire meglio le autorizzazioni, quindi sto facendo alcuni "esercizi". Ecco una sequenza di comandi che sto usando con i rispettivi output:
$ 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
Questo ha senso perché sappiamo che le autorizzazioni di file predefinite sono 666
( rw-rw-rw-
) e le autorizzazioni predefinite delle directory sono 777
( rwxrwxrwx
). Se sottraggo il valore umask da queste autorizzazioni predefinite che ho
666-022=644
, rw-r--r--
per la file1
, in modo che sia coerente con l'uscita precedente;
777-022=755
, rwx-r-x-r-x
per il dir1
, anche coerente.
Ma se cambio l'umask da 022
ad 021
essa non è più.
Ecco l'esempio per il file:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-
è 646
ma dovrebbe essere 666-021=645
. Quindi non funziona secondo il calcolo precedente.
Ecco l'esempio per la directory:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-
è 756
, 777-021=756
. Quindi in questo caso il risultato è coerente con il calcolo precedente.
Ho letto l'uomo ma non ho trovato nulla su questo comportamento.
Qualcuno può spiegare perché?
SPIEGAZIONE
Come sottolineato nelle risposte: umask
il valore non viene sottratto matematicamente dalla directory predefinita e dalle autorizzazioni del file.
L'operazione effettivamente coinvolta è una combinazione di operatori booleani AND (&) e NOT (!). Dato:
R = autorizzazioni risultanti
D = autorizzazioni predefinite
U = umask corrente
R = D &! U
Per esempio:
666 e! 0053 = 110 110 110 e ! 000 101 011 110 110 110 e 111 010 100 = 110 010 100 = 624 = rw - wr--
777 e! 0022 = 111 111 111 e ! 000 010 010 111 111 111 & 111 101 101 = 111 101 101 = 755 = rwxr - xr-x
MANCIA
Un modo semplice per conoscere rapidamente le autorizzazioni risultanti (almeno mi ha aiutato) è pensare che possiamo usare solo 3 valori decimali:
r = 100 = 4
w = 010 = 2
x = 001 = 1
Le autorizzazioni saranno una combinazione di questi 3 valori.
" "
viene utilizzato per indicare che non è stata concessa l'autorizzazione relativa.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Quindi, se la mia umask corrente è 0053
che sto rimuovendo i (4+1)
permessi di lettura ed esecuzione dal gruppo e la scrittura e l'esecuzione (2+1)
da altri risultanti
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(gruppo e altro non avevano già il permesso di esecuzione)