259

システムの実行可能ファイルで使用されているライブラリを知りたいです。より具体的には、どのライブラリが最も使用されているか、それらを使用するバイナリとともにランク付けしたいと思います。これどうやってするの?

4

13 に答える 13

299
  1. ldd各実行可能ファイルの共有ライブラリを一覧表示するために使用します。
  2. 出力をクリーンアップする
  3. 並べ替え、カウントの計算、カウントによる並べ替え

「/bin」ディレクトリ内のすべての実行可能ファイルの答えを見つけるには:

find /bin -type f -perm /a+x -exec ldd {} \; \
| grep so \
| sed -e '/^[^\t]/ d' \
| sed -e 's/\t//' \
| sed -e 's/.*=..//' \
| sed -e 's/ (0.*)//' \
| sort \
| uniq -c \
| sort -n

すべてのディレクトリを検索するには、上記の「/bin」を「/」に変更します。

出力 (/bin ディレクトリのみ) は次のようになります。

  1 /lib64/libexpat.so.0
  1 /lib64/libgcc_s.so.1
  1 /lib64/libnsl.so.1
  1 /lib64/libpcre.so.0
  1 /lib64/libproc-3.2.7.so
  1 /usr/lib64/libbeecrypt.so.6
  1 /usr/lib64/libbz2.so.1
  1 /usr/lib64/libelf.so.1
  1 /usr/lib64/libpopt.so.0
  1 /usr/lib64/librpm-4.4.so
  1 /usr/lib64/librpmdb-4.4.so
  1 /usr/lib64/librpmio-4.4.so
  1 /usr/lib64/libsqlite3.so.0
  1 /usr/lib64/libstdc++.so.6
  1 /usr/lib64/libz.so.1
  2 /lib64/libasound.so.2
  2 /lib64/libblkid.so.1
  2 /lib64/libdevmapper.so.1.02
  2 /lib64/libpam_misc.so.0
  2 /lib64/libpam.so.0
  2 /lib64/libuuid.so.1
  3 /lib64/libaudit.so.0
  3 /lib64/libcrypt.so.1
  3 /lib64/libdbus-1.so.3
  4 /lib64/libresolv.so.2
  4 /lib64/libtermcap.so.2
  5 /lib64/libacl.so.1
  5 /lib64/libattr.so.1
  5 /lib64/libcap.so.1
  6 /lib64/librt.so.1
  7 /lib64/libm.so.6
  9 /lib64/libpthread.so.0
 13 /lib64/libselinux.so.1
 13 /lib64/libsepol.so.1
 22 /lib64/libdl.so.2
 83 /lib64/ld-linux-x86-64.so.2
 83 /lib64/libc.so.6

編集 - 「grep -P」を削除

于 2008-09-08T17:21:54.407 に答える
83

ARM ツールチェーンに ldd がなかったので、objdump を使用しました。

$(CROSS_COMPILE)objdump -p

例えば:

objdump -p /usr/bin/python:

Dynamic Section:
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libutil.so.1
  NEEDED               libssl.so.1.0.0
  NEEDED               libcrypto.so.1.0.0
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6
  INIT                 0x0000000000416a98
  FINI                 0x000000000053c058
  GNU_HASH             0x0000000000400298
  STRTAB               0x000000000040c858
  SYMTAB               0x0000000000402aa8
  STRSZ                0x0000000000006cdb
  SYMENT               0x0000000000000018
  DEBUG                0x0000000000000000
  PLTGOT               0x0000000000832fe8
  PLTRELSZ             0x0000000000002688
  PLTREL               0x0000000000000007
  JMPREL               0x0000000000414410
  RELA                 0x0000000000414398
  RELASZ               0x0000000000000078
  RELAENT              0x0000000000000018
  VERNEED              0x0000000000414258
  VERNEEDNUM           0x0000000000000008
  VERSYM               0x0000000000413534
于 2013-03-20T10:28:37.170 に答える
59

Linuxでは次を使用します:

lsof -P -T -p Application_PID

lddこれは、実行可能ファイルがデフォルト以外のローダーを使用する場合よりもうまく機能します

于 2011-11-17T23:54:24.113 に答える
54

バイナリが使用するライブラリを知るには、ldd を使用します

ldd path/to/the/tool

