Was ist der Unterschied zwischen festen Links und kopierten Dateien?

22

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?

Mike B
quelle

Antworten:

29

Wenn Sie eine Datei kopieren, wird der Inhalt dupliziert. Wenn Sie also den Inhalt einer einzelnen Datei ändern, hat dies keine Auswirkungen auf die andere.

Wenn Sie einen Hardlink erstellen, wird eine Datei erstellt, die auf denselben Inhalt verweist. Wenn Sie also den Inhalt einer der Dateien ändern, wird die Änderung auf beiden angezeigt.

TheMeaningfulEngineer
quelle
3
Ist das Erstellen eines festen Links bei sehr großen Dateien immer schneller als das Kopieren der Originaldatei?
Jorge Bucaran
14

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

Peter
quelle
4
Danke für die prompte Antwort. Warum sollte ich dann einen Hardlink anstelle eines Softlinks verwenden?
Mike B
5
Ein Softlink ist im Grunde ein Zeiger auf eine andere Datei. Wenn Sie also die Originaldatei löschen, bleibt der Softlink bestehen, ist jedoch defekt. Bei einem Hardlink handelt es sich um zwei Namen für dieselbe Datei, sodass sie einzeln gelöscht werden können.
Peter
19
Peters Erklärung ist gut, aber er hat die "Linkanzahl" ausgelassen. Im Inode der Datei (auf den Festplattenmetadaten) gibt es eine Linkanzahl. Ein fester Link erhöht die Anzahl der Links, ein weicher Link nicht. Der Kernel darf den Inhalt einer Datei löschen, wenn die Anzahl der Links auf Null fällt.
Bruce Ediger
4
Ich denke, Alans Antwort darauf hat einen wichtigen Punkt: Wenn Sie eine Datei ändern, werden alle ihre Hardlinks geändert. Bei einer Kopie haben sie einen anderen Inhalt.
DonothingsErfolgreich
6

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 -izum lsBefehl 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.

rjmunro
quelle
0

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, vgextendetc. Heute wie Linux, diese Befehle sind eigentlich symbolisch (weich) Links auf die lvmausführbare Datei.

JRFerguson
quelle
Das hat nichts mit der Frage zu tun.
rjmunro
1
@ rjmunro Ich bitte zu unterscheiden. Das OP fragte: "Warum sollte ich überhaupt feste Links verwenden wollen?"
JRFerguson
Ich verstehe das letzte Beispiel nicht. Früher gab es feste Links zu vielen ausführbaren Dateien, jetzt gibt es feste Links zu einer ausführbaren Datei. Wie sind diese Softlinks unterscheidbar?
Emanuel Berg
@EmanuelBerg Mein Punkt war, dass unabhängig davon, ob Hard- oder Softlinks verwendet werden, der Name, unter dem die ausführbare Datei aufgerufen wird, die Optionen und Argumente bestimmt, die für die Ausführung gültig sind.
JRFerguson
1
@EmanuelBerg TMTOWTDI
JRFerguson