Ich verstehe, dass Hardlinks eine Kopie der Originaldatei enthalten und dass ich eine Hardlink-Datei in einem Verzeichnis löschen kann und sie im anderen Verzeichnis noch vorhanden ist.
Wenn dies der Fall ist, warum sollte ich überhaupt feste Links verwenden? Warum nicht einfach zwei separate Dateien haben?
Ein fester Link ist im Grunde ein zweiter Dateiname für dieselbe Datei. Wenn Sie also eine Datei fest verlinken, befindet sich diese nur einmal im Dateisystem und belegt daher nur einmal Speicherplatz. Sie möchten dies also verwenden, um Speicherplatz zu sparen
quelle
Auf Unix-Dateisystemen ist jeder Dateiname eine feste Verknüpfung zum Speicherort der Daten auf der Platte, die als Inode bezeichnet wird. Wenn Sie eine neue feste Verknüpfung zu einer vorhandenen Datei erstellen, wird kein zusätzlicher Speicherplatz auf der Festplatte beansprucht, da dies nur ein weiterer Zeiger auf dieselben Daten ist. Wenn Sie die Daten über den einen oder anderen Link bearbeiten (oder den Inode direkt bearbeiten), werden beide Dateien geändert.
Das System zählt, wie viele feste Links jeder Inode hat. Wenn die Verbindungsanzahl 0 ist, kann die Datei nicht mehr erreicht werden, und die Daten werden als sicher zum Überschreiben markiert. Wenn Sie also eine Datei mit 2 festen Links angeben, werden die Daten nicht gelöscht, wenn Sie einen der Links löschen. Nur wenn Sie beide löschen, gehen die Daten verloren.
Sie können die Inode-Nummern der Dateien sehen, indem Sie
-i
zumls
Befehl wechseln .Ein Softlink verweist dagegen anhand seines Dateinamens auf eine andere Datei. Wenn Sie die Originaldatei verschieben oder löschen, wird die Verknüpfung unterbrochen.
quelle
In Bezug auf den Teil der Frage, der gestellt wurde: "Warum sollte ich überhaupt feste Links verwenden?"
Fest verknüpfte Dateien (oder weich (symbolisch) verknüpfte) bieten eine nützliche Möglichkeit, eine einzige ausführbare Datei zu haben, die für verschiedene Zwecke maskiert werden kann.
Das heißt, der Name, unter dem der Code aufgerufen wird, kann überprüft werden, um festzustellen, welche Optionen zur Ausführung verfügbar sind. Dies ermöglicht die Entwicklung und Paketierung eines großen Codeteils mit allen gemeinsam genutzten Funktionen, die für leicht unterschiedliche Zwecke erforderlich sind. Aus der Sicht des Benutzers beschränkt die Angabe, was (nach Namen) ausgeführt werden soll, die Auswahlmöglichkeiten und die Darstellung auf eine übersichtlichere Teilmenge von Optionen.
Ein klassisches Beispiel ist LVM. Zu einer Zeit verwendete HP-UX fest verbundenen Dateien für die verschiedenen ausführbaren Dateien (zB
vgdisplay
,vgcreate
,vgextend
etc. Heute wie Linux, diese Befehle sind eigentlich symbolisch (weich) Links auf dielvm
ausführbare Datei.quelle