Ага так, це дуже заплутана частина, якщо ви мали справу з Unixes протягом будь-якого періоду часу. Є стандарт, який більшість Unixes "намагаються" дотримуватися під назвою FHS - Filesystem Hierarchy Standard .
Зважаючи на те, що я в основному використовую дистрибутиви на основі 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 / *. Якщо є виконувані файли, які потрібні певній бібліотеці, але не можна, щоб ці виконувані файли викликали користувачі безпосередньо чи корінь, вони заходять у / usr / libexec.