我正在尝试找到一种方法让find
命令只查找可能具有共享库依赖项的文件(这意味着它们在使用 调用时会产生输出ldd
)。
为了查找一组文件(二进制文件、文本、office 等)的所有依赖项,我会遍历它们find . -type f
并调用ldd
所有文件,然后解析输出。
我知道find
有-executable
测试选项,但我不确定这是否涵盖了我的所有基础。
我知道它ldd
给出的输出类似于“程序不是动态链接的”,但我想为不能具有共享库的文件保存自己的命令。
答案1
ldd
转储 Elf 文件的依赖关系。所有 Elf 文件都以 bytes 开头\x7F 'E' 'L' 'F'
,这可能是测试它们的最快方法。但是,我不知道有任何选项可以find
读取文件的内容。 find
主要只是查看目录列表中的元数据,如文件名、模式位等。
但是,为了运行 Elf 文件,必须设置其执行位。如果您确实有一个没有执行位的 Elf 文件,则它无法执行,因此您可能不关心它。因此,如果您正在寻找一种加快搜索速度的快速方法,那么检查执行位应该是安全的。
我建议-perm /555
而不是-executeable
,因为第一个检查任何执行位,第二个检查当前用户是否可以执行它。
但是,除了像 jofel 提到的 Python 这样的动态语言之外,许多 C 程序还将动态链接到 PAM 库 ( /lib/security/pam_*.so
) 和 libc “nss” 库 ( /lib/libnss*.so
)。如果您正在构建 chroot 或其他东西,则需要这些。