Affichage des informations de version de la bibliothèque Linux / de l'exécutable


38

Sous Windows, EXE et DLL ont des informations sur la version, notamment les champs suivants:

  1. version du fichier
  2. Version de produit
  3. Nom interne
  4. nom du produit
  5. droits d'auteur

Dans Linux Library / Executable:

  • Quels champs sont présents?
  • Comment voir ces informations?
  • Quels outils / bibliothèques à lire?

J'ai mis à jour quelques autres choses s'il vous plaît vérifier maintenant ..
Rahul Patil

ldconfig a besoin de root? Que diriez-vous de vérifier un fichier spécifique libxxx.so et de ne pas exécuter un fichier exe avec --version (cela pourrait échouer)
linquize

pas besoin de root, puisque / sbin / path n'est pas défini dans Environment utilisateur normal, vous pouvez l'exécuter en utilisant un chemin absolu, par exemple. /sbin/ldconfig -p
Rahul Patil

Réponses:


36

Les informations de version ne sont pas explicitement stockées dans un fichier ELF . Ce que vous avez dedans est le nom de la bibliothèque, le soname, qui inclut la version principale. La version complète est généralement stockée dans le nom de fichier de la bibliothèque.

Si vous avez une bibliothèque, par exemple libtest.so, vous avez généralement:

  • libtest.so.1.0.1 - Le fichier de bibliothèque lui-même, contenant la version complète
  • libtest.so.1- Lien symbolique vers libtest.so.1.0.1, ayant le même nom quesoname
  • libtest.so- Lien symbolique à libtest.so.1utiliser pour la liaison.

Dans le fichier de bibliothèque libtest.so.1.0.1, il y aura une entrée appelée SONAMEdans la section dynamique, qui indiquera que cette bibliothèque est appelée libtest.so.1. Lorsque vous liez un programme à cette bibliothèque, le programme lié stockera le sonamede la bibliothèque sous l' NEEDEDentrée dans la section dynamique.

Si vous voulez vérifier en quoi consiste exactement le fichier ELF, vous pouvez essayer de lancer:

readelf -a -W elffile

elffilepeut être soit une bibliothèque d'un exécutable.

Si vous voulez simplement obtenir la version de la bibliothèque, vous pouvez jouer avec:

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

Autant que je sache, il n'y a pas de telles informations (du moins pas par défaut) dans les fichiers exécutables.

Vous pouvez également compter sur le programme lui-même ou sur votre système d’emballage, comme l’a écrit Rahul Patil.


info sympa, c'est nouveau pour moi jamais utilisé readelf, si cela ne vous dérange pas, puis-je vous demander où et pourquoi utiliser readelf
Rahul Patil

Readelf (et des outils similaires) est utile lorsque vous voulez regarder à l'intérieur d'un fichier elf :). Je l'utilise principalement lors de la programmation pour rechercher des symboles dans les bibliothèques (lorsque quelque chose ne fonctionne pas) ou lorsqu'il y a un problème avec une bibliothèque. ( homme )
v154c1

13

Vous pouvez utiliser ldconfig -v | grep libraryname, aussi commande a option command -Voubinaryfile --version

Exemple :

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.

vous pouvez aussi utiliser yum ou aptitude en fonction de la distribution que vous utilisez, par exemple.

dans RHEL5 / CENTOS5 / Fedora, vous pouvez utiliser yum info packagenameou, s’il est installé, utilisezrpm --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.

Dans Ubuntu, vous pouvez utiliser aptitude show pkgnameoudpkg --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 <ubuntu-devel-discuss@lists.ubuntu.com>
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.

Pour rpm, je pense que vous voudrez rpm --query pkgnamelister la chaîne de version ( rpm --versionimprimera sa version rpmelle - même; il pourrait en être de même pour dpkg)
hoc_age

5

Pour les systèmes basés sur Redhat, procédez comme suit:

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

Extrayez le fichier required-packages, assurez-vous qu'il n'y a pas de noms de chemin dans les noms de fichier de bibliothèque. Si tel est le cas, supprimez-le et remplacez "libx.so.1" par "/bin/lib/libx.so.1".

Découvrez quel paquet contient la bibliothèque

yum -y provides [lib name]

Ou mettez ceci dans un script ou exécutez à partir de la ligne cmd:

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

Ensuite, créez le script suivant ou exécutez-le à partir de la ligne de commande:

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

Vous avez terminé, lancez votre programme. Si vous obtenez des erreurs d'interface graphique lors de l'exécution. Copiez-les et s'il s'agit de références de bibliothèques, recherchez les packages correspondants et installez-les de la même manière.


2

Exécutez ceci pour obtenir des informations sur la version - 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.