Ln: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Die Seite wurde neu angelegt: Mit dem Programm ln erzeugt man einen Link auf eine Datei. Dabei unterscheidet man zwischen Hardlinks und symbolischen Links. Durch einen Hardlink erzeugt man einen n...
 
Tuxnix (Diskussion | Beiträge)
 
(15 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Mit dem Programm ln erzeugt man einen Link auf eine Datei.
{{SEITENTITEL:ln}}
Mit dem Programm {{ic|ln}} ist es möglich, ''Links'' auf Dateien zu erzeugen. Bei diesen Links wird zwischen ''Hardlinks'' und ''symbolischen Links'', auch ''Softlinks'' genannt, unterschieden.


Dabei unterscheidet man zwischen Hardlinks und symbolischen Links.
== Hardlinks ==
Durch einen Hardlink erzeugt man einen neuen Namen an einem neuen Ort im Dateisystem für eine Datei, so dass man auf die Datei sowohl vom alten Ort, als auch vom neuen gleichermaßen erreichen kann, da die Einträge im Dateisystem nur Verweise auf den Speicherort auf der Festplatte sind.
 
Bei mehreren Hardlinks auf einen Speicherbereich der Festplatte kann man nicht mehr sagen, welcher Link die „Originaldatei“ ist, da alle Links gleichberechtigt auf die Daten auf der Festplatte verweisen. Wenn der letzte vorhandene Hardlink entfernt wird, ist der Speicherort auf der Festplatte nicht mehr ohne weiteres erreichbar, umgangssprachlich ist dies das ''Löschen einer Datei''.
 
Hardlinks werden wie folgt gesetzt:


Durch einen Hardlink erzeugt man einen neuen Namen an einem neuen Ort im Dateisystem für eine Datei, so dass man auf die Datei sowohl vom alten Ort, als auch vom neuen gleichermaßen erreichen kann, da die Einträge im Dateisystem nur Verweise auf den Speicherort auf der Festplatte sind.
$ ln zieldatei linkname
 
Man kann keine Hardlinks auf Verzeichnisse setzen, da dies bei Programmen, die rekursiv das Dateisystem durchlaufen (z.B. eine Suche) zu einer Endlosschleife führen kann.
 
Wenn man wissen möchte, wie viele Hardlinks, auf eine Datei verweisen, kann man sich des Befehls {{ic|ls -l}} bedienen. Die Angabe hinter den Zugriffsrechtsinformationen gibt die Anzahl der Hardlinks auf die entsprechende Datei an.
 
{{hc|ls -l|[…]
-rw-r--r-- 2 user group 4,0K 16. Dez 13:44 file1
-rw-r--r-- 2 user group 4,0K 16. Dez 13:44 file2}}
 
Im Beispiel verweisen also zwei Hardlinks auf die Datei {{ic|file1}}. Dies ist ein mal die Datei {{ic|file1}} selbst, sowie die Datei {{ic|file2}}, welche ein Hardlink auf den selben Teil der Festplatte darstellt. {{ic|file2}} verfügt ebenfalls über zwei Hardlinks, nämlich {{ic|file2}} selbst, sowie {{ic|file1}}. Da es keinen „Original-Hardlink“ gibt, werden alle Hardlinks als „dieser und die anderen“ gezählt.
 
Wenn man jetzt ein {{ic|file3}} als Hardlink auf {{ic|file1}} oder {{ic|file2}} erstellen würde, hätten alle drei Dateien die Angabe von drei Hardlinks. Da Hardlinks direkt auf die jeweiligen Positionen auf der Festplatte verweisen, ist es unwichtig, ob die Datei, auf die man den Hardlink erstellt hat, im Nachhinein gelöscht wird.
 
== Softlinks ==
Ein symbolischer Link hingegen ist ein Zeiger auf einen anderen Dateisystemeintrag und nicht auf die Position der Datei auf der Festplatte. Bei einem {{ic|ls -l}} wird das Linkziel angezeigt, zudem werden Softlinks nicht gezählt.
 
{{hc|ls -l|[…]
-rw-r--r-- 1 user group  551 21. Nov 11:17 file1
lrwxrwxrwx 1 user group    2 18. Dez 11:59 file2 -> file1}}
 
Im Beispiel ist {{ic|file2}} ein Softlink auf {{ic|file1}}. Wenn man {{ic|file1}} nun löschen würde, würde der Softlink nach wie vor noch bestehen und auf die Datei verweisen, allerdings gibt es die Datei nicht mehr, und der Link ist ungültig. Softlinks können im Gegensatz zu Hardlinks auch auf Verzeichnisse erstellt werden. Softlinks werden wie folgt erstellt:
 
$ ln -s zieldatei linkname


Ein symbolischer Link hingegen ist ein Zeiger auf einen anderen Dateisystemeintrag und nicht auf die Position der Datei auf der Festplatte. Entsprechend kann ein symbolischer Link auch ungültig sein.
Neben dem Parameter {{ic|-s}} gibt es noch weitere Möglichkeiten, das Erstellen der Links zu beeinflussen. Zudem kann man sowohl relative, als auch absolute Zieldateiangaben machen. Wenn der Softlink dann verschoben wird, kann er ungültig werden, daher ist zu empfehlen, immer absolute Quelldateiangaben zu machen. Bei Hardlinks ist dies jedoch irrelevant.


Es ist zu beachten, dass man keine Hardlinks auf Verzeichnisse setzen kann, da dies bei Programmen, die rekusiv das Dateisystem durchlaufen, zu einer Endlosschleife führen kann.
[[Kategorie:Konsole]]
Außerdem gilt für Hardlinks, dass man mit dem Befehl rm erst dann die eigentliche Datei löscht, wenn der letzte Hardlink entfernt wurde. Um Anzuzeigen, wie viele Hardlinks auf eine Datei zeigen, kann man den Befehl ls -l auf eine Datei anwendet. Die Zahl direkt nach den CHMOD-Rechten gibt dann an, wie viele Hardlinks auf die Datei verweisen.
[[Kategorie:Befehle]]
[[Kategorie:Grundlagen]]

Aktuelle Version vom 1. April 2017, 15:20 Uhr

Mit dem Programm ln ist es möglich, Links auf Dateien zu erzeugen. Bei diesen Links wird zwischen Hardlinks und symbolischen Links, auch Softlinks genannt, unterschieden.

Hardlinks

Durch einen Hardlink erzeugt man einen neuen Namen an einem neuen Ort im Dateisystem für eine Datei, so dass man auf die Datei sowohl vom alten Ort, als auch vom neuen gleichermaßen erreichen kann, da die Einträge im Dateisystem nur Verweise auf den Speicherort auf der Festplatte sind.

Bei mehreren Hardlinks auf einen Speicherbereich der Festplatte kann man nicht mehr sagen, welcher Link die „Originaldatei“ ist, da alle Links gleichberechtigt auf die Daten auf der Festplatte verweisen. Wenn der letzte vorhandene Hardlink entfernt wird, ist der Speicherort auf der Festplatte nicht mehr ohne weiteres erreichbar, umgangssprachlich ist dies das Löschen einer Datei.

Hardlinks werden wie folgt gesetzt:

$ ln zieldatei linkname

Man kann keine Hardlinks auf Verzeichnisse setzen, da dies bei Programmen, die rekursiv das Dateisystem durchlaufen (z.B. eine Suche) zu einer Endlosschleife führen kann.

Wenn man wissen möchte, wie viele Hardlinks, auf eine Datei verweisen, kann man sich des Befehls ls -l bedienen. Die Angabe hinter den Zugriffsrechtsinformationen gibt die Anzahl der Hardlinks auf die entsprechende Datei an.

ls -l
[…]
-rw-r--r-- 2 user group 4,0K 16. Dez 13:44 file1
-rw-r--r-- 2 user group 4,0K 16. Dez 13:44 file2

Im Beispiel verweisen also zwei Hardlinks auf die Datei file1. Dies ist ein mal die Datei file1 selbst, sowie die Datei file2, welche ein Hardlink auf den selben Teil der Festplatte darstellt. file2 verfügt ebenfalls über zwei Hardlinks, nämlich file2 selbst, sowie file1. Da es keinen „Original-Hardlink“ gibt, werden alle Hardlinks als „dieser und die anderen“ gezählt.

Wenn man jetzt ein file3 als Hardlink auf file1 oder file2 erstellen würde, hätten alle drei Dateien die Angabe von drei Hardlinks. Da Hardlinks direkt auf die jeweiligen Positionen auf der Festplatte verweisen, ist es unwichtig, ob die Datei, auf die man den Hardlink erstellt hat, im Nachhinein gelöscht wird.

Softlinks

Ein symbolischer Link hingegen ist ein Zeiger auf einen anderen Dateisystemeintrag und nicht auf die Position der Datei auf der Festplatte. Bei einem ls -l wird das Linkziel angezeigt, zudem werden Softlinks nicht gezählt.

ls -l
[…]
-rw-r--r-- 1 user group  551 21. Nov 11:17 file1
lrwxrwxrwx 1 user group    2 18. Dez 11:59 file2 -> file1

Im Beispiel ist file2 ein Softlink auf file1. Wenn man file1 nun löschen würde, würde der Softlink nach wie vor noch bestehen und auf die Datei verweisen, allerdings gibt es die Datei nicht mehr, und der Link ist ungültig. Softlinks können im Gegensatz zu Hardlinks auch auf Verzeichnisse erstellt werden. Softlinks werden wie folgt erstellt:

$ ln -s zieldatei linkname

Neben dem Parameter -s gibt es noch weitere Möglichkeiten, das Erstellen der Links zu beeinflussen. Zudem kann man sowohl relative, als auch absolute Zieldateiangaben machen. Wenn der Softlink dann verschoben wird, kann er ungültig werden, daher ist zu empfehlen, immer absolute Quelldateiangaben zu machen. Bei Hardlinks ist dies jedoch irrelevant.