Links auf Datei finden in Linux?

3 Antworten

Speziell bei der Hardlink-Frage muss man nochmal zwei Dinge unterscheiden:

Fall 1: Willst Du einfach alle(!) mehrfach verlinkten Dateien finden, egal welche Datei wozu gehört? Dann kannst Du das mit einem "find"-Statement machen.

Fall 2: Willst Du für eine bestimmte, konkrete Datei, wo Du schon weißt, dass n_links>1 ist, wissen, von wo noch auf genau diese(!) Datei verlinked wird? Dann bleibt Dir nichts anderes übrig, als das komplette Filesystem ab jeweiligem Mountpoint abzusuchen und jeweils einen stat() auf jede Datei mit n_links>1 zu machen, dann in der struct stat die Inodenummer zu vergleichen.

Für Fall 2 ist mir kein effizienter Weg in der Shell bekannt. Ich würde das mit einem C-Progrämmchen lösen, wenn ich sowas unbedingt bräuchte.

GNU find hat dazu die nützliche Option -samefile:

Finde alle Hard-Links zu einer Datei:

$ find / -samefile ~/sample.file

Finde alle Hard- und Soft-Links zu einer Datei:

$ find -L / -samefile ~/sample.file

Finde nur alle Soft-Links zu einer Datei:

$ find -L / -xtype l -samefile ~/sample.file