确定哪些可执行文件链接到Linux上的特定共享库
如何列出Red Hat Linux系统上链接到libssl的所有可执行文件?我可以接近:确定哪些可执行文件链接到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
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