ld.so.cache ファイルはバイナリファイルではありません。

ld.so.cache ファイルはバイナリファイルではありません。

私は現在Comptia Linux +試験を準備しており、共有ライブラリの章を勉強しています。その中には次のような言葉があります。/etc/ld.so.cachefileはバイナリファイルですが、私の場合はそうではありません。これは通常のファイルなので、コンテンツを簡単に表示でき、ライブラリの場所も含まれています。

ls -l /etc/ld.so.cache 
-rw-r--r--. 1 root root 154135 Feb 11 11:17 /etc/ld.so.cache

いくつかの資料では、キャッシュファイルがバイナリファイルであることを見ましたが、なぜこのような不一致が発生するのか疑問に思います。ファイル形式はディストリビューションによって異なりますか?私はFedora Workstation 27を使用しています。

ベストアンサー1

バイナリと実行(バイナリ)ファイルの定義を混同しています。

この本では、/etc/ld.so.cacheバイナリファイル(データファイル)について正しく言及しています。

ご覧のとおり、実行中file /etc/ld.so.cache

$ file /etc/ld.so.cache 
/etc/ld.so.cache: data

からman ld.so

共有オブジェクトの依存関係を解決するとき、動的リンカーはまず各依存関係文字列にスラッシュが含まれていることを確認します。これは、スラッシュを含む共有オブジェクトパス名がリンク時に指定された場合に発生する可能性があります。スラッシュが見つかると、依存関係文字列は(相対または絶対)パス名として解釈され、そのパス名を使用して共有オブジェクトがロードされます。

共有ライブラリの依存関係にスラッシュが含まれていない場合は、次の順序で検索されます。

  • 以前に拡張されたライブラリパスで見つかった候補共有オブジェクトのコンパイル済みリストを含むキャッシュファイル/etc/ld.so.cache。ただし、-z nodeflibリンカオプションを使用してバイナリをリンクすると、デフォルトパスの共有オブジェクトはスキップされます。ハードウェア機能ディレクトリ(以下を参照)にインストールされている共有オブジェクトは、他の共有オブジェクトよりも優先されます。

~からman ldconfig

/etc/ld.so.cache

/etc/ld.so.conf および /lib および /usr/lib で指定されたディレクトリーにあるソート済みライブラリーのリストを含むファイル。

また、/etc/ld.so.cache実行時に再生成されますldconfig。バラよりldconfigとld.so.cacheの関係

実際にライブラリファイルのリストであることをもう一度確認してください。

$ strings /etc/ld.so.cache | head -5
ld.so-1.7.0
glibc-ld.so.cache1.1
libz.so.1
/lib/x86_64-linux-gnu/libz.so.1
libxtables.so.7

またはもう一度使用してくださいldconfig -p

$ ldconfig -p | head -5
227 libs found in cache `/etc/ld.so.cache'
    libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1
    libxtables.so.7 (libc6,x86-64) => /lib/libxtables.so.7
    libxml2.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libxml2.so.2
    libxml-security-c.so.17 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libxml-security-c.so.17

おすすめ記事