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