
是否有內建的 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
列表中的任何庫是否未在快取中提及。什麼也沒有返回。