Как проверить установлена ли библиотека в linux

Обновлено: 05.07.2024

Как вы знаете каждая программа, установленная на вашем компьютере, состоит из нескольких частей. Это непосредственно исполняемый файл, который вы запускаете через терминал, а также библиотеки с набором функций, которые может использовать программа.

Все, без исключения, программы используют библиотеки. Даже если это ваша программа и у нее нет своих библиотек, она использует стандартную библиотеку языка программирования С.

В этой статье мы подробно рассмотрим что такое библиотеки Ubuntu, как их устанавливать, где брать и что делать если библиотека установлена, а программа говорит что ее нет. Мы не будем трогать создание библиотек, это совсем не наша тема. Как обычно, начнем с теории.

Что такое библиотеки

Библиотеки в Linux содержат наборы функций или если сказать проще алгоритмов или действий для решения определенных задач. Например, если программе нужно вывести строку на экран она не начинает сама закрашивать нужные пиксели, а просто обращается к отвечающей за это функции из библиотеки, то же самое если программе нужно прочитать содержимое файла, она не работает с секторами жесткого диска, ей достаточно вызвать функцию из стандартной библиотеки с (libc.so) и передать ей в параметрах имя нужного файла, а библиотека уже вернет ей запрашиваемые данные.

На самом деле, такая структура реализации программного обеспечения очень выгодна, поскольку достаточно написать алгоритм лишь один раз и его смогут использовать все программы просто загружая библиотеку.

Не нужно думать что библиотеки есть только в Linux, в Windows они тоже есть, только имеют другой формат и расширение dll. В Linux же все библиотеки находятся в папах /lib/, /usr/lib, /usr/local/lib или для 64 битных систем также появляется папка lib64 во всех этих подкаталогах, для библиотек специфичных для этой архитектуры. Библиотека имеет расширение .so и ее название начинается со слова lib. Например, libfuse.so, libc.so.

Дальше, после расширения файла .so идет номер версии библиотеки. Номер версии меняется всякий раз, когда разработчики вносят в нее изменения ломающие совместимость со всеми рассчитанными на нее программами. В таком случае в системе будут уже две библиотеки и каждая программа будет использовать правильную версию. Например, glibc.so.6 и glibc.so.5.

Если интересно можно даже посмотреть какие библиотеки и каких версий, использует та или иная программа, например:

linux-vdso.so.1 (0x00007ffd99167000)
libmount.so.1 => /usr/lib64/libmount.so.1 (0x00007f0f6beb0000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0f6bb08000)
libblkid.so.1 => /usr/lib64/libblkid.so.1 (0x00007f0f6b8c8000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f0f6b6a4000)
/lib64/ld-linux-x86-64.so.2 (0x000055aca8227000)
libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00007f0f6b49f000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f0f6b238000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0f6b034000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0f6ae17000)

Также эта информация может быть полезна при создании портативных версий программ. А теперь давайте рассмотрим как устанавливаются библиотеки в Ubuntu.

Установка библиотек в Ubuntu

Обычно, если вы используете менеджер пакетов вашего дистрибутива для установки новых программ, то библиотеки устанавливаются автоматически. Но если вы хотите собрать программу из исходников или запустить 32 битную программу на 64 битной системе могут начаться проблемы. Например, при запуске или компиляции программы вы получаете ошибку:

error while loading shared libraries: xxxx.so.0
cannot open shared object file no such file or directory

Обычно, в Ubuntu имена пакетов библиотек соответствуют имени нужной библиотеки. Поэтому чтобы определить точное имя в большинстве случаев достаточно воспользоваться поиском по базе пакетов:

apt search libfuse

library

Как видите, найдено два варианта библиотеки, libfuse2 и libfuse-dev.

Если библиотека нужна обычной программе и ее не нужно собирать из исходников, то будет достаточно установить библиотеку ubuntu без префикса dev. Например:

sudo apt install libfuse2

Если же вам нужно собрать приложение из исходников, то кроме обычной библиотеки понадобятся заголовочные файлы, в которых содержится описание реализованных в библиотеке функций. Такие пакеты имеют приставку dev, например, libfuse-dev, тогда нужно устанавливать этот пакет, а он уже в зависимостях потянет и обычную библиотеку, если она еще не установлена:

sudo apt install libfuse-dev

Много проблем может вызвать ситуация, когда вам нужно запустить 32 битную программу в 64 битной системе. Например, если вы установили 64 битную версию библиотеки, а программа все равно говорит о том, что не может ее найти, возможно это 32 битная программа и ей необходима именно 32 библиотека. Если программа не устанавливается с помощью пакетного менеджера, вам тоже придется устанавливать библиотеки вручную.

