Linux как найти файл библиотеки

Background: I’m trying to build my program but first I need to set up libraries in NetBeans. My project is using GLU and therefore I installed libglu-dev. I didn’t note the location where the libraries were located and now I can’t find them.

I’ve switched to Linux just a few days ago and so far I’m very content with it, however I couldn’t google this one out and became frustrated. Is there way to find out where files of package were installed without running the installation again? I mean if I got library xxx and installed it some time ago, is there some-command xxx that will print this info?

I’ve already tried locate, find and whereis commands, but either I’m missing something or I just can’t do it correctly. For libglu, locate returns:

/usr/share/bug/libglu1-mesa
/usr/share/bug/libglu1-mesa/control
/usr/share/bug/libglu1-mesa/script
/usr/share/doc/libglu1-mesa
/usr/share/doc/libglu1-mesa/changelog.Debian.gz
/usr/share/doc/libglu1-mesa/copyright
/usr/share/lintian/overrides/libglu1-mesa
/var/lib/dpkg/info/libglu1-mesa:i386.list
/var/lib/dpkg/info/libglu1-mesa:i386.md5sums
/var/lib/dpkg/info/libglu1-mesa:i386.postinst
/var/lib/dpkg/info/libglu1-mesa:i386.postrm
/var/lib/dpkg/info/libglu1-mesa:i386.shlibs

The other two commands fail to find anything. Now locate did its job, but I’m sure none of those paths is where the library actually resides (at least everything I was linking so far was in /usr/lib or /usr/local/lib).

libglu was introduced just as example. I’m looking for a general solution for this problem.

Embarrassingly basic question. sudo apt-get install libmemcached6 – where do the .h’s and .o’s or .so’s live in a typical install on a Linux machine (Ubuntu)? And, how do I make sure g++ can pick them up?

asked May 23, 2012 at 23:56

djechlin's user avatar

2

They go to /usr/include and /usr/lib. If you use the -l option (for the libraries) it should find them from these standard places. If you include using <file.h> it should also get it from the right place.

answered May 24, 2012 at 0:00

Francis Upton IV's user avatar

Francis Upton IVFrancis Upton IV

19.2k3 gold badges53 silver badges57 bronze badges

8

On Ubuntu (and other Debian variants) you can use the dpkg command to find out. For example:

$ dpkg -L libxml2
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libxml2
/usr/share/doc/libxml2/AUTHORS
/usr/share/doc/libxml2/NEWS.gz
/usr/share/doc/libxml2/TODO.gz
/usr/share/doc/libxml2/copyright
/usr/share/doc/libxml2/README
/usr/share/doc/libxml2/changelog.Debian.gz
/usr/share/doc/libxml2/README.Debian
/usr/lib
/usr/lib/libxml2.so.2.7.8
/usr/lib/libxml2.so.2

As you can see, Debian packages don’t typically include the .h files; those are normally in corresponding -dev packages. So you can find the header files here:

$ dpkg -L libxml2-dev
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libxml2-dev
/usr/share/doc/libxml2-dev/AUTHORS
/usr/share/doc/libxml2-dev/NEWS.gz
/usr/share/doc/libxml2-dev/TODO.gz
/usr/share/doc/libxml2-dev/copyright
/usr/share/doc/libxml2-dev/README
/usr/share/doc/libxml2-dev/changelog.Debian.gz
/usr/share/aclocal
/usr/share/aclocal/libxml2.m4
/usr/share/man
/usr/share/man/man3
/usr/share/man/man3/libxml.3.gz
/usr/share/man/man1
/usr/share/man/man1/xml2-config.1.gz
/usr/include
/usr/include/libxml2
/usr/include/libxml2/libxml
/usr/include/libxml2/libxml/HTMLtree.h
/usr/include/libxml2/libxml/tree.h
/usr/include/libxml2/libxml/xmlreader.h
/usr/include/libxml2/libxml/xmlschemastypes.h
...

As for gcc, the manual explains how it searches for header files. Note that this is different and separate from using -l to instruct the linker to link with a certain library.

answered May 24, 2012 at 0:10

mpontillo's user avatar

mpontillompontillo

13.5k7 gold badges61 silver badges90 bronze badges

On Linux and the majority of the Unix-based systems, the libraries may be found on either of these two locations:

  1. /usr/lib/
  2. /usr/local/lib/

