Команда ldconfig

Команда ldconfig предназначена для вызова одноименной утилиты, осуществляющей формирование кэша информации о новейших версиях разделяемых библиотек и создание символьных ссылок на них для последующей корректной работы динамического линковщика ld.so. Разделяемые библиотеки обычно содержат реализации функций, которые необходимы для корректной работы приложений или других разделяемых библиотек. Разделяемые библиотеки (*.so) являются полным аналогом динамических библиотек (*.dll) из Windows. Утилита использует файл конфигурации /etc/ld.so.conf для чтения списка нестандартных директорий с разделяемыми библиотеками (стандартными являются /usr/lib и /lib), а также получения дополнительной информации о некоторых библиотеках. Кроме того, она обрабатывает заголовочные файлы библиотек и их имена для создания символьных ссылок. Файл кэша динамического линковщика имеет имя /etc/ld.so.cache, следовательно, для его модификации требуются права суперпользователя. Единственным вариантом продуктивного использования утилиты без прав суперпользователя является вариант с указанием альтернативной директории с разделяемыми библиотеками для создания символьных ссылок без изменения системного кэша.

Базовый синтаксис команды выглядит следующим образом:

# lddconfig [параметры]

Утилита поддерживает параметр -v, позволяющий выводить дополнительную информацию об именах обрабатываемых директорий и именах создаваемых символьных ссылок, параметр -n, позволяющий обрабатывать лишь файлы разделяемых библиотек в указанных директориях, параметр -N позволяющий не обновлять системный кэш динамического линковщика, а ограничиться лишь созданием символьных ссылок, параметр -X, позволяющий не создавать символьных ссылок, а ограничиться лишь обновлением системного кэша динамического линковщика, параметр -f, позволяющий использовать указанный файл конфигурации утилиты вместо /etc/ld.so.conf, параметр -C, позволяющий использовать указанный файл системного кэша динамического линковщика вместо /etc/ld.so.cache, параметр -r, позволяющий изменить корневую директорию, параметр -p для отображения содержимого системного кэша динамического линковщика, а также параметр -c для указания формата системного кэша динамического линковщика (old, new, compat). В большинстве случаев вам не придется использовать данных параметров.

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

Вывод содержимого системного кэша динамического линковщика

Для вывода содержимого системного кэша динамического линковщика, следует использовать параметр -p утилиты.

# ldconfig -p
1330 библиотек найдено в кэше «/etc/ld.so.cache»
    libzvbi.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzvbi.so.0
    libzvbi-chains.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzvbi-chains.so.0
    libzstd.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libzstd.so.1
    …

Как видно, системный кэш содержит информацию о 1330 библиотеках, причем в кэше имеется информация о полных путях к библиотекам, их архитектурах и используемых версиях стандартной библиотеки языка C (libc).

Обновление содержимого системного кэша динамического линковщика

Для обновления содержимого системного кэша динамического линковщика без создания символьных ссылок следует использовать параметр -X и иметь права суперпользователя. Также для наглядности можно воспользоваться параметром -v.

# ldconfig -X -v
/lib/x86_64-linux-gnu:
    libsepol.so.1 -> libsepol.so.1
    libreadline.so.8 -> libreadline.so.8.0
    libnss_mdns4.so.2 -> libnss_mdns4.so.2
    …

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

Обновление ссылок на разделяемые библиотеки

Для обновления ссылок на разделяемые библиотеки достаточно использовать параметр -N (для обработки всех системных директорий) или параметр -n (для указания конкретной директории).

# ldconfig -v -n /lib
/lib:
    libdmraid.so.1.0.0.rc16 -> libdmraid.so.1.0.0.rc16
    libhandle.so.1 -> libhandle.so.1.0.3

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