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-xper il dir1, anche coerente.
Ma se cambio l'umask da 022ad 021essa 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-è 646ma 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: umaskil 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 è 0053che 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)