Finde ausführbare Dateien, die eine SO-Datei verknüpfen

320
TheBat

Ich weiß, dass ich die Dateien ausdrucken kann, die ein Exe mit Ldd verlinkt hat. Ich möchte den anderen Weg gehen.

Mein aktueller Ansatz ist, etwas auszuführen, was find / -type f -executable -exec ldd {} \; | grep my_lib.sojedoch sehr lange dauert (erwartungsvoll), da alles durchsucht werden muss. Gibt es einen schnellen Weg oder Befehl, um herauszufinden, welcher exes-Punkt auf so in Linux steht?

0

1 Antwort auf die Frage

0
Matija Nalis

Wenn Sie eine Linux-Distribution verwenden, sollte es eine geben - aber nur für Pakete in der Distribution. Für alles, was auf andere Weise installiert wird (wie in /optoder /usr/local), müssen Sie immer noch Ihre ursprüngliche Methode verwenden.

Zum Beispiel würden wir auf Debian-basierte Distro zunächst feststellen, in welchem ​​Paket sich unsere gemeinsam genutzte Bibliothek befindet:

# dpkg -S /usr/lib/libgs.so.9.05 libgs9: /usr/lib/libgs.so.9.05 

und dann alle Pakete finden, die diese Bibliothek verwenden (und Kopie in der Datei packages.txt aufbewahren ):

# dpkg-query -W -f='$ $\n' | grep -w libgs9 | awk '' | tee packages.txt ghostscript gimp libgs9 libgs9-common 

Wenn Sie genaue Binärdateien kennen müssen, in denen die Bibliotheken verwendet werden, können Sie diese Ausgabe noch ein wenig analysieren:

# while read pkg; do dpkg -L $pkg | xargs -i sh -c 'test -f {} -a -x {} && ldd {} | fgrep -H --label={} libgs.so.9'; done < packages.txt /usr/bin/gs: libgs.so.9 => /usr/lib/libgs.so.9 (0x00007fefe5611000) /usr/bin/ghostscript: libgs.so.9 => /usr/lib/libgs.so.9 (0x00007fbad0d71000) /usr/lib/gimp/2.0/plug-ins/file-ps: libgs.so.9 => /usr/lib/libgs.so.9 (0x00007f75f0a51000)