bash: Symlinks finden

Bash - Bourne-again shell
26.03.2014

Symlinks sind prinzipiell eine ganz feine Einrichtung. Werden doch manchmal Scripte, Libraries oder ganze Softwarepakete an verschiedenen Orten im Dateisystem benötigt. Dabei möchte man die Daten nicht x-mal auf dem Rechner herumliegen haben und entsprechend x-mal pflegen müssen. Schnell ein Symlink angelegt und gut ists.

Wenn jedoch eine Portierung auf ein anderes System oder ein Backup ansteht, dann können Symlinks zu einer bösen Falle werden.

Es gibt Situationen, in denen es ratsam ist, genau zu wissen welche Symlinks sich wo befinden. Etwa um sie durch die tatsächlichen Dateien zu ersetzen oder um nachzusehen, ob die Verlinkungen überhaupt funktionieren.

In einem einzelnen Verzeichnis ist hie ls das Mittel der Wahl. Mit ls kann der Inhalt des Verzeichnisses aufgelistet werden. Symlinks werden dabei als solche gekennzeichnet und der Pfad zu den Originaldaten mit ausgegeben.

Der Befehl

ls -l

gibt eine Ausgabe wie diese zurück:

lrwxrwxrwx 1 root root       6 2012-01-13 17:29 bzcmp -> bzdiff
lrwxrwxrwx 1 root root       6 2012-01-13 17:29 bzegrep -> bzgrep
lrwxrwxrwx 1 root root       6 2012-01-13 17:29 bzfgrep -> bzgrep
lrwxrwxrwx 1 root root       6 2012-01-13 17:29 bzless -> bzmore
lrwxrwxrwx 1 root root       8 2012-01-13 17:18 lessfile -> lesspipe
lrwxrwxrwx 1 root root      20 2012-01-13 17:18 mt -> /etc/alternatives/mt
lrwxrwxrwx 1 root root      20 2012-01-13 17:18 nc -> /etc/alternatives/nc
lrwxrwxrwx 1 root root      24 2012-01-13 17:18 netcat -> /etc/alternatives/netcat
lrwxrwxrwx 1 root root       6 2012-01-13 17:18 open -> openvt
lrwxrwxrwx 1 root root      14 2012-02-10 16:46 pidof -> /sbin/killall5
lrwxrwxrwx 1 root root       4 2012-01-13 17:18 rbash -> bash
lrwxrwxrwx 1 root root       4 2012-01-13 17:18 rnano -> nano
lrwxrwxrwx 1 root root       4 2012-01-13 17:18 sh -> dash
lrwxrwxrwx 1 root root       4 2012-01-13 17:18 sh.distrib -> bash
lrwxrwxrwx 1 root root       7 2012-01-13 17:18 static-sh -> busybox

Benötigt man jedoch Informationen der Unterverzeichnisse oder gar des kompletten Dateisystems, stößt ls alleine schnell an seine Grenzen. weiter hilft hier eine Kombination mit dem Kommando find. Da find aus meiner Sicht eine etwas sperrige und wenig innovative Syntax verwendet, hier ein paar Beispiele:

Symlinks im aktuellen Verzeichnis und rekursiv in den Unterverzeichnissen suchen:

find . -type l -exec ls -l {} \;

Symlinks in einem beliebigen Verzeichnis von der root-Ebene aus rekursiv finden:

find /[Pfad zum Verzeichnis] -type l -exec ls -l {} \;

Symlinks in einem beliebigen Verzeichnis vom aktuellen Verzeichnis aus rekursiv finden:

find [Pfad zum Verzeichnis] -type l -exec ls -l {} \;

Alle Symlinks auf dem Rechner finden:

find / -type l -exec ls -l {} \;
comments powered by Disqus

Militär

Wehrpflicht, mehr Pflicht

Geänderte Anforderungen?

Oder steckt da noch mehr dahinter?

A ? B C D E F G H I J K L M N O P Q R S T U V W Z