Unterscheidung zwischen Linux-Hardlinks und Softlinks

Unterscheidung zwischen Linux-Hardlinks und Softlinks

Unter Linux gibt es zwei Arten von Dateiverbindungen. Eine ähnelt einer Windows-Verknüpfung, mit der Sie schnell auf die Zieldatei (oder das Zielverzeichnis) verlinken können. Dies wird als Softlink oder auch symbolischer Link bezeichnet. Die andere besteht darin, über die Inode-Verbindung des Dateisystems einen neuen Dateinamen zu generieren, anstatt eine neue Datei zu erstellen. Dies wird als Hardlink oder auch Entity-Link bezeichnet. Softlinks und Hardlinks sind zwei völlig verschiedene Dinge.

1. Harter Link

1.1 Einleitung

Im Allgemeinen besteht eine Eins-zu-eins-Entsprechung zwischen Dateinamen und Inode-Nummern, und jede Inode-Nummer entspricht einem Dateinamen. Unix/Linux-Systeme lassen jedoch zu, dass mehrere Dateinamen auf dieselbe Inode-Nummer verweisen. Dies bedeutet, dass auf denselben Inhalt unter verschiedenen Dateinamen zugegriffen werden kann. Eine Änderung des Dateiinhalts wirkt sich auf alle Dateinamen aus. Das Löschen eines Dateinamens hat jedoch keine Auswirkungen auf den Zugriff auf einen anderen Dateinamen. Diese Situation wird als „harter Link“ bezeichnet.

Mit dem Befehl ln können Hardlinks erstellt werden:

ln <Quelldatei> <Hardlink>

Nach dem Ausführen des obigen Befehls sind die Inode-Nummern der Quelldatei und der Zieldatei identisch und beide verweisen auf denselben Inode. In den Inode-Informationen gibt es ein Element namens „Linkanzahl“, das die Gesamtzahl der auf den Inode verweisenden Dateinamen aufzeichnet und zu diesem Zeitpunkt um 1 erhöht wird. Umgekehrt reduziert das Löschen eines Dateinamens die „Linkanzahl“ im Inode-Knoten um 1. Wenn dieser Wert auf 0 sinkt und damit anzeigt, dass kein Dateiname auf diesen Inode verweist, wird das System diese Inode-Nummer und den entsprechenden Blockbereich wiederverwenden.

Lassen Sie mich übrigens über die „Anzahl der Links“ von Verzeichnisdateien sprechen. Beim Erstellen eines Verzeichnisses werden standardmäßig zwei Verzeichniseinträge generiert: " und "…". Die Inode-Nummer des ersteren ist die Inode-Nummer des aktuellen Verzeichnisses, was einem „Hardlink“ des aktuellen Verzeichnisses entspricht; die Inode-Nummer des letzteren ist die Inode-Nummer des übergeordneten Verzeichnisses des aktuellen Verzeichnisses, was einem „Hardlink“ des übergeordneten Verzeichnisses entspricht. Daher ist die Gesamtzahl der „Hardlinks“ eines Verzeichnisses immer gleich 2 plus der Gesamtzahl seiner Unterverzeichnisse (einschließlich versteckter Verzeichnisse), wobei sich 2 auf den „Hardlink“ zum Verzeichnisnamen selbst und den „Hardlink“ auf den „.“ im aktuellen Verzeichnis bezieht.

1.2 Beziehung zwischen Hardlinks und Inodes

Ein Hardlink ist im Wesentlichen ein Alias ​​für eine Datei, die demselben Inode wie die Quelldatei zugeordnet ist. Erstellen Sie als Nächstes die Quelldatei lvlv.txt und den Hardlink lvlv_hd.txt in den Verzeichnissen /etc und /root und überprüfen Sie die Dateieigenschaften.

#Erstellen Sie einen Hardlink ln /etc/lvlv.txt /root/lvlv_hd.txt 

#Dateiattribute auflisten ll -i /etc/lvlv.txt
7792474 -rw---x--x 2 b3335 b3335 22. November 9 21:05 lvlv.txt
ll -i /root/lvlv_hd.txt
7792474 -rw---x--x 2 b3335 b3335 22. November 9 21:05 lvlv_hd.txt

Aus dem Obigen können wir erkennen, dass der Inode des Hardlinks /etc/lvlv_hd.txt derselbe ist wie der der Quelldatei lvlv.txt und auch die anderen Informationen genau gleich sind. Das Speicherdiagramm sieht wie folgt aus:

Der Inhalt in der Abbildung zeigt, dass der Hardlink lvlv_hd.txt im Verzeichnis /root und die Datei lvlv.txt in /etc über denselben Inode auf denselben Dateiinhalt verweisen. Die Datenentität des Verzeichnisses zeichnet jeden Dateinamen und die Inode-Nummer der Datei auf. Es ist ersichtlich, dass ein Hardlink im Wesentlichen ein Alias ​​für eine Datei ist.

1.3 Hinweise zu Hardlinks

Für Hardlinks gelten zwei Einschränkungen:
(1) Es kann nicht Dateisysteme überschreiten. Ein Hardlink ist nur ein Alias ​​für eine Datei, keine unabhängige Datei. Daher kann er nur auf einem einzigen Dateisystem ausgeführt werden und kann nicht Dateisysteme überschreiten.

