Что лучший способ состоит в том, чтобы проверить версию библиотеки по Ubuntu

3
задан 26 August 2014 в 17:31
1 ответ

Прежде всего. Иногда, когда люди говорят о библиотеках, они говорят о .deb пакетах, которые предоставляют библиотеки другим пакетам. Мы будем иметь дело с тем случаем сначала. Другой контекст, в котором Вы слышите термин библиотека, пользовавшаяся, является традиционным .so смысл общего объекта. Мы будем иметь дело с той секундой.

apt-cache depends <package_name> возвратит список пакетов, которые являются зависимостями для <package name>. Пакеты являются не обязательно подходящими библиотеками (т.е. библиотеки в смысле связываемого .so файлы), но в Debian и Ubuntu библиотеки обычно упаковываются как lib<something>. Если Вы делаете a dpkg -l |grep <library package name> можно найти, какой пакет, содержащий, какие библиотеки установлены.

kelliott@mis-ke-lnx:~$  apt-cache depends perl
perl
  Depends: perl-base
  Depends: perl-modules
  Depends: libbz2-1.0
  Depends: libc6
  Depends: libdb4.7
  Depends: libgdbm3
  Depends: zlib1g
kelliott@mis-ke-lnx:~$ dpkg -l |grep libc6
ii  libc6                                    2.11.2-10                         Embedded GNU C Library: Shared libraries
ii  libc6-dev                                2.11.2-10                         Embedded GNU C Library: Development Libraries and Header Files

Или можно пойти другим путем. Если Вы задаетесь вопросом, какой пакет потребовал пакета libwww-perl можно использовать этот удобный небольшой сценарий жемчуга для возврата списка libwww-perl обратные зависимости, которые также установлены.

#!/usr/bin/env perl
use strict;
use warnings;

use AptPkg::Cache;
my $cache = AptPkg::Cache->new;

my $pkg = $ARGV[0]
    or die 'supply a package name as the first arg';

my @acrd = split /\s+/, `apt-cache rdepends $pkg`;

my $state;
for (@acrd) {
    unless ( $_ eq 'Reverse' or $_ eq 'Depends:' ) {
        $state = $cache->{$_}->{'CurrentState'};
        print "$_\n" if $state eq 'Installed';
    }
}

Теперь .so файлы общего объекта немного отличаются. Мне нравится использовать комбинацию ldd и apt-file. Скажем, я интересуюсь объектными файлами, связанными против ls:

kelliott@mis-ke-lnx:~$ ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007fff8b05d000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x00007fcfb7e24000)
    librt.so.1 => /lib/librt.so.1 (0x00007fcfb7c1c000)
    libacl.so.1 => /lib/libacl.so.1 (0x00007fcfb7a14000)
    libc.so.6 => /lib/libc.so.6 (0x00007fcfb76b3000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007fcfb74af000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fcfb8057000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007fcfb7292000)
    libattr.so.1 => /lib/libattr.so.1 (0x00007fcfb708e000)
kelliott@mis-ke-lnx:~$ apt-file search libattr.so.1
    ia32-libs: /lib32/libattr.so.1
    ia32-libs: /lib32/libattr.so.1.1.0
    libattr1: /lib/libattr.so.1
    libattr1: /lib/libattr.so.1.1.0
kelliott@mis-ke-lnx:~$ dpkg -l |grep libattr1
    ii  libattr1                                 1:2.4.44-2                        Extended attribute shared library
kelliott@mis-ke-lnx:~$ file /lib/libattr.so.1
/lib/libattr.so.1: symbolic link to `libattr.so.1.1.0'
kelliott@mis-ke-lnx:~$ file /lib/libattr.so.1.1.0
/lib/libattr.so.1.1.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped

Поскольку Вы видите нашего хорошего друга ls имеет довольно много библиотек, связанных против него. libattr.so.1 атрибуты файла дескрипторов, если я помню правильно. Выполнение apt-file search против него показывает, что это было установлено двумя пакетами ia32-libs и libattr1 (один для 32 битов и один для 64 битов). И в моей системе это похоже libattr1 пакет (в версии 1:2.4.44-2) установил libattr.so файл общего объекта, который после дальнейшего расследования является в версии 1.1.0.

3
ответ дан 3 December 2019 в 06:45

Теги

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