Linuxでの "ldd"コマンドの使用

lddコマンドは、任意のプログラムで必要とされる共有ライブラリを表示するために使用できます。

これは、依存関係がない場合に役立ち、欠落している関数やオブジェクトをリストするために使用できます。

lddコマンドの構文

これは、lddコマンドを使用するときの正しい構文です。

ldd [オプション] ... FILE ...

上記のコマンドの[OPTION]に挿入できるlddコマンドスイッチがあります:

--helpこのヘルプを表示して終了する--versionバージョン情報を出力して終了する-d、--data-relocsはデータ再配置を処理する-r、--function-relocsはデータと関数の再配置を処理する-u、--unused未使用の直接依存関係を出力する-v、--verboseすべての情報を表示する

lddコマンドの使用方法

次のコマンドを使用して、lddコマンドから詳細を取得できます。

ldd -v / path / to / program / executable

出力にはバージョン情報と共有ライブラリへのパスとアドレスが次のように表示されます:

ldd libshared.so linux-vdso.so.1 =>(0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2(0x00007ff1dfafe000)

SOファイルがまったく存在しない場合、欠落しているライブラリは次のコマンドを使用して見つけることができます。

ldd -d path / to / program

出力は次のようになります。

linux-vdso.so.1(0x00007ffc2936b000)/home/gary/demo/garylib.so => not foundlibc.so.6 => usr / lib / libc.so.6(0x00007fd0c6259000)/ lib64 / ld-linux-x86 -64.so.2(0x00007fd0c65fd000)

重要:信頼できないプログラムに対してlddコマンドを実行しないでください。 これは、依存関係のツリー全体ではなく、直接的な依存関係だけを示すより安全な方法です: objdump -p / path / to / program | grepが必要です。

アプリケーションへのパスを見つける方法

アプリケーションへの完全なパスを指定する必要がある場合は、lddを使用してその依存関係を調べることができます。これにはさまざまな方法があります。

たとえば、これがFirefoxのパスを見つける方法です:

find / -name firefox

しかし、 findコマンドの問題は実行可能ファイルがリストされているだけでなく、Firefoxがどこにあっても次のように表示されるということです。

このアプローチはやりすぎで、sudoコマンドを使用て権限を昇格させる必要があります。そうしないと、多くの権限拒否エラーが発生する可能性が高くなります。

代わりにwhereisコマンドを使用してアプリケーションのパスを見つけるほうがずっと簡単です。

whereis firefox

今回は、出力は次のようになります。

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Firefoxの共有ライブラリを見つけるために今やっておかなければならないのは、次のコマンドを入力するだけです。

ldd / usr / bin / firefox

コマンドの出力は次のようになります。

linux-vdso.so.1(0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0(0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2(0x00007feb98f76000)
libstdc ++。so.6 => /usr/lib/libstdc++.so.6(0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6(0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1(0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6(0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2(0x00007feb99397000)

linux-vdso.so.1はライブラリの名前で、16進数はライブラリがメモリにロードされるアドレスです。

他の多くの行で、=>記号の後ろにパスがあることがわかります。 これは物理バイナリへのパスです。 16進数は、ライブラリがロードされるアドレスです。