(2) Es kann keine Verbindung zum Verzeichnis hergestellt werden. Denn mit Verzeichnissen verbundene Hardlinks können dazu führen, dass der Inode und der physische Block des Verzeichnisses eine Schleife bilden. Wenn das Verzeichnis zu diesem Zeitpunkt gelöscht wird, ist der Verzeichnis-Entitätsblock für das System nicht mehr zugänglich, was zu einem isolierten Verzeichnis führt (auf das vom Stammverzeichnis aus nicht mehr zugegriffen werden kann). Wenn Sie verwaiste Verzeichnis-Inodes und Entitätsblöcke löschen möchten, müssen Sie Markierungen und Bereinigungen durchführen, was auf der Festplatte sehr zeitaufwändig ist. Bei Softlinks tritt dieses Problem nicht auf, da sie die Linkanzahl des Zielverzeichnisses nicht erhöhen.

Wenn beispielsweise ein Hardlink /etc/etc_hd im Verzeichnis /etc oder seinem Unterverzeichnis erstellt wird, entsteht eine Schleife, wie in der folgenden Abbildung dargestellt:

Wenn Sie zu diesem Zeitpunkt rm -r /etc ausführen, um das Verzeichnis /etc zu löschen, wird das Verzeichnis /etc nicht wirklich gelöscht, da der Inode und der Block von /etc noch vorhanden sind, wodurch es zu einem isolierten Verzeichnis wird. Zu diesem Zeitpunkt kann nicht vom Stammverzeichnis auf /etc zugegriffen werden.

2. Weicher Link

Im Gegensatz zu einem Hardlink erstellt ein Softlink eine unabhängige Datei mit einem eigenen Inode, diese Datei leitet das Lesen von Daten jedoch an die Datei weiter, mit der sie verbunden ist. Da für die Zeigeroperation nur die Datei verwendet wird, wird beim Löschen der Quelldatei die Meldung „Kann nicht geöffnet werden“ für die Softlink-Datei angezeigt und die gelöschte Quelldatei kann nicht gefunden werden.

Lassen Sie uns einen Softlink erstellen und die Eigenschaften des Softlinks anzeigen:

#Erstellen Sie einen Softlink $ ln -s /etc/lvlv.txt lvlv_sb.txt

#Dateiattribute anzeigen $ ll -i 
7792474 -rw---x--x 2 b3335 b3335 22. November 9 21:05 lvlv.txt
[b3335@MIC-Wurzel]$ ll -i 
7792478 lrwxrwxrwx 1 b3335 b3335 13. November 10 15:23 lvlv_sb.txt -> /etc/lvlv.txt

Es ist ersichtlich, dass sich der Inode-Knoten des Softlinks von der Quelldatei lvlv.txt unterscheidet und die Größe des Softlinks genau der Länge der Zeichenfolge „/etc/lvlv.txt“ 13 entspricht. Es ist ersichtlich, dass der Softlink eine separate neue Datei ist und der Inhalt der Datei der Pfad der angegebenen Datei ist.

Nachfolgend sehen Sie eine schematische Darstellung eines Softlinks, wobei die Datei lvlv.txt als Beispiel dient.

Oben finden Sie detaillierte Informationen zur Unterscheidung von Linux-Hardlinks und -Softlinks. Weitere Informationen zu Linux-Hardlinks und -Softlinks finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Linux: Kein Speicherplatz mehr auf Gerät 500 – Fehler aufgrund voller Inodes
  • So zeigen Sie das Verhalten von Suchmaschinen-Spider-Crawlern in Linux/Nginx an
  • Implementierungsprinzip und Codebeispiele für die Komprimierungsdatei des Linux-Befehls gzip
  • Verwendung des Linux-Befehls ipcs
  • Detailliertes Tutorial zum Bereitstellen eines SpringBoot + Vue-Projekts auf einem Linux-Server
  • 5 Befehle zur Verwendung des Rechners in der Linux-Befehlszeile
  • Verwendung des Linux-Befehls ls
  • Eine Codezeile zeigt Ihnen, wie Sie Linux-Prozesse verbergen
  • Verwendung des Linux-Befehls sed
  • Detaillierte Erläuterung des Linux-Indexknoten-Inode

<<:  Drei Möglichkeiten, doppeltes Einfügen von Daten in MySql zu vermeiden

>>:  Eine kurze Diskussion über die perfekte Anpassungslösung für das mobile Vue-Terminal

Artikel empfehlen

...

Lösung für die falsche Ausrichtung des Eingabecursors in Chrome, Firefox und IE

Detaillierte Erklärung zur Fehlplatzierung des Ein...

Verwenden von Streaming-Abfragen in MySQL, um Daten-OOM zu vermeiden

Inhaltsverzeichnis 1. Einleitung 2. JDBC implemen...

HTML lädt dynamisch CSS-Stile und JS-Skripte – Beispiel

1. Dynamisches Laden von Skripten Mit der wachsen...

MySQL-Lernprogramm Clustered Index

Das Clustering ist eigentlich relativ zur InnoDB-...

Zusammenfassung der Zeilenumbruchprobleme bei Textbereichen in HTML

Kürzlich stieß ich auf das Problem, ob die Daten b...

Detaillierter Prozess der Installation von Logstash in Docker

Bearbeiten Sie docker-compose.yml und fügen Sie d...

MySQL 5.7.21 Installations- und Konfigurations-Tutorial

Die einfache Installationskonfiguration von mysql...

Implementierung der CSS3-Button-Randanimation

Erster Blick auf die Wirkung: html <a href=&qu...