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-x
pour le dir1
, également cohérent.
Mais si je change le umask de 022
la 021
ce 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, 646
mais 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: umask
la 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 0053
je 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)
la source