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

确定哪些可执行文件链接到Linux上的特定共享库,linux,shared-libraries,ldd,Linux,Shared Libraries,Ldd,如何列出Red Hat Linux系统上链接到libssl的所有可执行文件?我可以接近: find / -type f -perm /a+x -exec ldd {} \; | grep libssl ldd向我显示了可执行文件链接的库,但包含库名称的行也不显示文件名,因此,尽管我获得了许多与grep匹配的文件,但我不知道如何返回匹配的可执行文件的名称。任何帮助都将不胜感激。我不确定,但可能是sudo lsof | grep libssl。所以 find / -type f -perm

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

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

ldd向我显示了可执行文件链接的库,但包含库名称的行也不显示文件名,因此,尽管我获得了许多与grep匹配的文件,但我不知道如何返回匹配的可执行文件的名称。任何帮助都将不胜感激。

我不确定,但可能是
sudo lsof | grep libssl。所以

find / -type f -perm /a+x -print0 |
    while read -d $'\0' FILE; do
        ldd "$FILE" | grep -q libssl && echo "$FILE"
    done
不要使用-exec,而是通过管道连接到while循环,并在回显文件名之前检查匹配项。或者,您可以使用()或实际的if/then/fi块将“ldd$i”添加到匹配检查中

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上构建的,你的-perm在这里不起作用,所以我不知道它是否正确。我使用了
otool-L
而不是
ldd
,但是结果应该是一样的。

可能添加
-xdev
,我认为这可能是最健壮的解决方案。不幸的是,我没有根权限,所以我无法测试这个解决方案
find / -type f -perm /a+x -xdev | while read filename ; do
  if ldd "$filename" | grep -q "libssl" ; then
    echo "$filename"
  fi
done