Посмотреть разрядность бинарника можно с помощью утилиты file:

library3

На скриншоте показаны два варианта вывода программы, для 32 бит, в нашем случае Skype и для 64 - mount.

Для того чтобы установить библиотеку Ubuntu с архитектурой i386 сначала необходимо добавить поддержку архитектуры i386 в dpkg:

sudo dpkg --add-architecture i386

Затем обновляем наши репозитории:

sudo apt update

А во время установки нужной вам библиотеки теперь необходимо указать архитектуру через двоеточие после имени пакета:

sudo apt install libfuse-dev:i386

library1

Если вы уверенны, что библиотека установлена, но программа все равно говорит, что такой библиотеки нет, то возможно, ей просто нужна другая версия библиотеки. Например, в системе есть libudev.so.0, а программе нужна libudev.so.0.1. Такое случается, если вы попытаетесь установить пакет для другого дистрибутива, особенно в Red Hat системах. Если в репозиториях нет нужной версии библиотеки, то скорее всего, они одинаковы, и можно просто создать символическую ссылку:

ln -s /lib/libudev.so.0 /lib/libudev.so.0.1

Затем программа найдет нужную библиотеку.

Управление библиотеками в Linux

Установка библиотек ubuntu уже рассмотрена, но хотелось бы упомянуть еще пару моментов. Как я сказал, библиотеки ubuntu размещаются в определенных каталогах, но расположение библиотек можно настроить.

Перед тем как библиотека будет подключена к программе, ее должна найти в системе специальная программа - менеджер библиотек. Он берет адреса библиотек из файла /etc/ld.cache, а этот файл формируется утилитой ldconfig, на основе файлов конфигурации /etc/ld.so.conf.

В этом файле перечислены все пути к библиотекам. Если вы хотите добавить свою папку для библиотек просто добавьте ее в этот файл:

Затем обновите кэш просто выполнив:

Теперь ваша библиотека может быть загружена программой, например, вы можете добавить путь /opt/lib или даже /home/user/lib. И система будет нормально грузить оттуда библиотеки.

Посмотреть какие библиотеки находятся в кеше ld.cache можно командой:

Также мы можем проверить находится ли там определенная библиотека:

ldconfig -p | grep libjpeg

library2

Еще один способ указать программе где нужно искать библиотеки - это переменная LD_LIBRARY_PATH. Например:

Теперь программы, запускаемые в этом терминале, кроме стандартных путей поиска библиотек, будут использовать и указанную папку.

Выводы

Вот и все. Теперь вы знаете как работают библиотеки Ubuntu, как выполняется установка библиотек Ubuntu и делать так, чтобы программа видела нужную ей библиотеку. У новичков это может вызвать очень много головной боли, но теперь вы знаете что делать и избежите многих ошибок. Если у вас остались вопросы, пишите в комментариях!

В linux, как проверить, установлена ​​ли библиотека или нет? (из командной строки, конечно).

В моем конкретном случае сейчас я хочу проверить, установлен ли libjpeg.

Чтобы сделать это в независимом от дистрибутива * модуле, вы можете использовать ldconfig с grep, например:

Если libjpeg не установлен, выход не будет. Если он установлен, вы получите строку для каждой доступной версии.

Замените libjpeg любой библиотекой, которую вы хотите, и у вас есть общий, не зависящий от дистрибутива * способ проверки доступности библиотеки.

Если по какой-либо причине путь к ldconfig не задан, вы можете попытаться вызвать его, используя его полный путь, обычно /sbin /ldconfig .

Вы можете проверить с менеджером пакетов вашего дистрибутива (aptitude, yum, . ), но поскольку вы не предоставили свой дистрибутив, я не могу дать вам правильную команду.

Другим способом может быть запуск gcc -ljpeg , если вы получите 'ld: library not found for -ljpeg', это означает, что gcc не нашел библиотеку (но это не значит, что он не установлен), если вы получаете что-то вроде «Неопределенные символы:« _main », на которые ссылается: . » это означает, что libjpeg найден.

найдите libjpeg; ls /usr /lib /libjpeg *; ls /lib /libjpeg * - это еще один способ найти, установлена ​​ли lib в системе

Существует много других способов проверить, что если вы дадите нам больше контекста (почему вам нужно проверить, установлен ли libjpeg), мы могли бы предоставить вам лучшее решение для вашего конкретного случая.

Я использую утилиту whereis .
Пример:

$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la

Для распределения на основе deb вы можете сделать

