Как получить список имен файлов общих библиотек в Linux?

Как получить список имен файлов общих библиотек в Linux?

Есть ли встроенная функция GNU Linux для получения списка имен файлов общих библиотек? Я рассматривал возможность анализа вывода ldconfig -p. Однако я не уверен в согласованности вывода от системы к системе.

Я уже знаю, что я мог бы использовать, findно учитывая, что у компоновщика/загрузчика есть кэш библиотек и местоположений, кажется более эффективным использовать его каким-то образом. Кроме того, меня интересуют только пути, которые ищет компоновщик/загрузчик, то есть библиотеки, которые были обработаны ldconfig.

решение1

Если вы хотите перехватить их все, нет другого выбора, кроме как выполнить полный обход файловой системы. ldconfigзнает только о библиотеках в стандартных путях и дополнительных путях, на просмотр которых он настроен (обычно определяется в /etc/ld.so.conf*). Обычные подозрительные места, где можно найти другие библиотеки, это $HOMEи /opt, хотя ограничений нет, особенно когда люди сами создают приложения.

Если вы не доверяете выходным данным ldconfig -p, вы можете проанализировать его кэш напрямую. Он двоичный, но использование stringsудаляет весь мусор (5, поэтому /lib/ соответствует):

strings -n5 /etc/ld.so.cache

В моей системе они оба дают одинаковые результаты, что я быстро проверил:

a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u); 
echo -e "$a\n$b\n$b" | sort | uniq -u

Который проверил, ldconfig -pне упоминается ли какая-либо библиотека из списка в кэше. Ничего не было возвращено.

Связанный контент