# Hardlink

Ein Hardlink, übersetzt ins Deutsche auch oft harte Verknüpfung oder harter Link, bezeichnet im Bereich der Dateisysteme in der Informatik die Verknüpfung eines Dateinamens mit einer Datei. Der Begriff stammt u. a. vom Betriebssystem Unix.
Bei modernen Dateisystemen gibt es keine feste Zuordnung zwischen Dateinamen und der eigentlichen Datei, vielmehr wird beim Erstellen der Datei – beispielsweise auf einer Festplatte – in einem ersten Schritt zunächst eine Nummer (Knotennummer) als Referenz auf die Datei benutzt und in einem zweiten Schritt ein Verzeichniseintrag mit dem Dateinamen erzeugt, der auf diese Nummer verweist. Im eigentlichen Sinne bezeichnet hard link oder auch physical link diese Verknüpfung von Dateiname und Datei (letztere repräsentiert durch deren Knotennummer) innerhalb des Dateisystems.
Im allgemeinen Sprachgebrauch wird der Begriff jedoch meist nur dann verwendet, wenn mehrere Hardlinks auf dieselbe Datei verweisen, also mehrere Verzeichniseinträge bzw. Dateinamen für ein und dieselbe Datei existieren.

## Einführung

Beim Erstellen der Datei erzeugt das Betriebssystem (genauer: der Dateisystemhandler) den ersten Hardlink automatisch, da ohne ihn gar kein Dateiname existieren würde und somit die Anwendungsprogramme gar keinen Zugriff auf die Datei hätten.
Mit der Erstellung eines Hardlinks auf eine bereits existierende Datei wird ein weiterer Name (zuweilen in einem anderen Verzeichnis) zu der Datei etabliert; anschließend bilden beide Namen einen gleichwertigen Zugang zu der Datei; dabei ist nicht ohne Weiteres zu sagen, welcher Name zuerst da war. Das ist ein Gegensatz zu Verfahren mit ähnlicher Zielsetzung wie z. B. symbolischen Verknüpfungen (auch Soft Links genannt), bei denen es eine eigentliche Datei und einen Link auf dieselbe gibt.
Eine Datei oder ein Verzeichnis kann mit diesem Mechanismus an verschiedenen Orten in der Verzeichnisstruktur gleichzeitig erscheinen. Zu einem weiteren Hardlink gehört nur ein weiterer Name; andere Metadaten, die zur Datei gehören – wie etwa Änderungsdatum oder Zugriffsrechte –, existieren nur einmal und werden im Inode oder File Record gespeichert.
Hardlinks können sowohl in Unix- und Linux-Systemen (also auch macOS) als auch im Dateisystem NTFS unter Windows erstellt werden.
Im Allgemeinen spricht man von Hardlinks, wenn mehrere Einträge auf denselben Inode oder File Record verweisen, dessen Nummer eine Datei oder ein Verzeichnis dateisystemintern identifiziert. Mehrere Hardlinks auf denselben Inode oder File Record sind gleichwertig und können in beliebiger Reihenfolge umbenannt oder gelöscht werden. (Beim Löschen wird überprüft, ob gerade der letzte verbleibende Hardlink gelöscht wird; die eigentliche Datei wird erst dann gelöscht.) Abgesehen von den Verzeichniseinträgen für das aktuelle und das übergeordnete Verzeichnis („.“ und „..“) verweisen Hardlinks fast immer auf Dateien.
Da Inode- oder File-Record-Nummern innerhalb von Partitionen verwaltet werden, sind Hardlinks nur innerhalb derselben Partition möglich. Möchte man Dateien auf verschiedenen Partitionen verlinken, so muss auf andere Mittel (wie symbolische Links) zurückgegriffen werden.

## Aufbau (Unix)