Или, если вы знаете только имя файла, используйте

Имя файла обычно является libsomething.so [.version].

Я использую это:

Когда lib установлен, он дает:

Когда lib установлен не :

В системах на базе Redhat можно использовать pkg-config, чтобы проверить, установлена ​​ли библиотека или нет. Многие двоичные файлы rpm фактически выполняют те же проверки перед продолжением установки, поэтому мы можем разумно полагаться на его достоверность.


При этом я изо всех сил пытался получить информацию об установленном пакете и сделал небольшой поиск в Google и нашел несколько методов об этом.

Я хотел бы поделиться им на нашем сайте, чтобы он был полезен и для других.

Есть множество способов достичь этого.

Я добавил семь способов как добиться этого.

Тем не менее, вы можете выбрать более предпочтительный метод.

Эти методы перечислены ниже.

Эти методы перечислены ниже.

Метод 1: Как проверить, установлен ли данный пакет в системе Ubuntu или нет, с помощью команды apt-cache?

Команда apt-cache используется для запроса кеша APT или метаданных пакета из внутренней базы данных APT.

Она будет искать и отображать информацию о данном пакете.

Она показывает, установлен ли пакет или нет, версия установленного пакета, информация об исходном репозитории.

Приведенный ниже вывод ясно показывает, что nano пакет уже установлен в системе.

Так как команда показывает установленную версию пакета nano.

Способ 2: Как проверить, установлен ли данный пакет в системе Ubuntu или нет, с помощью команды apt?

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

Способ 3: Как проверить, установлен ли данный пакет в системе Ubuntu или нет, с помощью команды dpkg-query?

В приведенном ниже выводе первый столбец показывает ii. Это означает, что данный пакет уже установлен в системе.

Способ 4: Как проверить, установлен ли данный пакет в системе Ubuntu или нет, с помощью команды dpkg?

В приведенном ниже выводе первый столбец показывает ii.

Это означает, что данный пакет уже установлен в системе.

Метод 5: Как проверить, установлен ли данный пакет или нет в системе Ubuntu, с помощью команды which?

Команда which возвращает полный путь к исполняемому файлу, который был бы выполнен, когда команда была введена в терминале.

Это очень полезно, когда вы хотите создать ярлык на рабочем столе или символическую ссылку для исполняемых файлов.

Какая команда выполняет поиск в каталогах, перечисленных в переменной окружения PATH текущего пользователя, не для всех пользователей. Я имею в виду, когда вы вошли в свою учетную запись и не можете найти файл или каталог пользователя root.

Если в следующем выводе показано расположение данного двоичного или исполняемого файла пакета, то данный пакет уже установлен в системе.

Если нет, пакет не установлен в системе.

Метод 6: Как проверить, установлен ли данный пакет в системе Ubuntu или нет, с помощью команды whereis?

Команда whereis используется для поиска бинарных, исходных файлов и файлов справочных страниц по заданной команде.

Если в следующем выводе показано расположение данного двоичного или исполняемого файла пакета, то данный пакет уже установлен в системе.

Если нет, пакет не установлен в системе

Метод 7: Как проверить, установлен ли данный пакет в системе Ubuntu или нет, с помощью команды locate?

Команда locate работает быстрее, чем команда find, поскольку она использует базу данных updatedb, тогда как команда find выполняет поиск в реальной системе.

Он использует базу данных, а не ищет отдельные пути к каталогам для получения заданного файла.

Команда locate предварительно не установлена в большинстве дистрибутивов, поэтому для ее установки используйте менеджер пакетов распространения.

База данных регулярно обновляется через cron.

Мы также можем обновить его вручную.

Если в следующем выводе показано расположение данного двоичного или исполняемого файла пакета, то данный пакет уже установлен в системе.

Favorite

Добавить в избранное

Главное меню » Linux » Как проверить, установлен ли пакет в Debian и Ubuntu

Как проверить, установлен ли пакет в Debian и Ubuntu

П рочитав эту статью, вы узнаете, как проверить, установлен ли пакет в дистрибутивах Linux на основе Debian, включая Ubuntu.

Проверка установки определенного пакета с помощью dpkg:

Чтобы проверить, установлен ли конкретный пакет в дистрибутивах Linux на основе Debian, вы можете использовать команду dpkg, за которой следует флаг -s (статус) и имя пакета. В приведенной ниже команде показан пример dpkg, используемый для проверки статуса пакета Steam.

Как видите, команда возвращает информацию о пакете, включая следующее:

На снимке экрана ниже показан результат проверки пакета, который не установлен.

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

Проверка, установлен ли конкретный пакет с помощью dpkg-query:

