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

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

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

lib
lib32
lib64
libx32
libexec

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

lib
lib32
libx32
libexec

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

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

Кратко;

В общем:

Если в каталогах /bin или /sbin есть библиотеки, необходимые исполняемому файлу, эти библиотеки следует разместить в каталогах /lib*.

Если есть библиотеки для использования программ и пакетов, они идут в /usr/lib/*. Если есть исполняемые файлы, которые нужны определенной библиотеке, но эти исполняемые файлы не должны вызываться пользователями напрямую или root, они идут в /usr/libexec.

Связанный контент