Softlink/Problembehebung: Unterschied zwischen den Versionen
K Textersetzung - „line>“ durch „line copy>“ |
|||
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== | == Alle Links finden == | ||
Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens foo.txt zu finden, dann ist dies der einzige gute Weg: | |||
<syntaxhighlight lang="bash" highlight="1" line copy> | |||
Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens | |||
<syntaxhighlight lang="bash" highlight="1" line> | |||
find -L / -samefile path/to/foo.txt | find -L / -samefile path/to/foo.txt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Wenn Sie hingegen nur nach Verknüpfungen zu einer beliebigen Datei suchen, die zufällig | Wenn Sie hingegen nur nach Verknüpfungen zu einer beliebigen Datei suchen, die zufällig foo.txt heißt, dann ist etwas wie | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
find / -lname foo.txt | find / -lname foo.txt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
oder | oder | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
find . -lname \*foo.txt | find . -lname \*foo.txt | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 20: | Zeile 17: | ||
das Problem mit den ignorierten führenden Pfadnamenkomponenten | das Problem mit den ignorierten führenden Pfadnamenkomponenten | ||
* wunderbar gelöst. Vielen Dank an alle, die geantwortet haben. | * wunderbar gelöst. Vielen Dank an alle, die geantwortet haben. | ||
* Sie können eine Rekursion durchführen, da jede der Dateien, die auf foo.txt verweisen, selbst von einigen anderen Links referenziert werden kann ... z. B.: A->B->foo.txt, /tmp/C->B->foo.txt | Wie ich in einem gelöschten Kommentar angemerkt habe, können Sie -xtype l verwenden, um nur die Liste der Symlinks zu finden | ||
* Sie können eine Rekursion durchführen, da jede der Dateien, die auf foo.txt verweisen, selbst von einigen anderen Links referenziert werden kann ... z. B.: A->B->foo.txt, /tmp/C->B->foo.txt und weitere | |||
Dies kann auch funktionieren, wenn Ihr Namensbestandteil ein übergeordnetes Verzeichnis ist, das im Link genannt wird, indem Sie | Dies kann auch funktionieren, wenn Ihr Namensbestandteil ein übergeordnetes Verzeichnis ist, das im Link genannt wird, indem Sie | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
find . -lname '*foo.dir*' | find . -lname '*foo.dir*' | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 30: | Zeile 28: | ||
(entspricht z. :B. :file.txt -> ../foo.dir/file.txt) | (entspricht z. :B. :file.txt -> ../foo.dir/file.txt) | ||
Diese Antwort ist wirklich hilfreich, vielen Dank. Übrigens, wenn wir mehr Informationen über die Ergebnisse von | Diese Antwort ist wirklich hilfreich, vielen Dank. Übrigens, wenn wir mehr Informationen über die Ergebnisse von "find" erhalten möchten, können wir die Ausgabe von "find" an "ls" übergeben | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
find -L /usr -samefile /usr/share/pyshared/lsb_release.py 2>/dev/null | xargs ls -al | find -L /usr -samefile /usr/share/pyshared/lsb_release.py 2>/dev/null | xargs ls -al | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Ermitteln Sie die Inode-Nummer der Datei und suchen Sie dann nach allen Dateien mit derselben Inode-Nummer | Ermitteln Sie die Inode-Nummer der Datei und suchen Sie dann nach allen Dateien mit derselben Inode-Nummer | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
ls -i foo.txt | ls -i foo.txt | ||
41525360 foo.txt | 41525360 foo.txt | ||
Zeile 44: | Zeile 42: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Alternativ können Sie die Option | Alternativ können Sie die Option lname von find verwenden, aber dies funktioniert nicht, wenn Sie relative symbolische Links haben, z. B. a -> ../foo.txt | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
find . -lname /path/to/foo.txt* | find . -lname /path/to/foo.txt* | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Wenn Sie eine aktuelle Version von GNU find verwenden, können Sie auch die Option | Wenn Sie eine aktuelle Version von GNU find verwenden, können Sie auch die Option -samefile mit -L verwenden, um den gleichen Effekt zu erzielen, ohne selbst nach der Inode suchen zu müssen | ||
* Dadurch werden jedoch auch Dateien auf anderen Dateisystemen gefunden, die zufällig dieselbe Inode-Nummer haben. | * Dadurch werden jedoch auch Dateien auf anderen Dateisystemen gefunden, die zufällig dieselbe Inode-Nummer haben. | ||
* Wenn | * Wenn foo ein Verzeichnis ist, verwenden Sie ln -di, in einer Zeile: | ||
<syntaxhighlight lang="bash" highlight="1" line> | <syntaxhighlight lang="bash" highlight="1" line copy> | ||
find . -follow -inum $(ls -di foo.txt |cut - | find . -follow -inum $(ls -di foo.txt |cut -d" " -f1) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Zeile 59: | Zeile 57: | ||
* Ein symbolischer Link hat nicht dieselbe Inode wie sein Ziel. Dies funktioniert nur für eine Datei in einem Ordner mit symbolischem Link. Aber danach wurde nicht gefragt. | * Ein symbolischer Link hat nicht dieselbe Inode wie sein Ziel. Dies funktioniert nur für eine Datei in einem Ordner mit symbolischem Link. Aber danach wurde nicht gefragt. | ||
== symlinks utility == | |||
Das [[symlinks]]-Dienstprogramm aknn auch bei der Suche nach defekten symbolischen Links nützlich sein. | |||
[[Kategorie:Softlink]] |
Aktuelle Version vom 11. Mai 2025, 13:47 Uhr
Alle Links finden
Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens foo.txt zu finden, dann ist dies der einzige gute Weg:
find -L / -samefile path/to/foo.txt
Wenn Sie hingegen nur nach Verknüpfungen zu einer beliebigen Datei suchen, die zufällig foo.txt heißt, dann ist etwas wie
find / -lname foo.txt
oder
find . -lname \*foo.txt
das Problem mit den ignorierten führenden Pfadnamenkomponenten
- wunderbar gelöst. Vielen Dank an alle, die geantwortet haben.
Wie ich in einem gelöschten Kommentar angemerkt habe, können Sie -xtype l verwenden, um nur die Liste der Symlinks zu finden
- Sie können eine Rekursion durchführen, da jede der Dateien, die auf foo.txt verweisen, selbst von einigen anderen Links referenziert werden kann ... z. B.: A->B->foo.txt, /tmp/C->B->foo.txt und weitere
Dies kann auch funktionieren, wenn Ihr Namensbestandteil ein übergeordnetes Verzeichnis ist, das im Link genannt wird, indem Sie
find . -lname '*foo.dir*'
(entspricht z. :B. :file.txt -> ../foo.dir/file.txt)
Diese Antwort ist wirklich hilfreich, vielen Dank. Übrigens, wenn wir mehr Informationen über die Ergebnisse von "find" erhalten möchten, können wir die Ausgabe von "find" an "ls" übergeben
find -L /usr -samefile /usr/share/pyshared/lsb_release.py 2>/dev/null | xargs ls -al
Ermitteln Sie die Inode-Nummer der Datei und suchen Sie dann nach allen Dateien mit derselben Inode-Nummer
ls -i foo.txt
41525360 foo.txt
find . -follow -inum 41525360
Alternativ können Sie die Option lname von find verwenden, aber dies funktioniert nicht, wenn Sie relative symbolische Links haben, z. B. a -> ../foo.txt
find . -lname /path/to/foo.txt*
Wenn Sie eine aktuelle Version von GNU find verwenden, können Sie auch die Option -samefile mit -L verwenden, um den gleichen Effekt zu erzielen, ohne selbst nach der Inode suchen zu müssen
- Dadurch werden jedoch auch Dateien auf anderen Dateisystemen gefunden, die zufällig dieselbe Inode-Nummer haben.
- Wenn foo ein Verzeichnis ist, verwenden Sie ln -di, in einer Zeile:
find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)
Diese Antwort ist falsch
- Ein symbolischer Link hat nicht dieselbe Inode wie sein Ziel. Dies funktioniert nur für eine Datei in einem Ordner mit symbolischem Link. Aber danach wurde nicht gefragt.
symlinks utility
Das symlinks-Dienstprogramm aknn auch bei der Suche nach defekten symbolischen Links nützlich sein.