The difference between these two locations is that the latter is used for the third party libraries. So if you have published your own library or have installed one from a third party repository (for instance ppa),those files should go to /usr/local/lib.

The storage of header files can be understood using the above analogy. The folders are:

  1. /usr/include/
  2. /usr/local/include/

Nander Speerstra's user avatar

answered Apr 5, 2017 at 7:22

akhil tiwari's user avatar

Как вообще узнать что у меня стоит и где именно оно стоит?

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

К примеру, в Debian-based дистрибутивах список установленных пакетов можно получить так:

dpkg -l

А список файлов пакета так:

dpkg -L <package_name>

Для Gentoo так:

eix -I
equery f <package_name>

kostik87 ★★★★★

(13.01.12 19:49:55 MSK)

  • Ссылка

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

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

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

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

Библиотеки делятся на два типа – динамические и статические. Статические библиотеки linux подключаются на этапе сборки программы, а динамические – во время выполнения и они общие для нескольких программ. Нас будут интересовать именно динамические библиотеки linux. Они находятся в папках /lib, /lib64, /usr/lib, /usr/lib/x86_64-linux-gnu. Каждая библиотека имеет расширение .so, за которым следует номер версии. Этот номер увеличивается каждый раз, когда разработчики вносят серьезные изменения. Такой подход необходим для того, чтобы сохранить совместимость для программ, использующих старые версии. Например, в системе может быть две библиотеки libfuse.so.0 и libfuse.so.1. Далее мы рассмотрим основные библиотеки и их предназначение.

Как получить информацию о библиотеках?

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

