В моей 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.