ああ、これは長い間Unixを扱ってきた場合、非常に紛らわしい部分です。ほとんどのUnixがFHS-Filesystem Hierarchy Standardと呼ばれる従うべき「標準」があります。
私が主にRed Hatベースのディストリビューションを使用していることを考えると、Fedora、CentOS、およびRHEL Linuxディストリビューション向けのFHSに対する取り組みに最も精通しています。しかし、私は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がそれらの1つへのシンボリックリンクである可能性があります。
ディレクトリ- /usr/lib
プログラミングおよびパッケージ用のライブラリ。
目的: / usr / libには、ユーザーまたはシェルスクリプトによって直接実行されることを意図していないオブジェクトファイル、ライブラリ、および内部バイナリが含まれます。
注1:その他のアーキテクチャに依存しないアプリケーション固有の静的ファイルおよびサブディレクトリは、/ usr / shareに配置する必要があります。
アプリケーションは、/ usr / libの下の単一のサブディレクトリを使用できます。アプリケーションがサブディレクトリを使用する場合、アプリケーションが排他的に使用するすべてのアーキテクチャ依存データは、そのサブディレクトリ内に配置する必要があります。
注2:たとえば、Perl 5モジュールおよびライブラリのperl5サブディレクトリ。
ディレクトリ- /usr/lib<qual>
代替フォーマットライブラリ(オプション)。
目的: /usr/lib<qual>
シンボリックリンク/usr/lib<qual>/sendmail
および/usr/lib<qual>/X11
必須ではないことを除いて、代替バイナリ形式に対して/ usr / libと同じ役割を実行します。
注: / usr / libと/usr/lib<qual>
同じ(一方が他方へのシンボリックリンク)である場合、これらのファイルとアプリケーションごとのサブディレクトリが存在します。
TLDR;
一般に:
/ binまたは/ sbinディレクトリのいずれかに実行可能ファイルに必要なライブラリがある場合、それらのライブラリは/ lib *ディレクトリに配置する必要があります。
使用プログラムおよびパッケージ用のライブラリがある場合、それらは/ usr / lib / *に格納されます。特定のライブラリに必要な実行可能ファイルがあるが、これらの実行可能ファイルがユーザーによって直接またはルートによって呼び出されることを想定していない場合、/ usr / libexecに移動します。