Разница между lib, lib32, lib64, libx32 и libexec

41

Моя 64-битная система Ubuntu 13.04 имеет следующие каталоги /:

lib
lib32
lib64
libx32
libexec

В /usrкаталоге есть:

lib
lib32
libx32
libexec

Это казалось чем-то, на что можно было легко ответить с помощью поиска, но я ничего не нашел в Интернете, кроме того, что эти каталоги хранят общие библиотеки (кроме libexec). Но какие общие библиотеки находятся в каких папках (кроме 32-битных в lib32 и 64-битных в lib64)? Может ли кто-нибудь объяснить разницу между всеми этими каталогами?

gsingh2011
источник
А у BSD, Fedora, AIX и Solaris есть свои особенности структуры каталогов.

Ответы:

39

Ах, да, это очень запутанная часть, если вы работали с 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-битными.

Например (64-битная система Fedora 14)

$ 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, которые поддерживают более одного двоичного формата, требующего отдельных библиотек. Это обычно используется для поддержки 64-битных или 32-битных систем, которые поддерживают несколько двоичных форматов, но требуют библиотек с одинаковым именем.

Примечание. В этом случае / lib32 и / lib64 могут быть каталогами библиотеки, а / lib - символической ссылкой на один из них.

Справочник - /usr/lib

Библиотеки для программирования и пакетов.

Цель: / usr / lib включает в себя объектные файлы, библиотеки и внутренние двоичные файлы, которые не предназначены для непосредственного выполнения пользователями или сценариями оболочки.

Примечание 1: Различные зависящие от архитектуры статические файлы и подкаталоги приложений должны быть помещены в / usr / share.

Приложения могут использовать один подкаталог в / usr / lib. Если приложение использует подкаталог, все зависящие от архитектуры данные, используемые исключительно приложением, должны быть помещены в этот подкаталог.

Примечание 2: Например, подкаталог perl5 для модулей и библиотек Perl 5.

Справочник - /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.

SLM
источник
Спасибо. Не могли бы вы уточнить, когда 32-битная или 64-битная библиотека будет помещена в lib, а не в соответствующую папку lib <qual>? Я не совсем понял ваше объяснение.
gsingh2011
Основное назначение / lib - содержать библиотеки для инструментов, которые находятся в / bin и / sbin. Учитывая, что / lib может содержать как 32-битные, так и 64-битные библиотеки. Я добавлю этот комментарий к ответу также!
SLM
Может быть, поместить раздел TLDR в верхней части?
Кевинарпе
1
В чем разница между lib32 и libx32?
Микко Ранталайнен
2
libx32 для x32 . Вы можете использовать fileутилиту с библиотеками в этих каталогах, чтобы увидеть разницу.
Эльмича