はじめに
この実験では、Linux システムに特定のライブラリがインストールされているかどうかを確認する方法を学びます。まず、ldconfig -p を使用して利用可能な共有ライブラリをリストアップすることで、どのライブラリが存在し、それらの場所がどこにあるかを理解し、これを起点に異なる方法を探索します。
その後、dpkg -l コマンドを利用して特定のライブラリに関連付けられたパッケージを特定し、システムのパッケージマネージャー内でライブラリがどのように管理されているかを理解します。最後に、/usr/lib などの一般的なライブラリディレクトリを直接調べて、ライブラリファイルの存在を手動で確認する方法を学びます。
ldconfig -p でライブラリをリストアップする
このステップでは、ldconfig コマンドを使用して Linux システムで利用可能な共有ライブラリをリストアップする方法を学びます。
共有ライブラリは、複数のプログラムが使用できるコードの集合です。これにより、コードをすべてのプログラムに複製する必要がないため、ディスクスペースとメモリを節約できます。
ldconfig コマンドは主に、動的リンカーの実行時バインディングを設定するために使用されます。-p オプションとともに使用すると、キャッシュされたディレクトリと候補ライブラリのリストを出力します。
ターミナルが開いていない場合は、開きます。デスクトップの左側にある Xfce Terminal アイコンをクリックすることで、ターミナルを開くことができます。
次に、以下のコマンドを入力して Enter キーを押します。
ldconfig -p
このコマンドは、システム上で見つかった共有ライブラリの長いリストを出力します。出力は次のようになります。
...
libzstd.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzstd.so.1
libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1
libxml2.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxml2.so.2
libxml2.so (libc6,x86-64) => /lib/x86_64-linux-gnu/libxml2.so
libxslt.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxslt.so.1
...
出力には、ライブラリ名、それが構築されたアーキテクチャ (x86-64 など)、およびシステム上のライブラリファイルへのパスが表示されます。
出力が非常に長いため、less などのページャーにパイプして、画面ごとに表示することができます。これを行うには、パイプ記号 | を使用します。
ldconfig -p | less
スペースバーを押すとページを下にスクロールし、b を押すと上にスクロールし、q を押すと less を終了します。
このコマンドは、どのライブラリが利用可能で、それらがどこにあるかを確認するのに便利です。
Continue をクリックして次のステップに進みます。
dpkg -l でライブラリパッケージを確認する
前のステップでは、共有ライブラリをリストアップしました。次に、dpkg コマンドを使用して、特定のライブラリがどのパッケージに属しているかを調べる方法を学びます。
dpkg は、Ubuntu などの Debian ベースのシステムのパッケージマネージャーです。.deb パッケージのインストール、削除、管理に使用されます。-l オプションは、インストールされているパッケージをリストアップします。
特定のパッケージを見つけるには、dpkg -l と grep を組み合わせて出力をフィルタリングすることができます。ldconfig -p の出力で見た xml2 ライブラリに関連するパッケージを検索してみましょう。
ターミナルに以下のコマンドを入力して Enter キーを押します。
dpkg -l | grep xml2
このコマンドは、すべてのインストールされているパッケージをリストアップし (dpkg -l)、そのリストをフィルタリングして "xml2" を含む行のみを表示します (grep xml2)。
以下のような出力が表示されるはずです。
ii libxml2:amd64 <version> amd64 GNOME XML library
ii libxml2-dev:amd66 <version> amd64 Development files for the GNOME XML library
...
出力には、パッケージに関する情報が提供されています。
- 最初の 2 文字 (
ii) は、パッケージの状態 (インストール済み) を示します。 - パッケージ名 (例:
libxml2:amd64)。 - バージョン番号。
- アーキテクチャ (例:
amd64)。 - パッケージの簡単な説明。
これは、特定のライブラリファイルを提供するソフトウェアパッケージを特定する強力な方法です。トラブルシューティングや依存関係の理解に非常に役立ちます。
Continue をクリックして次に進みます。
/usr/lib 内のライブラリファイルを調査する
この最後のステップでは、多くの共有ライブラリが格納されているディレクトリ /usr/lib を探索しましょう。
Linux の /usr ディレクトリには、ユーザーレベルのプログラムとデータが含まれています。特に /usr/lib サブディレクトリには、システムの起動には必須ではないが、アプリケーションが必要とする共有ライブラリが格納されています。
まず、現在のディレクトリを /usr/lib に変更しましょう。これには cd コマンドを使用します。
以下のコマンドを入力して Enter キーを押します。
cd /usr/lib
これで /usr/lib ディレクトリ内に移動しました。このディレクトリの内容を表示するには、ls コマンドを使用します。このディレクトリには多くのファイルが含まれているため、再び出力を less にパイプします。
以下のコマンドを入力して Enter キーを押します。
ls | less
長いファイルとディレクトリのリストが表示されます。.so で終わる多くのファイルは共有ライブラリです。また、x86_64-linux-gnu のようなアーキテクチャ固有のライブラリを含むディレクトリも見られるかもしれません。
スペースバーを押して下にスクロールし、q を押して less を終了します。
前のステップで説明した libxml2 ライブラリファイルを探してみましょう。現在のディレクトリ (/usr/lib) 内で ls と grep を使用して見つけることができます。
以下のコマンドを入力して Enter キーを押します。
ls | grep libxml2
libxml2 ライブラリファイルとシンボリックリンクが表示される、以下のような出力が表示されるはずです。
libxml2.so
libxml2.so.2
libxml2.so.2.<version>
.so ファイルは実際の共有ライブラリであり、バージョン番号のないファイル (例:libxml2.so) は、バージョン番号を含む実際のライブラリファイルを指すシンボリックリンクであることが多いです。
readlink コマンドを使用して、シンボリックリンクが指す先を確認することができます。例えば:
readlink libxml2.so
これにより、libxml2.so がリンクしている実際のファイルが表示され、完全なバージョン番号が含まれます。
libxml2.so.2
このステップでは、cd、ls、grep を使用して一般的なライブラリディレクトリに移動し、その内容を調べる方法を示しました。ライブラリがどこに格納されているかを理解することは、システム管理と開発において重要です。
Continue をクリックして、実験を完了します。
まとめ
この実験では、いくつかの方法を使って Linux でライブラリがインストールされているかどうかを確認する方法を学びました。まず、ldconfig -p コマンドを使用して利用可能な共有ライブラリとその場所をリストアップし、動的リンカーのバインディング管理におけるこのコマンドの役割を理解しました。
次に、Debian パッケージの管理に重要なツールである dpkg -l コマンドを使用して、特定のライブラリが属するパッケージを特定する方法を調べました。最後に、/usr/lib のような一般的なライブラリディレクトリを直接調べて、ライブラリファイルの存在を手動で確認する方法を学びました。これらの手順は、Linux システム上のライブラリのインストール状態を判断する包括的なアプローチを提供します。