Dpkg-запрос команда может использоваться , чтобы показать , если пакет конкретных установлен в вашей системе. Для этого запустите dpkg-query с указанием флага -l и имени пакета, о котором вы хотите получить информацию. В приведенном ниже примере показано, как проверить, установлен ли пакет Steam.

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

Проверьте, установлен ли пакет с помощью apt-cache:

Команда apt-cache также может отображать информацию о пакетах, установленных версиях и многом другом. Чтобы получить этот вывод, вам нужно добавить параметр политики, за которым следует имя пакета, как показано в примере ниже.

Получите список всех установленных пакетов с помощью apt:

Если вы хотите распечатать список всех установленных пакетов в вашей системе, а не проверять, был ли установлен конкретный пакет, вы можете сделать это с помощью команды apt, как показано в примере ниже.

Получите список всех установленных пакетов чтения логов:

Чтобы прочитать журнал apt , выполните следующую команду.


Чтобы прочитать журнал dpkg и получить информацию об установленных пакетах, выполните команду ниже.

Вы также можете читать сжатые журналы dpkg, используя команду zgrep вместо grep, как показано в примере ниже.

Как видите, сжатые журналы предоставят вам частичную информацию, но вы можете реализовать подстановочный знак (*) для одновременного чтения всех сжатых журналов, как показано в следующем примере.

Как проверить обновленные и удаленные пакеты:

Если вы хотите отображать информацию только об обновленных пакетах, вы можете сделать это с помощью приведенной ниже команды.

Как объяснялось ранее, с установленными пакетами вы также можете проверять сжатые журналы на наличие обновленных пакетов с помощью подстановочного знака, как показано в следующем примере.

Если вы хотите перечислить удаленные пакеты, метод аналогичен; просто замените «update» на «remove», как показано ниже.

Вывод:

Как видите, дистрибутивы Linux на основе Debian предлагают различные способы проверки состояния конкретного пакета или перечисления всех установленных, обновленных и удаленных пакетов. Команды, описанные в этой статье, легко применять, и их изучение обязательно для любого пользователя дистрибутива на основе Debian. Как вы видели, эти команды также могут предоставить информацию о версиях программного обеспечения, необходимом дисковом пространстве и многом другом.

Мы надеемся, что эта статья, объясняющее, как проверить, установлен ли пакет в Debian или Ubuntu, было полезно. Следуйте подсказкам Linux, чтобы получить больше советов и руководств по Linux.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Дистрибутивы Linux состоят из одинаковых компонентов: ядро, менеджер отображения, графическое окружение рабочего стола, предустановленные программы. Чтобы пользователи как-то отличали дистрибутивы друг от друга, их сборщики устанавливают разные обои и добавляют свои собственные программы.

К сожалению, желание составителей дистрибутивов выделиться и стать более «дружественным» пользователю приводит к нелепым (скажем прямо, идиотским) проблемам. И, скорее всего, вы уже догадались об этом по заголовку данной статьи.

В любом дистрибутиве, который является производным Debian, используется файловый менеджер apt. Чтобы узнать, установлен ли определённый пакет, достаточно использовать команду apt search и указать имя пакета:

К примеру, меня интересует, установлены ли заголовки ядра:


Хорошо, команда неудачная, т. к. много разных ядер, возьмём более конкретную и зададим вопрос так «установлены ли заголовки текущего ядра»:


Вы можете ответить, установлен данный пакет или нет? На самом деле, ответ присутствует, просто из-за того, что вместо оригинальной программы используется файл /usr/local/bin/apt, который является скриптом на Python, использующим программу aptitude (!), формат вывода совершенно отличный от того, который мы ожидаем.

Ответ находится в самом первом столбце, где всего один символ. Значение символов следующее:

  • p — означает, что в системе нет никаких следов этого пакета
  • c — означает, что пакет был удалён, но его конфигурационные файлы остались в системе
  • i — означает, что пакет установлен
  • v — означает, что пакет является виртуальным.

Как в Linux Mint использовать apt вместо aptitude

Много лет я работаю именно с программой apt, а aptitude на многих дистрибутивах, производных от Debian, вовсе не установлена. Поэтому для меня намного привычнее оригинальная программа apt.

Чтобы использовать apt вместо aptitude выполните команду вида:

Отлично, именно этого я и хотел, краткая информация о пакете с однозначной надписью «[установлен]»:


Всегда полностью вводить /usr/bin/apt неудобно, поэтому возникает вопрос, как избавиться от этого идиотского Python скрипта? Достаточно выполнить команду:

Читайте также: