哪些类型的文件可以具有共享库依赖项?

哪些类型的文件可以具有共享库依赖项?

我正在尝试找到一种方法让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 或其他东西,则需要这些。

相关内容