cat /etc/ld.so.conf.d/*

Во всех перечисленных здесь каталогах находятся статические и динамически библиотеки Linux:

ls -l /lib/x86_64-linux-gnu/

Информацию о зависимостях каждой библиотеки вы можете посмотреть командой ldd:

ldd /lib/x86_64-linux-gnu/ld-2.24.so

А еще можно узнать какому пакету принадлежит библиотека в Ubuntu:

dpkg -S /lib/x86_64-linux-gnu/ld-2.24.so

Как видите, библиотека ld.so принадлежит пакету libc6, точнее она входит в набор инструментов Си. Более подробно, о том, как устанавливать новые библиотеки и решать проблемы с ними, описано в статье библиотеки Ubuntu.

Основные библиотеки

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

  • libanl.so – библиотека работы с DNS;
  • libc.a – основная статическая библиотека языка Си;
  • libdl.a – библиотека, отвечающая за загрузку других библиотек во время запуска программы;
  • libnsl.so – работа со службой NIS;
  • libstdc++.so – стандартная библиотека C++;
  • libutil.so – реализует основные часто используемые функции;
  • libelf.so – библиотека для работы с бинарными файлами ELF;
  • libevent.so – библиотека с реализацией механизма вызова функций после события;
  • libgnutls.so – библиотека с основными методами и возможностями, используемыми в стандартных утилитах Linux;
  • ld-linux.so – главная библиотека, она собрана в виде статической и не имеет зависимостей. Загружает другие библиотеки и исполняемые файлы. Вы можете вызвать эту библиотеку как программу и передать ей адрес исполняемого файла для запуска.

Библиотеки кодеков

Эти библиотеки содержат наборы кодеков для воспроизведения различных медиа данных. Некоторые из них имеют несвободную лицензию или закрытый исходный код:

  • liba52.so – свободный декодер ATSC A/52;
  • libavfilter6.so – библиотека фильтров ffmpeg;
  • libavcodec57.so – библиотека кодеков ffmpeg;
  • libavformat57.so – библиотека форматов ffmpeg;
  • libavutil55.so – библиотека дополнительных функций ffmpeg;
  • libdv.so – программный кодек для DV;
  • libmad.so – MPEG аудио декодер;
  • libmpeg2.so – потоковый декодер видео данных;
  • libmpg123.so – библиотека консольного плеера mpg123;
  • libwebp.so – декодирование формата Webp;
  • libxvidcore.so – медиа кодек MPEG-4.

Звуковые библиотеки

  • libao.so – библиотека проигрывания звука с простым интерфейсом;
  • libasound.so – библиотека взаимодействия со звуковой подсистемой ALSA;
  • libaudio2.so – библиотека работы со звуком, входит в состав ALSA;
  • libespeak.so – библиотека синтеза речи;
  • libpulse.so – библиотека с основными методами PulseAudio;

Работа с архивами

  • libarchive.so – библиотека для работы с архивами различных форматов;
  • liblzma.so – работа с архивами LZMA.

Графические библиотеки

  • libart.so – библиотека с реализацией функций для работы с 3d графикой;
  • libaa.so – библиотека ASCII графики;
  • libgtk-3.so – набор методов графического фреймворка GTK 3;
  • libgd.so – базовые функции работы с графикой и рисования;
  • libgif.so – работа с форматом изображений Gif;
  • libjpeg.so – работа с изображениями Jpeg;
  • libglapi.so – свободная реализация методов для работы с OpenGL;
  • libgtk-x11-2.0.so – набор методов библиотеки GTK 2;
  • libwx_baseu.so, libwx_baseu_net-3.0.so и другие – набор библиотек фремворка создания графических приложений WX;
  • libX11.so – основные методы и функции X сервера;
  • libncurses.so – одна из самых популярных библиотек псевдографики;
  • libQtGui.so, libQt5Svg.so, libQt5Widgets.so и другие – библиотеки фреймворка разработки графических приложений Qt.

Работа с текстом

  • libaspell.so – библиотека проверки орфографии;
  • libfreetype.so – библиотека отрисовки шрифтов;
  • libharfbuzz.so – библиотека обработки символов Unicode;
  • libxml2.so – библиотека разбора XML;
  • libyaml-0.so – библиотека разбора Yaml.

Безопасность

  • libcrack.so – библиотека с реализацией методов перебора паролей для проверки их надежности;
  • libcrypt.so – библиотека, отвечающая за шифрование;
  • libssl3.so – библиотека шифрования SSLv3;
  • libapparmor.so – библиотека управления системой безопасности AppArrmor;
  • libaudit.so – библиотека слежения за состоянием системы и регистрации событий.

Библиотеки драйверов

  • libcups.so – библиотека работы с принтером;
  • libfuse.so – библиотека организации виртуальных файловых систем;
  • libgphoto2.so – библиотека взаимодействия с камерами по USB;
  • libsensors.so – используется для получения информации от датчиков на материнской плате;
  • libudisks2.so – библиотека usisks, которая отвечает за автоматическое монтирование и обнаружение подключенных устройств;
  • libv4l1.so – библиотека работы с веб-камерами;
  • libpci.so – библиотека работы с PCI устройствами;
  • libusb-1.0.so – библиотека управления USB;
  • libdrm.so – библиотека с общими возможностями Direct Rendering Manager, отрисовки графики с помощью видеокарты;
  • libdrm_amdgpu.so – DRM для драйвера AMDGPU;
  • libdrm_intel.so – DRM для карт Intel;
  • libdrm_nouveau.so – свободный DRM для видеокарт Nvidia;

Сеть

  • libresolv.so – библиотека получения IP адреса по имени хоста;
  • libpcap.so – библиотека анализа и захвата сетевых пакетов;
  • libproxy.so – настройка и управление прокси;

Эмуляция

  • libSDL.so – библиотека эмуляции загрузки компьютера и базовых возможностей BIOS;
  • libwine.so – библиотека прослойки для запуска приложений Windows в Linux.
  • libvirt.so – библиотека управления KVM;

Выводы

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

На завершение урок про библиотеки Linux:

https://youtu.be/qZEQ1gIvDVo

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Об авторе

Основатель и администратор сайта losst.ru, увлекаюсь открытым программным обеспечением и операционной системой Linux. В качестве основной ОС сейчас использую Ubuntu. Кроме Linux, интересуюсь всем, что связано с информационными технологиями и современной наукой.

Обновлено Обновлено: 01.02.2022
Опубликовано Опубликовано: 25.07.2016

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Синтаксис
Примеры
    Поиск по имени
    По дате
    По типу файла
    По правам
    По содержимому
    С сортировкой по дате изменения
    Лимиты
    Действия над найденными объектами
Запуск по расписанию в CRON

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-size Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»).
-mtime Время изменения файла. Указывается в днях.
-mmin Время изменения в минутах.
-atime Время последнего обращения к объекту в днях.
-amin Время последнего обращения в минутах.
-ctime Последнее изменение владельца или прав на объект в днях.
-cmin Последнее изменение владельца или прав в минутах.
-user Поиск по владельцу.
-group По группе.
-perm С определенными правами доступа.
-depth Поиск должен начаться не с корня, а с самого глубоко вложенного каталога.
-maxdepth Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный.
-prune Исключение перечисленных каталогов.
-mount Не переходить в другие файловые системы.
-regex По имени с регулярным выражением.
-regextype <тип> Тип регулярного выражения.
-L или -follow Показывает содержимое символьных ссылок (симлинк).
-empty Искать пустые каталоги.
-delete Удалить найденное.
-ls Вывод как ls -dgils
-print Показать найденное.
-print0 Путь к найденным объектам.
-exec <команда> {} ; Выполнить команду над найденным.
-ok Выдать запрос перед выполнением -exec.

Также доступны логические операторы:

Оператор Описание
-a Логическое И. Объединяем несколько критериев поиска.
-o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
-not или ! Логическое НЕ. Инвертирует критерий поиска.

Полный набор актуальных опций можно получить командой man find.

Примеры использования find

Поиск файла по имени

1. Простой поиск по имени:

find / -name “file.txt”

* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

2. Поиск файла по части имени:

find / -name “*.tmp”

* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp

3. Несколько условий. 

а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

find . -name “sess_*” -a -name “*cd”

б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

find . -name “sess_*” -o -name “*cd”

в) Более компактный вид имеют регулярные выражения, например:

find . -regex ‘.*/(sess_.*cd)’

