Angenommen, ich erstelle nur das Verzeichnis newDirectory und führe dann den Befehl ls -ld aus. Ich sehe, dass die Anzahl der Hardlinks 2 beträgt. Was genau macht Hardlink 2 von Anfang an aus? Entspricht die Anzahl der Unterverzeichnisse im aktuellen Verzeichnis auch der Anzahl der festen Verbindungen - 2?
38
Antworten:
In der Vergangenheit hat das erste Unix-Dateisystem in jedem Verzeichnis zwei Einträge erstellt:
.
auf das Verzeichnis selbst und..
auf das übergeordnete Verzeichnis . Dies bot eine einfache Möglichkeit, das Dateisystem sowohl für Anwendungen als auch für das Betriebssystem selbst zu durchlaufen.Somit hat jedes Verzeichnis eine Verbindungsanzahl von 2 + n, wobei n die Anzahl der Unterverzeichnisse ist. Die Links sind der Eintrag für dieses Verzeichnis in seinem übergeordneten Verzeichnis, der eigene
.
Eintrag des Verzeichnisses und der..
Eintrag in jedem Unterverzeichnis. Angenommen, dies ist der Inhalt des Teilbaums, in dem/parent
sich alle Verzeichnisse befinden:Dann
dir
hat eine Verbindungszahl von 5: derdir
Eintrag in/parent
dem.
Eintrag/parent/dir
und die drei..
Einträge in jedem von/parent/dir/sub1
,/parent/dir/sub2
und/parent/dir/sub3
. Da/parent/dir/sub1
es kein Unterverzeichnis gibt, ist die Anzahl der Verknüpfungen 2 (dersub1
Eintrag in/parent/dir
und der.
Eintrag in/parent/dir/sub1
).Um die Anzahl der Sonderzeichen für das Stammverzeichnis zu minimieren, für das kein übergeordnetes Element vorhanden ist, enthält das Stammverzeichnis einen
..
Eintrag, der auf sich selbst verweist. Auf diese Weise hat es auch eine Verknüpfungsanzahl von 2 plus der Anzahl der Unterverzeichnisse, wobei 2/.
und ist/..
.Spätere Dateisysteme haben die Tendenz, die übergeordneten Verzeichnisse im Speicher zu verfolgen, und benötigen
.
und..
existieren normalerweise nicht als tatsächliche Einträge. Typische moderne Unix-Systeme behandeln.
und..
als spezielle Werte als Teil des dateisystemtypunabhängigen Dateisystemcodes. Einige Dateisysteme noch enthalten.
und..
Einträge, oder so tun, auch wenn nichts erscheint auf dem Datenträger.Die meisten Dateisysteme melden immer noch eine Linkanzahl von 2 + n für Verzeichnisse, unabhängig davon, ob
.
und ob..
Einträge vorhanden sind. Es gibt jedoch Ausnahmen, zum Beispiel, dass btrfs dies nicht tut.quelle
..
Das Zeigen auf das übergeordnete Verzeichnis wirkt sich nicht auf die Linkanzahl des aktuellen Verzeichnisses aus. Die Anzahl von 2 ergibt sich aus.
der (ursprünglichen) Namensliste des Verzeichnisses. Die Art und Weise, wie Sie es ausdrücken, ist ein wenig mehrdeutig und lässt es so klingen wie.
und..
sind die beiden...
sollte nur verwendet werden, um zu erklären, wie die Mathematik funktioniert2+n
:).
darin." Wenn es Ihnen immer noch unklar ist, tut es mir sehr leid, dass ich es nicht weiter klären kann. Alles, was ich besser machen könnte, ist, seine Antwort hier in die Kommentare einzufügen.Es gibt eine für das Verzeichnis selbst und eine für das Verzeichnis
.
darin.Dies ist sinnvoll, da jedes Unterverzeichnis einen
..
Hardlink erstellt und darüber hinaus keine Hardlinks zu Verzeichnissen erstellt werden können. 1 Ich würde dem jedoch für nichts Ernstes vertrauen, insb. da es einfach ist, die Unterverzeichnisse zu zählen und die reale Zahl zu erhalten.Wenn Sie sich nur die
ls
Ausgabe ansehen, um eine Vorstellung davon zu bekommen, wie viele U-Boote es gibt, dann haben Sie eine anständige Vorstellung davon.1 Oder zumindest kannst du nicht mit
ln
. Ich habe nicht versucht, programmgesteuert undman 2 link
ist nicht eindeutig - es gibt keinen offensichtlichen Fehler beim Verknüpfen mit einem Verzeichnis, obwohl möglicherweise einige zutreffen (EMLINK
,EPERM
). Es sei denn, irgendwo gibt es einen Standard, der besagt, dass die einzigen möglichen festen Links zu einem Verzeichnis sind,.
und..
ich würde diese Anzahl fester Links wiederum nur als zufälligen Hinweis behandeln.quelle