Symlinks finden

Gerade unter Linux/Unix gehört das Verlinken von Dateien und Verzeichnissen dazu. Ein Verzeichnis ist schneller verlinkt als verschoben oder kopiert. Häufig genutzte aber tief in der Struktur verschachtelte Verzeichnisse kann man damit schnell ansteuern.
Schwierig wird es sobald man Verzeichnisse/Dateien löschen oder verschieben möchte. Zeigt ein Symlinks darauf? So zeigt dieser danach ins Leere.
Wir wollen dies vorher überprüfen:

find / -type l -print | xargs ls -ld | grep 'dateiname'

Es dauert etwas, bis wir Ergebnisse sehen, da hier er wirklich alle eingebundenen Devices durchsucht. Evtl. kann man die Suche etwas genauer einschränken und die Laufzeit zu beschleunigen.

Dieser Einzeiler liefert auch alle Verlinkungen in weiter drunter liegende Verzeichnisse wenn dateiname ein Verzeichnis ist. Es versagt aber bei relativen Verlinkungen die sich nur darunter abspielen.

Hardlinks finden

Manchmal (aber selten) nutzt man auch Hardlinks, um Dateien (Verzeichnisse gehen nicht) zu verlinken. In diesem Fall zeigt der Linkcounter der Datei, ob eine solche Verlinkung existiert. Will man nun auch wissen, wo die anderen Links liegen startet man find wie folgt:

f=`ls -i dateiname |awk '{print $1}'` ; find / -inum $f

Um gleich alle Dateien mit einem Hardlink zu finden, kann man sein System durchsuchen lassen:

find / ! -type d -links +1 -ls|sort -n

Mit der Sortierung nach der Inode-Nummer kann man gut zusammengehörende Dateien erkennen.

Kategorien:

Stichwörter:

Symlinks · Hardlinks · find · link · inode · Verzeichnis · Datei · file ·