Scroll to navigation

HARDLINK(1) Dienstprogramme für Benutzer HARDLINK(1)

BEZEICHNUNG

hardlink - mehrere Kopien einer Datei verlinken

ÜBERSICHT

hardlink [Optionen] Verzeichnis|Datei

BESCHREIBUNG

hardlink ist ein Werkzeug, das Kopien einer Datei durch harte Links oder Kopieren-beim-Schreiben-Clones (copy-on-write clones) ersetzt und dadurch Platz spart.

hardlink erstellt zunächst einen Binärbaum aus Dateigrößen und vergleicht anschließend den Inhalt von Dateien gleicher Größe. Es gibt zwei grundlegende Methoden zum Vergleichen der Inhalte. Die memcmp-Methode liest Datenblöcke direkt aus den Dateien und vergleicht sie. Die andere Methode basiert auf Checksummen (wie SHA256); in diesem Fall wird für jeden Datenblock die Checksumme mit Hilfe der Crypto-API des Linux-Kernels errechnet und diese Checksumme im Anwenderbereich gespeichert und für Dateivergleiche verwendet.

Für jede Datei wird auch ein »intro«-Puffer (32 bytes) zwischengespeichert. Dieser Puffer wird unabhängig von der Vergleichsmethode und angeforderten »cache-size« und »io-size« verwendet. Der »intro«-Puffer reduziert Operationen mit Dateninhalten erheblich, da Dateien am Anfang oft sehr unterschiedlich sind.

OPTIONEN

-c, --content

berücksichtigt bei der Bestimmung, ob zwei Dateien gleich sind, nur Dateiinhalte, jedoch keine Attribute. Gleichbedeutend mit -pot.

-b, --io-size Größe

gibt die Größe des read(2)- oder sendfile(2)-Puffers beim Vergleichen von Dateiinhalten an. Dem Argument Größe kann eines der multiplikativen Suffixe KiB, MiB und so weiter folgen (das »iB« ist optional, zum Beispiel ist »K« gleichbedeutend mit »KiB«). Die Vorgabe ist 8KiB für die memcmp-Methode und 1MiB für die anderen Methoden. Die Nur-memcmp-Methode verwendet Prozessspeicher für den Puffer, während die anderen Methoden ohne Kopiervorgänge arbeiten und die E/A-Operationen im Kernel ausgeführt werden. Die Größe kann im laufenden Betrieb geändert werden, um eine Reihe von zwischengespeicherten Inhalts-Checksummen anzupassen.

-d, --respect-dir

versucht, nur Dateien mit dem gleichen Verzeichnisnamen zu verlinken. Das Verzeichnis der obersten Ebene (wie in der Befehlszeile von hardlink angegeben) wird dabei ignoriert. Beispielsweise verlinkt hardlink --respect-dir /foo /bar /bla/eine/datei mit /blub/eine/datei, aber nicht /blub/andere/datei. Wenn Sie dies mit *--respect-name*kombinieren, werden ganze Pfade (ohne das Verzeichnis der obersten Ebene) verglichen.

-f, --respect-name

versucht, nur Dateien mit dem gleichen Namen (bzw. Basisnamen) zu verlinken. Es wird ausdrücklich empfohlen, statt -f besser lange Optionen zu verwenden, da dies von anderen hardlink-Implementierungen anders interpretiert wird.

-F, --prioritize-trees

behält Dateien im Verzeichnis der höchstmöglichen Ebene, falls mehrere identische Dateien in verschiedenen Verzeichnisbäumen existieren. Beispielse verlinkt der Befehl hardlink foo/ bar/ Dateien in bar/ zu gleichen Dateien im Verzeichnis foo/.

-i, --include regulärer-Ausdruck

gibt einen regulären Ausdruck zur Einbeziehung von Dateien an. Falls die Option --exclude angegeben ist, bezieht diese Option Dateien ein, die ansonsten ausgeschlossen werden würden. Falls die Option ohne --exclude verwendet wird, werden nur Dateien einbezogen, die mit dem Muster übereinstimmen.

-l, --list-duplicates

verlinkt nichts, sondern listet die absoluten Pfade jedes Dateiduplikats auf, einen pro Zeile, wobei ein eindeutiger 16-Byte-Bezeichner und ein Tabulator vorangestellt ist.

-m, --maximize

behält von gleichen Dateien diejenige mit der größten Anzahl der Links.

-M, --minimize

behält von gleichen Dateien diejenige mit der kleinsten Anzahl der Links.

--mount

agiert nicht in Verzeichnissen über Dateisystemgrenzen hinweg (verbleibt im gleichen Dateisystem).

-n, --dry-run

führt nichts aus, sondern gibt nur aus, was geändert werden würde.

-o, --ignore-owner

verlinkt beziehungsweise vergleicht Dateien selbst dann, wenn deren Eigentümer (Benutzer und Gruppe) unterschiedlich sind. Dies könnte unberechenbar sein.

-O, --keep-oldest

behält von gleichen Dateien die älteste Datei (diejenige mit der neuesten Änderungszeit). Standardmäßig wird die neueste Datei behalten. Falls --maximize oder --minimize angegeben ist, hat die Anzahl der Links Vorrang vor der Änderungszeit.

-p, --ignore-mode

verlinkt beziehungsweise vergleicht Dateien selbst dann, wenn deren Modi unterschiedlich sind. Dies könnte unberechenbar sein.

-q, --quiet

unterdrückt die Ausgaben.

-r, --cache-size Größe

