web-dev-qa-db-ja.com

Linuxで共有ライブラリのファイル名のリストを取得するにはどうすればよいですか?

共有ライブラリのファイル名のリストを取得するためのGNU Linuxビルトインはありますか?ldconfig -pの出力を解析することを検討しました。ただし、一貫性についてはわかりませんシステムからシステムへの出力で。

私はfindを使用できることをすでに認識していますが、リンカー/ローダーがライブラリと場所のキャッシュを持っていることを考えると、何らかの方法でそれを使用する方が効率的です。さらに、リンカー/ローダーが検索するパスは、私が関係している唯一のパス、つまりldconfigによって処理されたライブラリです。

6
ephsmith

それらすべてをキャッチしたい場合は、完全なファイルシステムトラバーサルを行う以外に方法はありません。 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リストのライブラリがキャッシュで言及されていないかどうかが確認されました。何も返されませんでした。

7
lynxlynxlynx