确定哪些可执行文件链接到Linux上的特定共享库

时间:2010-08-24 17:31:09

标签: linux shared-libraries ldd

如何列出我的Red Hat Linux系统上链接到libssl的所有可执行文件?我可以接近:

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

ldd显示了可执行文件链接的库,但是包含库名的行也没有显示文件名,所以虽然我得到了很多与grep的匹配,但我无法弄清楚如何退出发生匹配的可执行文件的名称。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:4)

find / -type f -perm /a+x -print0 |
    while read -d $'\0' FILE; do
        ldd "$FILE" | grep -q libssl && echo "$FILE"
    done

答案 1 :(得分:0)

我不确定,但也许sudo lsof |grep libssl.so

答案 2 :(得分:0)

find /usr/bin/ -type f -perm /a+x | while read i; do match=`ldd $i | grep libssl`; [[ $match ]] && echo $i; done

而不是使用-exec,管道到while循环并在回显文件名之前检查匹配。或者,您可以使用()或实际的if / then / fi块将“ldd $ i”添加到匹配检查中。

答案 3 :(得分:0)

find / -type f -perm /a+x -xdev | while read filename ; do
  if ldd "$filename" | grep -q "libssl" ; then
    echo "$filename"
  fi
done

-xdev使find停留在同一个文件系统上(即它不会潜入/ proc或/ sys)。注意:如果在Mac OS X上构建它,你的精子在这里不起作用,所以我不知道它是否正确。而不是ldd我使用了otool -L,但结果应该相同。