web-dev-qa-db-ja.com

lib、lib32、lib64、libx32、およびlibexecの違い

私の64ビットUbuntu 13.04システムの/には、次のディレクトリがあります。

lib
lib32
lib64
libx32
libexec

/usrディレクトリには以下があります。

lib
lib32
libx32
libexec

これは検索で簡単に答えられるもののように見えましたが、これらのディレクトリに共有ライブラリ(libexecを除く)が格納されていることを除いて、オンラインでは何も見つかりませんでした。しかし、どの共有ライブラリがどのフォルダーに入りますか(lib32の32ビットおよびlib64の64ビットを除く)?誰かがこれらすべてのディレクトリの違いを説明できますか?

42
gsingh2011

ああ、そうです。これは、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と同じ役割を果たします。および/usr/lib<qual>/X11は不要です。

注:/ usr/libと/usr/lib<qual>が同じ場合(一方は他方へのシンボリックリンク)、これらのファイルとアプリケーションごとのサブディレクトリが存在します。

TLDR;

一般に:

/ binまたは/ sbinディレクトリのいずれかにある実行可能ファイルに必要なライブラリがある場合、それらのライブラリは/ lib *ディレクトリにあるはずです。

使用するプログラムとパッケージのライブラリがある場合、それらは/ usr/lib/*にあります。特定のライブラリに必要な実行可能ファイルがあるが、これらの実行可能ファイルがユーザーによって直接またはルートによって呼び出されると想定されていない場合、/ usr/libexecにあります。

40
slm