/etc/ld.so.cache
キャッシュファイルだよ
UNIX系のOSで使われるよ
共有ライブラリの名前とパスが書いてあるよ
簡単に書くよ
/etc/ld.so.cacheとは
UNIX系のOS
(コンピュータの人格に相当するソフト)(Linuxとか)で使われるファイルのひとつ
であり
共有ライブラリ
(いろいろなプログラムから使える、プログラムの部品)の名前と実際のファイルの置き場所が書いてあるファイル
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・共有
・ライブラリ
・共有ライブラリ
・キャッシュ
・キャッシュファイル
について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
共有は、今回は「一緒に使おうね~」の意味です。
ライブラリは「プログラムの部品をいっぱい集めて、ひとまとめにしたファイル」です。
いろいろできる便利な部品が詰まっています。
共有ライブラリは「いろいろなプログラムから使えるライブラリ」です。
文字通り、共有して使えるライブラリです。
キャッシュは「よく使うデータを取り出しやすいところに準備しておく仕組み」です。
キャッシュファイルはキャッシュとしての役割で使われるファイル」です。
以上を踏まえて
共有ライブラリの名前と実際のファイルの置き場所が書いてあるキャッシュファイル
が「/etc/ld.so.cache」です。
「etc」ディレクトリの中の「ld.so.cache」ファイルで「/etc/ld.so.cache」ね。
「/etc/ld.so.cache」はUNIX系のOS(Linuxとか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.cache」です。
共有ライブラリの名前と実際のファイルの置き場所が書いてあって、名前を聞けばすぐに置き場所が分かるようになっています。
これで大体の説明は終わりですが、せっかくなので「/etc/ld.so.conf」との関係性も書いておきますね。
「/etc/ld.so.conf」は「共有ライブラリの検索パス(共有ライブラリの探し場所)を書いておく設定ファイル」です。
「etc」ディレクトリの中の「ld.so.conf」ファイルで「/etc/ld.so.conf」ね。
「/etc/ld.so.conf」には共有ライブラリが置いてある場所を書きます。
ただし、コンピュータさんは「/etc/ld.so.conf」を見ません。
「/etc/ld.so.cache」を見て、お仕事をしています。
そこで「/etc/ld.so.conf」を編集した後は「ldconfig」というコマンドを実行して「/etc/ld.so.conf」の中身を「/etc/ld.so.cache」に反映するのです。
具体的には
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 → キャッシュファイル。共有ライブラリの置き場所が書かれている
となります。
一言でまとめるよ
まぁ「/etc/ld.so.cache」って単語が出てきたら「共有ライブラリ
(いろいろなプログラムから使える、プログラムの部品)の置き場所が書いてあるキャッシュファイルなんだな~」と お考えください。
おまけ
■検索してみる?






