Anzeigen von Informationen zur Linux-Bibliothek / ausführbaren Datei

37

In Windows verfügen EXE und DLL über Versionsinformationen, die mindestens die folgenden Felder enthalten:

  1. Dateiversion
  2. Produktversion
  3. Interner Name
  4. Produktname
  5. Urheberrechte ©

In der Linux Library / Executable:

  • Welche Felder sind vorhanden?
  • Wie kann man solche Informationen anzeigen?
  • Welche Tools / Bibliotheken sollen gelesen werden?
linquize
quelle
Ich habe einige weitere Dinge aktualisiert, bitte überprüfen Sie jetzt ..
Rahul Patil
ldconfig brauche root? Was ist, wenn Sie eine bestimmte libxxx.so-Datei überprüfen und keine exe mit --version ausführen möchten (dies kann fehlschlagen)
linquize
no need root, da / sbin / path in der normalen Benutzerumgebung nicht festgelegt ist, können Sie dies unter Verwendung des absoluten Pfads ausführen, z. /sbin/ldconfig -p
Rahul Patil

Antworten:

36

Die Versionsinformationen werden nicht explizit in einer ELF-Datei gespeichert . Was Sie dort haben, ist der Name der Bibliothek, die sonamedie Hauptversion enthält. Die Vollversion wird normalerweise als Teil des Bibliotheksdateinamens gespeichert.

Wenn Sie eine Bibliothek haben, sagen wir libtest.so, dann haben Sie normalerweise:

  • libtest.so.1.0.1 - Die Bibliotheksdatei selbst, die die Vollversion enthält
  • libtest.so.1- Symlink zu libtest.so.1.0.1, mit dem gleichen Namen wiesoname
  • libtest.so- Symlink zum libtest.so.1Verlinken.

In der Bibliotheksdatei libtest.so.1.0.1gibt es einen Eintrag SONAMEim dynamischen Bereich, der besagt, dass diese Bibliothek aufgerufen wird libtest.so.1. Wenn Sie ein Programm mit dieser Bibliothek verknüpfen, speichert das verknüpfte Programm sonamedie Bibliothek unter dem NEEDEDEintrag im dynamischen Bereich.

Wenn Sie überprüfen möchten, was genau in welcher ELF-Datei enthalten ist, können Sie versuchen, Folgendes auszuführen:

readelf -a -W elffile

Dabei elffilekann es sich entweder um eine Bibliothek einer ausführbaren Datei handeln.

Wenn Sie einfach nur die Bibliotheksversion erhalten möchten, können Sie damit spielen:

readelf -d  /path/to/library.so |grep SONAME

AFAIK, es gibt keine solchen Informationen (zumindest nicht standardmäßig) in ausführbaren Dateien.

Oder Sie können sich auf das Programm selbst oder auf Ihr Verpackungssystem verlassen, wie Rahul Patil schrieb.

v154c1
quelle
nette info, es ist neu für mich nie readelf verwendet, wenn Sie nichts dagegen haben, kann ich Sie fragen, wo und warum readelf verwenden
Rahul Patil
Readelf (und ähnliche Tools) ist nützlich, wenn Sie in eine Elf-Datei schauen möchten :). Ich benutze es meistens, wenn ich programmiere, um Symbole in Bibliotheken nachzuschlagen (wenn etwas nicht funktioniert) oder wenn es ein Problem mit einer Bibliothek gibt. ( man readelf )
v154c1
13

Sie können verwenden ldconfig -v | grep libraryname, auch Befehl hat Option command -Voderbinaryfile --version

Beispiel:

test@ubuntukrb12:~# ls --version
ls (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Sie können auch yum oder aptitude verwenden, basierend auf der Distribution, die Sie verwenden, z.

In RHEL5 / CENTOS5 / Fedora können Sie verwenden, yum info packagenameoder wenn es installiert ist, verwenden Sierpm --version packagename

 [root@ldap1 ~]# yum info bind97
    Loaded plugins: downloadonly, fastestmirror, security
    Loading mirror speeds from cached hostfile
     * base: mirrors.sin3.sg.voxel.net
     * epel: mirror.imt-systems.com
     * extras: mirrors.sin3.sg.voxel.net
     * updates: mirrors.sin3.sg.voxel.net
    Installed Packages
    Name       : bind97
    Arch       : i386
    Epoch      : 32
    Version    : 9.7.0
    Release    : 10.P2.el5_8.4
    Size       : 6.3 M
    Repo       : installed
    Summary    : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
    URL        : http://www.isc.org/products/BIND/
    License    : ISC
    Description: BIND (Berkeley Internet Name Domain) is an implementation of the DNS
               : (Domain Name System) protocols. BIND includes a DNS server (named),
               : which resolves host names to IP addresses; a resolver library
               : (routines for applications to use when interfacing with DNS); and
               : tools for verifying that the DNS server is operating properly.

In Ubuntu können Sie aptitude show pkgnameoder verwendendpkg --version pkgname

root@ubuntukrb12:~# aptitude show bind9utils
Package: bind9utils
State: installed
Automatically installed: yes
Version: 1:9.8.1.dfsg.P1-4ubuntu0.4
Priority: optional
Section: net
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Uncompressed Size: 306 k
Depends: libbind9-80, libc6 (>= 2.14), libdns81, libisc83, libisccc80, libisccfg82
Conflicts: bind9utils
Replaces: bind9 (<= 1:9.5.0~b2-1), bind9 (<= 1:9.5.0~b2-1)
Description: Utilities for BIND
 This package provides various utilities that are useful for maintaining a working BIND installation.
Rahul Patil
quelle
Denn rpm, ich glaube , Sie wollen rpm --query pkgnamedie Version Zeichenfolge zur Liste ( rpm --versiondruckt die Version von rpmsich selbst, ebenso wahr sein könnte für dpkg)
hoc_age
5

Gehen Sie für Redhat-basierte Systeme wie folgt vor:

ldd [file you want to run] | > needed-packages

Checken Sie die Datei "needed-packages" aus und vergewissern Sie sich, dass die Bibliotheksdateinamen keine Pfadnamen enthalten. Wenn ja, entferne sie, also "/bin/lib/libx.so.1" ändere sie in "libx.so.1"

Finden Sie heraus, welches Paket die Bibliothek enthält

yum -y provides [lib name]

Oder fügen Sie dies in ein Skript ein oder führen Sie es in der Befehlszeile aus:

for lib in `cat libs.txt`;
do
   yum -y provides $lib | head -2 | grep " : " >> packages.list
done

Erstellen Sie als Nächstes das folgende Skript oder führen Sie es in der Befehlszeile aus:

for package in `cat packages.list | awk '{ print $1 }'`;
do
    yum -y install $package
done

Sie sind fertig, führen Sie Ihr Programm aus. Wenn Sie GUI-Fehler beim Ausführen erhalten. Kopieren Sie sie nach unten, und wenn es sich um Bibliotheksreferenzen handelt, suchen Sie die entsprechenden Pakete und installieren Sie sie auf die gleiche Weise.

JMirabile
quelle
2

Führen Sie dies aus, um Versionsinformationen zu erhalten - strings libssl.so.1.0.0 | grep "1\.0"

SSLv3 part of OpenSSL 1.0.2p-fips  14 Aug 2018
OpenSSL 1.0.2p-fips  14 Aug 2018
TLSv1 part of OpenSSL 1.0.2p-fips  14 Aug 2018
DTLSv1 part of OpenSSL 1.0.2p-fips  14 Aug 2018
yarick
quelle