Sous Windows, EXE et DLL ont des informations de version, y compris au moins les champs suivants:
Dans la bibliothèque Linux/exécutable:
Les informations de version ne sont pas explicitement stockées dans n fichier ELF . Vous y trouverez le nom de la bibliothèque, le soname
, qui inclut la version principale. La version complète est généralement stockée en tant que partie du nom de fichier de bibliothèque.
Si vous avez une bibliothèque, dites libtest.so
, alors vous avez généralement:
libtest.so.1.0.1
- Le fichier de bibliothèque lui-même, contenant la version complètelibtest.so.1
- Lien symbolique vers libtest.so.1.0.1
, portant le même nom que soname
libtest.so
- Lien symbolique vers libtest.so.1
utilisé pour la liaison.Dans le fichier bibliothèque libtest.so.1.0.1
, il y aura une entrée appelée SONAME
dans la section dynamique, qui dira que cette bibliothèque s'appelle libtest.so.1
. Lorsque vous liez un programme à cette bibliothèque, le programme lié stockera le soname
de la bibliothèque sous NEEDED
entrée dans la section dynamique.
Si vous voulez vérifier ce qui se trouve exactement dans quel fichier ELF, vous pouvez essayer d'exécuter:
readelf -a -W elffile
où elffile
peut être soit une bibliothèque d'un exécutable.
Si vous voulez simplement obtenir la version bibliothèque, vous pouvez jouer avec:
readelf -d /path/to/library.so |grep SONAME
AFAIK, il n'y a pas de telles informations (du moins pas par défaut) dans les fichiers exécutables.
Ou vous pouvez compter sur le programme lui-même ou sur votre système d'emballage, comme l'a écrit Rahul Patil.
Vous pouvez utiliser ldconfig -v | grep libraryname
, la commande a également l'option command -V
ou binaryfile --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 également utiliser yum ou aptitude basé sur la distribution que vous utilisez, par exemple.
dans RHEL5/CENTOS5/Fedora, vous pouvez utiliser yum info packagename
ou s'il est installé, utilisez rpm --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 pkgname
ou dpkg --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.
Pour les systèmes basés sur Redhat, procédez comme suit:
ldd [file you want to run] | > needed-packages
Vérifiez le fichier des packages nécessaires, assurez-vous qu'il n'y a pas de nom de chemin dans les noms de fichier de bibliothèque. Si c'est le cas, supprimez-les, donc "/bin/lib/libx.so.1" changez en "libx.so.1"
Découvrez quel paquet contient la bibliothèque
yum -y provides [lib name]
Ou mettez-le 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 à partir de la ligne cmd:
for package in `cat packages.list | awk '{ print $1 }'`;
do
yum -y install $package
done
Vous avez terminé, exécutez votre programme. Si vous obtenez des erreurs GUI lors de l'exécution. Copiez-les et s'il s'agit de références de bibliothèque, recherchez les packages pour celles-ci et installez-les de la même manière.
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