Benutzer-Werkzeuge

Webseiten-Werkzeuge


sammlung:ln

ln - Links erstellen

ln erstellt Links zwischen Dateien. Es gibt zwei Arten: symbolische Links (Symlinks), die auf einen Dateipfad verweisen, und harte Links (Hardlinks), die auf denselben Inode wie die Originaldatei verweisen. Links sind nützlich für Aliase, Versionsverwaltung und Speicherplatzoptimierung.

Voraussetzungen

Grundlegende Syntax

ln [OPTIONEN] ZIEL LINKNAME
ln -s [OPTIONEN] ZIEL LINKNAME  # Symbolischer Link

Ein symbolischer Link ist eine spezielle Datei, die auf einen Pfad verweist.

# Symlink erstellen
ln -s /pfad/zur/datei.txt link_name
 
# Symlink zu Verzeichnis
ln -s /var/www/html website
 
# Absolute Pfade verwenden
ln -s /usr/local/bin/python3 /usr/bin/python
 
# Relative Pfade
ln -s ../config.ini link_config

Eigenschaften:

  • Verweist auf Pfadnamen (nicht Inode)
  • Kann auf Dateien und Verzeichnisse zeigen
  • Kann über Dateisystem-Grenzen hinweg erstellt werden
  • Funktioniert nicht mehr wenn Ziel gelöscht wird (broken link)
  • Hat eigenen Inode

Ein harter Link ist ein zusätzlicher Verzeichnis-Eintrag für dieselbe Datei.

# Hardlink erstellen
ln datei.txt hardlink_name
 
# Mehrere Hardlinks
ln original.txt copy1.txt copy2.txt copy3.txt

Eigenschaften:

  • Verweist auf denselben Inode wie Original
  • Nur für Dateien (nicht für Verzeichnisse)
  • Muss im selben Dateisystem sein
  • Datei existiert solange mindestens ein Link existiert
  • Identische Rechte und Zeitstempel
Merkmal Symbolischer Link Harter Link
Ziel Pfadname Inode
Verzeichnisse Ja Nein
Dateisysteme Über Grenzen Nur gleiches FS
Broken Link Möglich Nicht möglich
Größe Klein (~Pfadlänge) Gleich wie Original
Inode Eigener Identisch
Rechte Eigene (meist 777) Identisch

Häufige Anwendungsfälle

Aliase und Shortcuts

# Programm-Alias
ln -s /opt/program/bin/app /usr/local/bin/app
 
# Shortcuts zu wichtigen Verzeichnissen
ln -s /var/log/nginx ~/nginx-logs
ln -s /etc/nginx/sites-available ~/sites
 
# Desktop-Link
ln -s ~/Dokumente/wichtig ~/Desktop/wichtig

Versionsverwaltung

# Aktuell-Link für verschiedene Versionen
ln -s /opt/app-1.2.3 /opt/app-current
 
# Update durch Link-Wechsel
rm /opt/app-current
ln -s /opt/app-1.3.0 /opt/app-current
 
# PHP-Versionen
ln -s /usr/bin/php8.1 /usr/bin/php

Backup und Speicherplatz

# Hardlinks für Backup (Space-Efficient)
ln original.txt backup/original.txt
 
# Mehrere Namen für dieselbe Datei
ln script.sh run-script.sh
ln script.sh execute.sh

Wichtige Optionen

Option Bedeutung
-s Symbolischen Link erstellen
-f Bestehenden Link überschreiben (force)
-n Link zu Verzeichnis nicht dereferenzieren
-r Relativen Pfad für Symlink verwenden
-v Verbose (zeigt was gemacht wird)
-b Backup vor Überschreiben
-t Zielverzeichnis angeben

Praktische Beispiele

# Einfacher Symlink
ln -s /usr/share/doc/readme.txt ~/readme
 
# Mit force (überschreiben)
ln -sf /new/target existing_link
 
# Relativer Symlink
ln -sr ../config.ini link
 
