J'essaie de mieux comprendre les autorisations, donc je fais quelques "exercices". Voici une séquence de commandes que j'utilise avec leur sortie respective:
$ 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
Cela est logique car nous savons que les autorisations de fichier par défaut sont 666( rw-rw-rw-) et que les autorisations par défaut des répertoires sont 777( rwxrwxrwx). Si je soustrais la valeur umask de ces autorisations par défaut que j'ai
666-022=644, rw-r--r--pour le file1, il est donc cohérent avec la sortie précédente;
777-022=755,, rwx-r-x-r-xpour le dir1, également cohérent.
Mais si je change le umask de 022la 021ce n'est pas plus.
Voici l'exemple du fichier:
$ umask 0021
$ touch file2
$ ls -l file2
-rw-r--rw- user group 0 Mar 16 13:33 file2
-rw-r--rw-est, 646mais il devrait l'être 666-021=645. Donc, cela ne fonctionne pas selon le calcul précédent.
Voici l'exemple du répertoire:
$ touch dir2
$ ls -ld dir2
drwxr-xrw- 2 user group 4096 Mar 16 13:35 dir2
drwxr-xrw-est 756, 777-021=756. Dans ce cas, le résultat est donc cohérent avec le calcul précédent.
J'ai lu l'homme mais je n'ai rien trouvé sur ce comportement.
Quelqu'un peut-il expliquer pourquoi?
EXPLICATION
Comme indiqué dans les réponses: umaskla valeur de n'est pas mathématiquement soustraite des autorisations de répertoire et de fichier par défaut.
L'opération effectivement impliquée est une combinaison d'opérateurs booléens AND (&) et NOT (!). Donné:
R = autorisations résultantes
D = autorisations par défaut
U = umask actuel
R = D &! U
Par exemple:
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
POINTE
Un moyen simple de connaître rapidement les autorisations résultantes (au moins cela m'a aidé) est de penser que nous pouvons utiliser seulement 3 valeurs décimales:
r = 100 = 4
w = 010 = 2
x = 001 = 1
Les autorisations seront une combinaison de ces 3 valeurs.
" "est utilisé pour indiquer que l'autorisation relative n'est pas donnée.
666 = 4+2+" " 4+2+" " 4+2+" " = rw rw rw
Donc, si mon umask actuel est 0053je sais que je supprime les (4+1) autorisations de lecture et d'exécution du groupe et que l'écriture et l'exécution (2+1)des autres entraînent
4+2 " "+2+" " 4+" "+" " = 624 = rw--w-r--
(le groupe et les autres n'avaient déjà pas de permission d'exécution)