SOファイルをリンクする実行可能ファイルを見つける


0

私はexeがlddとリンクしているsoファイルを印刷できることを知っています。私が望んでいるのは、他の方法で行くことです。

私の現在のアプローチは、find / -type f -executable -exec ldd {} \; | grep my_lib.soすべてを検索する必要があるため、実行するのに非常に長い時間がかかる(予想される)ようなものを実行することです。Linuxでどのexeがsoを指しているかを見つけるための高速な方法またはコマンドはありますか?

回答:


0

何らかのLinuxディストリビューションを使用する場合、あるはずです-ただし、ディストリビューションのパッケージについてのみ、他の方法(in /optやなど/usr/local)でインストールされたすべてのものについては、元の方法を使用する必要があります。

たとえば、Debianベースのディストリビューションでは、どのパッケージで共有ライブラリが最初に見つかるかがわかります。

# dpkg -S /usr/lib/libgs.so.9.05
libgs9: /usr/lib/libgs.so.9.05

そして、そのライブラリを使用するすべてのパッケージを見つけます(そしてファイルpackages.txtにコピーを保持します):

# dpkg-query -W -f='${binary:Package} ${Depends}\n' | grep -w libgs9 | awk '{print $1}' | tee packages.txt
ghostscript
gimp
libgs9
libgs9-common

ライブラリを使用する正確なバイナリを知る必要がある場合は、その出力をさらに解析できます。

# while read pkg; do dpkg -L $pkg | xargs -i sh -c 'test -f {} -a -x {} && ldd {} | fgrep -H --label={}  libgs.so.9'; done < packages.txt
/usr/bin/gs:    libgs.so.9 => /usr/lib/libgs.so.9 (0x00007fefe5611000)
/usr/bin/ghostscript:   libgs.so.9 => /usr/lib/libgs.so.9 (0x00007fbad0d71000)
/usr/lib/gimp/2.0/plug-ins/file-ps:     libgs.so.9 => /usr/lib/libgs.so.9 (0x00007f75f0a51000)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.