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

Эта страница описывает интерактивную команду подробно и является на самом деле довольно полным учебным руководством. Описывает команды такой как z и z- :

If there is more than a screenful of messages, then z will
show the next screenful, and z- will show the previous screenful.

39
19.12.2012, 10:06
4 ответа

Информация о версии в не явно сохраненный в файле 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.

38
27.01.2020, 19:35
  • 1
    хорошая информация, это плохо мне знакомо, никогда не использовал readelf, если Вы не возражаете, могу я спрашивать Вас, где и почему readelf –  Rahul Patil 19.12.2012, 09:37
  • 2
    Readelf использования (и подобные инструменты) полезен, когда Вы хотите посмотреть в файле эльфа :). Я использую его главным образом при программировании для поиска символов в библиотеках (когда что-то не работает), или когда существует некоторая проблема с библиотекой. (человек readelf) –  v154c1 19.12.2012, 10:14

Можно использовать 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.

также можно использовать конфетку или способность на основе дистрибутива, который Вы используете, например.

в 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.
13
27.01.2020, 19:35
  • 1
    Для rpm, Я думаю, что Вы захотите rpm --query pkgname перечислять строку версии (rpm --version распечатает версию rpm самостоятельно; то же могло бы быть верным для dpkg) –  hoc_age 16.09.2014, 17:19

Для систем на базе 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-ошибки. Скопируйте их и, если это ссылки на библиотеки, найдите пакеты для них и установите их тем же способом.

5
27.01.2020, 19:35

Запустите это, чтобы получить информацию о версии-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
9
27.01.2020, 19:35

Теги

Похожие вопросы