# Mehrere Links in Zielverzeichnis
ln -s /source/*.txt /target/
# Einfacher Hardlink
ln original.dat copy.dat
 
# Mehrere Hardlinks gleichzeitig
ln file.txt hardlink1.txt hardlink2.txt
 
# In anderes Verzeichnis
ln /path/to/file.txt /other/path/file.txt
# Link löschen (Ziel bleibt erhalten)
rm symlink_name
unlink symlink_name
 
# Link überschreiben
ln -sf /new/target existing_link
 
# Alle Symlinks in Verzeichnis finden
find . -type l
 
# Broken Links finden
find . -type l ! -exec test -e {} \; -print
 
# Link-Ziel anzeigen
readlink symlink_name
readlink -f symlink_name  # Absoluter Pfad
# Links mit ls anzeigen
ls -l
# lrwxrwxrwx ... link -> /target
 
# Link-Ziel auflösen
readlink link_name
 
# Prüfen ob Datei ein Link ist
test -L filename && echo "Ist ein Link"
 
# Inode anzeigen (Hardlinks haben gleiche)
ls -i file1.txt file2.txt
 
# Link-Details
stat link_name
 
# Hardlink-Count anzeigen
ls -l  # Spalte 2 zeigt Anzahl

Fortgeschrittene Nutzung

# Manuell relativ
cd /target/directory
ln -s ../../source/file.txt link
 
# Automatisch relativ
ln -sr /source/file.txt /target/link
 
# Vorteil: Portabel bei Verschieben des gesamten Baums
# Alle Hardlinks einer Datei finden
find / -samefile original.txt 2>/dev/null
 
# Oder per Inode
INODE=$(ls -i original.txt | awk '{print $1}')
find / -inum $INODE 2>/dev/null
 
# Hardlink-Count prüfen
stat -c %h original.txt
# Sicherer Link-Wechsel (atomic)
ln -sf /new/target temp_link
mv -f temp_link final_link
 
# Nützlich für zero-downtime deployments

Häufige Probleme

# Problem: Ziel wurde gelöscht/verschoben
ls -l broken_link
# lrwxrwxrwx ... broken_link -> /non/existent (rot markiert)
 
# Finden und reparieren
find . -type l ! -exec test -e {} \; -print
# Manuell anpassen:
ln -sf /correct/target broken_link
 
# Oder löschen
find . -type l ! -exec test -e {} \; -delete
# Vermeiden: Link verweist auf sich selbst
ln -s link1 link2
ln -s link2 link1  # Zirkel!
 
# Erkennen: Führt zu "Too many levels of symbolic links"
cat link1  # Fehler
# Funktioniert nicht für Verzeichnisse
ln /source/dir /target/dir  # Fehler
 
# Funktioniert nicht über Dateisysteme
ln /home/file.txt /mnt/usb/file.txt  # Fehler
# Lösung: Symlink verwenden
ln -s /home/file.txt /mnt/usb/file.txt

Use Cases in der Praxis

Webserver-Konfiguration

# Nginx sites-enabled
ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
 
# Apache
ln -s /etc/apache2/sites-available/mysite.conf /etc/apache2/sites-enabled/
 
# Deaktivieren durch Löschen des Links
rm /etc/nginx/sites-enabled/mysite

Shared Libraries

# Bibliotheks-Versionierung
ln -s libmylib.so.1.2.3 libmylib.so.1
ln -s libmylib.so.1 libmylib.so
 
# System findet immer die richtige Version

Alternative Programme

# Python-Version wechseln
sudo ln -sf /usr/bin/python3.9 /usr/bin/python3
 
# Editor-Auswahl
sudo ln -sf /usr/bin/vim /usr/bin/editor

Hinweise

  • Symlinks bevorzugen wenn möglich - flexibler und sicherer
  • Absolute Pfade für system-weite Links verwenden
  • Relative Pfade für portable Verzeichnisbäume
  • Broken Links regelmäßig suchen und aufräumen
  • Vorsicht mit -f - überschreibt ohne Warnung
  • Hardlinks sparen Platz aber sind schwerer zu tracken

Siehe auch

sammlung/ln.txt · Zuletzt geändert: von 127.0.0.1