Windowsでは、EXEとDLLには、少なくとも以下のフィールドを含むバージョン情報があります。
Linuxライブラリ/実行可能ファイルの場合:
バージョン情報は ELFファイル に明示的に保存されていません。そこには、ライブラリの名前soname
があり、これにはメジャーバージョンが含まれています。通常、フルバージョンはライブラリファイル名の一部として保存されます。
ライブラリがある場合、libtest.so
と言うと、通常は次のようになります。
libtest.so.1.0.1
-フルバージョンを含むライブラリファイル自体libtest.so.1
-soname
と同じ名前のlibtest.so.1.0.1
へのシンボリックリンクlibtest.so
-リンクに使用されるlibtest.so.1
へのシンボリックリンク。ライブラリファイルlibtest.so.1.0.1
では、動的セクションにSONAME
というエントリがあります。つまり、このライブラリはlibtest.so.1
と呼ばれます。このライブラリに対してプログラムをリンクすると、リンクされたプログラムは、ライブラリのsoname
を動的セクションのNEEDED
エントリの下に格納します。
確認したい場合は、ELFファイルの正確な内容を確認して、次のコマンドを実行してみてください。
readelf -a -W elffile
ここで、elffile
は実行可能ファイルのライブラリのいずれかです。
ライブラリのバージョンを取得したいだけの場合は、次の方法で遊ぶことができます。
readelf -d /path/to/library.so |grep SONAME
私の知る限り、実行可能ファイルにはそのような情報はありません(少なくともデフォルトでは)。
または、Rahul Patilが書いたように、プログラム自体またはパッケージシステムに依存することもできます。
ldconfig -v | grep libraryname
を使用できます。コマンドにはcommand -V
またはbinaryfile --version
のオプションもあります
例:
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.
また、使用しているディストリビューションに基づいて、yumまたはaptitudeを使用することもできます。
rHEL5/CENTOS5/Fedoraではyum info packagename
を使用できます。インストールされている場合は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.
Ubuntuではaptitude show pkgname
または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.
Redhatベースのシステムの場合、これを行います。
ldd [file you want to run] | > needed-packages
必要なパッケージファイルをチェックアウトし、ライブラリファイル名にパス名がないことを確認します。削除している場合は、「/ bin/lib/libx.so.1」を「libx.so.1」に変更します。
ライブラリが含まれているパッケージを確認する
yum -y provides [lib name]
または、これをスクリプトに入れるか、cmd行から実行します。
for lib in `cat libs.txt`;
do
yum -y provides $lib | head -2 | grep " : " >> packages.list
done
次に、次のスクリプトを作成するか、cmd行から実行します。
for package in `cat packages.list | awk '{ print $1 }'`;
do
yum -y install $package
done
完了したら、プログラムを実行します。実行中にGUIエラーが発生した場合。それらを下にコピーし、それらがライブラリ参照である場合は、それらのパッケージを見つけて、同じ方法でインストールします。
これを実行してバージョン情報を取得します-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