是否有内置的 GNU Linux 用于获取共享库的文件名列表?我考虑过解析 的输出ldconfig -p
。但是,我不确定系统之间输出的一致性。
我已经知道我可以使用,find
但鉴于链接器/加载器具有库和位置的缓存,以某种方式使用它似乎更有效。此外,链接器/加载器搜索的路径是我唯一关心的路径——即已由ldconfig
.
答案1
如果你想捕获所有这些,除了进行完整的文件系统遍历之外别无选择。ldconfig
只知道标准路径中的库以及它配置要查找的额外路径(通常在 中定义/etc/ld.so.conf*
)。可以找到其他库的通常可疑位置是$HOME
和/opt
,尽管没有限制,特别是当人们自己构建应用程序时。
如果您不信任 的输出ldconfig -p
,可以直接解析其缓存。它是二进制的,但使用strings
会删除所有垃圾(5 所以 /lib/ 匹配):
strings -n5 /etc/ld.so.cache
在我的系统上,它们都给出相同的结果,我快速验证了这一点:
a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u);
echo -e "$a\n$b\n$b" | sort | uniq -u
它检查ldconfig -p
缓存中是否未提及列表中的任何库。什么也没有返回。