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キャッシュに記載されていないかどうかをチェックしました。何も返されませんでした。

関連情報