
共有ライブラリのファイル名のリストを取得するための 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
キャッシュに記載されていないかどうかをチェックしました。何も返されませんでした。