[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

/etc/ld.so.cache

pointこの用語のポイント

pointキャッシュファイルだよ

pointUNIX系のOSで使われるよ

point共有ライブラリの名前とパスが書いてあるよ

スポンサーリンク

簡単に書くよ

/etc/ld.so.cacheとは

UNIX系のOS(LinuxとかMacとか)で使われる、共有ライブラリの名前と実際のファイルの置き場所が書いてあるファイル
です。

image piyo

詳しく書くよ

まずは予備知識から行きましょう。

共有ライブラリは「いろんなプログラムから使えるプログラムの部品」ね。

/etc/ld.so.cache

共有は、ここでは「一緒に使おうね~」の意味です。

/etc/ld.so.cache2

ライブラリは「便利なプログラムの部品を集めてひとまとめにしたファイル」です。

/etc/ld.so.cache3

つまり「一緒に使えるプログラムの部品」が共有ライブラリです。

あとは「キャッシュ」という用語も覚えておいてください。
キャッシュは「よく使うデータを取り出しやすいところに準備しておく仕組み」です。

/etc/ld.so.cache4

また、キャッシュとしての役割で使われるファイルを「キャッシュファイル」と言ったりもします。

/etc/ld.so.cache5

以上が予備知識です。

ここまでを踏まえて、共有ライブラリの名前と実際のファイルの置き場所が書いてあるキャッシュファイルが「/etc/ld.so.cache」です。
「etc」ディレクトリの中の「ld.so.cache」ファイルで「/etc/ld.so.cache」ね。

/etc/ld.so.cache6

「/etc/ld.so.cache」はUNIX系のOSLinuxとかMacとか)で使われるファイルです。
中身はバイナリデータ(人間が見てもよく分からないデータ)なので

more /etc/ld.so.cache

とかやっても、綺麗に表示されません。
「/etc/ld.so.cache」の中身を見たい場合は

ldconfig -p

を実行します。
そうすると「/etc/ld.so.cache」の中身が、ずらずらっと綺麗に表示されます。
私の環境(CentOS 7)では以下の内容が表示されました。

320 個のライブラリがキャッシュ `/etc/ld.so.cache' 内で見つかりました
        p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so
        libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
        libxtables.so.10 (libc6,x86-64) => /lib64/libxtables.so.10
        libxshmfence.so.1 (libc6,x86-64) => /lib64/libxshmfence.so.1

(中略)

        libICE.so.6 (libc6,x86-64) => /lib64/libICE.so.6
        libGL.so.1 (libc6,x86-64) => /lib64/libGL.so.1
        libEGL.so.1 (libc6,x86-64) => /lib64/libEGL.so.1
        ld-linux-x86-64.so.2 (libc6,x86-64) => /lib64/ld-linux-x86-64.so.2


ここで2行目の

p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so

に注目してください。
これは

「p11-kit-trust.so」をくれ!って言われたら「/lib64/p11-kit-trust.so」をくれてやれや!

と書いてあります。

もちろん「『p11-kit-trust.so』をくれ!」と言われてから「『p11-kit-trust.so』はどこにあるかな~」と探しても、間違いではありません。
でも、それだと時間がかかりますよね?

/etc/ld.so.cache7

あらかじめ置き場所が分かっていれば、持ってくるのも簡単です。
「くれ!」と言われたら、すぐに「はいよ!」と渡せるでしょう。

/etc/ld.so.cache8

このように、コンピュータさんの手抜き目的で用意されているファイルが「/etc/ld.so.cache」です。
共有ライブラリの名前と実際のファイルの置き場所が書いてあって、名前を聞けばすぐに置き場所が分かるようになっています。

これで大体の説明は終わりですが、せっかくなので「/etc/ld.so.conf」との関係性も書いておきましょう。

/etc/ld.so.conf」は「共有ライブラリの検索パス(共有ライブラリの探し場所)を書いておく設定ファイル」です。
「etc」ディレクトリの中の「ld.so.conf」ファイルで「/etc/ld.so.conf」ね。

/etc/ld.so.cache9

/etc/ld.so.conf」には共有ライブラリの置いてある場所を書きます。
ただし、コンピュータさんは「/etc/ld.so.conf」を見ません。
/etc/ld.so.cache」を見て、お仕事をしています。

/etc/ld.so.cache10

そこで「/etc/ld.so.conf」を編集した後は「ldconfig」というコマンドを実行して「/etc/ld.so.conf」の中身を「/etc/ld.so.cache」に反映するのです。

/etc/ld.so.cache11

具体的には

ldconfig

を実行します。
そうすると、コンピュータさんは「/etc/ld.so.conf」の中に書いてある共有ライブラリの置き場所を見に行きます。
そして、そこで見つけた共有ライブラリを「/etc/ld.so.cache」に登録してくれます。
結果として「/etc/ld.so.conf」に書いた内容がコンピュータに反映される理屈です。

この流れを実際の例で見てみましょう。

前準備として

cp -p /lib64/libz.so.1 /usr/local/lib/

を実行して「libz.so.1」を「/usr/local/lib/」にコピーしておきます。

ちなみに「libz.so.1」をコピーしたのは、自前で実験用の共有ライブラリを作るのが手間だったからです。
適当に、動いているライブラリをコピーしました。
本来は、自作ライブラリや未登録のライブラリに対して、あれこれします。

さて、それでは「/usr/local/lib/」にコピーした「libz.so.1」、つまり「/usr/local/lib/libz.so.1」をコンピュータさんに認識させてみましょう。

まず、やるのは「/etc/ld.so.conf」の編集です。
共有ライブラリの置いてある場所「/usr/local/lib/」を追記します。

vi /etc/ld.so.conf

で「/etc/ld.so.conf」を開いて

/usr/local/lib/

を追記しました。
私の環境における編集後の「/etc/ld.so.conf」は以下の内容です。

include ld.so.conf.d/*.conf
/usr/local/lib


次は「/etc/ld.so.conf」の内容を「/etc/ld.so.cache」に反映します。

ldconfig

を実行します。

「ldconfig」コマンドを実行すると「/etc/ld.so.conf」の内容が「/etc/ld.so.cache」に反映されます。
具体的には「/usr/local/lib/libz.so.1」が「/etc/ld.so.cache」に登録されます。

ldconfig -p

を実行して「/etc/ld.so.cache」の中を見ると

libz.so.1 (libc6,x86-64) => /usr/local/lib/libz.so.1

という記述が追加されていました。

ここまでの流れをまとめます。

1.作った共有ライブラリをどこかに置く
2.「1」の置き場所を「/etc/ld.so.conf」に書く
3.「ldconfig」コマンドを実行する


とすることで、作った共有ライブラリが「/etc/ld.so.cache」に登録されます。

これが「/etc/ld.so.conf」と「/etc/ld.so.cache」の関係性です。

/etc/ld.so.conf → 設定ファイル。共有ライブラリの置き場所を書く
/etc/ld.so.cache → キャッシュファイル。共有ライブラリの置き場所が書かれている


となります。

image piyo2

一言でまとめるよ

まぁ「/etc/ld.so.cache」って単語が出てきたら「共有ライブラリの置き場所が書いてあるキャッシュファイルなんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク