web-dev-qa-db-fra.com

Autorisation de fichier avec six octets en git. Qu'est-ce que ça veut dire?

J'ai effectué un git commit commande et il m'a donné la réponse suivante:

7 files changed, 93 insertions(+), 15 deletions(-)
mode change 100644 => 100755 assets/internal/fonts/icomoon.svg
mode change 100644 => 100755 assets/internal/fonts/icomoon.ttf
mode change 100644 => 100755 assets/internal/fonts/icomoon.woff

Je sais que les fichiers peuvent avoir des autorisations utilisateur/groupe/autres rwx et ceux-ci peuvent être exprimés en trois octets, comme "644" ou "755". Mais pourquoi git affiche-t-il six octets ici?

J'ai lu les articles suivants mais je n'ai pas trouvé de réponse:

26
That Brazilian Guy

Les valeurs affichées sont les modes de fichier 16 bits tels que stockés par git , suivant la disposition de types et modes POSIX :

32-bit mode, split into (high to low bits)

4-bit object type
  valid values in binary are 1000 (regular file), 1010 (symbolic link)
  and 1110 (gitlink)

3-bit unused

9-bit unix permission. Only 0755 and 0644 are valid for regular files.
Symbolic links and gitlinks have value 0 in this field.

Ce fichier ne mentionne pas de répertoires; ils sont représentés à l'aide du type d'objet 0100.

Chaque chiffre de la valeur à six chiffres est en octal, représentant trois bits; 16 bits nécessitent donc six chiffres dont le premier ne représente qu'un bit:

Type|---|Perm bits

1000 000 111101101
1 0   0   7  5  5

1000 000 110100100
1 0   0   6  4  4

git ne stocke pas de modes arbitraires, seul un sous-ensemble des valeurs est autorisé, parmi les types et modes POSIX habituels (en octal, 12 pour un lien symbolique, 10 pour un fichier normal, 04 pour un répertoire) auxquels git ajoute 16 pour les liens git. Le mode est ajouté en utilisant quatre chiffres octaux. Pour les fichiers, vous ne verrez que 100755 ou 100644 (bien que 100664 soit également techniquement possible); les répertoires sont 040000 (les autorisations sont ignorées), les liens symboliques 120000. Le set-user-ID, set-group-ID et les bits collants ne sont pas du tout pris en charge (ils seraient stockés dans les bits inutilisés).

Voir aussi cette réponse connexe .

39
Stephen Kitt

Traditionnellement, les systèmes de fichiers Unix utilisaient 16 bits pour contenir le type sur 4 bits (par exemple, fichier normal, répertoire, périphérique spécial de caractères ...) 9 bits d'autorisations utilisateur/groupe/autres, le bit collant, le bit SUID et le bit SGID.

Vous voyez cela en octal, donc les 5 chiffres les plus à droite peuvent avoir les valeurs 0 - 7 (représentant 3 bits pour un total de 15) et le chiffre de gauche est 0 ou 1 pour le dernier bit.

Sur un système Linux man -s 7 inode (c'est-à-dire inode (7) ) devrait vous en parler dans la section type de fichier et mode.

8
icarus