Linuxライブラリ/実行ファイルのバージョン情報を見る

Linuxライブラリ/実行ファイルのバージョン情報を見る

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

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

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

  • どの分野がありますか?
  • この情報をどのように見ることができますか?
  • どのツール/ライブラリを読む必要がありますか?

答え1

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

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

  • libtest.so.1.0.1- フルバージョンを含むライブラリファイル自体
  • libtest.so.1libtest.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

elffile実行可能ファイルのライブラリにすることができます。

ライブラリのバージョンを取得するには、次のものを使用できます。

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

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

あるいは、Rahul Patilが書いたように、プログラム自体やパッケージングシステムに頼ることもできます。

答え2

を使用でき、ldconfig -v | grep librarynameコマンドにはオプションもありますcommand -Vbinaryfile --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 pkgnamedpkg --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.

答え3

バージョン情報を取得するには、次のコマンドを実行します。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

根本的な答えは、Linux実行可能ファイルとライブラリバイナリにはそのような標準メタデータがないことです。通常、ディストリビューションのパッケージマネージャに連絡するのが最善です。あるいは、他の答えのいくつかの例に示すように、プログラム自体に識別文字列が含まれていることを願っています。

Fedora Linux 36リリース(この記事を書く時点でリリース予定)では、以下を追加しました。情報をELFオブジェクトにカプセル化する。 Debian にはこれを行う概念証明もあります。

インストールしたら、次のことができます(例:)。

$ readelf --notes /lib/libedit.so.0 |grep -A3 .note.package
Displaying notes found in: .note.package
  Owner                Data size    Description
  FDO                  0x00000084   FDO_PACKAGING_METADATA
    Packaging Metadata: {"type":"rpm","name":"libedit","version":"3.1-41.20210910cvs.fc36","architecture":"i386","osCpe":"cpe:/o:fedoraproject:fedora:36"}

...これにより、ライセンス、プロジェクトURLなどの追加情報を含むパッケージ情報を取得できます。

関連情報