Моя 64-битная система Ubuntu 13.04 имеет следующие каталоги /
:
lib
lib32
lib64
libx32
libexec
В /usr
каталоге есть:
lib
lib32
libx32
libexec
Это казалось чем-то, на что можно было легко ответить с помощью поиска, но я ничего не нашел в Интернете, кроме того, что эти каталоги хранят общие библиотеки (кроме libexec). Но какие общие библиотеки находятся в каких папках (кроме 32-битных в lib32 и 64-битных в lib64)? Может ли кто-нибудь объяснить разницу между всеми этими каталогами?
directory-structure
libraries
gsingh2011
источник
источник
Ответы:
Ах, да, это очень запутанная часть, если вы работали с 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)
Вот выборка файлов из моего / lib
Справочник -
/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.
источник
file
утилиту с библиотеками в этих каталогах, чтобы увидеть разницу.