Різниця між lib, lib32, lib64, libx32 та libexec


41

Моя 64-бітна система Ubuntu 13.04 має такі каталоги в /:

lib
lib32
lib64
libx32
libexec

У /usrкаталозі є:

lib
lib32
libx32
libexec

Це здавалося чимось, на що можна легко відповісти за допомогою пошуку, але я нічого не знайшов в Інтернеті, крім того, що ці каталоги зберігають спільні бібліотеки (крім libexec). Але які спільні бібліотеки йдуть у яких папках (крім 32-бітових у lib32 та 64-бітних у lib64)? Чи може хтось пояснити різницю між усіма цими каталогами?


І BSD, Fedora, AIX і Solaris мають свої повороти до структур каталогів.

Відповіді:


39

Ага так, це дуже заплутана частина, якщо ви мали справу з 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.


Спасибі. Чи можете ви уточнити, коли бібліотека, яка має 32 біти або 64 біти, буде розміщена в lib на відміну від відповідної папки lib <qual>? Я не зовсім отримав ваше пояснення.
gsingh2011

Основна мета / lib - містити бібліотеки для інструментів, які знаходяться у / bin та / sbin. Враховуючи, що / lib може містити суміш обох 32-бітних та 64-бітних бібліотек. Я додам цей коментар і до відповіді!
slm

Може бути, розмістити розділ TLDR вгорі?
kevinarpe

1
Яка різниця між lib32 та libx32?
Мікко Ранталайнен

2
libx32 призначений для x32 . Ви можете використовувати fileутиліту з бібліотеками цих каталогів, щоб побачити різницю.
elmicha
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.