Links
Linux kennt zwei Arten von Links: Hard-Links und symbolische Links (Symlinks). Beide erlauben es, dass eine Datei unter mehreren Namen erreichbar ist – aber auf grundlegend unterschiedliche Weise.
Hard-Links
Abschnitt betitelt „Hard-Links“Ein Hard-Link ist ein weiterer Verzeichniseintrag, der auf denselben Inode zeigt wie die Originaldatei. Es gibt kein Original und keine Kopie – beide Namen sind vollständig gleichwertig.
ln quelle.txt hard-link.txtVerzeichnis: "quelle.txt" → Inode 48291 "hard-link.txt" → Inode 48291 ← derselbe Inode!Da beide Einträge denselben Inode referenzieren, gilt:
- Änderungen über einen Namen sind sofort über den anderen sichtbar
- Löschen eines Eintrags mit
rmentfernt nur diesen Verzeichniseintrag – der Inode (und die Daten) bleiben bestehen, solange noch mindestens ein weiterer Name darauf zeigt - Die Anzahl der Verweise auf einen Inode (Link Count) ist in der
ls -l-Ausgabe in der zweiten Spalte sichtbar
ls -li quelle.txt hard-link.txt# 48291 -rw-r--r-- 2 alice alice 1234 Mär 17 10:00 hard-link.txt# 48291 -rw-r--r-- 2 alice alice 1234 Mär 17 10:00 quelle.txt# ^--- Link Count = 2Warum Hard-Links nicht über Partitionsgrenzen funktionieren
Abschnitt betitelt „Warum Hard-Links nicht über Partitionsgrenzen funktionieren“Inodes sind dateisystemlokal – jedes Dateisystem (jede Partition, jedes eingehängte Laufwerk) verwaltet seine eigene Inode-Tabelle mit eigenen Nummern. Inode 48291 auf /home und Inode 48291 auf /media/usb sind völlig verschiedene Dinge.
Ein Hard-Link ist nichts anderes als eine Inode-Nummer in einem Verzeichniseintrag. Eine Inode-Nummer aus einem anderen Dateisystem referenzieren – das ist schlicht nicht möglich.
ln /home/alice/datei.txt /media/usb/link.txt# ln: /media/usb/link.txt: ungültige partitionsübergreifende VerknüpfungSymbolische Links (Symlinks)
Abschnitt betitelt „Symbolische Links (Symlinks)“Ein symbolischer Link ist eine eigenständige Datei mit einem eigenen Inode, deren Inhalt ein Pfad zu einer anderen Datei oder einem Verzeichnis ist. Das Dateisystem folgt diesem Pfad automatisch.
ln -s ziel.txt symlink.txtln -s /etc/nginx/nginx.conf ~/nginx.conf # absoluter Pfadln -s ../freigabe/ verknuepfung/ # relativer PfadVerzeichnis: "ziel.txt" → Inode 48291 (normale Datei, Daten liegen hier) "symlink.txt" → Inode 51002 (Symlink, enthält den Text "ziel.txt")Symlinks anzeigen:
ls -l symlink.txt# lrwxrwxrwx 1 alice alice 8 Mär 17 10:05 symlink.txt -> ziel.txt# ^--- 'l' für LinkHard-Link vs. Symlink im Vergleich
Abschnitt betitelt „Hard-Link vs. Symlink im Vergleich“| Eigenschaft | Hard-Link | Symbolischer Link |
|---|---|---|
| Eigener Inode | Nein (teilt Inode mit Ziel) | Ja |
| Funktioniert über Partitionen | Nein | Ja |
| Funktioniert auf Verzeichnisse | Nein | Ja |
| Bleibt gültig wenn Ziel gelöscht | Ja (Daten bleiben erhalten) | Nein (dangling symlink) |
Sichtbar als Link in ls -l | Nein | Ja (->) |