如何获取 Linux 下的共享库文件名列表?

如何获取 Linux 下的共享库文件名列表?

是否有内置的 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缓存中是否未提及列表中的任何库。什么也没有返回。

相关内容