Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

青灯夜游
青灯夜游Original
2022-11-11 15:36:482799Durchsuche

Grund: Das Herstellen einer festen Verbindung zum Verzeichnis kann zu einer Schleife im Verzeichnis führen. Wenn das Verzeichnis durchlaufen wird, gerät das System in eine Endlosschleife, was dazu führt, dass das Verzeichnis, auf das zugegriffen wird, nicht gefunden werden kann. Die Verzeichnisstruktur von Linux ist ein Baum mit „/directory“ als Stammknoten. Wenn benutzerdefinierte feste Links zulässig sind, wird diese Struktur wahrscheinlich zerstört und es entsteht sogar eine Schleife, die Befehle durchlaufen müssen Verzeichnisbaum wird, ist fatal. Um eine Beschädigung der Verzeichnisbaumstruktur zu vermeiden, erlaubt Linux Benutzern daher nicht, Hardlinks im Verzeichnis anzupassen.

Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.

Der harte Link von LINUX kann nicht mit dem Verzeichnis verknüpft werden, da die Einführung eines festen Links zum Verzeichnis zu einer Schleife im Verzeichnis führen kann. Wenn das Verzeichnis durchlaufen wird, gerät das System in eine Endlosschleife die Unfähigkeit, das Zugriffsverzeichnis zu finden.

Im Linux-System entspricht jede Datei (Verzeichnis ist auch eine Datei) einer Inode-Struktur. Die Inode-Datenstruktur enthält Informationen über den Dateityp (Verzeichnis, normale Datei, symbolische Linkdatei usw.). , Das Betriebssystem kann beim Durchlaufen des Verzeichnisses symbolische Links ermitteln. Natürlich können einige Maßnahmen ergriffen werden, um übermäßige Schleifen zu verhindern. Das System stoppt den Durchlauf Warum das Verzeichnis Der Grund, warum symbolische Links nicht in eine Endlosschleife gelangen. Bei harten Verbindungen ist es jedoch aufgrund der Einschränkungen der Datenstruktur und des im Betriebssystem verwendeten Algorithmus derzeit unmöglich, diese Endlosschleife zu verhindern.

Das Wesen der harten Verbindung unter Linux

Bevor wir das Problem besprechen, sprechen wir über das Wesen der harten Verbindung.

Der Hardlink ist eigentlich der Inhalt des Blocks, auf den der Inode des Verzeichnisses zeigt. Jeder Datensatz im Verzeichnisblock ist ein fester Link. Das Verzeichnis selbst ist eine Art Datei in Linux (Verzeichnisdatei, Symbol d), und der Dateiinhalt der „Verzeichnisdatei“ ist ein fester Link.

Zum Beispiel (achten Sie auf die Änderung der Anzahl der Verzeichnisverbindungen im Bild):

Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

Das Diagramm vor und nach der Änderung der Anzahl der tmp-Verzeichnisverbindungen sieht wie folgt aus (die rote Linie zeigt die Quelle an). der Verbindungsnummer):

Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

Wie Sie dem obigen Beispiel entnehmen können: Wenn ein Verzeichnis zum ersten Mal erstellt wird, beträgt die Anzahl der Hardlinks 2, von denen einer aus dem übergeordneten Verzeichnis und der andere aus seinem eigenen stammt. ." Wenn Sie ein Unterverzeichnis für das Verzeichnis erstellen, beträgt die Anzahl der festen Verbindungen +1 und wird 3. Dies liegt daran, dass es eine zusätzliche „..“-Verbindung aus dem Unterverzeichnis gibt.

Manche fragen sich an dieser Stelle vielleicht: Bedeutet das nicht, dass Hardlinks nicht für Verzeichnisse verwendet werden können? Was ist mit der obigen Demo los?

Hier muss ein Konzept geklärt werden: „Hardlinks können nicht für Verzeichnisse verwendet werden“, was bedeutet, dass Hardlinks zu Verzeichnissen nicht von Benutzern angepasst werden können, sondern nur vom Betriebssystem verwaltet werden können. Tatsächlich sind Verzeichnisse und Hardlinks untrennbar miteinander verbunden und integriert. Der „Hardlink“ selbst ist eigentlich die Art und Weise, wie ein Verzeichnis seine Unterdateinamen und Unterverzeichnisnamen verwaltet.

Der Albtraum benutzerdefinierter Hardlinks: Schleifen

Nachdem wir über die Natur von Hardlinks gesprochen haben, können wir zum heutigen Thema zurückkehren: Warum dürfen Benutzer die Hardlinks von Verzeichnissen nicht anpassen?

Wir wissen, dass die Verzeichnisstruktur von Linux ein Baum mit „/directory“ als Wurzelknoten ist. Wenn benutzerdefinierte Hardlinks zulässig sind, kann es sein, dass diese Struktur zerstört wird oder sogar eine Schleife entsteht, wenn beispielsweise der folgende Befehl ausgeführt wird kann erfolgreich ausgeführt werden. Wörter:

Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

Warum können Linux-Hardlinks keine Verzeichnisse verknüpfen?

Sobald eine Schleife gebildet wird, ist sie für Befehle, die den Verzeichnisbaum durchlaufen müssen, fatal (z. B. der Befehl du, der von oben nach unten durchläuft, und der Befehl pwd). verläuft von unten nach oben). Um eine Beschädigung der Verzeichnisbaumstruktur zu vermeiden, erlaubt Linux Benutzern daher nicht, Hardlinks im Verzeichnis anzupassen. Der Grund, warum Softlinks diese Einschränkung nicht haben, liegt darin, dass Softlinkdateien einen speziellen Dateityp haben, der vom System erkannt werden kann, während sich „Hardlinkdateien“ nicht von normalen Dateien des Systems unterscheiden und nicht beurteilt werden können.

Verwandte Empfehlungen: „Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWarum können Linux-Hardlinks keine Verzeichnisse verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn