Определите, какие исполняемые файлы ссылаются на определенную общую библиотеку в Linux - PullRequest
2 голосов
/ 24 августа 2010

Как я могу перечислить все исполняемые файлы в моей системе Red Hat Linux, которые ссылаются на libssl?Я могу приблизиться к:

find / -type f -perm /a+x -exec ldd {} \; | grep libssl   

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

Ответы [ 4 ]

4 голосов
/ 24 августа 2010
find / -type f -perm /a+x -print0 |
    while read -d $'\0' FILE; do
        ldd "$FILE" | grep -q libssl && echo "$FILE"
    done
0 голосов
/ 24 августа 2010
find / -type f -perm /a+x -xdev | while read filename ; do
  if ldd "$filename" | grep -q "libssl" ; then
    echo "$filename"
  fi
done

-xdev делает поиск находящимся в одной и той же файловой системе (то есть не погружается в / proc или / sys).Примечание: если вы построили это на Mac OS X, ваш -perm здесь не работает, поэтому я не знаю, правильно ли это.И вместо ldd я использовал otool -L, но результат должен быть таким же.

0 голосов
/ 24 августа 2010
find /usr/bin/ -type f -perm /a+x | while read i; do match=`ldd $i | grep libssl`; [[ $match ]] && echo $i; done

Вместо использования -exec передайте цикл while и проверьте соответствие, прежде чем повторить имя файла. При желании вы можете добавить «ldd $ i» к проверке соответствия, используя либо (), либо реальный блок if / then / fi.

0 голосов
/ 24 августа 2010

Я не уверен, но, возможно, sudo lsof |grep libssl.so

...