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


41

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

lib
lib32
lib64
libx32
libexec

では/usrディレクトリがあります:

lib
lib32
libx32
libexec

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


また、BSD、Fedora、AIX、およびSolarisには、ディレクトリ構造に対する独自の工夫があります。

回答:


39

ああ、これは長い間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に移動します。


ありがとう。ただし、対応するlib <qual>フォルダーではなく、32ビットまたは64ビットのライブラリをlibに配置するタイミングを明確にできますか?私はあなたの説明をまったく得ていませんでした。
gsingh2011

/ libの主な目的は、/ binおよび/ sbinにあるツールのライブラリを含めることです。/ libには、32ビットと64ビットの両方のライブラリを混在させることができると仮定します。このコメントも回答に追加します!
slm

TLDRセクションを一番上に置いたのでしょうか?
ケビナープ

1
lib32とlibx32の違いは何ですか?
ミッコランタライネン

2
libx32はx32用です。fileこれらのディレクトリのライブラリでユーティリティを使用して、違いを確認できます。
-elmicha
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.