Finden aller symbolischen und festen Links zu einer Datei unter UNIX

9

Wenn ich eine bestimmte Datei in einem UNIX-Dateisystem habe, gibt es eine Möglichkeit, mit bash alle symbolischen und harten Links zu dieser Datei zu finden? Wenn ich für jeden unterschiedliche Befehle benötige, welche sind das?

colin.t.welch
quelle

Antworten:

8

Versuchen Sie dies mit GNU find:

find /start/dir -L -samefile /file/to/check -exec ls -li {} \;

Beispielausgabe:

1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1

Sie können -lsanstelle von verwenden, -execaber es zeigt den Inode und andere Informationen der Zieldatei anstelle der einzelnen Dateien.

Bis auf weiteres angehalten.
quelle
Diese Ausgabe zeigt Hard- und Sym-Links? Sym-Links angezeigt durch -> Pfeil?
aaaidan
@aaaidan: Ja, das ist richtig. Die Inode-Nummern von x1 und x2 sind gleich, was darauf hinweist, dass es sich um feste Verbindungen handelt. Der Pfeil zeigt einen Symlink an. Verwenden von -Lund -samefilebewirkt, dass beide aufgelistet werden. Wenn Sie weglassen, werden -Lsymbolische Links nicht befolgt (siehe man find).
Bis auf weiteres angehalten.
2

Wenn Sie GNU Find nicht haben, können Sie dies tun:

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"

Bei symbolischen Links funktioniert dies jedoch nicht.

Ollie Saunders
quelle
1
Oh, ich sehe jetzt, dass diese Frage dies bereits beantwortet: superuser.com/questions/12972/to-see-hardlinks-by-ls
Ollie Saunders