gibt die Größe des Zwischenspeichers für Inhalts-Checksummen an. Alle Nicht-memcmp-Methoden berechnen die Checksumme für jeden Block des Dateiinhalts (siehe --io-size), wobei diese Checksummen für den nächsten Vergleich gespeichert werden. Die Größe ist für große Dateien oder große Anzahlen gleich großer Dateien bedeutsam. Die Vorgabe ist 10MiB.

--reflink[=wann]

Create copy-on-write clones (aka reflinks) rather than hardlinks. The reflinked files share only on-disk data, but the file mode and owner can be different. It’s recommended to use this option together with the --ignore-owner and --ignore-mode options. This option implies --skip-reflinks to ignore already cloned files.

The optional argument when can be never, always, or auto. If the when argument is omitted, it defaults to auto, which means that hardlink checks the filesystem type and uses reflinks on BTRFS, XFS and ZFS only, and falls back to hardlinks when creating a reflink is impossible. The argument always disables filesystem-type detection and the fallback to hardlinks, which means that only reflinks are allowed.

--skip-reflinks

ignoriert bereits geklonte Dateien. Diese Option kann beim Erstellen klassischer harter Links ohne --reflink verwendet werden.

-s, --minimum-size Größe

gibt die minimale zu berücksichtigende Größe an, die standardmäßig 1 ist, so dass leere Dateien nicht verlinkt werden. Dem Argument Größe eines der multiplikativen Suffixe KiB (=1024), MiB (=1024*1024) und so weiter für GiB, TiB, PiB, EiB, ZiB und YiB folgen (das »iB« ist optional, zum Beispiel ist »K« gleichbedeutend mit »KiB«).

-S, --maximum-size Größe

gibt die maximale zu berücksichtigende Größe an, die standardmäßig 0 ist, was unbegrenzt bedeutet. Dem Argument Größe kann eines der multiplikativen Suffixe KiB (=1024), MiB (=1024*1024) und so weiter für GiB, TiB, PiB, EiB, ZiB und YiB folgen (das »iB« ist optional, zum Beispiel ist »K« gleichbedeutend mit »KiB«).

-t, --ignore-time

verlinkt beziehungsweise vergleicht Dateien selbst dann, wenn deren Änderungszeiten unterschiedlich sind. Dies ist üblicherweise eine gute Wahl.

-v, --verbose

aktiviert die ausführliche Ausgabe, die dem Benutzer erklärt, was geschieht. Falls dies einmal angegeben ist, wird jede hart verlinkte Datei angezeigt; bei zweimaliger Angabe wird auch jeder Vergleich angezeigt.

-x, --exclude regulärer-Ausdruck

gibt einen regulären Ausdruck an, der Dateien von Vergleichen oder Verlinkungen ausschließt. Diese Option kann mehrfach angegeben werden.

--exclude-subtree regulärer-Ausdruck

gibt einen regulären Ausdruck an, der ganze Verzeichnisse von Vergleichen oder Verlinkungen ausschließt. Diese Option kann mehrfach angegeben werden.

-X, --respect-xattrs

versucht, nur Dateien mit den gleichen erweiterten Attributen zu verlinken.

-y, --method Name

Set the file content comparison method. The currently supported methods are sha256, sha1, crc32c, and memcmp. The default is sha256, or memcmp if the Linux Crypto API is not available. The methods based on checksums are implemented in a zero-copy way, which means that file contents are not copied to userspace and all calculation is done in the kernel.

-z, --zero

Separate lines with a NUL byte instead of a newline (for -l).

-h, --help

zeigt einen Hilfetext an und beendet das Programm.

-V, --version

zeigt Versionsinformationen an und beendet das Programm.

ARGUMENTE

hardlink akzeptiert ein oder mehrere Verzeichnisse, die nach zu verlinkenden Dateien durchsucht werden sollen.

UMGEBUNGSVARIABLEN

ULFILEEQ_DEBUG=all

aktiviert die Debug-Ausgabe für Dateivergleiche.

FEHLER

Die ursprüngliche hardlink-Implementierung verwendet die Option -f, um die Erzeugung harter Links über Dateisystemgrenzen hinweg zu erzwingen. Diese kaum sinnvoll nutzbare Funktion wird vom aktuellen hardlink nicht mehr unterstützt.

hardlink geht davon aus, dass sich die Verzeichnisbäume, in denen es agiert, während der Programmausführung nicht verändern. Falls dies dennoch geschieht, ist das Ergebnis nicht definiert und potenziell gefährlich. Wenn beispielsweise eine reguläre Datei durch eine Gerätedatei ersetzt wird, könnte hardlink damit beginnen, von diesem Gerät zu lesen. Falls eine Pfadkomponente durch einen symbolischen Link ersetzt wird oder sich Dateizugriffsrechte ändern, könnte die Sicherheit beeinträchtigt werden. Führen Sie hardlink niemals in einem sich ändernden Verzeichnisbaum aus oder in einem, über den ein anderer Benutzer die Kontrolle hat.

AUTOR

Es gibt mehrere hardlink-Implementierungen. Die allererste Implementierung stammt von Jakub Jelinek für die Fedora-Distribution; diese Implementierung wurde in Util-linux von den Versionen 2.34 bis 2.36 genutzt. Die gegenwärtige Implementierung basiert auf der Debian-Version von Julian Andres Klode.

FEHLER MELDEN

Nutzen Sie zum Melden von Fehlern das Fehlererfassungssystem <https://github.com/util-linux/util-linux/issues>.

VERFÜGBARKEIT

Der Befehl hardlink ist Teil des Pakets util-linux, welches aus dem Linux-Kernel-Archiv <https://www.kernel.org/pub/linux/utils/util-linux/> heruntergeladen werden kann.

2026-02-28 util-linux 2.42-rc1