Linux
 Computer >> コンピューター >  >> システム >> Linux

Linuxでのlddコマンドの使用

lddを使用する 特定のプログラムに必要な共有ライブラリを表示するコマンド。 lddコマンドは、依存関係が欠落している場合に解決するのに役立ちます。このコマンドは、不足している関数とオブジェクトも一覧表示します。

lddコマンド構文

エラーを回避するために、lddコマンドの適切な構文を確認してください。

ldd [OPTION]... FILE...

上記のコマンドの[OPTION]スポットに挿入された、使用可能なlddコマンドスイッチを1つ以上使用します。

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

lddコマンドの使用方法

次のコマンドを実行して、プログラムに関する詳細情報を取得します。

ldd -v /path/to/program/executable

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

libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
Linuxでのlddコマンドの使用

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)
Linuxでのlddコマンドの使用

信頼できないプログラムに対してlddコマンドを実行しないでください。これは、lddコマンドが実行する可能性があるためです。代わりに、依存関係ツリー全体ではなく、直接の依存関係のみを表示する、より安全な代替手段を使用してください。

objdump -p /path/to/program | grep NEEDED
Linuxでのlddコマンドの使用

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

lddとの依存関係を見つけたい場合は、アプリケーションへのフルパスを指定する必要があります。これはいくつかの方法で実行できます。

たとえば、Firefoxへのパスを見つける方法は次のとおりです。

find / -name firefox

ただし、findコマンドの問題は、次のように、実行可能ファイルとFirefoxが配置されているすべての場所が一覧表示されることです。

/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox

このアプローチは少しやり過ぎであり、特権を上げるためにsudoコマンドを使用する必要があるかもしれません。そうしないと、人の許可が拒否されたエラーが発生する可能性があります。

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

whereis firefox

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

/usr/bin/firefox
/etc/firefox
/usr/lib/firefox
Linuxでのlddコマンドの使用

次に、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進数は、ライブラリがロードされるアドレスです。


  1. Linuxで「echo」コマンドを使用する方法

    Linuxをまったく使用したことがない場合でも、Linuxデスクトップを長期間使用している場合でも、意味をなさないように思われるコマンドがいくつかあります。これは、Linuxやその他のUnixライクなオペレーティングシステムの真の力の多くが作用するコマンドラインに飛び込むことがない場合に特に当てはまります。 これらの1つは、由緒あるechoです。 指図。一見、これは役に立たないコマンドのように見えるかもしれません。ボンネットの下を見ると、驚くほど便利であることがわかります。 「エコー」は何をしますか? echoの手動エントリを見てください 、そしてあなたは多くの助けを見つけることができませ

  2. LinuxでTeeコマンドを使用する方法

    Linuxシェルでパイプとリダイレクトを使用したことがある場合は、teeを使用する必要がある場合もあります。 ユーティリティ。 ティーは何をしますか? などのコマンド ls 現在のディレクトリの内容が表示されます。つまり、これらのコンテンツをstdout(標準出力)(通常は画面)、より正確には仮想端末ディスプレイに表示します。 のようなコマンド ls > file123 画面には何も表示されません。 signは、すべての出力をstdoutに表示するのではなく、ファイルにリダイレクトします。 file123には、以前に画面に表示されていたコンテンツが入力されます。 ディレクトリ