UNIX Link: Zwei Namen, eine Datei
aus: Wie werde ich UNIX-Guru
und: UNIX-Das umfassende Handbuch
Willemers Informatik-Ecke
Eine Besonderheit im UNIX-Dateisystem ist die Möglichkeit, der eigentlichen Datei mehrere Namen zuzuordnen. Man spricht hier von Links (engl. Verbindungen). Links bieten die Möglichkeit, eine Datei unter verschiedenen Namen auftreten zu lassen oder dass eine Datei an einer ganz anderen Stelle liegen kann, als da, wo ihr Zugriff benötigt wird.

Der harte Link

Es können beliebig viele Links angelegt werden. Sie können (mit gewissen Einschränkungen) in verschiedenen Verzeichnissen liegen. Der Inhalt der Datei wird erst dann wirklich entfernt, wenn der letzte Link gelöscht wurde. Der Befehl, um einen solchen Link zu erzeugen, lautet

ln Originaldatei NeuerName
ln Originaldatei AnderesVerzeichnis

Im ersten Falle wird ein neuer Name angegeben, im zweiten Falle wird der gleiche Namen in einem anderen Verzeichnis eingetragen. Die Reihenfolge der Parameter entspricht dem cp. Zuerst wird die bereits existierende Quelle genannt und dann das zu erzeugende Zielobjekt. Mit dem Parameter -f kann ein bestehender gleicher Dateiname überschrieben werden. Beispiel: Wenn eine Datei namens hugo existiert, bewirkt der Befehl

ln hugo erna

dass hinterher scheinbar zwei Dateien existieren: hugo und erna. Statt aber eine Kopie zu besitzen, zeigen beide Einträge auf die gleiche Datei. Man merkt dies leicht, wenn man in einer der beiden eine Änderung durchführt und in der anderen nachschaut und die Änderung auch vorfindet. Beim Anzeigen der Dateien mit ls -l kann man bei solchen Dateien an der 2 erkennen, dass auf diese Datei zwei Einträge zeigen. Ansonsten unterscheidet sich hugo nicht von erna. Es ist auch egal, welche Datei zuerst gelöscht wird. Die Datei wird erst gelöscht, wenn der letzte Link gelöscht wird.

Nur auf gleichem Dateisystem

Der Link funktioniert in dieser Form nicht nur im gleichen Verzeichnis. Lediglich auf dem gleichen Dateisystem müssen sich die Dateien befinden. Das ist darin begründet, dass die Datei tatsächlich nur einmal da ist. Lediglich der Verzeichniseintrag wird dupliziert. Da aber ein Verzeichniseintrag nur auf eine Datei des gleichen Dateisystems zeigen kann, ist ein plattenübergreifender Link so nicht möglich.

Per Link steuern

Der Link offeriert auch die Möglichkeit, dass ein und dasselbe Programm unterschiedliche Aktionen durchführt, je nachdem wie es heißt. Dieser Effekt wird beispielsweise bei compress und uncompress benutzt. Beide Namen zeigen auf die gleiche Datei. Da ein UNIX-Programm beim Aufruf außer den Parametern auch den Namen erfährt, unter dem es aufgerufen wurde, kann compress feststellen, ob es unter dem Namen uncompress aufgerufen wurde und setzt dann einfach selbst die Option -d. Ferner ist es möglich, einen Datenbestand von mehreren Benutzern aktuell halten zu lassen, indem jeder Anwender einen Link auf die gleiche Datei hält. Beispielsweise können die .rhosts-Dateien, die den Zugriff von fremden Rechnern erlauben, auf diese Weise durch eine einzige Datei realisiert werden.

Der symbolische Link

Übergreift Dateisysteme

Neben dem harten Link gibt es noch den symbolischen Link. Dieser Link kann auch über Dateisystemgrenzen hinweggreifen. Er ist auch nicht auf Dateien beschränkt: er kann auch auf ein Verzeichnis zeigen. Allerdings hat er auch einen Haken: UNIX prüft nicht, ob die Datei, auf die der Link zeigt, auch wirklich existiert. UNIX achtet auch nicht darauf, wenn jemand eine Datei oder ein Verzeichnis entfernt, auf die ein symbolischer Link zeigt.

ln -s /etc/printcap myPrintCap

Textueller Verweis

Der symbolische Link myPrintCap im aktuellen Verzeichnis zeigt auf die /etc/printcap. Man kann leicht erkennen, was hinter dem symbolischen Link steckt, wenn man ls -l eingibt. Hier zeigt der Link X11 auf X11R6.

gaston> ls -l X11
lrwxrwxrwx    1 root     root        5 Mär 17  2001 X11 -> X11R6
gaston>

Den symbolischen Link kann man vereinfacht als eine Datei ansehen, die den Ort einer anderen Datei beinhaltet. Damit wird klar, dass der Link an jede Stelle des UNIX Verzeichnisbaumes zeigen kann, ganz gleich auf welchem Medium es sich befindet. Es ist aber auch einleuchtend, dass die Originaldatei nichts vom Link >>weiß<< und so entfernt werden kann, obwohl noch ein Link existiert. Der symbolische Link wird vor allem an zwei Stellen eingesetzt. Zum einen ist er hilfreich, wenn eine Platte droht vollzulaufen. Man kann Dateien eines gesamten Verzeichnisses oder auch einzelne Dateien auf ein freies Laufwerk auslagern und einen symbolischen Link auf diese Stelle an der Originalposition unterbringen. Das Verschwinden der Datei bleibt für (fast) alle Programme unsichtbar. Gern wird es auch eingesetzt, wenn man die Version einer Software dokumentieren will. Beispielsweise wird das Paket wollmilchsau zur Zeit in der Version 1.4 ausgeliefert. Dann installiert man sie im Verzeichnis /opt/wollmilchsau.v.1.4.german Um allerdings auf die Software zuzugreifen erstellt man einen symbolischen Link:

ln -s /opt/wollmilchsau.v.1.4.german /opt/wollmilchsau

Man kann später erkennen, dass die deutsche 1.4 installiert wurde. Man kann sogar die 1.5 installieren, ohne die Version 1.4 endgültig löschen zu müssen.

Symbolische Links speichern quasi die textuelle Beschreibung der Quelle. Anders ausgedrückt, merken sie sich den Pfadnamen, so wie er beim Anlegen des Links angegeben wurde. Es wird beim Anlegen nicht überprüft, ob der Link wirklich funktioniert. Entsprechend verschwindet der Link auch nicht, wenn das Ziel verschwindet, auf das er weist. Es ergeben sich darüber hinaus Stolperfallen, wenn nicht ein absoluter, sondern ein relativer Pfad als Ziel eines symbolischen Links angegeben wird. Im folgenden Beispiel liegt der zu erzeugende Link in einem Unterverzeichnis, in diesem Fall savedir/my20020105. Da aber das Quellverzeichnis relativ zur aktuellen Position steht, wird auch der relative Pfad abgelegt. Aus Sicht des symbolischen Link liegt aber das Verzeichnis my nicht in ../my, sondern in ../../my. Es gibt keine Fehlermeldung beim Erzeugen des Links, aber die erste Benutzung wird scheitern.

ln -s  ../my  savedir/my20020105 

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru.