
Gibt es eine integrierte Funktion in GNU Linux, mit der man eine Liste der Dateinamen gemeinsam genutzter Bibliotheken abrufen kann? Ich habe überlegt, die Ausgabe von zu analysieren ldconfig -p
. Ich bin mir jedoch nicht sicher, ob die Ausgabe von System zu System konsistent ist.
Ich weiß bereits, dass ich verwenden könnte, find
aber da der Linker/Loader einen Cache mit Bibliotheken und Speicherorten hat, scheint es effizienter, ihn irgendwie zu verwenden. Außerdem sind die Pfade, die der Linker/Loader durchsucht, die einzigen, die mich interessieren – also Bibliotheken, die von verarbeitet wurden ldconfig
.
Antwort1
Wenn Sie sie alle erfassen möchten, bleibt Ihnen keine andere Wahl, als das gesamte Dateisystem zu durchsuchen. ldconfig
kennt nur die Bibliotheken in den Standardpfaden und die zusätzlichen Pfade, in denen es gemäß seiner Konfiguration suchen soll (normalerweise definiert in /etc/ld.so.conf*
). Die üblichen verdächtigen Orte, an denen andere Bibliotheken zu finden sind, sind $HOME
und /opt
, obwohl es keine Begrenzung gibt, insbesondere wenn Benutzer Anwendungen selbst erstellen.
Wenn Sie der Ausgabe von nicht trauen ldconfig -p
, können Sie den Cache direkt analysieren. Er ist binär, aber die Verwendung strings
entfernt allen Müll (5, damit /lib/ übereinstimmt):
strings -n5 /etc/ld.so.cache
Auf meinem System liefern beide die gleichen Ergebnisse, was ich mit diesem Quickie überprüft habe:
a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u);
echo -e "$a\n$b\n$b" | sort | uniq -u
Dabei wurde geprüft, ob eine der Bibliotheken auf der ldconfig -p
Liste nicht im Cache erwähnt wurde. Es wurde nichts zurückgegeben.