Jeder Verzeichniseintrag besteht aus dem Dateinamen und der zugeordneten Inode-Nummer. Zu jedem Inode kann es nahezu beliebig viele Dateipfade (Verzeichniseinträge) geben, also auch unterschiedliche Namen für dieselbe Datei.
Ein Vorteil dieses Konzepts zeigt sich beim Entfernen von Links:
Es gibt bei Unixsystemen streng genommen keine Operation zum Löschen einer Datei, sondern nur eine unlink-Operation zum Löschen von Links. Im Inode einer Datei wird die aktuelle Anzahl der Links gespeichert. Erst wenn der letzte Link zu einer Datei gelöscht ist, der Zähler im Inode also den Wert Null hat, wird die Datei selbst (Inode und Datencluster) zur Wiederbeschreibung freigegeben und damit logisch gelöscht.
Bemerkenswert ist das Verhalten von Hardlinks, wenn ein Benutzer eine Datei zu löschen versucht, die ein (oder mehrere) Programme noch geöffnet halten: Da das Öffnen einer Datei den Zähler um eins erhöht, führt das versuchte Löschen zwar zum „Verschwinden“ der Datei (genauer: des gelöschten Links) aus dem Verzeichnis. Die Datei existiert jedoch noch und kann vom Programm benutzt werden, solange es die Datei nicht schließt. Erst nachdem alle Programme die Datei geschlossen haben, wird auch der betreffende Festplattenspeicher freigegeben.
Um Konsistenzprobleme zu vermeiden, dürfen gewöhnliche Benutzer für Verzeichnisse keine zusätzlichen Hardlinks erstellen: Die Links werden von einem Verzeichnis-Inode automatisch verwaltet, und der eindeutige eigentliche Verzeichnisname taucht als Link genau einmal im übergeordneten Verzeichnis auf. Daneben gibt es in jedem Verzeichnis immer folgende zwei Links: Einen Link namens „.“, der das Verzeichnis selbst darstellt und folglich darauf verlinkt, sowie das übergeordnete Verzeichnis, durch einen Link namens „..“ repräsentiert.

## Anwendungsbeispiele
### Unix

Für sonstige Dateien lassen sich mit dem Befehl ln jederzeit zusätzliche Links erstellen, z. B. ein Link /home/wiki2/same-picture zur vorhandenen Datei /home/wiki1/picture:
    ln /home/wiki1/picture /home/wiki2/same-picture
Andere Möglichkeiten zum Erstellen von Hard Links sind cp --link und rsync --link-dest.
Mit dem Befehl stat lässt sich ermitteln, wie viele Hardlinks auf eine Datei zeigen. Der Befehl ls -l zeigt auf vielen Unix-Systemen in der zweiten Spalte die Anzahl Hardlinks der zugehörigen Datei.

### Windows

Hardlinks werden auf Partitionen mit dem NTFS-Dateisystem unterstützt, nicht jedoch auf FAT- oder ReFS-formatierten Partitionen. Je Datei sind bis zu 1023 (=$2^{10}-1$) zusätzliche Hardlinks möglich. Der erste [feste/harte] Verweis (oder [hard]link) zeigt immer auf die bereits angelegte und damit erreichbare/zugreifbare Datei. Zur Erstellung eignen sich z. B. das (u. a. in Windows XP enthaltene) Werkzeug fsutil (u. a. mit der Befehlserweiterung hardlink create), der (ab Vista enthaltene) Befehl mklink (mit dem Parameter /H, siehe folgende Beispiele) oder Anwendungen anderer Hersteller.
Um mit dem Microsoft-Werkzeug fsutil den Hardlink „Neue Linkdatei.txt“ zu erzeugen, der auch auf die Datei „Zieldatei.txt“ verweist, ist folgender Befehl einzugeben:
oder ab Vista:
Anders als unter Unix und Unixähnlichen kann kein Hardlink gelöscht werden, solange die betreffende Datei von einer Anwendung geöffnet (d. h. ein Filehandle darauf gesetzt) ist.