私の 64 ビット Ubuntu 13.04 システムには、次のディレクトリがあります/
。
lib
lib32
lib64
libx32
libexec
ディレクトリには/usr
次のものがあります:
lib
lib32
libx32
libexec
これは検索すれば簡単に答えが見つかるような気がしましたが、これらのディレクトリに共有ライブラリ (libexec を除く) が格納されているということ以外、オンラインでは何も見つかりませんでした。しかし、どの共有ライブラリがどのフォルダに格納されるのでしょうか (lib32 の 32 ビットと lib64 の 64 ビット以外)? これらすべてのディレクトリの違いを説明していただけますか?
答え1
ああ、確かにこれは、Unixを長く扱ったことがある人にとっては非常に混乱する部分です。ほとんどのUnixが「従おうと」している標準があります。FHS - ファイルシステム階層標準。
私は主にRed Hatベースのディストリビューションを使用していますが、FHSに対する彼らの見解Fedora、CentOS、RHEL Linux ディストリビューション用です。ただし、Debian および BSD ベースのディストリビューションも使用したことがありますが、ファイルシステムの観点からは、保存場所に関してはそれほど違いはありません。
さて、あなたの質問に移ります。FHS文書は、これらのディレクトリ構造を緩やかに管理します。一般的には、次のようになります。
ディレクトリ -/lib
重要な共有ライブラリとカーネル モジュールが含まれています。
目的:/lib ディレクトリには、システムを起動し、ルート ファイル システムでコマンドを実行するために必要な共有ライブラリ イメージ (/bin および /sbin 内のバイナリ) が含まれています。
注1:/usr 内のバイナリにのみ必要な共有ライブラリ (X Window バイナリなど) は、/lib に置いてはいけません。/bin および /sbin 内のバイナリを実行するために必要な共有ライブラリのみがここに置けます。
注2:/lib の主な目的は、/bin および /sbin ディレクトリに展開されたツールのライブラリを格納することであるため、/lib 内のライブラリは 32 ビットまたは 64 ビットのいずれかになります。
例えば(Fedora 14 64ビットシステム)
$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
以下は私の/libのファイルのサンプルです
./libpam.so.0.82.2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libplc4.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libidn.so.11.6.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./upstart/telinit: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/runlevel: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/shutdown: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/reboot: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./libdb-4.8.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./firmware/mixart/miXart8.elf: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
./libtinfo.so.5.7: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
ディレクトリ -/lib<qual>
代替形式の必須共有ライブラリ (オプション)。これらは、/lib32、/lib64 などのディレクトリになります。
目的:複数のバイナリ形式をサポートし、個別のライブラリを必要とするシステムでは、/lib ディレクトリの 1 つ以上のバリアントが存在する場合があります。これは通常、複数のバイナリ形式をサポートしているが、同じ名前のライブラリを必要とするシステムでの 64 ビットまたは 32 ビットのサポートに使用されます。
注記:この場合、/lib32 と /lib64 はライブラリ ディレクトリであり、/lib はそれらのいずれかへのシンボリック リンクである可能性があります。
ディレクトリ -/usr/lib
プログラミングとパッケージ用のライブラリ。
目的:/usr/lib には、ユーザーまたはシェル スクリプトによって直接実行されることを意図していないオブジェクト ファイル、ライブラリ、および内部バイナリが含まれます。
注1:さまざまなアーキテクチャに依存しないアプリケーション固有の静的ファイルとサブディレクトリは、/usr/share に配置する必要があります。
アプリケーションは、/usr/lib の下の単一のサブディレクトリを使用できます。アプリケーションがサブディレクトリを使用する場合、アプリケーションによって排他的に使用されるすべてのアーキテクチャ依存データは、そのサブディレクトリ内に配置する必要があります。
注2:たとえば、Perl 5 モジュールとライブラリの場合は perl5 サブディレクトリ。
ディレクトリ -/usr/lib<qual>
代替形式ライブラリ (オプション)。
目的: /usr/lib<qual>
代替バイナリ形式の /usr/lib と同じ役割を果たしますが、シンボリック リンク/usr/lib<qual>/sendmail
は/usr/lib<qual>/X11
不要です。
注記:/usr/lib とが同じ場合/usr/lib<qual>
(一方が他方へのシンボリック リンク)、これらのファイルとアプリケーションごとのサブディレクトリが存在します。
TLDR;
一般的に:
/bin または /sbin ディレクトリのいずれかに実行可能ファイルに必要なライブラリがある場合、それらのライブラリは /lib* ディレクトリに配置する必要があります。
使用プログラムやパッケージ用のライブラリがある場合は、それらは /usr/lib/* に配置されます。特定のライブラリに必要な実行可能ファイルがある場合、これらの実行可能ファイルはユーザーまたは root によって直接呼び出されることが想定されていないため、それらは /usr/libexec に配置されます。