Różnica między lib, lib32, lib64, libx32 i libexec

41

Mój 64-bitowy system Ubuntu 13.04 ma następujące katalogi /:

lib
lib32
lib64
libx32
libexec

W /usrkatalogu znajduje się:

lib
lib32
libx32
libexec

Wydawało się, że można na to łatwo odpowiedzieć przy wyszukiwaniu, ale nie znalazłem nic online, poza tym, że te katalogi przechowują biblioteki współdzielone (oprócz libexec). Ale które biblioteki współdzielone znajdują się w których folderach (inne niż 32-bitowe w lib32 i 64-bitowe w lib64)? Czy ktoś mógłby wyjaśnić różnicę między tymi wszystkimi katalogami?

gsingh2011
źródło
BSD, Fedora, AIX i Solaris mają swoje własne zmiany w strukturze katalogów.

Odpowiedzi:

39

Ach tak, jest to bardzo mylące, jeśli zajmujesz się Uniksami przez dłuższy czas. Istnieje standard, który większość uniksów „próbuje” przestrzegać, zwany FHS - Standard systemu plików .

Biorąc pod uwagę, że używam głównie dystrybucji opartych na systemie Red Hat, jestem najbardziej zaznajomiony z ich podejściem do FHS dla dystrybucji Fedora, CentOS i RHEL Linux. Ale użyłem również dystrybucji opartych na Debianie i BSD i nie różnią się one tak bardzo pod względem miejsca przechowywania, pod względem systemu plików.

Teraz na twoje pytania. Rzuciłbym okiem na dokument FHS , który luźno reguluje te struktury katalogów. Ogólnie:

Katalog - /lib

Zawiera niezbędne współdzielone biblioteki i moduły jądra.

Cel: katalog / lib zawiera obrazy biblioteki współdzielonej potrzebne do uruchomienia systemu i uruchomienia poleceń w głównym systemie plików, tj. przez pliki binarne w / bin i / sbin.

Uwaga 1: Biblioteki współdzielone, które są niezbędne tylko dla plików binarnych w / usr (takich jak dowolne pliki binarne X Window), nie mogą znajdować się w / lib. Mogą być tu tylko biblioteki współużytkowane wymagane do uruchamiania plików binarnych w / bin i / sbin.

Uwaga 2: Biorąc pod uwagę, że głównym celem / lib jest przechowywanie bibliotek narzędzi rozmieszczonych w katalogach / bin i / sbin, biblioteki w / lib mogą być 32-bitowe lub 64-bitowe.

Na przykład (system 64-bitowy 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

Oto próbka plików z mojego / 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

Katalog - /lib<qual>

Niezbędne biblioteki współdzielone w innym formacie (opcjonalnie). Byłyby to katalogi / lib32, / lib64 itp.

Cel: Może istnieć jeden lub więcej wariantów katalogu / lib w systemach, które obsługują więcej niż jeden format binarny wymagający osobnych bibliotek. Jest to powszechnie używane do obsługi 64-bitowej lub 32-bitowej w systemach obsługujących wiele formatów binarnych, ale wymagających bibliotek o tej samej nazwie.

Uwaga: W tym przypadku / lib32 i / lib64 mogą być katalogami bibliotek, a / lib dowiązaniem symbolicznym do jednego z nich.

Katalog - /usr/lib

Biblioteki do programowania i pakietów.

Cel: / usr / lib obejmuje pliki obiektowe, biblioteki i wewnętrzne pliki binarne, które nie są przeznaczone do bezpośredniego uruchamiania przez użytkowników lub skrypty powłoki.

Uwaga 1: Różne pliki statyczne i podkatalogi, niezależne od architektury, muszą być umieszczone w / usr / share.

Aplikacje mogą korzystać z jednego podkatalogu w katalogu / usr / lib. Jeśli aplikacja korzysta z podkatalogu, wszystkie dane zależne od architektury wykorzystywane wyłącznie przez aplikację muszą zostać umieszczone w tym podkatalogu.

Uwaga 2: Na przykład podkatalog perl5 dla modułów i bibliotek Perl 5.

Katalog - /usr/lib<qual>

Biblioteki formatu alternatywnego (opcjonalnie).

Cel: /usr/lib<qual> spełnia tę samą funkcję jak / usr / lib na alternatywnym formacie binarnym, oprócz tego, że dowiązania symboliczne /usr/lib<qual>/sendmaili /usr/lib<qual>/X11nie są wymagane.

Uwaga: Przypadek, w którym / usr / lib i /usr/lib<qual>są takie same (jeden jest dowiązaniem symbolicznym do drugiego), te pliki i podkatalogi dla poszczególnych aplikacji będą istnieć.

TLDR;

Ogólnie:

Jeśli istnieją biblioteki wymagane przez plik wykonywalny w katalogach / bin lub / sbin, biblioteki te powinny znajdować się w katalogach / lib *.

Jeśli istnieją biblioteki programów użytkowych i pakietów, znajdują się w katalogu / usr / lib / *. Jeśli istnieją pliki wykonywalne, które są potrzebne konkretnej bibliotece, ale te pliki wykonywalne nie powinny być wywoływane przez użytkowników bezpośrednio lub przez root, przechodzą do katalogu / usr / libexec.

slm
źródło
Dzięki. Czy możesz wyjaśnić, kiedy biblioteka, która jest 32-bitowa lub 64-bitowa, zostanie umieszczona w lib w przeciwieństwie do odpowiedniego folderu lib <qual>? Nie do końca zrozumiałem twoje wyjaśnienie.
gsingh2011
Głównym celem / lib jest przechowywanie bibliotek narzędzi znajdujących się w / bin i / sbin. Biorąc pod uwagę, że / lib może zawierać zarówno biblioteki 32-bitowe, jak i 64-bitowe. Dodam również ten komentarz do odpowiedzi!
slm
Może umieścić sekcję TLDR na górze?
kevinarpe
1
Jaka jest różnica między lib32 a libx32?
Mikko Rantalainen
2
libx32 jest dla x32 . Możesz użyć tego filenarzędzia z bibliotekami w tych katalogach, aby zobaczyć różnicę.
elmicha