web-dev-qa-db-ja.com

Linuxライブラリ/実行可能バージョン情報の表示

Windowsでは、EXEとDLLには、少なくとも以下のフィールドを含むバージョン情報があります。

  1. ファイルのバージョン
  2. 製品バージョン
  3. 内部名
  4. 商品名
  5. 著作権

Linuxライブラリ/実行可能ファイルの場合:

  • どのフィールドが存在しますか?
  • そのような情報を表示する方法は?
  • どんなツール/ライブラリを読むべきですか?
41
linquize

バージョン情報は 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が書いたように、プログラム自体またはパッケージシステムに依存することもできます。

39
v154c1

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.
14
Rahul Patil

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エラーが発生した場合。それらを下にコピーし、それらがライブラリ参照である場合は、それらのパッケージを見つけて、同じ方法でインストールします。

5
JMirabile

これを実行してバージョン情報を取得します-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
4
yarick