Unter einer Linux-Betriebssystemumgebung werden die binären ausführbaren Dateien, die mit den Anwendungen/Programmen verbunden sind, die Sie ausführen möchten, direkt mit gemeinsam genutzten Bibliotheken verknüpft, die zur Laufzeit geladen werden.
Als neugieriger und sich entwickelnder Linux-Benutzer werden Sie versucht sein, sich ein Bild über diese gemeinsam genutzten Bibliotheken zu machen, die mit den binären ausführbaren Dateien, die Sie während eines normalen Programmstarts ausführen, involviert/verknüpft sind.
Dieser Artikel führt uns durch verschiedene Ansätze, um alle gemeinsam genutzten Bibliotheken herauszufinden, die von ausführbaren Dateien in Linux verwendet werden.
Kurzer Überblick über Linux-Bibliotheken
Ein Programmierer oder ein mit der Programmierwelt vertrauter Benutzer wird eine Bibliothek als vorkompilierte Codeteile/Segmente definieren, die auf organisierte Weise/in einem organisierten Format zusammengesetzt sind. Die vorkompilierte Natur/das Attribut einer Bibliothek macht sie flexibel und einfach zwischen verschiedenen Programmen wiederverwendbar.
Unter der Linux-Betriebssystemarchitektur können wir Bibliotheken entweder als statisch kategorisieren (statische Bibliotheken ) oder geteilt (gemeinsame Bibliotheken ).
Statische Bibliotheken sind statisch an ein bestimmtes Programm gebunden und nur während der Kompilierzeit des Programms zugänglich. Gemeinsam genutzte Bibliotheken werden aktiv, sobald ein Programm gestartet wird, und verbleiben während der Laufzeit des Programms im Arbeitsspeicher.
So finden Sie die gemeinsam genutzten Bibliotheken eines Programms in Linux
Bevor Sie die mit Ihrem Zielprogramm verknüpften gemeinsam genutzten Bibliotheken bestimmen, müssen Sie zunächst wissen, wo sich die mit Ihrem Programm verknüpfte ausführbare Datei befindet. Unter Linux befindet sich der Speicherort für die ausführbaren Dateien Ihrer Programme normalerweise innerhalb von /usr/bin Verzeichnis.
$ ls -l /usr/bin
Die Spalte ganz rechts listet die Namen der ausführbaren Dateien Ihrer Programme auf.
Suchen Sie gemeinsam genutzte Bibliotheken des Linux-Programms mit dem Befehl ldd
Der ldd Der Befehl existiert als einfaches Shell-Skript, das auf die gemeinsam genutzten Bibliotheken eines Programms verweist. Lassen Sie uns gemäß obiger Bildschirmaufnahme beispielsweise versuchen, die gemeinsam genutzten Bibliotheken auszugeben, die mit der Anydesk-Anwendung verknüpft sind.
Wir könnten den Speicherort der ausführbaren Datei von Anydesk mit dem folgenden Befehl ermitteln:
$ whereis anydesk
Um seine gemeinsam genutzten Bibliotheken über das ldd zu ermitteln Befehl, werden wir ausführen:
$ ldd /usr/bin/anydesk
Wie Sie sehen können, haben wir eine Liste zahlreicher Bibliotheken, die mit anydesk verknüpft sind Anwendung. Bitte beachten Sie, dass die ldd Der Befehl neigt dazu, abgefragte Programme auszuführen, um Informationen zu gemeinsam genutzten Bibliotheken abzurufen. Verknüpfen Sie den Befehl daher nur mit vertrauenswürdigen ausführbaren Dateien.
Gemeinsame Programmbibliotheken mit den Befehlen objdump und grep suchen
Der objdump Befehl, der Teil der GNU Binutils ist Paket konzentriert sich auf die Anzeige der Objektdateiinformationen, während das grep Der Befehl listet die zugehörigen gemeinsam genutzten Bibliotheken des Programms auf.
Mal sehen, was diese Befehle für ein Programm wie whois ergeben Wird für Informationen zu Domainnamen verwendet.
$ whereis whois
Als nächstes finden Sie die gemeinsam genutzten Bibliotheken des Programms heraus.
$ objdump -p /usr/bin/whois | grep 'NEEDED'
Wie Sie sehen können, das whois Die ausführbare Domain-Lookup-Programmdatei ist zwei gemeinsam genutzten Bibliotheken zugeordnet.
Alternativ können Sie auch das readelf verwenden Befehl zum Abrufen freigegebener Informationen für die ausführbare Datei des ZIP-Programms.
$ whereis zip $ readelf --dynamic /usr/bin/zip | grep NEEDED
Gemäß der Ausgabe ist die zip Die ausführbare Programmdatei ist zwei gemeinsam genutzten Bibliotheken zugeordnet.
Gemeinsam genutzte Bibliotheken mit dem Awk-Befehl finden
Diese Option ist ideal für ein bereits laufendes Programm. Wir müssen zuerst seine PID abrufen (Prozess-ID ). Sagen wir zum Beispiel, wir haben den Flammenschuss Dienstprogramm zur Bildschirmaufnahme wird ausgeführt.
Um seine PID zu erhalten , werden wir ausführen:
$ pgrep flameshot 45261
Unsere /proc/
$ awk '$NF!~/\.so/{next} {$0=$NF} !a[$0]++' /proc/45261/maps
Wir sind jetzt gut damit vertraut, alle gemeinsam genutzten Bibliotheken aufzulisten, die mit ausführbaren Programmdateien in Linux verbunden sind.