Symbolische Verknüpfungen, auch bekannt als Symlinks, sind ein nützliches Werkzeug unter Linux, können aber auch zu Problemen führen, wenn sie ins Leere zeigen. In diesem Artikel erfahren Sie, wie Sie defekte Symlinks aufspüren, überprüfen und gegebenenfalls entfernen.
Grundlagen zu symbolischen Links
Symbolische Links, oft auch als „Soft Links“ bezeichnet, sind spezielle Dateitypen, die als Verweise auf andere Dateien oder Verzeichnisse dienen. In Dateimanagern oder im Terminal erscheinen sie wie normale Dateien oder Verzeichnisse. Der Clou dabei ist, dass ein Symlink auf ein Ziel verweisen kann, das sich an einer beliebigen Stelle im Dateisystem befindet.
Nehmen wir an, Sie haben einen Symlink namens „mein_link“ in Ihrem Home-Verzeichnis, der auf die Datei „dokument.txt“ zeigt, welche sich an einem anderen Ort befindet. Wenn Sie Befehle auf „mein_link“ ausführen, werden diese automatisch auf „dokument.txt“ angewendet. Ein `cat` oder `less` auf dem Symlink zeigt Ihnen den Inhalt der Zieldatei.
Viele Symlinks sind standardmäßig in einer Linux-Installation vorhanden, auch wenn Sie selbst keine erstellen. Das Betriebssystem und viele Anwendungen nutzen sie. Zum Beispiel verwenden Installationsprogramme oft Symlinks, um auf ausführbare Dateien zu verweisen. Bei Updates wird dann die eigentliche Datei ersetzt, aber die Symlinks funktionieren weiter, solange der Name der neuen Datei gleich bleibt.
Mit dem Befehl `ls` können wir uns einige Symlinks ansehen. Im Stammverzeichnis (/) werden diese oft in einer anderen Farbe angezeigt. Auf unserem Testsystem (Ubuntu 20.10) sind sie beispielsweise hellblau.
Geben Sie folgendes ein:
ls /
Mit der Option `-l` (lange Auflistung) erhalten wir detailliertere Informationen:
ls -l /lib* /bin
Ein „l“ am Zeilenanfang signalisiert einen Symlink. Der Text hinter „->“ zeigt das Ziel des Symlinks an. In diesem Beispiel sind die Ziele Verzeichnisse.
Die angezeigten Berechtigungen sind Standardeinträge und spiegeln nicht die tatsächlichen Berechtigungen des Ziels wider. Entscheidend sind die Berechtigungen der Datei oder des Verzeichnisses, auf das der Symlink zeigt.
Defekte Symlinks erkennen
Ein Symlink ist „defekt“, wenn die Zieldatei gelöscht oder verschoben wurde. Manchmal bleiben fehlerhafte Symlinks nach einer abgebrochenen Softwaredeinstallation zurück. Auch wenn Benutzer Dateien manuell löschen, ohne die Symlinks zu berücksichtigen, entstehen solche „hängenden“ Verweise.
Um dies zu verdeutlichen, erstellen wir einen Symlink namens „hallo“ in unserem aktuellen Verzeichnis, der auf ein Programm namens „htg“ in einem Unterverzeichnis „bin“ zeigt.
ls -l
Wenn wir den Symlink ausführen, startet er das Programm:
./hallo
Wir können das Programm auch direkt ausführen:
../bin/htg
Nun löschen wir die Programmdatei:
rm ../bin/htg
Wenn wir den Symlink jetzt betrachten, wird er rot angezeigt, da Linux erkennt, dass er defekt ist. Zudem wird uns das ursprüngliche Ziel des Symlinks angezeigt.
Wenn wir versuchen, den Symlink auszuführen, erhalten wir eine Fehlermeldung, die sich auf den Namen des Symlinks bezieht, nicht auf den Namen des ursprünglichen Programms.
./hallo
Defekte Symlinks finden
Die meisten modernen Versionen von `find` haben die Option `-xtype`, die das Auffinden defekter Symlinks erleichtert. Mit `-xtype l` suchen wir nach Links. Wenn wir `find` mit `-xtype l` ohne weitere Typ-Flags verwenden, gibt es nur defekte Links aus:
find . -xtype l
Der Befehl durchsucht standardmäßig rekursiv das aktuelle Verzeichnis und alle Unterverzeichnisse.
Der Symlink „hallo“, den wir absichtlich defekt gemacht haben, wird gefunden, ebenso wie andere, die mit Firefox und Snaps zusammenhängen.
Mit der Option `-l` von `wc` können wir die Anzahl der gefundenen defekten Symlinks zählen:
find . -xtype l | wc -l
In diesem Fall wurden 24 defekte Symlinks gefunden.
Überprüfen und Entfernen
Bevor Sie defekte Symlinks löschen, sollten Sie die Ergebnisse des `find`-Befehls überprüfen. Nicht jeder defekte Symlink ist ein Fehler. Es gibt Fälle, wo sie aus gutem Grund defekt sind.
Manchmal ist der Symlink selbst das Problem. Wenn er falsch erstellt wurde, zeigt er möglicherweise ins Leere, obwohl das eigentliche Ziel existiert. In diesem Fall kann der Symlink einfach neu erstellt werden.
Es kann auch vorkommen, dass ein scheinbar defekter Symlink absichtlich als Indikator dient. Zum Beispiel verwendet Firefox einen Symlink für Dateisperren. Das kann auch ein Hinweis auf eine fehlgeschlagene Softwareinstallation sein, anstatt den Symlink zu löschen, sollten Sie ihn entweder reparieren oder die Installation wiederholen.
Nach der Behebung wichtiger defekter Symlinks können Sie den Suchbefehl erneut ausführen, um die Liste der verbliebenen zu aktualisieren.
Aus Sicherheitsgründen ist es ratsam, das Entfernen von Symlinks auf Ihre eigenen Verzeichnisse zu beschränken. Seien Sie sehr vorsichtig, wenn Sie diese Befehle als Root oder in Systemverzeichnissen ausführen.
Defekte Symlinks entfernen
Die Option `-exec` ermöglicht das Ausführen von Befehlen für die Suchergebnisse. Wir werden `rm` verwenden, um jeden defekten Symlink zu entfernen. `{}` wird dabei durch den Namen jedes gefundenen Symlinks ersetzt.
Das Semikolon (;) beendet die Befehlsliste für `-exec`. Wir verwenden einen Backslash (\), um das Semikolon zu „escapen“, damit es als Teil des `find`-Befehls behandelt wird.
Geben Sie folgendes ein:
find . -xtype l -exec rm {} \;
Nach dem Ausführen des Befehls gibt es keine Ausgabe. Um zu prüfen, ob die defekten Links entfernt wurden, suchen wir erneut nach ihnen:
find . -xtype l
Da keine Ergebnisse gefunden werden, sind alle defekten Symlinks entfernt.
Überprüfung vor dem Löschen
Nehmen Sie sich immer Zeit, eine Liste mit symbolischen Links zu überprüfen, bevor Sie sie löschen. Sie können die Befehle auch auf bestimmte Verzeichnisse beschränken, um nicht alle Symlinks zu löschen.
So hätten wir beispielsweise den Befehl zuerst im „.snap“-Verzeichnis ausführen und dann den „hallo“-Symlink manuell entfernen können. Der Firefox-Symlink wäre dann unberührt geblieben.