システム全体の内訳に到達するには、小さなシェル スクリプトを作成する必要があります。

于 2008-09-08T17:04:53.900 に答える
19

プログラム実行可能ファイルの共有ライブラリの依存関係を確認する

特定の実行可能ファイルが依存しているライブラリを見つけるには、ldd コマンドを使用できます。このコマンドは、動的リンカーを呼び出して、実行可能ファイルのライブラリ依存関係を見つけます。

> $ ldd /path/to/program

信頼されていないサードパーティの実行可能ファイルで ldd を実行することは推奨されないことに注意してください。ldd の一部のバージョンでは、実行可能ファイルを直接呼び出してライブラリの依存関係を特定することがあり、これはセキュリティ リスクになる可能性があります。

代わりに、不明なアプリケーション バイナリのライブラリ依存関係を表示するより安全な方法は、次のコマンドを使用することです。

$ objdump -p /path/to/program | grep が必要

詳細については

于 2015-04-24T04:53:05.593 に答える
10

OS X では、デフォルトでldd,objdumpまたははありませんlsof。別の方法として、次を試してくださいotool -L

$ otool -L `which openssl`
/usr/bin/openssl:
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libssl.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

この例でwhich opensslは、特定の実行可能ファイルと現在のユーザー環境の完全修飾パスを使用して塗りつぶします。

于 2015-01-27T00:29:31.823 に答える
7

UNIX システムでは、バイナリ (実行可能) 名が test であるとします。次に、次のコマンドを使用して、テストで使用されるライブラリを一覧表示します。

ldd test
于 2011-04-20T08:07:35.040 に答える
4

ツールが使用するライブラリをldd取得できます。ツール セットのライブラリの使用状況をランク付けするには、次のコマンドのようなものを使用できます。

ldd /bin/* /usr/bin/* ... | sed -e '/^[^\t]/ d; s/^\t\(.* => \)\?\([^ ]*\) (.*/\2/g' | sort | uniq -c

(ここでsedは、タブで始まらないすべての行を削除し、実際のライブラリのみを除外します。これによりsort | uniq -c、発生した回数を示すカウントで各ライブラリが取得されます。)

最後に追加sort -gして、ライブラリを使用順に取得することをお勧めします。

上記のコマンドを使用すると、おそらく 2 行の非ライブラリ行が表示されることに注意してください。静的実行可能ファイル (「動的実行可能ファイルではない」) の 1 つと、ライブラリを含まない実行可能ファイル。後者は、linux-gate.so.1ファイルシステムのライブラリではなく、カーネルによって「提供」されたライブラリの結果です。

于 2008-09-08T17:35:02.547 に答える
2

もう 1 つのオプションは、次の場所にあるファイルを読み取るだけです。

/proc/<pid>/maps

たとえば、プロセス ID が 2601 の場合、コマンドは次のようになります。

cat /proc/2601/maps

そして、出力は次のようになります

7fb37a8f2000-7fb37a8f4000 r-xp 00000000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37a8f4000-7fb37aaf3000 ---p 00002000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37aaf3000-7fb37aaf4000 r--p 00001000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37aaf4000-7fb37aaf5000 rw-p 00002000 08:06 4065647                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/network_networkmanager.so
7fb37aaf5000-7fb37aafe000 r-xp 00000000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37aafe000-7fb37acfd000 ---p 00009000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37acfd000-7fb37acfe000 r--p 00008000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37acfe000-7fb37acff000 rw-p 00009000 08:06 4065646                    /usr/lib/x86_64-linux-gnu/libproxy/0.4.15/modules/config_gnome3.so
7fb37acff000-7fb37ad1d000 r-xp 00000000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37ad1d000-7fb37af1d000 ---p 0001e000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37af1d000-7fb37af1e000 r--p 0001e000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37af1e000-7fb37af1f000 rw-p 0001f000 08:06 3416761                    /usr/lib/x86_64-linux-gnu/libproxy.so.1.0.0
7fb37af1f000-7fb37af21000 r-xp 00000000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
7fb37af21000-7fb37b121000 ---p 00002000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
7fb37b121000-7fb37b122000 r--p 00002000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
7fb37b122000-7fb37b123000 rw-p 00003000 08:06 4065186                    /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
于 2018-11-30T09:43:33.533 に答える