Zum Inhalt springen

Softlink/Problembehebung: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „line>“ durch „line copy>“
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== alle Dateien finden, die mit dieser Datei verknüpft sind ==


=== Es kommt darauf an ===
== Alle Links finden ==
Wenn Sie versuchen, Verknüpfungen zu einer bestimmten Datei namens <tt>foo.txt zu finden,</tt> dann ist dies der einzige gute Weg:
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>
<syntaxhighlight lang="bash" highlight="1" line copy>
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 <tt>foo.txt</tt> heißt, dann ist etwas wie
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 18: 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.
* Wie ich in einem gelöschten Kommentar angemerkt habe, können Sie <tt>-xtype l</tt> 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 usw.
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 28: Zeile 28:
(entspricht z.&nbsp:B.&nbsp:file.txt -> ../foo.dir/file.txt)  
(entspricht z.&nbsp:B.&nbsp: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
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 42: Zeile 42:
</syntaxhighlight>
</syntaxhighlight>


Alternativ können Sie die Option <tt>lname</tt> von <tt>find</tt> verwenden, aber dies funktioniert nicht, wenn Sie relative symbolische Links haben, z. B. <tt>a -> ../foo.txt</tt>
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 <tt>-samefile</tt> mit <tt>-L</tt> verwenden, um den gleichen Effekt zu erzielen, ohne selbst nach der Inode suchen zu müssen  
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 <tt>foo</tt> ein Verzeichnis ist, verwenden Sie <tt>ln -di</tt>, in einer Zeile: <tt>
* 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 -d“ “ -f1)</tt>
find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)  
</syntaxhighlight>
</syntaxhighlight>


Zeile 57: 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 ===
== symlinks utility ==
; Ich bevorzuge die Verwendung des <tt>symlinks</tt>-Dienstprogramms, das auch bei der Suche nach defekten symbolischen Links nützlich ist.
Das [[symlinks]]-Dienstprogramm aknn auch bei der Suche nach defekten symbolischen Links nützlich sein.  
 
Installation:
<syntaxhighlight lang="bash" highlight="1" line>
sudo apt install symlinks
</syntaxhighlight>
 
Alle Symlinks im aktuellen Ordner und in Unterordnern anzeigen:
<syntaxhighlight lang="bash" highlight="1" line>
symlinks -rv .* <tt>-r</tt>: rekursiv
</syntaxhighlight>
 
* <tt>-v</tt>: ausführlich (alle Symlinks anzeigen, nicht nur defekte)
 
Um einen bestimmten Symlink zu finden, einfach <tt>grep</tt>
<syntaxhighlight lang="bash" highlight="1" line>
symlinks -rv . | grep foo.txt*
</syntaxhighlight>
 
Noch nie etwas von symbolischen Links gehört (repo). „Ein nützliches Dienstprogramm für die Betreuer von FTP-Sites, CD-ROMs und Linux-Software-Distributionen. Es durchsucht Verzeichnisse nach symbolischen Links und listet sie auf der Standardausgabe auf, wobei häufig Fehler im Dateisystembaum aufgedeckt werden. Ein großartiges kleines altes Tool von dem alten Kernel-Hacker Mark Lord, dem „ursprünglichen Entwickler und Betreuer des IDE Performance Package für Linux, des Linux IDE Driver Subsystems, hdparm“, das jetzt von J. Brandt Buckley betreut wird.


Funktioniert hervorragend und ist schnell. Beachten Sie jedoch, dass Sie in jeder einzelnen Partition, die Sie interessiert, eine Suche durchführen müssen (da <tt>symlinks</tt> meines Wissens nicht zuverlässig über das hinweg sucht, was es als „verschiedene Dateisysteme“ bezeichnet). Außerdem kann <tt>symlinks -rv . 2>/dev/null | grep foo.txt</tt> zu einer „saubereren“ Ausgabe führen ...
[[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.&nbsp:B.&nbsp: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.