查看Linux库/可执行版本信息


37

在Windows中,EXE和DLL具有版本信息,至少包括以下字段:

  1. 文件版本
  2. 产品版本
  3. 内部名称
  4. 产品名称
  5. 版权

在Linux库/可执行文件中:

  • 存在哪些字段?
  • 如何查看此类信息?
  • 要阅读哪些工具/库?

我已经更新了一些更多的东西请立即检查..
拉胡尔·帕蒂尔

ldconfig需要root吗?如何检查特定的libxxx.so文件,并且不想使用--version执行exe(它可能会失败)
linquize 2012年

不需要root,因为在普通用户环境中未设置/ sbin / path,因此可以使用绝对路径执行该操作,例如。/sbin/ldconfig -p
拉胡尔·帕蒂尔

Answers:


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在dynamic节中调用一个条目,该条目将称为libtest.so.1。当您将程序链接到该库时,链接的程序将在动态部分的输入soname下存储该库的NEEDED

如果要验证哪个ELF文件中确切包含什么,可以尝试运行:

readelf -a -W elffile

其中elffile可以是可执行文件的库。

如果您只想获取库的版本,则可以使用:

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

AFAIK,可执行文件中没有这样的信息(至少默认情况下不是这样)。

也可以像Rahul Patil所写的那样依靠程序本身或包装系统。


很好的信息,这对我来说从未使用过readelf,这对我来说是新的,如果您不介意,我可以问您在哪里以及为什么使用readelf
Rahul Patil

当您要查看elf文件时,Readelf(及类似工具)很有用:)。我主要在编程时在库中查找符号时(当某些内容不起作用时)或库存在问题时使用它。(man readelf
v154c1 2012年

13

您可以使用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 <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.

对于rpm,我认为您将要rpm --query pkgname列出版本字符串(rpm --version将打印其rpm自身的版本;同样可能适用dpkg
hoc_age 2014年

5

对于基于Redhat的系统,请执行以下操作:

ldd [file you want to run] | > needed-packages

签出required-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.