13.2Links

Links sind Verweise auf Dateien oder Verzeichnisse. Durch Links können Sie von verschiedenen Orten in der Verzeichnisstruktur auf ein- und dieselbe Datei zugreifen, ohne dass diese Datei physikalisch mehrfach gespeichert werden muss. Links sind damit ein wichtiges Hilfsmittel zur Vermeidung von Redundanzen. Im Linux-Dateisystem kommen Links besonders häufig in /bin- und /lib-Verzeichnissen vor. (Sehen Sie sich beispielsweise das Ergebnis des Kommandos ls -l /usr/bin an!)

Am einfachsten sind Links anhand eines Beispiels zu verstehen: Angenommen, im Verzeichnis test befindet sich die Datei abc; durch das Kommando ln abc xyz wird scheinbar eine neue Datei xyz erstellt. In Wahrheit sind aber abc und xyz nur zwei Verweise auf ein und dieselbe Datei. Die einzige Möglichkeit, das zu überprüfen, bietet das Kommando ls mit der Option -l. Es gibt in der zweiten Spalte an, wie viele Links auf eine bestimmte Datei zeigen – im vorliegenden Beispiel also 2. Wenn zusätzlich die Option -i verwendet wird, gibt ls auch den Inode der Datei an, der bei Links identisch ist. Inodes sind interne Identifikationsnummern des Dateisystems.

user$ ls -li 59293 -rw-r--r-- 1 root root 1004 Oct 4 16:40 abc user$ ln abc xyz user$ ls -li 59293 -rw-r--r-- 2 root root 1004 Oct 4 16:40 abc 59293 -rw-r--r-- 2 root root 1004 Oct 4 16:40 xyz

Wenn Sie nun eine der beiden Dateien verändern (egal welche), ändert sich automatisch auch die andere Datei – weil es ja in Wirklichkeit nur eine einzige Datei gibt! Wenn Sie eine der beiden Dateien löschen, reduzieren Sie dadurch nur die Anzahl der Links.

Backup-Dateien von verlinkten Dateien sind problematisch

Wenn Sie fest verlinkte Dateien mit einem Texteditor bearbeiten, treten bisweilen seltsame Ergebnisse auf: Der Link zeigt nach dem ersten Speichern auf die Backup-Datei und beim zweiten Speichern ins Leere.

Der Grund: Manche Editoren erzeugen beim Speichern eine Backup-Datei, indem sie die vorhandene Datei umbenennen, also beispielsweise abc in abc~. Die geänderte Datei wird vollkommen neu angelegt, erhält einen neuen Inode und ist damit frei von Links. Abhilfe: Verwenden Sie symbolische Links.

Linux kennt zwei Formen von Links. Das obige Beispiel hat feste Links (Hardlinks) vorgestellt, wie sie standardmäßig durch das Kommando ln erzeugt werden. Wird ln dagegen mit der Option -s verwendet, erzeugt das Kommando symbolische Links. Symbolische Links werden manchmal auch weiche Links oder Softlinks genannt. Sie haben den Vorteil, dass sie innerhalb des Dateisystems von einer physikalischen Festplatte auf eine andere verweisen können und dass sie nicht nur auf Dateien, sondern auch auf Verzeichnisse angewandt werden können. Beides ist mit festen Links normalerweise nicht möglich. Einen Sonderfall stellen feste Links auf Verzeichnisse dar, die zwar möglich sind, aber nur von root erstellt werden können.

Durch ls wird bei symbolischen Links angezeigt, wo sich die Ursprungsdatei befindet. Es wird allerdings kein Zähler verwaltet, der angibt, von wie vielen Stellen auf die Ursprungsdatei verwiesen wird.

Intern besteht der Unterschied zwischen festen und symbolischen Links darin, dass im einen Fall der Inode, im anderen Fall der Dateiname oder (bei Links über ein Verzeichnis hinaus) die Pfadangabe gespeichert wird.

user$ ln -s abc efg user$ ls -li 59293 -rw-r--r-- 2 root root 1004 Oct 4 16:40 abc 59310 lrwxrwxrwx 1 root root 3 Oct 4 16:52 efg -> abc 59293 -rw-r--r-- 2 root root 1004 Oct 4 16:40 xyz

Tipp

Bevor Sie einen symbolischen Link einrichten, sollten Sie immer in das Verzeichnis wechseln, das den Link enthalten wird. Andernfalls kann es passieren, dass der Link nicht dorthin zeigt, wohin Sie es erwarten.

Symbolische Links verhalten sich ein wenig anders als feste Links. Das Löschen der Ursprungsdatei (also z.B. abc aus dem vorigen Beispiel) verändert den Link auf diese Datei nicht, efg verweist jetzt aber auf eine gar nicht vorhandene Datei. Wird dagegen der symbolische Link gelöscht, hat das keinen Einfluss auf die Ursprungsdatei.

Symbolische Links können nicht nur für Dateien, sondern auch für Verzeichnisse erstellt werden. Das kann einige Verwirrung stiften, weil durch einen symbolischen Link ganze Verzeichnisbäume scheinbar verdoppelt werden. In Wirklichkeit stellt der Verzeichnis-Link aber nur einen zusätzlichen Pfad zu denselben Dateien und Unterverzeichnissen dar.

Generell sollten Sie versuchen, möglichst keine absoluten, sondern nur relative Pfadangaben in Links zu verwenden. Damit vermeiden Sie Probleme, die sich beim Mounten von Verzeichnissen per NFS oder beim Verschieben von Verzeichnissen ergeben können.

Feste Links versus symbolische Links

Sowohl symbolische als auch feste Links haben Vorteile. Symbolische Links sind einfacher in der Handhabung. Dafür verbrauchen feste Links weniger Speicher und sind schneller.