Просмотр информации о библиотеке Linux / исполняемой версии

38

В Windows EXE и DLL имеют информацию о версии, включая, по крайней мере, следующие поля:

  1. версия файла
  2. версия продукта
  3. внутреннее имя
  4. наименование товара
  5. авторское право

В Linux Library / Исполняемый файл:

  • Какие поля присутствуют?
  • Как просмотреть такую ​​информацию?
  • Какие инструменты / библиотеки читать?
linquize
источник
Я обновил еще некоторые вещи, пожалуйста, проверьте сейчас ..
Рахул Патил
ldconfig нужен рут? Как насчет того, чтобы проверить определенный файл libxxx.so и не хотите запускать exe с --version (может произойти сбой)
linquize
root не нужен, так как / sbin / path не задан в обычной пользовательской среде, вы можете выполнить его, используя абсолютный путь, например. /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

где elffileможет быть библиотека исполняемого файла.

Если вы просто хотите получить версию библиотеки, вы можете поиграть с:

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

AFAIK, такой информации нет (по крайней мере, по умолчанию) в исполняемых файлах.

Или вы можете положиться на саму программу или свою систему упаковки, как писал Рахул Патил.

v154c1
источник
хорошая информация, это ново для меня никогда не использовал readelf, если вы не возражаете, могу я спросить вас, где и зачем использовать readelf
Rahul Patil
Readelf (и аналогичные инструменты) полезен, когда вы хотите заглянуть внутрь эльфийского файла :). Я использую его в основном при программировании для поиска символов в библиотеках (когда что-то не работает) или когда есть проблемы с библиотекой. ( man 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.
Рахул Патил
источник
Для rpm, я думаю , что вы хотите rpm --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 при запуске. Скопируйте их, и, если они являются ссылками на библиотеки, найдите пакеты для них и установите таким же образом.

JMirabile
источник
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
yarick
источник