GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum hat ein neues Verzeichnis eine Anzahl fester Links von 2, bevor etwas hinzugefügt wird?

Angenommen, ich erstelle einfach das Verzeichnis newDirectory und führe dann den Befehl ls -ld aus. Ich sehe, dass die Anzahl der Hardlinks 2 ist. Was genau macht den Hardlink von Anfang an zu 2? Ist die Anzahl der Unterverzeichnisse im aktuellen Verzeichnis auch gleich der Anzahl der festen Links – 2?

Akzeptierte Antwort:

Historisch hat das erste Unix-Dateisystem zwei Einträge in jedem Verzeichnis erstellt:. auf das Verzeichnis selbst zeigt, und .. zeigt auf seinen Elternteil. Dies bot eine einfache Möglichkeit, das Dateisystem zu durchlaufen, sowohl für Anwendungen als auch für das Betriebssystem selbst.

Somit hat jedes Verzeichnis eine Linkanzahl von 2+n, wobei n die Anzahl der Unterverzeichnisse ist. Die Links sind der Eintrag für dieses Verzeichnis in seinem Elternverzeichnis, dem eigenen . des Verzeichnisses Eintrag und den .. Eintrag in jedem Unterverzeichnis. Angenommen, dies ist beispielsweise der Inhalt des Unterbaums, der unter /parent verwurzelt ist , alle Verzeichnisse:

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Dann dir hat eine Linkanzahl von 5:das dir Eintrag in /parent , der . Eintrag in /parent/dir , und die drei .. Einträge jeweils in /parent/dir/sub1 , /parent/dir/sub2 und /parent/dir/sub3 . Seit /parent/dir/sub1 kein Unterverzeichnis hat, seine Linkanzahl ist 2 (die sub1 Eintrag in /parent/dir und der . Eintrag in /parent/dir/sub1 ).

Um die Menge an Sonderfällen für das Root-Verzeichnis zu minimieren, das kein „richtiges“ Elternverzeichnis hat, enthält das Root-Verzeichnis einen .. Eintrag, der auf sich selbst zeigt. Auf diese Weise hat es auch eine Linkanzahl von 2 plus die Anzahl der Unterverzeichnisse, wobei die 2 /. ist und /.. .

Neuere Dateisysteme neigen dazu, übergeordnete Verzeichnisse im Speicher zu verfolgen und benötigen normalerweise . nicht und .. als tatsächliche Einträge existieren; typische moderne Unix-Systeme behandeln . und .. als spezielle Werte als Teil des dateisystemtypunabhängigen Dateisystemcodes. Einige Dateisysteme enthalten immer noch . und .. Einträge, oder vortäuschen, obwohl nichts auf der Festplatte erscheint.

Die meisten Dateisysteme melden immer noch eine Linkanzahl von 2+n für Verzeichnisse, unabhängig davon, ob . und .. Einträge existieren, aber es gibt Ausnahmen, zum Beispiel macht btrfs das nicht.


Linux
  1. Hardlink(s) für Verzeichnisse erzwingen?

  2. Warum hat Ifs in `while Ifs=Read..` keine Auswirkung?

  3. Erstellen eines neuen Verzeichnisses in C

  4. So erstellen Sie einen Link zu einem Verzeichnis

  5. Gibt es etwas schnelleres als `find . | wc -l` um Dateien in einem Verzeichnis zu zählen?

Warum erstellt mein symbolischer Link eine Datei und keinen Ordner?

Warum bedeutet ENOENT No such file or directory?

Was ist eine Matrox-GPU und warum hat der UNIX-Server meiner Universität eine?

Warum findet `xdg-mime query filetype ...` keinen neu hinzugefügten Dateityp?

Warum heizt Linux meinen Computer auf?

Warum hat pvremove eine doppelte Force in der Manpage?