まず、なぜ別のもの/lib
と/lib64
:
ファイルシステム階層標準は、
その別個の言及/lib
と/lib64
存在するため。
10.1。別個のライブラリーを必要とする複数のバイナリー形式をサポートするシステムでは、/ libディレクトリーの1つ以上のバリアントが存在する場合があります。(...)これは一般に、複数のバイナリ形式をサポートするが、同じ名前のライブラリを必要とするシステムでの64ビットまたは32ビットのサポートに使用されます。この場合、/ lib32および/ lib64がライブラリディレクトリであり、/ libがそれらの1つへのシンボリックリンクである可能性があります。
たとえば、Slackware 14.2には、FHSスニペットが示すようにシンボリックリンクではありませんが、
32ビットライブラリと64ビットライブラリのディレクトリ
が/lib
あります。/lib64
/lib
$ ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 12 Aug 11 2016 /lib/libc.so.6 -> libc-2.23.so
$ ls -l /lib64/libc.so.6
lrwxrwxrwx 1 root root 12 Aug 11 2016 /lib64/libc.so.6 -> libc-2.23.so
とに2つのlibc.so.6
ライブラリが/lib
あり/lib64
ます。
各動的に構築された
ELFバイナリが
、この場合のいずれかで、インタプリタにハードコードされたパスが含まれています
/lib/ld-linux.so.2
か/lib64/ld-linux-x86-64.so.2
:
$ file main
main: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, not stripped
$ readelf -a main | grep 'Requesting program interpreter'
[Requesting program interpreter: /lib/ld-linux.so.2]
$ file ./main64
./main64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, not stripped
$ readelf -a main64 | grep 'Requesting program interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
インタプリタの仕事は、必要な共有ライブラリをロードすることです。GNUインタープリターに、使用するバイナリーLD_TRACE_LOADED_OBJECTS=1
やldd
ラッパーを実行しなくても、ロードするライブラリーを尋ねることができます。
$ LD_TRACE_LOADED_OBJECTS=1 ./main
linux-gate.so.1 (0xf77a9000)
libc.so.6 => /lib/libc.so.6 (0xf760e000)
/lib/ld-linux.so.2 (0xf77aa000)
$ LD_TRACE_LOADED_OBJECTS=1 ./main64
linux-vdso.so.1 (0x00007ffd535b3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f56830b3000)
/lib64/ld-linux-x86-64.so.2 (0x00007f568347c000)
ご覧のように、特定のインタープリターはライブラリの検索場所を正確に知っています。32ビットバージョンはライブラリを検索し/lib
、64ビットバージョンはライブラリを検索します/lib64
。
FHS規格では、次のことについて述べています/bin
。
/ binには、システム管理者とユーザーの両方が使用できるコマンドが含まれていますが、他のファイルシステムがマウントされていない場合(シングルユーザーモードなど)に必要です。また、スクリプトによって間接的に使用されるコマンドが含まれることもあります。
そこには分離されていない理由IMO理由/bin
と/bin64
我々はこれらのディレクトリの両方で同じ名前のファイルがあった場合、我々は置く必要があるだろうので、我々は、間接的にそれらのいずれかを呼び出すことができなかったということである/bin
か/bin64
の最初
$PATH
。
しかし、上記のちょうど慣例であることに注意して-あなたは別の持っている場合のLinuxカーネルは本当に気にしない/bin
と/bin64
。必要な場合は、それらを作成し、それに応じてシステムをセットアップできます。
また、Androidについても言及しました-変更されたLinuxカーネルを実行することを除いて、UbuntuなどのGNUシステムとは何の関係もないことに注意してください-glibc、bashなし(デフォルトでは、もちろん手動でコンパイルしてデプロイできます)まったく違う。
/bin
し、/sbin
そこに。質問は何ですか?/lib
との違いについて質問してい/lib64
ますか?