|
|
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| '''topic''' kurze Beschreibung
| |
| == Beschreibung ==
| |
| == Installation ==
| |
| == Anwendung ==
| |
| == Syntax ==
| |
| === Optionen ===
| |
| === Parameter ===
| |
| === Umgebungsvariablen ===
| |
| === Exit-Status ===
| |
| == Konfiguration ==
| |
| === Dateien ===
| |
| == Sicherheit ==
| |
| == Dokumentation ==
| |
| === RFC ===
| |
| === Man-Pages ===
| |
| === Info-Pages ===
| |
| == Siehe auch ==
| |
| == Links ==
| |
| === Projekt ===
| |
| === Weblinks ===
| |
| === Einzelnachweise ===
| |
| <references />
| |
| == Testfragen ==
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 1''
| |
| <div class="mw-collapsible-content">'''Antwort1'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 2''
| |
| <div class="mw-collapsible-content">'''Antwort2'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 3''
| |
| <div class="mw-collapsible-content">'''Antwort3'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 4''
| |
| <div class="mw-collapsible-content">'''Antwort4'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 5''
| |
| <div class="mw-collapsible-content">'''Antwort5'''</div>
| |
| </div>
| |
|
| |
|
| | | [[Kategorie:Linux/Datei/Link]] |
| | |
| = TMP =
| |
| == Harte und symbolische Links ==
| |
| Links sind eine Spezialität von Unix-Dateisystemen, die gerne und häufig verwendet werden.
| |
| * Der Umgang mit ihnen ist eine wichtige und manchmal etwas verkopfte Angelegenheit, die ein Systemverwalter sicher beherrschen muss.
| |
| * Unix und Linux unterscheiden zwischen Hardlinks (direkte Links) und Symlinks (symbolische Links).
| |
| * Die Eigenschaften dieser beiden Typen von Links sowie die Techniken, um sie anzulegen bzw. mit ihnen umzugehen sind Inhalt dieses Kapitels.
| |
| | |
| | |
| '''ln''' steht für '''l'''i'''n'''k und erzeugt eine Verknüpfung zu einer Datei oder einem Verzeichnis. Man kann danach auf eine Datei nicht nur über ihren ursprünglichen Namen bzw. Pfad, sondern auch über den Namen des Links zugreifen.
| |
| | |
| * Dies ist zum Beispiel nützlich, wenn ein Programm eine bestimmte Programmbibliothek verlangt, die veraltet ist. Man kann nun einfach eine Verknüpfung mit dem Namen der veralteten Bibliothek auf die installierte Version setzten.
| |
| | |
| * Man unterscheidet zwischen Hardlinks und symbolischen (oder Soft-) Links, die zwar in etwa dasselbe bewirken, aber technisch völlig unterschiedlich realisiert sind. Symbolische Links (Verknüpfungen) können nicht nur auf der Kommandozeile (Terminal), sondern beispielsweise mit den Dateimanagern von GNOME ([http://wiki.ubuntuusers.de/Nautilus#Mausaktionen Nautilus]) und KDE ([http://wiki.ubuntuusers.de/Dolphin#Verknuepfungen-erstellen Dolphin]) erstellt werden.
| |
| | |
| * Aber auch andere [http://wiki.ubuntuusers.de/Dateimanager Dateimanager] können ''"Symlinks"'' erstellen, nur ist diese Funktion im Kontextmenü als ''"Senden an -> Desktop / Arbeitsfläche usw."'' versteckt.
| |
| | |
| == Hardlinks ==
| |
| * Ein Hardlink ist einfach ein Verzeichniseintrag mit einem Namen, der auf eine Datei zeigt. Jede Datei hat immer mindestens einen Hardlink, denn ansonsten könnte man sie im Dateisystem nicht finden.
| |
| | |
| * Auch die Verzeichniseinträge '''.''' und '''..''' sind in Wirklichkeit Hardlinks, die auf das aktuelle bzw. das übergeordnete Verzeichnis zeigen. Ein Verzeichnis hat also immer mindestens zwei Hardlinks, nämlich den eigentlichen Namen und '''.''', und zusätzlich noch einen pro untergeordnetem Verzeichnis. (Je ein '''..''' pro Verzeichnis.)
| |
| | |
| * Für normale Operationen wie das Erstellen eines Verzeichnisses oder einer Datei benötigt man natürlich nicht den ln-Befehl.
| |
| | |
| * Dieser wird nur verwendet, um zusätzliche Links zu erzeugen. Wie viele Hardlinks aktuell auf eine Datei oder ein Verzeichnis zeigen, kann man der zweiten Spalte einer [http://wiki.ubuntuusers.de/ls ls -l]-Ausgabe entnehmen.
| |
| | |
| * Diese verschiedenen Links sind exakt gleichwertig und es ist völlig unerheblich, welcher zuerst da war. Änderungen an Inhalt oder Datei-Attributen wirken sich auf alle Links aus. (Weil es sich ja tatsächlich um exakt dieselbe Datei handelt). Erst wenn alle Links auf eine Datei gelöscht wurden, ist die Datei wirklich gelöscht.
| |
| | |
| * Einen gravierenden Nachteil haben Hardlinks allerdings. Auf Grund der Technik, die dahinter steckt, ist es nicht möglich Hardlinks über die Grenzen von Dateisystemen hinweg einzusetzen.
| |
| | |
| * Um sich nicht immer Gedanken darüber machen zu müssen, ob das Ziel vielleicht auf einem anderen Dateisystem liegen könnte, werden deswegen fast ausschließlich "symbolische Verknüpfungen" genutzt.
| |
| | |
| * Das Erzeugen von Hardlinks auf Verzeichnisse ist sogar ganz verboten, weil sonst die Gefahr eines Zirkelschlusses bestünde.
| |
| | |
| * In einem Unix-Dateisystem ist ein Dateiname nur ein Verzeichniseintrag, der in einem Verzeichnis gespeichert ist.
| |
| | |
| * Neben diesem Namen ist immer auch ein Verweis auf die Inode gespeichert, die dann die eigentlichen Eigenschaften (Eigentümer, Gruppenmitgliedschaft, Zugriffsrechte, usw.) der Datei und ihre physikalischen Speicheradressen auf der Platte enthält.
| |
| | |
| * Dieses Prinzip wurde auf den Seiten über [http://www.linux-praxis.de/lpic1/lpi101/inode.html Inodes] und über das [http://www.linux-praxis.de/lpic1/lpi101/ext2.html EXT2 Dateisystem] bereits umfassend dargestellt.
| |
| | |
| * Ein Hardlink ist nichts anderes, als ein neuer Verzeichniseintrag auf eine schon bestehende Inode. Also genau genommen ein zweiter Dateiname für eine Datei.
| |
| | |
| * Weil die Zugriffsrechte, Eigentümer usw. ja in der Inode stehen, haben alle Hardlinks einer Datei die selben solchen Attribute.
| |
| | |
| * Wenn ein oder mehrere Hardlinks auf eine Datei zeigen, so ist nicht mehr zu unterscheiden, welcher davon das Original und welche die Links sind. Es handelt sich ja einfach nur um Namenseinträge, die auf die selbe Inode zeigen.
| |
| | |
| * Das heißt auch, dass Hardlinks immer noch gültig sind, wenn die Datei, auf die sie zeigen gelöscht wurde. Es wurde ja eben nicht die Datei gelöscht, sondern nur einer ihrer Namen. Solange noch weitere Namen existieren, wird die Datei nicht physikalisch gelöscht.
| |
| | |
| * Die Ausgabe des ls -l Kommandos zeigt für jede Datei gleich nach dem Zugriffsmodus die Anzahl der Hardlinks (also der Namenseinträge), die diese Datei besitzt.
| |
| | |
| <u>'''1'''</u> root root 4326 Apr 8 15:02 datei1.txt
| |
| -rw-r--r-- <span ><u>'''5'''</u> root root 1578 Apr 8 15:02 datei2.txt
| |
| | |
| * Auch hier wird nicht zwischen Original und Link unterschieden (geht ja eben auch gar nicht) so dass eine Datei mit nur einem Namen hier eine 1 anzeigt.
| |
| | |
| * Die zweite Datei des obigen Beispiels hat also 5 Namen, das könnte bedeuten, dass die Datei erstellt wurde und anschließend vier Hardlinks auf sie erstellt wurden. Insgesamt existieren also 5 Namenseinträge für diese Datei.
| |
| | |
| * Da die Hardlinks sozusagen innerhalb der Mechanismen eines Dateisystems arbeiten, indem sie eigentlich nur Verweise auf schon bestehende Inodes sind, arbeiten diese Links nur innerhalb der Grenzen eines Dateisystems also einer Partition.
| |
| | |
| * Es ist also nicht möglich, Hardlinks auf einer zweiten Partition zu erstellen, die auf eine Datei zeigen, die auf der ersten Partition liegt!
| |
| | |
| * Eine weitere Einschränkung von Hardlinks ist, dass es nicht möglich ist, Hardlinks auf Verzeichnisse zu legen. Es existiert zwar die Option -d (oder -F oder --directory) des Befehls ln, die die Fähigkeit erlauben soll, auf allen Linux-Dateisystemen ist dieses Feature aber verboten.
| |
| | |
| == Identifikation von Hardlinks ==
| |
| * Wie oben schon erwähnt, gibt es keine Möglichkeit, zwischen Hardlink und Original zu unterscheiden, weil es ja kein Original gibt, sondern nur mehrere Namen, die alle auf die gleiche Inode verweisen.
| |
| | |
| * Wenn wir nun herausfinden wollen, welche Dateinamen alle die selbe Inode verwenden, gibt es da durchaus eine Möglichkeit:
| |
| | |
| * Zunächst einmal müssen wir herausbekommen, welche Inode von unserer Datei überhaupt belegt wird. Das [http://www.linux-praxis.de/lpic1/manpages/ls.html ls]-Kommando bietet uns mit der Option -i die Möglichkeit, das zu erfahren. Ein ls -i gibt uns zu den Dateinamen die verwendeten Inode-Nummern mit aus.
| |
| | |
| * Dann können wir mit dem Programm [http://www.linux-praxis.de/lpic1/manpages/find.html find] nach allen Dateien suchen, die diese Inode-Nummer benutzen. Allerdings sollten wir das ausschließlich innerhalb der Partition tun, auf der die Datei liegt, die wir untersuchen. Denn zufälligerweise kann ja eine ganz andere Datei auf einem ganz anderen Dateisystem (also auf einer anderen Partition) die selbe Inode-Nummer benutzen.
| |
| | |
| * Spielen wir es einmal durch: Wir befinden uns im Verzeichnis /usr/local/data und das ls -l Kommando zeigt uns eine Datei mit Namen BEISPIEL.DAT folgendermaßen an:
| |
| | |
| -rw-r--r-- 5 root root 1895 Apr 8 15:02 BEISPIEL.DAT
| |
| | |
| * Aus der Angabe direkt nach dem Zugriffsmodus entnehmen wir, dass es insgesamt fünf Dateinamen gibt, die auf ein und dieselbe Inode verweisen. Also neben dieser Datei noch vier weitere. Zunächst müssen wir wissen, welche Inode diese Datei überhaupt benutzt. Dazu geben wir den Befehl
| |
| | |
| ls -i BEISPIEL.DAT
| |
| | |
| * ein und bekommen die folgende Ausgabe:
| |
| | |
| 92550 BEISPIEL.DAT
| |
| | |
| * Die benutzte Inode ist also die Inode Nummer 92550. Jetzt müssen wir herausbekommen, auf welcher Partition wir uns eigentlich befinden und wo sie im Verzeichnisbaum eingehängt ist. Wir geben den Befehl [http://www.linux-praxis.de/lpic1/manpages/df.html df] ohne weitere Parameter ein. Die Ausgabe lautet:
| |
| | |
| /dev/hda2 2071328 1047620 918484 53% /
| |
| /dev/hda5 3099108 1737192 1204484 59% /usr
| |
| /dev/hda6 2071296 767708 1198364 39% /opt
| |
| /dev/hda7 2071296 215212 1750860 11% /home
| |
| | |
| * Nachdem wir uns im Verzeichnis /usr/local/data befinden, können wir also aus dieser Ausgabe schließen, dass wir uns auf der Partition /dev/hda5 befinden und dass diese Partition ins Verzeichnis /usr gemountet ist.
| |
| | |
| * Jetzt rufen wir den [http://www.linux-praxis.de/lpic1/manpages/find.html find]-Befehl auf und weisen ihn an, ab dem Verzeichnis /usr alle Dateien zu suchen, die die Inode 92550 benutzen. Zusätzlich weisen wir ihn noch darauf hin, dass er nur dieses eine Dateisystem durchsuchen soll. Dazu kennt find die Option -xdev. Wir geben folgenden Befehl ein:
| |
| | |
| find /usr -xdev -inum 92550 -print
| |
| | |
| * Der Befehl find sucht ab dem Verzeichnis /usr aber nur innerhalb der Partition (-xdev) alle Dateien, die die Inode 92550 (-inum 92550) besitzen. Die gefundenen Dateien werden ausgegeben (-print). Die Anweisung -print hätten wir unter Linux auch weglassen dürfen, es ist hier die voreingestellte Aktion. Das Ergebnis sieht dann etwa wie folgt aus:
| |
| | |
| /usr/lib/Beispiel/Datei.txt
| |
| /usr/local/data/BEISPIEL.DAT
| |
| /usr/local/lib/Beispiel/Noch_eine
| |
| /usr/openwin/Hier_auch
| |
| /usr/src/abc
| |
| | |
| * Hätten wir dem find-Befehl statt der Aktion -print die Aktion -ls mitgegeben, die alle gefundenen Dateien im selben Format wie ls -dils ausgibt, dann hätten wir die folgende Ausgabe bekommen:
| |
| | |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/lib/Beispiel/Datei.txt
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/local/data/BEISPIEL.DAT
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/local/lib/Beispiel/Noch_eine
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/openwin/Hier_auch
| |
| 92550 5 -rw-r--r-- 1 root root 1895 Apr 8 15:02 /usr/src/abc
| |
| | |
| * Eine weitere Möglichkeit der Identifikation von Hardlinks wäre es, ein ls -ilR Kommando (langes Listing mit Inode-Nummern, rekursiv) auszuführen und dessen Ausgabe an [http://www.linux-praxis.de/lpic1/manpages/grep.html grep] weiterzuleiten. Grep würde dann nach der entsprechenden Inode-Nummer am Zeilenanfang suchen. Also für unser opiges Beispiel etwas in der Art:
| |
| | |
| ls -ilR /usr | grep "^ *92550"
| |
| | |
| * Das hat allerdings den Nachteil, dass wir nicht festlegen können, dass nur die Dateien innerhalb einer Partition gesucht werden. Zum anderen ist diese Art der Suche wesentlich langsamer als die mit dem find-Befehl.
| |
| | |
| == Symbolische Verknüpfungen ==
| |
| * Symbolische Verknüpfungen (oder "Softlinks") wurden geschaffen, um diese Unzulänglichkeit der Hardlinks zu umgehen. Sie funktionieren ähnlich wie die HTML-Links auf Webseiten.
| |
| | |
| * Ein symbolischer Link ist einfach eine kleine Datei bei der das l-Bit gesetzt ist, und die den Pfad des Zieles enthält. Dieser Pfad kann sowohl relativ ('''../anderes_verz/datei'''), als auch absolut ('''/usr/share/irgendwo/datei''') sein. In einer [http://wiki.ubuntuusers.de/ls ls -l] Auflistung wird das Ziel des Softlinks nach einem Pfeil (->) angezeigt.
| |
| | |
| * Symbolische Verknüpfungen sind, wie schon angedeutet, auch über Dateisystemgrenzen hinweg möglich, weswegen sie bevorzugt eingesetzt werden.
| |
| | |
| * Allerdings fehlt ihnen die direkte Verbindung zum Speicherplatz der Zieldatei. Wird diese gelöscht, so bleibt die Verknüpfung als "toter Link" zurück und zeigt von nun an ins Leere.
| |
| | |
| == Symbolische Links ==
| |
| * Die genannten Einschränkungen der Hardlinks (keine Links auf Verzeichnisse/ keine Links über die Dateisystemgrenze hinaus) können mit sogenannten ''symbolischen Links'' umgangen werden. Symbolische Links arbeiten nicht auf der Dateisystemebene, sondern sind einfach Dateien, die nichts anderes enthalten, als den Pfad zu der Datei (oder dem Verzeichnis), auf die sie zeigen.
| |
| | |
| * Damit sie als Links zu erkennen sind, haben sie einen eigenen Dateityp (l), der es dem Betriebssystem klar macht, dass es sich hier um einen Link und nicht um eine reguläre Datei handelt.
| |
| | |
| * Das ls -l Kommando zeigt einen symbolischen Link also als solchen an:
| |
| | |
| -rw-r--r-- 1 root root 276295 Apr 21 19:46 Datei1
| |
| lrwxrwxrwx 1 root root 6 Apr 21 19:46 Datei2 -> Datei1
| |
| | |
| * Sowohl an der Angabe des Dateityps (l, als auch am Dateinamen, dem ein Pfeilsymbol und das Ziel des Links folgt, ist ersichtlich, dass es sich hier um einen symbolischen Link handelt.
| |
| | |
| * Genauso ist ersichtlich, worauf der Link zeigt. Beim Hardlink konnten wir Original und Link nicht unterscheiden, beim symbolischen Link sind sie eindeutig unterscheidbar.
| |
| | |
| * Weil symbolische Links nicht auf der Ebene der Dateisysteme selbst arbeiten reagieren sie aber auch in anderen Beziehungen völlig anders, als die Hardlinks: * Wenn die Datei (oder das Verzeichnis), auf die ein symbolischer Link zeigt nicht mehr existiert (z.B. gelöscht wurde), dann zeigt der symbolische Link "ins Leere", der Link existiert zwar weiter, er funktioniert aber nicht mehr.
| |
| * Wird ein symbolischer Link mit einer relativen Pfadangabe erstellt und anschließend in ein anderes Verzeichnis kopiert, dann wird er womöglich nicht mehr weiter funktionieren, weil vom neuen Verzeichnis aus dieser Pfad nicht existiert.
| |
| | |
| * Andererseits sind die symbolischen Links nicht eingeschränkt, was die Grenzen eines Dateisystems angeht oder die Verwendung für Verzeichnisse.
| |
| | |
| == Das Programm ln ==
| |
| * Um Links anzulegen, existiert das Programm [http://www.linux-praxis.de/lpic1/manpages/ln.html ln]. Die Aufrufform ist einfach,
| |
| | |
| * ln [OPTION]... ZIEL [Verknüpfungsname]
| |
| | |
| * oder um mehrere Dateien in ein Verzeichnis zu verlinken:
| |
| | |
| * ln [OPTION]... Ziele... LINKVERZEICHNIS
| |
| | |
| * Wird das Programm ln ohne den Parameter -s oder --symbolic aufgerufen, so wird ein Hardlink erstellt, mit einem dieser beiden Optionsschaltern wird ein symbolischer Link erstellt.
| |
| | |
| * Wenn ein Hardlink erstellt wird, so muss die Datei, auf die der Link verweist existieren, wenn ein symbolischer Link erstellt wird, so gilt das nicht.
| |
| | |
| * Wird beim Aufruf von ln der Linkname weggelassen, so wird ein Link mit gleichem Namen wie die Datei im aktuellen Verzeichnis erzeugt. Das setzt aber natürlich voraus, dass die Datei nicht im aktuellen Verzeichnis liegt.
| |
| | |
| * Werden mehr als zwei Dateinamen angegeben (Datei und Link), so muss der letzte Parameter ein Verzeichnisname sein. In diesem Verzeichnis werden dann Links auf all die Dateien angelegt, die vor diesem letzten Parameter angegeben wurden.
| |
| | |
| * Normalerweise überschreibt das Programm ln keine Dateien, wenn ein Link angelegt werden soll, dessen Namen schon existiert. ln bietet aber eine Fülle von Optionen, die diese Eigenschaft ändert, inclusive der Frage der automatischen Umbenennung von überschriebenen Dateien.
| |
| | |
| == Dateien verknüpfen (ln) ==
| |
| '''ln''' (link) erzeugt einen Verzeichniseintrag einer existierenden Datei unter anderem Namen
| |
| | |
| '''ln''' [''Optionen''] ''Quelle'' [''Ziel'']
| |
| '''ln''' [''Optionen''] ''Quelle'' ... ''Zielverzeichnis''
| |
| | |
| * Jede Datei wird bei ihrer Erzeugung mit ihrem Namen in ein Verzeichnis eingetragen. Dieser Eintrag enthält außerdem einen Verweis auf eine Inode, in der die Zugriffsrechte auf die Datei, der Dateityp und gegebenenfalls die Nummern der belegten Datenblöcke eingetragen sind.
| |
| | |
| * Mit dem ln-Kommando wird ein neuer Eintrag in einem Verzeichnis angelegt, der auf die Inode einer existierenden Datei zeigt.
| |
| | |
| * Diese Art Link wird als `Hardlink' bezeichnet. Weil die Zugriffsrechte auf die Datei in der Inode bestimmt werden, sind die Zugriffsrechte auf alle Links einer Datei gleich.
| |
| | |
| * Sie müssen dem ln-Kommando nach den Optionen zuerst den Namen der existierenden Quelldatei(en) angeben und danach den Namen des gewünschten zusätzlichen Eintrags.
| |
| | |
| * Ist das letzte Argument des Aufrufs ein existierendes Verzeichnis, so werden alle als ''Quelle'' aufgelisteten Dateien unter dem gleichen Namen im ''Zielverzeichnis'' in diesem Verzeichnis eingetragen.
| |
| | |
| * Wird nur eine einzige Quelldatei ohne eine Zieldatei oder ein Zielverzeichnis benannt, so wird ein Link unter diesem Namen im aktuellen Verzeichnis angelegt.
| |
| | |
| * Hardlinks können nur auf dem Datenträger angelegt werden, auf dem sich die Datei (und damit die Inode) selbst befindet. Um Links über die Dateisystemgrenzen hinweg anlegen zu können, bietet Linux die Möglichkeit `symbolischer Links'.
| |
| | |
| * In diesen Links ist der absolute Pfad gespeichert, auf dem die gelinkte Datei gefunden werden kann. Ein Zugriff auf diese Datei wird dann vom Betriebssystem automatisch auf die gelinkte Datei umgelenkt.
| |
| | |
| * Im ext2fs können symbolische Links mit Pfadnamen bis zu einer Länge von 60 Zeichen in der Inode selbst gespeichert werden (fast symbolic link).
| |
| | |
| * In allen anderen Fällen wird für den Link ein Datenblock auf der Festplatte belegt.
| |
| | |
| * Normalerweise löscht ln keine existierenden Dateien. Es werden standardmäßig ``hardlinks'' angelegt. Links auf Verzeichnisse oder auf Dateien in anderen Dateisystemen können nur mit symbolischen Links realisiert werden.
| |
| | |
| * Gelegentlich verändert sich das Verhalten eines Programms, wenn es durch einen Link unter einem anderen Namen aufgerufen wird. (Das funktioniert natürlich nur, wenn diese Änderung im Programm vorgesehen ist.)
| |
| | |
| === Beispiele ===
| |
| * Im folgenden Beispiel wird eine Verknüpfung ("Verknüpfung_mit_Tagesplaner") im Home-Verzeichnis des Benutzers Benutzer zu einer Datei mit dem Namen "haupt.doc" auf dem Desktop erstellt:
| |
| | |
| ln -s /home/Benutzer/Dokumente/Tagesplaner/Aufgaben/haupt.doc /home/Benutzer/Arbeitsfläche/Verknüpfung_mit_Tagesplaner
| |
| | |
| * Weitere Beispiele zur praktischen Verwendung finden sich im Artikel [http://wiki.ubuntuusers.de/opt opt].
| |
| | |
| === Hinweis ===
| |
| * Wenn bei Erstellung eines symbolischen Links der erste Parameter ein relativer Pfad ist, ist dieser relativ zum zweiten Parameter (dem Link), nicht zu dem Ort, an dem man sich gerade befindet (da der Pfad dann als relativer Pfad gespeichert wird).
| |
| | |
| == Verknüpfung löschen ==
| |
| * Um eine Verknüpfung zu löschen, kann man * in einer Konsole den Befehl [http://wiki.ubuntuusers.de/rm rm]
| |
| * einen beliebigen [http://wiki.ubuntuusers.de/Dateimanager Dateimanager]
| |
| | |
| * verwenden.
| |
| | |
| == Tote Verknüpfungen aufspüren ==
| |
| * Folgender Befehl sucht im aktuellen Verzeichnis ('''.''') nach fehlerhaften Links:
| |
| | |
| * find -L . -type l
| |
| | |
| == mount --bind ==
| |
| * Eine weitere - allerdings eher selten genutzte - Möglichkeit, Daten an mehreren Orten im Dateisystem erscheinen zu lassen, bietet der Befehl [http://wiki.ubuntuusers.de/mount#Einzelne-Ordner-einbinden mount]: Mit
| |
| | |
| mount --bind /Pfad1/Verzeichnis1 /Pfad2/Verzeichnis2
| |
| | |
| (wobei Verzeichnis1 und Verzeichnis2 tatsächlich existieren müssen) erscheint im Dateimanager bis zum nächsten Systemstart ''anstelle'' des Inhalts von Verzeichnis2 der Inhalt von Verzeichnis1.
| |
| | |
| == Kopieren symbolischer Links ==
| |
| * Wenn ein symbolischer Link mit dem Befehl [http://www.linux-praxis.de/lpic1/manpages/cp.html cp] kopiert wird, ohne dass dazu bestimmte Optionen gegeben werden, so wird nicht etwa der Link kopiert, sondern die Datei, auf die der Link zeigt. Das Ergebnis (die Zieldatei) ist jetzt also kein Link, sondern eine reguläre Datei. Man spricht in diesem Zusammenhang von der Dereferenzierung eines Links.
| |
| | |
| * Dereferenzierung bedeutet, dass der Link zurückverfolgt wird, und durch das ausgetaucht wird, auf das er zeigt.
| |
| | |
| * Um das zu vermeiden, muss dem cp-Befehl eine spezielle Option mitgegeben werden, die diese Dereferenzierung unterbindet. Wenn wir also einen symbolischen Link als solchen kopieren wollen, das heißt wenn das Ziel der Kopieraktion wiederum ein Link sein soll, so müssen wir dem Kopierbefehl die Option -d oder --no-dereference mitgeben.
| |
| | |
| * Aber bitte Vorsicht walten lassen! Wenn ein symbolischer Link als Link kopiert wird, dann wird der Link genauso kopiert, wie er war. Falls er keine absolute, sondern eine relative Pfadangabe zu dem Objekt beinhaltet, auf das er verweist, so wird die Kopie genau die Selbe Pfadangabe haben. Es ist nicht gewährleistet, dass diese Angabe von der neuen Lokalität aus immer noch stimmt.
| |
| | |
| * Der cp-Befehl ist selbst auch in der Lage, Links zu erzeugen statt Dateien zu kopieren. Mit der Option -l erzeugt er Hardlinks statt Kopien und mit -s symbolische Links.
| |
| | |
| == Verzeichnis mit Hard-Links kopieren ==
| |
| * Wenn man versucht ein Verzeichnis mit Hard-Links einfach so zu kopieren, erstellt man für jede Datei eine neue im Zielverzeichnis, auch wenn im Original zwei Dateien auf die gleichen Daten auf der Festplatte zeigen (hard link).
| |
| | |
| * In meinem Fall hatte ich ein inkrementelles Backup gemacht, bei dem alle unveränderten Dateien nur “hart” mit der Datei aus dem letzten Backup verlinkt wurden, so habe ich jeweils einen Snapshot des so gesicherten Verzeichnisses ohne sehr viel Platz einzunehmen. Beim Versuch meine Backup-Platte auf eine Größere umzuziehen sagte er mir dann, dass mir ein paar TB an Platz fehlen.
| |
| | |
| * Die Lösung ist einfach: Hard-Links mit kopieren. Das mache ich mit dem gleichen Tool mit dem ich das Backup auch erstellt habe, rsync:
| |
| | |
| rsync -a -H -v /altePlatte/backup /neuePlatte/backup
| |
| | |
| * Die Optionen machen folgendes:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | -a
| |
| | | Ist eine zusammenfassung (fast) aller Optionen die man benötigt um ein Backup mit rsync zu machen
| |
| |-
| |
| | | -H
| |
| | | Der springende Punkt – sucht nach Hard-Links und stellt diese im Zielverzeichnis wieder her
| |
| |-
| |
| | | -v
| |
| | | Zeigt welche Datei gerade kopiert wird. Gibt mir ein besseres Gefühl, wenn ich nicht Stundenlang auf einen leeren Bildschirm gucke und einfach nur hoffe, dass im Hintergrund alles läuft.
| |
| |-
| |
| |}
| |
| * Vorsicht: die “-H”-Option benötigt ziemlich viel Speicher, weil rsync sich für jede Datei merken muss, wo ihre Daten liegen.
| |
| | |
| == Verwenden von Links zur Systemadministration ==
| |
| * In der Systemverwaltung werden Links auf vielfältige Weise eingesetzt. Dabei kommen sowohl Hard- als auch symbolische Links zur Anwendung. Ein paar Beispiele:
| |
| | |
| === Vermeidung versehentlichen Löschens mit Hardlinks ===
| |
| * Wichtige Systemdateien können an andere Orte gelinkt werden, wo sie sozusagen eine Versicherung gegen versehentliches Löschen bieten. Nehmen wir an, Sie erstellen ein Verzeichnis /etc2 und verlinken alle wichtigen Dateien in /etc mit Hardlinks in dieses Verzeichnis.
| |
| | |
| * Sollte jetzt eine Datei in /etc gelöscht werden, so steht sie uns immer noch in der aktuellsten Version in /etc2 zur Verfügung.
| |
| | |
| === Zentrale Verwaltung wichtiger Startdateien in den Userverzeichnissen ===
| |
| * Jeder User hat in seinem Home-Verzeichnis verschiedene Startdateien oder andere Konfigurationsdateien.
| |
| | |
| * Soll sichergestellt werden, dass alle User immer die gleichen Einstellungen besitzen, so könnten all diese Dateien Hardlinks auf einen Prototyp sein.
| |
| | |
| * Wenn der Systemverwalter jetzt für alle User eine Veränderung vornehmen will, so muss er nur eine dieser Dateien (etwa den Prototyp) verändern und alle Dateien der User sind mitverändert.
| |
| | |
| === Symbolische Links auf Verzeichnisse ===
| |
| * Wenn bestimmte Teile des Verzeichnisbaums ReadOnly gemountet sein sollen, aber andererseits
| |
| | |
| * Unterverzeichnisse dieser Teile beschreibbar sein müssen, so können diese Unterverzeichnisse symbolische Links auf andere Unterverzeichnisse sein, die nicht auf ReadOnly-gemounteten Partitionen liegen.
| |
| | |
| * Das /usr Verzeichnis wird z.B. gerne ReadOnly gemountet, enthält aber Verzeichnisse wie tmp oder spool, die beschreibbar sein müssen. Diese Verzeichnisse sind oft symbolische Links auf entsprechende Verzeichnisse unter /var. Dort sind diese Verzeichnisse tatsächlich beschreibbar.
| |
| | |
| == Optionen ==
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-b '''
| |
| | | sichert Dateien, anstatt sie zu löschen (mit Option -f)
| |
| |-
| |
| | | '''-d '''
| |
| | | unter Linux ohne Funktion
| |
| |-
| |
| | | '''-f oder --force'''
| |
| | | vorhandene Ziele entfernen
| |
| |-
| |
| | | '''-i oder --interactive'''
| |
| | | fragt vor dem Überschreiben nach
| |
| |-
| |
| | | '''-S ''Endung'' '''
| |
| | | setzt die Endung für die Sicherung von Dateien auf ''Endung''. Standardwert ist `~'. Die Endung kann auch mit der Umgebungsvariablen SIMPLE_BACKUP_SUFFIX bestimmt werden. Die Option -S hat Vorrang vor der Umgebungsvariablen.
| |
| |-
| |
| | | '''-s oder --symbolic'''
| |
| | | erzeugt eine symbolische Verknüpfung anstatt eines Hardlinks
| |
| |-
| |
| | | '''-v '''
| |
| | | gibt die Dateinamen auf den Bildschirm
| |
| |-
| |
| |}
| |
| * Die gleiche Funktionalität wie ln hat auch der Befehl [http://wiki.ubuntuusers.de/cp cp] in Verbindung mit den Optionen -l (Hardlink) oder -s (Softlink). Außerdem lassen sich Softlinks in den grafischen Dateimanagern durch Kopieren mit gleichzeitig gedrückten Tasten ⇧ und Strg einrichten.
| |
| | |
| * Der Anhang für Sicherheitskopien ist ~, außer wenn er --suffix oder SIMPLE_BACKUP_SUFFIX gesetzt wurde. Die Versionskontrolle kann mit --backup oder VERSION_CONTROL gesetzt werden. Mögliche Werte sind:
| |
| | |
| {| class="wikitable sortable"
| |
| |-
| |
| | | none, off
| |
| | | Niemals Sicherung erzeugen (selbst wenn --backup angegeben wurde)
| |
| |-
| |
| | | numbered, t
| |
| | | Erzeugen von nummerierten Sicherheitskopien
| |
| |-
| |
| | | existing, nil
| |
| | | Nummeriert wenn nummerierte Backups existieren, sonst einfach.
| |
| |-
| |
| | | Simple, never
| |
| | | Immer einfache Sicherheitskopien erzeugen
| |
| | |
| |-
| |
| |}
| |
| === OPTIONS ===
| |
| {| class="wikitable sortable"
| |
| |-
| |
| | | '''-c'''
| |
| | | convert absolute links (within the same filesystem) to relative links. This permits links to maintain their validity regardless of the mount point used for the filesystem -- a desirable setup in most cases. This option also causes any messy links to be cleaned up, and, if -s was also specified, then lengthy links are also shortened. Links affected by -c are prefixed with changed in the output.
| |
| |-
| |
| | | '''-d'''
| |
| | | causes dangling links to be removed.
| |
| |-
| |
| | | '''-o'''
| |
| | | fix links on other filesystems encountered while recursing. Normally, other filesystems encountered are not modified by symlinks.
| |
| |-
| |
| | | '''-r'''
| |
| | | recursively operate on subdirectories within the same filesystem.
| |
| |-
| |
| | | '''-s'''
| |
| | | causes lengthy links to be detected.
| |
| |-
| |
| | | '''-t'''
| |
| | | is used to test for what symlinks would do if -c were specified, but without really changing anything.
| |
| |-
| |
| | | '''-v'''
| |
| | | show all symbolic links. By default, relative links are not shown unless -v is specified.
| |
| | |
| |-
| |
| |}
| |
| | |
| == Siehe auch ==
| |
| # [[symlinks]]
| |
| | |
| [[Kategorie:Linux/Datei/Links]]
| |