Links unter Linux ermöglichen es, auf Dateien und Verzeichnisse von mehreren Orten aus zuzugreifen. Symbolic Links und Hard Links funktionieren unterschiedlich.
Grundkonzept
Inode erklärt
Jede Datei hat einen Inode (Index Node):
┌─────────────────────────┐
│ Inode 12345 │
├─────────────────────────┤
│ Berechtigungen │
│ Eigentümer │
│ Größe │
│ Zeitstempel │
│ Zeiger auf Datenblöcke │
└─────────────────────────┘
↓
┌─────────────────────────┐
│ Datenblöcke │
│ (Dateiinhalt) │
└─────────────────────────┘Der Dateiname ist nur ein Verweis auf den Inode.
Hard Link
Mehrere Namen zeigen auf denselben Inode:
datei.txt ──────┐
├──→ Inode 12345 → Daten
hardlink.txt ───┘Symbolic Link (Symlink)
Ein Verweis auf einen Dateinamen (Pfad):
symlink.txt → datei.txt → Inode 12345 → DatenVergleich
| Eigenschaft | Hard Link | Symbolic Link | |-------------|-----------|---------------| | Zeigt auf | Inode | Pfad (Name) | | Verzeichnisse | Nein | Ja | | Dateisystem-übergreifend | Nein | Ja | | Funktioniert wenn Original gelöscht | Ja | Nein (dangling) | | Eigene Berechtigungen | Nein | Ja (meist ignoriert) | | Erkennung | Schwer | Einfach |
Symbolic Links erstellen
Grundsyntax
ln -s ziel link-nameBeispiele
# Symlink für Datei
ln -s /var/log/syslog ~/syslog-link
# Symlink für Verzeichnis
ln -s /var/www/html ~/webroot
# Relativer Symlink
cd /home/user
ln -s ../shared/config.txt config.txtPrüfen
# Symlink anzeigen
ls -l symlink.txt
# Ausgabe: lrwxrwxrwx ... symlink.txt -> /pfad/zur/datei.txt
# Ziel auflösen
readlink symlink.txt
readlink -f symlink.txt # Vollständiger PfadHard Links erstellen
Grundsyntax
ln ziel link-nameBeispiele
# Hard Link erstellen
ln original.txt hardlink.txt
# Beide zeigen auf gleiche Daten
echo "Hallo" > original.txt
cat hardlink.txt # Gibt "Hallo" ausInode prüfen
# Inode-Nummer anzeigen
ls -li original.txt hardlink.txt
# Ausgabe (gleiche Inode!):
# 12345 -rw-r--r-- 2 user user 6 Jan 26 10:00 original.txt
# 12345 -rw-r--r-- 2 user user 6 Jan 26 10:00 hardlink.txtPraktische Anwendungsfälle
Symlinks: Konfigurationsdateien
# Nginx Sites aktivieren
ln -s /etc/nginx/sites-available/mysite \
/etc/nginx/sites-enabled/mysite
# Deaktivieren = Symlink löschen
rm /etc/nginx/sites-enabled/mysiteSymlinks: Versionswechsel
# Mehrere Node.js-Versionen
/opt/node-16/
/opt/node-18/
/opt/node-20/
# Aktive Version als Symlink
ln -s /opt/node-20 /opt/node
# PATH zeigt auf /opt/node/bin
# Wechsel: Symlink ändern
ln -sfn /opt/node-18 /opt/nodeSymlinks: Gemeinsame Dateien
# Geteilte Konfiguration für mehrere Websites
/var/www/site1/shared-config.php -> /var/www/shared/config.php
/var/www/site2/shared-config.php -> /var/www/shared/config.phpHard Links: Backup-Optimierung
# rsync mit Hard Links für inkrementelle Backups
rsync -av --link-dest=/backup/daily.1 \
/data/ /backup/daily.0/
# Unveränderte Dateien werden verlinkt, nicht kopiert
# Spart enorm SpeicherplatzHard Links: Dateischutz
# Hard Link als "Backup"
ln wichtig.txt wichtig-backup.txt
# Wenn wichtig.txt gelöscht wird:
rm wichtig.txt
# Daten bleiben über wichtig-backup.txt erreichbar!Symlinks und Berechtigungen
# Symlink-Berechtigungen sind meist 777 (werden ignoriert)
ls -l
# lrwxrwxrwx ... link -> target
# Es gelten die Berechtigungen des Ziels
chmod 000 target.txt
cat link # Permission deniedSymlinks und Verzeichnisse
# Symlink auf Verzeichnis
ln -s /var/log ~/logs
# Navigation
cd ~/logs # Funktioniert
ls ~/logs # Zeigt /var/log Inhalt
# Vorsicht bei relativen Pfaden!
cd /home/user
ln -s ../logs ~/loglink
# Symlink enthält: ../logs
# Funktioniert nur wenn Ziel relativ zum Link existiertDangling (defekte) Symlinks
# Symlink erstellen
ln -s /tmp/testfile link
# Original löschen
rm /tmp/testfile
# Symlink ist nun "dangling"
ls -l link
# lrwxrwxrwx ... link -> /tmp/testfile (rot in vielen Terminals)
cat link
# cat: link: No such file or directoryDangling Links finden
# Alle defekten Symlinks im Verzeichnis finden
find /pfad -xtype l
# System-weit (langsam)
find / -xtype l 2>/dev/nullWichtige Optionen
ln -s (Symbolic Link)
# -f: Existierendes Ziel überschreiben
ln -sf neues-ziel link
# -n: Symlink auf Verzeichnis nicht folgen
ln -sfn neues-verzeichnis link
# -v: Verbose (zeigt was passiert)
ln -sv ziel linkln (Hard Link)
# -f: Existierendes Ziel überschreiben
ln -f original hardlink
# -b: Backup des Ziels erstellen
ln -b original hardlinkSymlinks löschen
# Symlink löschen (nicht das Ziel!)
rm symlink
# Vorsicht bei Verzeichnis-Symlinks:
rm symlink # Korrekt: löscht den Link
rm symlink/ # FALSCH: versucht Verzeichnisinhalt zu löschen
# Sicher: unlink verwenden
unlink symlinkSymlinks in Skripten
Prüfen ob Symlink
if [ -L "$datei" ]; then
echo "$datei ist ein Symlink"
fi
# Prüfen ob existierender Symlink
if [ -L "$datei" ] && [ -e "$datei" ]; then
echo "Gültiger Symlink"
fiZiel ermitteln
# Direktes Ziel
target=$(readlink "$symlink")
# Vollständig aufgelöster Pfad
target=$(readlink -f "$symlink")
# Kanonischer Pfad (auch für normale Dateien)
realpath "$datei"Häufige Probleme
Problem: Relativer vs. absoluter Pfad
# Absoluter Pfad (empfohlen für System-Symlinks)
ln -s /var/www/html /home/user/webroot
# Funktioniert immer
# Relativer Pfad (kann brechen)
cd /home/user
ln -s ../../../var/www/html webroot
# Funktioniert nur von /home/user ausProblem: Zirkuläre Symlinks
ln -s b a
ln -s a b
ls -l
# a -> b
# b -> a
cat a
# Too many levels of symbolic linksProblem: Symlink im falschen Verzeichnis
# Falsch: Erstellt Link im aktuellen Verzeichnis
ln -s /etc/nginx/sites-available/site
# Richtig: Zielverzeichnis angeben
ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/Best Practices
1. Absolute Pfade für System-Symlinks verwenden 2. Relative Pfade nur bei beweglichen Strukturen 3. Symlinks für Verzeichnisse und Dateisystem-übergreifend 4. Hard Links für Backup-Szenarien und Datensicherheit 5. Regelmäßig auf dangling Symlinks prüfen 6. -n Option beim Überschreiben von Verzeichnis-Symlinks
Fazit
Symbolic Links sind flexibler und häufiger im Einsatz – sie funktionieren mit Verzeichnissen und über Dateisysteme hinweg. Hard Links sind für spezielle Fälle wie inkrementelle Backups nützlich. Verstehen Sie den Unterschied zwischen Inode-Verweis (Hard Link) und Pfad-Verweis (Symlink), um die richtige Wahl zu treffen.