104.6 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
104 Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard |
Lernziel: |
104.6 Symbolische und Hardlinks anlegen und ändern |
Lektion: |
1 von 1 |
Einleitung
Unter Linux erhalten einige Dateien eine besondere Behandlung, entweder aufgrund des Speicherortes, wie z. B. temporäre Dateien, oder aufgrund der Art und Weise, wie sie mit dem Dateisystem interagieren, wie z. B. Links. In dieser Lektion erfahren Sie, was Links sind und Sie diese verwalten.
Verstehen von Links
Wie bereits erwähnt, wird unter Linux alles wie eine Datei behandelt. Aber es gibt eine spezielle Art von Datei, die Link genannt wird, und es gibt zwei Arten von Links auf einem Linux-System:
- Symbolische Links
-
Auch soft links genannt, verweisen auf den Pfad einer anderen Datei. Wenn Sie die Datei löschen, auf die der Link zeigt (genannt Ziel), existiert der Link immer noch, aber er “funktioniert nicht mehr”, da er nun auf “nichts” zeigt.
- Harte Links
-
Stellen Sie sich einen Hardlink als einen zweiten Namen für die Originaldatei vor. Sie sind keine Duplikate, sondern ein zusätzlicher Eintrag im Dateisystem, der auf dieselbe Stelle (Inode) auf der Platte zeigt.
Tip
|
Eine Inode ist eine Datenstruktur, die Attribute für ein Objekt (wie eine Datei oder ein Verzeichnis) in einem Dateisystem speichert. Zu diesen Attributen gehören Berechtigungen, Eigentümer und auf welchen Blöcken der Festplatte die Daten für das Objekt gespeichert sind. Stellen Sie sich das wie einen Eintrag in einem Index vor, daher der Name, der von “Indexknoten (index node)” stammt. |
Arbeiten mit harten Links
Harte Links erstellen
Der Befehl zum Erstellen eines harten Links unter Linux lautet ln
. Die grundlegende Syntax stellt sich wie folgt dar:
$ ln TARGET LINK_NAME
Das TARGET
(Ziel) muss bereits existieren (das ist die Datei, auf die der Link zeigen wird), und wenn sich das Ziel nicht im aktuellen Verzeichnis befindet oder wenn Sie den Link an anderer Stelle erstellen wollen, müssen Sie den vollständigen Pfad dazu angeben. Zum Beispiel, der Befehl:
$ ln target.txt /home/carol/Documents/hardlink
erstellt eine Datei namens hardlink
im Verzeichnis /home/carol/Documents/
, die mit der Datei target.txt
im aktuellen Verzeichnis verknüpft ist.
Wenn Sie den letzten Parameter (LINK_NAME
) weglassen, wird ein Link mit dem gleichen Namen wie das Ziel im aktuellen Verzeichnis erstellt.
Verwaltung harter Links
Harte Links sind Einträge im Dateisystem, die unterschiedliche Namen haben, aber auf die gleichen Daten auf der Festplatte zeigen. Alle solchen Namen sind gleich und können verwendet werden, um auf eine Datei zu verweisen. Wenn Sie den Inhalt eines der Namen ändern, ändert sich der Inhalt aller anderen Namen, die auf diese Datei zeigen, da alle diese Namen auf dieselben Daten verweisen. Wenn Sie einen der Namen löschen, funktionieren die anderen Namen weiterhin.
Dies geschieht, weil beim “Löschen” einer Datei die Daten nicht wirklich von der Festplatte gelöscht werden. Das System löscht lediglich den Eintrag in der Dateisystemtabelle, der auf den Inode verweist, der den Daten auf der Platte entspricht. Wenn Sie aber einen zweiten Eintrag haben, der auf denselben Inode zeigt, können Sie immer noch auf die Daten zugreifen. Stellen Sie sich das wie zwei Straßen vor, die auf denselben Punkt zulaufen. Selbst wenn Sie eine der Straßen blockieren oder umleiten, können Sie das Ziel immer noch über die andere Straße erreichen.
Sie können dies mittels des Parameters -i
von ls
überprüfen. Betrachten Sie den folgenden Inhalt eines Verzeichnisses:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Die Zahl vor den Berechtigungen ist die Inodenummer. Sehen Sie, dass sowohl die Datei hardlink
als auch die Datei target.txt
die gleiche Nummer besitzen (3806696
)? Das liegt daran, dass die eine Datei ein Hardlink der Anderen ist.
Aber welches ist das Original und welches ist der Link? Das kann man nicht sagen, denn in der Praxis sind beide gleich.
Beachten Sie, dass jeder harte Link, der auf eine Datei zeigt, die Linkanzahl der Datei erhöht. Dies ist die Zahl direkt nach den Berechtigungen in der Ausgabe von ls -l
. Standardmäßig hat jede Datei eine Linkanzahl von 1
(Verzeichnisse haben eine Anzahl von 2
), und jeder harte Link auf sie erhöht die Anzahl um eins. Das ist also der Grund für die Linkanzahl von 2
bei den Dateien in der obigen Auflistung.
Im Gegensatz zu symbolischen Links können harte Links nur auf Dateien erstellt werden, und sowohl der Link als auch das Ziel müssen sich im selben Dateisystem befinden.
Verschieben und Entfernen von harten Links
Da harte Links wie normale Dateien behandelt werden, können sie mit rm
gelöscht und mit mv
umbenannt oder im Dateisystem verschoben werden. Und da ein harter Link auf denselben Inode des Ziels zeigt, kann er frei verschoben werden, ohne dass man befürchten muss, den Link zu zerstören
.
Symbolische Links
Symbolische Verknüpfungen erstellen
Der Befehl zum Erstellen eines symbolischen Links ist ebenfalls ln
, aber mit dem zusätzlichen Parameter -s
. Etwa so:
$ ln -s target.txt /home/carol/Documents/softlink
Dadurch wird eine Datei namens softlink
im Verzeichnis /home/carol/Documents/
erstellt, die auf die Datei target.txt
im aktuellen Verzeichnis zeigt.
Wie bei harten Links können Sie den Linknamen weglassen, um einen Link mit demselben Namen wie das Ziel im aktuellen Verzeichnis zu erstellen.
Symbolische Verknüpfungen verwalten
Symbolische Links verweisen auf einen anderen Pfad im Dateisystem. Sie können Softlinks auf Dateien und Verzeichnisse anlegen, auch auf verschiedenen Partitionen. Es ist ziemlich einfach, einen symbolischen Link anhand der Ausgabe des Befehls ls
zu erkennen:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
Im obigen Beispiel ist das erste Zeichen bei den Berechtigungen für die Datei softlink
ein l
, was auf einen symbolischen Link hinweist. Außerdem sehen Sie direkt nach dem Dateinamen den Namen des Ziels, auf das der Link zeigt, die Datei target.txt
.
Beachten Sie, dass bei Datei- und Verzeichnisauflistungen symbolischen Links selbst immer die Berechtigungen rwx
für den Benutzer, die Gruppe und den Rest der Welt anzeigen, aber in der Praxis sind die Zugriffsberechtigungen dieselben wie für das Ziel.
Verschieben und Entfernen von symbolischen Verknüpfungen
Wie harte Links können auch symbolische Links mit rm
entfernt und mit mv
verschoben oder umbenannt werden. Allerdings sollte man beim Anlegen besondere Vorsicht walten lassen, um zu vermeiden, dass der Link “kaputt” geht, wenn er von seinem ursprünglichen Ort verschoben wird.
Beim Erstellen von symbolischen Links sollten Sie beachten, dass die Position des Ziels als relativ zur Position des Links interpretiert wird, wenn kein absoluter Zielpfad angegeben ist. Dies kann zu Problemen führen, wenn der Link oder die Datei, auf die er zeigt, verschoben wird.
Dies ist anhand eines Beispiels leichter zu verstehen. Sagen wir, Sie haben eine Datei namens original.txt
im aktuellen Verzeichnis, und Sie wollen einen symbolischen Link zu dieser Datei namens softlink
erstellen. Lassen Sie uns wie folgt vorgehen:
$ ln -s original.txt softlink
Und scheinbar ist alles in Ordnung. Lassen Sie uns das mit ls
überprüfen:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Schauen wir uns an wie der Link aufgebaut ist: softlink
zeigt auf (→
) original.txt
. Was passiert jedoch, wenn Sie den Link in das übergeordnete Verzeichnis verschieben und versuchen, seinen Inhalt mit dem Befehl less
anzuzeigen:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Da der Pfad zu original.txt
nicht angegeben wurde, geht das System davon aus, dass er sich im gleichen Verzeichnis wie der Link befindet. Wenn dies nicht mehr der Fall ist, funktioniert der Link nicht mehr.
Die Möglichkeit, dies zu verhindern, besteht darin, beim Erstellen der Verknüpfung immer den vollständigen (absoluten) Pfad zum Ziel anzugeben:
$ ln -s /home/carol/Documents/original.txt softlink
Auf diese Weise funktioniert der Link, egal wohin der Link verschoben wird, da er auf die absolute Position des Ziels zeigt. Überprüfen wir dies mittels ls
:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Geführte Übungen
-
Wie lautet der Parameter für
chmod
im symbolischen Modus, um das Sticky Bit für ein Verzeichnis zu aktivieren? -
Stellen Sie sich vor, es gibt eine Datei namens
document.txt
im Verzeichnis/home/carol/Documents
. Wie lautet der Befehl, um einen symbolischen Link darauf namenstext.txt
im aktuellen Verzeichnis zu erstellen? -
Erklären Sie den Unterschied zwischen einem harten Link zu einer Datei und einer Kopie dieser Datei.
Offene Übungen
-
Stellen Sie sich vor, dass Sie innerhalb eines Verzeichnisses eine Datei namens
recipes.txt
erstellen. Innerhalb dieses Verzeichnisses erstellen Sie auch einen harten Link zu dieser Datei, namensreceitas.txt
, und einen symbolischen (oder soft) Link zu dieser namensrezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
Der Inhalt des Verzeichnisses sollte folgendermaßen aussehen:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Denken Sie daran, dass
receitas.txt
als Hardlink auf denselbe Inode zeigt, der auchrezepte.txt
zugewiesen ist. Was würde mit dem Softlinkrezepte.txt
passieren, wenn die Dateireceitas.txt
gelöscht wird? Warum? -
Stellen Sie sich vor, Sie haben ein Flashlaufwerk in Ihr System eingesteckt und unter
/media/youruser/FlashA
eingebunden. Sie möchten in Ihrem Homeverzeichnis einen Link namensschematics.pdf
erstellen, der auf die Dateiesquema.pdf
im Stammverzeichnis des Flashlaufwerks zeigt. Sie geben also den Befehl ein:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Was würde passieren? Warum?
-
Betrachten Sie die folgende Ausgabe von
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Wie viele Links zeigen auf die Datei
document.txt
? -
Sind es symbolische oder harte Links?
-
Welchen Parameter sollten Sie an
ls
übergeben, um zu sehen, welchen Inode jede Datei beansprucht?
-
-
Stellen Sie sich vor, Sie haben in Ihrem Verzeichnis
~/Documents
eine Datei namensclients.txt
, die einige Clientnamen enthält, und ein Verzeichnis namenssomedir
. Darin befindet sich eine andere Datei namensclients.txt
mit anderen Namen. Um diese Struktur zu replizieren, verwenden Sie die folgenden Befehle.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Dann erstellen Sie innerhalb von
somedir
einen Link namenspartners.txt
, der auf diese Datei zeigt, mit den Befehlen:$ cd somedir/ $ ln -s clients.txt partners.txt
Die Verzeichnisstruktur stellt sich also wie folgt dar:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Nun verschieben Sie
partners.txt
vonsomedir
nach~/Documents
und listen den Inhalt auf.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Wird der Link trotzdem funktionieren? Wenn ja, welcher Dateiinhalt wird aufgelistet? Warum?
-
Betrachten Sie die folgenden Dateien:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Wie lauten die Zugriffsrechte für
partners.txt
? Warum?
Zusammenfassung
In dieser Lektion haben Sie gelernt:
-
Was Links sind.
-
Der Unterschied zwischen symbolischen und harten Links.
-
Wie man Links erstellt.
-
Wie man Links verschiebt, umbenennt oder entfernt.
Die folgenden Befehle wurden in dieser Lektion besprochen:
-
ln
: Der Befehl “link”. Von sich aus erzeugt dieser Befehl einen harten Link. Mit dem Schalter-s
kann ein symbolischer oder soft Link erzeugt werden. Denken Sie daran, dass sich harte Links nur auf derselben Partition und demselben Dateisystem befinden können, während symbolische Links über Partitionen und Dateisysteme hinweggehen können (sogar über Netzwerkspeicher). -
Der Parameter
-i
fürls
, mit dem man die Inodenummer für eine Datei anzeigen kann.
Lösungen zu den geführten Übungen
-
Wie lautet der Parameter für
chmod
im symbolischen Modus, um das Sticky Bit für ein Verzeichnis zu aktivieren?Das Symbol für das Sticky Bit im symbolischen Modus ist
t
. Da wir diese Berechtigung für das Verzeichnis aktivieren (hinzufügen) wollen, lautet der Parameter+t
. -
Stellen Sie sich vor, es gibt eine Datei namens
document.txt
im Verzeichnis/home/carol/Documents
. Wie lautet der Befehl, um einen symbolischen Link darauf namenstext.txt
im aktuellen Verzeichnis zu erstellen?ln -s
ist der Befehl zum Erstellen eines symbolischen Links. Da Sie den vollständigen Pfad zu der Datei angeben sollten, auf die Sie verlinken, lautet der Befehl:$ ln -s /home/carol/Documents/document.txt text.txt
-
Erklären Sie den Unterschied zwischen einem harten Link zu einer Datei und einer Kopie dieser Datei.
Ein Hardlink ist nur ein anderer Name für eine Datei. Auch wenn er wie ein Duplikat der Originaldatei aussieht, sind der Link und das Original in jeder Hinsicht identisch, da sie auf dieselben Daten auf der Festplatte verweisen. Änderungen, die am Inhalt des Links vorgenommen werden, werden auf das Original übertragen und umgekehrt. Eine Kopie ist eine völlig unabhängige Einheit, die einen anderen Platz auf der Festplatte einnimmt. Änderungen an der Kopie werden nicht auf das Original übertragen und umgekehrt.
Lösungen zu den offenen Übungen
-
Stellen Sie sich vor, dass Sie innerhalb eines Verzeichnisses eine Datei namens
recipes.txt
erstellen. Innerhalb dieses Verzeichnisses erstellen Sie auch einen harten Link zu dieser Datei, namensreceitas.txt
, und einen symbolischen (oder soft) Link zu dieser namensrezepte.txt
.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
Der Inhalt des Verzeichnisses sollte folgendermaßen aussehen:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Denken Sie daran, dass
receitas.txt
als Hardlink auf denselben Inode zeigt wierezepte.txt
. Was würde mit dem Softlinkrezepte.txt
passieren, wenn die Dateireceitas.txt
gelöscht wird? Warum?Der Softlink
rezepte.txt
würde nicht mehr funktionieren. Das liegt daran, dass Softlinks auf Namen und nicht auf Inodes verweisen und der Namerezepte.txt
nicht mehr existiert, auch wenn die Daten noch unter dem Namenrezepte.txt
auf der Festplatte vorhanden sind. -
Stellen Sie sich vor, Sie haben ein Flashlaufwerk in Ihr System eingesteckt und unter
/media/youruser/FlashA
eingebunden. Sie möchten in Ihrem Homeverzeichnis einen Link namensschematics.pdf
erstellen, der auf die Dateiesquema.pdf
im Stammverzeichnis des Flashlaufwerks zeigt. Sie geben also den Befehl ein:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Was würde passieren? Warum?
Der Befehl würde fehlschlagen. Die Fehlermeldung würde
Invalid cross-device link
(ungültiger geräteübergreifender Link) lauten, und macht den Grund deutlich: Harte Links können nicht auf ein Ziel in einer anderen Partition oder einem anderen Gerät zeigen. Die einzige Möglichkeit, einen solchen Link zu erstellen, ist die Verwendung eines symbolischen oder soften Links, indem Sie den Parameter-s
zuln
hinzufügen. -
Betrachten Sie die folgende Ausgabe von
ls -lah
:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Wie viele Links zeigen auf die Datei
document.txt
?Jede Datei beginnt mit einer Linkanzahl von
1
. Da die Anzahl der Links für die Datei4
ist, gibt es drei Links, die auf diese Datei zeigen. -
Sind es symbolische oder harte Links?
Es sind harte Links, da Softlinks die Linkanzahl einer Datei nicht erhöhen.
-
Welchen Parameter sollten Sie an
ls
übergeben, um zu sehen, welchen Inode jede Datei beansprucht?Der Parameter ist
-i
. Der Inode wird als erste Spalte in der Ausgabe vonls
angezeigt, wie unten zu sehen:$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
-
Stellen Sie sich vor, Sie haben in Ihrem Verzeichnis
~/Documents
eine Datei namensclients.txt
, die einige Clientnamen enthält, und ein Verzeichnis namenssomedir
. Darin befindet sich eine andere Datei namensclients.txt
mit anderen Namen. Um diese Struktur zu replizieren, verwenden Sie die folgenden Befehle.$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Dann erstellen Sie innerhalb von
somedir
einen Link namenspartners.txt
, der auf diese Datei zeigt, mit den Befehlen:$ cd somedir/ $ ln -s clients.txt partners.txt
Die Verzeichnisstruktur stellt sich also wie folgt dar:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Nun verschieben Sie
partners.txt
vonsomedir
nach~/Documents
und listen den Inhalt auf.$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Wird der Link trotzdem funktionieren? Wenn ja, welcher Dateiinhalt wird aufgelistet? Warum?
Das ist etwas “knifflig”, aber der Link wird funktionieren, und die aufgelistete Datei werden diejenige in
~/Documents
entsprechen, die die NamenJohn
,Michael
undBob
enthält.Denken Sie daran, dass, da Sie beim Erstellen des Softlinks
partners.txt
nicht den vollständigen Pfad zum Zielclients.txt
angegeben haben. Der Zielspeicherort als relativ zum Speicherort des Links interpretiert, der in diesem Fall das aktuelle Verzeichnis ist.Als der Link von
~/Documents/somedir
nach~/Documents
verschoben wurde, sollte er nicht mehr funktionieren, da sich das Ziel nicht mehr im selben Verzeichnis wie der Link befindet. Zufälligerweise gibt es jedoch eine Datei namensclients.txt
in~/Dokumente
, so dass der Link auf diese Datei verweist, statt auf das ursprüngliche Ziel in~/somedir
.Um dies zu vermeiden, geben Sie beim Erstellen eines symbolischen Links immer den absoluten Pfad der Zieldatei an.
-
Betrachten Sie die folgenden Dateien:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Wie lauten die Zugriffsrechte für
partners.txt
? Warum?Die Zugriffsrechte für
partners.txt
entsprechenrw-r—r--
, da Links immer die gleichen Zugriffsrechte wie deren Ziel innehaben.