it-swarm.com.de

Dateiberechtigung mit sechs Bytes in Git. Was bedeutet das?

Ich habe ein git commit Befehl und es gab mir die folgende Antwort:

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

Ich weiß, dass Dateien Benutzer-/Gruppen-/andere RWX-Berechtigungen haben können und diese als drei Bytes ausgedrückt werden können, wie "644" oder "755". Aber warum zeigt git hier sechs Bytes?

Ich habe die folgenden Artikel gelesen, aber keine Antwort gefunden:

26

Die angezeigten Werte sind die 16-Bit-Dateimodi wie von git gespeichert nach dem Layout von POSIX-Typen und -Modi :

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.

In dieser Datei werden keine Verzeichnisse erwähnt. Sie werden mit dem Objekttyp 0100 dargestellt.

Jede Ziffer im sechsstelligen Wert ist oktal und repräsentiert drei Bits. 16 Bits benötigen also sechs Ziffern, von denen die erste nur ein Bit darstellt:

Type|---|Perm bits

1000 000 111101101
1 0   0   7  5  5

1000 000 110100100
1 0   0   6  4  4

git speichert keine beliebigen Modi, sondern nur eine Teilmenge der Werte aus den üblichen POSIX-Typen und -Modi (in Oktal 12 für eine symbolische Verknüpfung, 10 für eine reguläre Datei, 04 für ein Verzeichnis), zu denen git 16 hinzufügt für Git-Links. Der Modus wird mit vier Oktalziffern angehängt. Bei Dateien wird immer nur 100755 oder 100644 angezeigt (obwohl 100664 auch technisch möglich ist). Verzeichnisse sind 040000 (Berechtigungen werden ignoriert), symbolische Links 120000. Die Set-User-ID, Set-Group-ID und Sticky-Bits werden überhaupt nicht unterstützt (sie würden in den nicht verwendeten Bits gespeichert).

Siehe auch diese verwandte Antwort .

39
Stephen Kitt

Traditionell verwendeten Unix-Dateisysteme 16 Bit, um den Typ in 4 Bits (z. B. reguläre Datei, Verzeichnis, Zeichenspezialgerät ...) zu speichern. 9 Bit Benutzer-/Gruppen-/andere Berechtigungen, das Sticky-Bit, das SUID-Bit und das SGID-Bit.

Sie sehen dies in Oktalform, sodass die 5 Ziffern ganz rechts die Werte 0 bis 7 haben können (was 3 Bits für insgesamt 15 entspricht) und die linke Ziffer 0 oder 1 für das letzte Bit ist.

Auf einem Linux-System man -s 7 inode (d. h. inode (7) ) sollte Sie im Abschnitt Dateityp und Modus darüber informieren.

8
icarus