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

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

lib
lib32
lib64
libx32
libexec

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

lib
lib32
libx32
libexec

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

34 голоса | спросил gsingh2011 4 Mayam13 2013, 08:56:54

1 ответ


33

Ах да, это очень запутанная часть, если вы занимались Unixes в течение какого-то времени. Существует стандарт, который большинство 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 4 Mayam13 2013, 11:33:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132