Was sind einige typische Verwendungen von Hardlinks?

9

Jeder, der an Windows gewöhnt war, kann sich vorstellen, was Symlinks sind und wie sie verwendet werden. Andererseits ist das Hardlink-Konzept Windows fremd (bin ich richtig?).

Ich würde gerne wissen, was die typischen Verwendungszwecke von Hardlinks unter Linux sind. Ich habe bereits verschiedene Beiträge gesehen, die den Unterschied in ihrer Funktionsweise beschreiben. Ich frage, was sind einige typische Situationen, in denen ein Benutzer besser dran wäre, harte Links anstelle von Symlinks zu verwenden?

Machen
quelle
3
Diese Frage wurde unter Unix & Linux Stackexchange gestellt: Warum gibt es Hardlinks?
Flimm

Antworten:

9

Ich verwende einen festen Link, bei dem ich eine einzelne Datei an zwei oder mehr Stellen benötige. Ich gehe davon aus, dass ich eines Tages einen der Speicherorte löschen möchte, und ich vergesse möglicherweise, dass ich einen Link zu der Datei habe. Dies verhindert, dass ich einen symbolischen Link zu einer Datei bekomme, die nicht mehr existiert.

Klärung:

Ein Dateiname ist in der Tat ein fester Link zur Datei. Somit hat jede Datei mindestens einen festen Link, was wir normalerweise als "den" Dateinamen betrachten. Wenn Sie eine Datei löschen, entfernen Sie tatsächlich ihren festen Link (daher der Name "entfernen", dh rmnicht "löschen"). Wenn der letzte feste Link einer Datei entfernt wird, löscht das System auch die Datei.

Paddy Landau
quelle
7

Harte Links erlauben ...

  • Eine einzelne ausführbare Datei mit mehr als einem Namen.

    Beispiel:

    ls -l /bin | grep -v ' 1 ' | sortlistet die /binfür Sie auf. Ergebnis ...

    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 gunzip
    -rwxr-xr-x 2 root root     63 2010-01-19 21:49 uncompress
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bunzip2
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzcat
    -rwxr-xr-x 3 root root  26300 2011-12-12 22:40 bzip2
    

    Anstelle von 3 Dateien verwenden bunzip2 bzcat und bzip2 dieselbe Datei, und innerhalb der Datei wird unterschieden, was zu tun ist. Spart Code und weniger Code bedeutet weniger mögliche Fehler und einfachere Wartung.

  • Eine einzelne Datei, auf die über mehrere Pfade zugegriffen werden kann.

    Nehmen Sie zum Beispiel einen Paketmanager, der für jedes installierte Paket ein Verzeichnis / usr / share / doc / $ packagename erstellt und in diesem Verzeichnis eine Datei namens LICENSE mit den Lizenzinformationen des Pakets. Viele Pakete auf einem typischen Linux-System sind GPL-lizenziert, sodass anstelle von 200 Kopien der GPL im Dateisystem nur eine Kopie und 199 Links vorhanden sein können. ptman @ Serverfault

Der Grund, warum Hardlinks hier funktionieren (und Softlinks nicht): Wenn Sie nur einen der Hardlinks entfernen, wird die Datei selbst nicht entfernt.

Rinzwind
quelle
2
"Beispiel: Ein move ( mv) ist eine copy ( cp) + ein remove ( rm)." Dies gilt nur, wenn sich Quelle und Ziel auf unterschiedlichen Bereitstellungen befinden. Andernfalls mvverschiebt a nur den Namen, nicht die Datei.
Paddy Landau
1
Wenn Sie technisch arbeiten möchten: mv ändert den Inode und nicht den Namen. Aber Sie haben Recht: Sieht so aus, als wäre dieses Beispiel heutzutage etwas alt und ich hätte gzip als Beispiel verwenden sollen;)
Rinzwind
3
Wir kommen ein bisschen vom Thema ab, aber ich habe das gerade getestet. Solange sich die Datei auf demselben Mount befindet, mvwird nur der Name geändert. Die Inode bleibt gleich.
Paddy Landau
Dies erklärt nicht wirklich, warum Sie nicht einfach Symlinks verwenden können - die Sie für ein paar Bytes zusätzlicher Daten speichern können. Dies wird in dieser Antwort richtig angesprochen .
Ken Sharp