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


38

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

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

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

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

私はいくつかのより多くの事は今...ご確認ください更新しました
ラーフルパティル

ldconfigにはrootが必要ですか?特定のlibxxx.soファイルをチェックして、
version

/ sbin /パスは通常のユーザー環境では設定されないため、絶対パスを使用して実行できます。/sbin/ldconfig -p
ラーフルパティル

回答:


36

バージョン情報は、ELFファイルに明示的に保存されていません。そこにあるのは図書館の名前、soname。これには、メジャーバージョンが含まれています。通常、フルバージョンはライブラリファイル名の一部として保存されます。

ライブラリがある場合、たとえばlibtest.so、次のようになります。

  • libtest.so.1.0.1 -完全版を含むライブラリファイル自体
  • libtest.so.1-へのシンボリックリンクとlibtest.so.1.0.1同じ名前soname
  • libtest.so- libtest.so.1リンクに使用されるシンボリックリンク。

ライブラリファイルlibtest.so.1.0.1にはSONAME、ダイナミックセクションで呼び出されるエントリがありますlibtest.so.1。つまり、このライブラリはと呼ばれます。このライブラリに対してプログラムをリンクすると、リンクされたプログラムは動的セクションのエントリのsoname下にライブラリのを保存しNEEDEDます。

どのELFファイルに何が含まれているかを確認したい場合は、次を実行してください。

readelf -a -W elffile

where elffileは、実行可能ファイルのライブラリのいずれかです。

ライブラリバージョンを取得するだけの場合は、次の操作を実行できます。

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

私の知る限り、実行可能ファイルにはそのような情報はありません(少なくともデフォルトではありません)。

または、Rahul Patilが書いたように、プログラム自体またはパッケージングシステムに依存できます。


素敵な情報、あなたが気にしないならば、それは、使用済みのreadelfが私に新しいことはない、私はあなたを求めることができる場所と理由を使用readelfが
ラーフルパティル

Readelf(および同様のツール)は、elfファイルの内部を見たい場合に便利です:)。主に、ライブラリでシンボルを検索するためにプログラミングするとき(何かが機能しないとき)、またはライブラリに問題があるときに使用します。(男性readelfが
v154c1

13

を使用すること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 <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.

のためにrpmrpm --query pkgnameバージョン文字列をリストしたいと思うと思います(それ自体rpm --versionのバージョンを出力しrpmます。同じことが当てはまるかもしれませんdpkg
hoc_age

5

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


2

これを実行してバージョン情報を取得します- 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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.