find . -regex ‘.*/(sess_.*|.*cd)’

* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

4. Найти все файлы, кроме .log:

find . ! -name “*.log”

* в данном примере мы воспользовались логическим оператором !.

Поиск по дате

1. Поиск файлов, которые менялись определенное количество дней назад:

find . -type f -mtime +60

* данная команда найдет файлы, которые менялись более 60 дней назад.

Или в промужутке:

find . -mmin -20 -mmin +10 -type f

* найти все файлы, которые менялись более 10 минут, но не более 20-и.

2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find –version).

а) дате изменения:

find . -type f -newermt “2019-11-02 00:00”

* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

б) дате обращения:

find . -type f -newerat 2019-10-08

* все файлы, к которым обращались с 08.10.2019.

find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

* все файлы, к которым обращались в октябре.

в) дате создания:

find . -type f -newerct 2019-09-07

* все файлы, созданные с 07 сентября 2019 года.

find . -type f -newerct 2019-09-07 ! -newerct “2019-09-09 07:50:00”

файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

По типу

Искать в текущей директории и всех ее подпапках только файлы:

find . -type f

* f — искать только файлы.

Поиск по правам доступа

1. Ищем все справами на чтение и запись:

find / -perm 0666

2. Находим файлы, доступ к которым имеет только владелец:

find / -perm 0600

Поиск файла по содержимому

find / -type f -exec grep -i -H “content” {} ;

* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

С сортировкой по дате модификации

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r

* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

Лимит на количество выводимых результатов

Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r | head -n 1

Поиск с действием (exec)

1. Найти только файлы, которые начинаются на sess_ и удалить их:

find . -name “sess_*” -type f -print -exec rm {} ;

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

2. Переименовать найденные файлы:

find . -name “sess_*” -type f -exec mv {} new_name ;

или:

find . -name “sess_*” -type f | xargs -I ‘{}’ mv {} new_name

3. Переместить найденные файлы:

find . -name “sess_*” -type f -exec mv {} /new/path/ ;

* в данном примере мы переместим все найденные файлы в каталог /new/path/.

4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

find . -name “*.tmp” | wc -l

5. Изменить права:

find /home/user/* -type d -exec chmod 2700 {} ;

* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

6. Передать найденные файлы конвееру (pipe):

find /etc -name ‘*.conf’ -follow -type f -exec cat {} ; | grep ‘test’

* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

7. Произвести замену в файлах с помощью команды sed:

find /opt/project -type f -exec sed -i -e “s/test/production/g” {} ;

* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

Чистка по расписанию

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

Открываем на редактирование задания cron:

crontab -e

И добавляем:

0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} ;

* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

Добавить комментарий