Windowsでは、EXEとDLLの両方に、少なくとも次のフィールドを含むバージョン情報があります。
- ファイルバージョン
- 製品バージョン
- 内部名
- 商品名
- 著作権
Linuxライブラリ/実行ファイル:
- どの分野がありますか?
- この情報をどのように見ることができますか?
- どのツール/ライブラリを読む必要がありますか?
答え1
バージョン情報は明示的に保存されません。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
elffile
実行可能ファイルのライブラリにすることができます。
ライブラリのバージョンを取得するには、次のものを使用できます。
readelf -d /path/to/library.so |grep SONAME
AFAIK、実行ファイルにはそのような情報はありません(少なくともデフォルトではありません)。
あるいは、Rahul Patilが書いたように、プログラム自体やパッケージングシステムに頼ることもできます。
答え2
を使用でき、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.
答え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などの追加情報を含むパッケージ情報を取得できます。