|
|
Links: Zwei Namen, eine DateiEine 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 LinkEs 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 Fall wird ein neuer Name angegeben, im zweiten Fall wird der
gleiche Name in einem anderen Verzeichnis eingetragen.
Die Reihenfolge der Parameter entspricht denen von
ln hugo erna
dass hinterher scheinbar zwei Dateien existieren: hugo und
erna. Es ist aber keine Kopie entstanden,
sondern beide Einträge zeigen auf die gleiche Datei. Sie können dies leicht
überprüfen, indem Sie in der einen Datei eine Änderung durchführen
und in der anderen nachschauen. Sie werden die Änderung auch in ihr vorfinden.
Sie erkennen, dass für eine Datei ein oder mehrere Links existieren, wenn Sie
sich den Dateieintrag mit
gaston> ls -l hugo erna emil -rw-r-r- 1 arnold users 18 Jul 20 01:51 emil -rw-r-r- 2 arnold users 18 Jul 20 01:51 erna -rw-r-r- 2 arnold users 18 Jul 20 01:51 hugo gaston> Man kann an der 2 erkennen, dass auf diese Datei zwei Einträge zeigen. Es ist auch egal, welche Datei zuerst gelöscht wird. Der Dateiinhalt verschwindet erst, wenn der letzte Link gelöscht wird.
Mit dem Parameter
gaston> ln -f hugo emil gaston> ls -l hugo erna emil -rw-r-r- 3 arnold users 18 Jul 20 01:51 emil -rw-r-r- 3 arnold users 18 Jul 20 01:51 erna -rw-r-r- 3 arnold users 18 Jul 20 01:51 hugo gaston> Der Link funktioniert in dieser Form nicht nur im gleichen Verzeichnis. Die Dateien müssen sich lediglich auf demselben Dateisystem befinden. Das liegt daran, 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. 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 (siehe S. compress). 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 (siehe S. main), 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 (siehe S. rhosts), auf diese Weise durch eine einzige Datei realisiert werden.
Der symbolische LinkNeben dem harten Link gibt es noch den symbolischen Link. Dieser Link kann auch über Dateisystemgrenzen hinweg greifen. 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, ob jemand eine Datei oder ein Verzeichnis entfernt, auf die bzw. das ein symbolischer Link zeigt.
ln -s /etc/printcap myPrintCap
Der symbolische Link myPrintCap im aktuellen Verzeichnis zeigt auf
die Datei /etc/printcap.
Man kann leicht erkennen, was hinter dem symbolischen Link steckt, wenn man
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 auf jede Stelle des UNIX-Verzeichnisbaums 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 vollzulaufen droht. Man kann die 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. Der symbolische Link wird auch gern eingesetzt, wenn man die Version einer Software dokumentieren will. Beispielsweise wird das Paket wollmilchsau zurzeit in der deutschen Version 1.4 ausgeliefert. Dann installiert man es 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 Version 1.4 installiert wurde. Man kann sogar die Version 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 in savedir/my20020105.
Da aber das Quellverzeichnis relativ zur aktuellen Position steht, wird auch
der relative Pfad abgelegt. Aus Sicht des symbolischen Links 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
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|