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

Мой текущий подход - запустить что-то вроде find / -type f -executable -exec ldd {} \; | grep my_lib.so однако, это занимает очень много времени (ожидаемо), так как он должен искать все. Есть ли быстрый способ или команда, чтобы найти, какие exes указывают на так в Linux?

1 ответ1

0

Если вы используете какой-либо дистрибутив Linux, он должен быть - но только для пакетов в дистрибутиве, для всего, что установлено другим способом (например, в /opt или /usr/local), вам все равно нужно будет использовать ваш оригинальный метод.

например, в дистрибутиве на основе Debian мы сначала выясним, в каком пакете находится наша общая библиотека:

# dpkg -S /usr/lib/libgs.so.9.05
libgs9: /usr/lib/libgs.so.9.05

а затем найдите все пакеты, которые используют эту библиотеку (и сохраните копию в файле packages.txt):

# dpkg-query -W -f='${binary:Package} ${Depends}\n' | grep -w libgs9 | awk '{print $1}' | tee packages.txt
ghostscript
gimp
libgs9
libgs9-common

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

# while read pkg; do dpkg -L $pkg | xargs -i sh -c 'test -f {} -a -x {} && ldd {} | fgrep -H --label={}  libgs.so.9'; done < packages.txt
/usr/bin/gs:    libgs.so.9 => /usr/lib/libgs.so.9 (0x00007fefe5611000)
/usr/bin/ghostscript:   libgs.so.9 => /usr/lib/libgs.so.9 (0x00007fbad0d71000)
/usr/lib/gimp/2.0/plug-ins/file-ps:     libgs.so.9 => /usr/lib/libgs.so.9 (0x00007f75f0a51000)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .