Unterschied zwischen lib, lib32, lib64, libx32 und libexec


41

Mein 64-Bit-Ubuntu-13.04-System hat die folgenden Verzeichnisse /:

lib
lib32
lib64
libx32
libexec

Im /usrVerzeichnis gibt es:

lib
lib32
libx32
libexec

Dies schien etwas zu sein, das leicht mit einer Suche beantwortet werden konnte, aber ich fand nichts online, außer dass diese Verzeichnisse gemeinsam genutzte Bibliotheken speichern (mit Ausnahme von libexec). Aber welche gemeinsam genutzten Bibliotheken befinden sich in welchen Ordnern (außer 32-Bit in lib32 und 64-Bit in lib64)? Könnte jemand den Unterschied zwischen all diesen Verzeichnissen erklären?


Und BSD, Fedora, AIX und Solaris haben ihre eigenen Änderungen an den Verzeichnisstrukturen.

Antworten:


39

Ah ja, das ist ein sehr verwirrender Teil, wenn Sie sich längere Zeit mit Unixen befasst haben. Es gibt einen Standard, den die meisten Unixe zu "befolgen" versuchen: FHS - Filesystem Hierarchy Standard .

Da ich hauptsächlich auf Red Hat basierende Distributionen verwende, bin ich mit deren Einstellungen zu FHS für Fedora-, CentOS- und RHEL-Linux-Distributionen bestens vertraut. Aber ich habe auch Debian- und BSD-basierte Distributionen verwendet und sie unterscheiden sich nicht allzu sehr darin, wo die Dinge aufbewahrt werden, was das Dateisystem betrifft.

Nun zu deinen Fragen. Ich würde einen Blick auf das FHS-Dokument werfen , das diese Verzeichnisstrukturen lose regelt. Im Allgemeinen:

Verzeichnis - /lib

Enthält wichtige gemeinsam genutzte Bibliotheken und Kernelmodule.

Zweck: Das Verzeichnis / lib enthält die freigegebenen Bibliotheksimages, die zum Starten des Systems und Ausführen der Befehle im Root-Dateisystem erforderlich sind, d. H. durch Binärdateien in / bin und / sbin.

Hinweis 1: Freigegebene Bibliotheken, die nur für Binärdateien in / usr erforderlich sind (z. B. alle X Window-Binärdateien), dürfen sich nicht in / lib befinden. Hier befinden sich möglicherweise nur die gemeinsam genutzten Bibliotheken, die zum Ausführen von Binärdateien in / bin und / sbin erforderlich sind.

Hinweis 2: Angesichts des primären Zwecks von / lib, Bibliotheken für Tools zu enthalten, die in den Verzeichnissen / bin & / sbin bereitgestellt werden, können die Bibliotheken in / lib entweder 32-Bit- oder 64-Bit-Bibliotheken sein.

Zum Beispiel (Fedora 14 64-Bit-System)

$ 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

Hier ist eine Auswahl der Dateien aus my / 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

Verzeichnis - /lib<qual>

Wichtige gemeinsam genutzte Bibliotheken mit alternativem Format (optional). Dies wären die Verzeichnisse / lib32, / lib64 usw.

Zweck: Auf Systemen, die mehr als ein Binärformat unterstützen, das separate Bibliotheken erfordert, gibt es möglicherweise eine oder mehrere Varianten des Verzeichnisses / lib. Dies wird normalerweise für die 64-Bit- oder 32-Bit-Unterstützung auf Systemen verwendet, die mehrere Binärformate unterstützen, jedoch Bibliotheken mit demselben Namen erfordern.

Hinweis: In diesem Fall sind / lib32 und / lib64 möglicherweise die Bibliotheksverzeichnisse und / lib ein Symlink zu einem dieser Verzeichnisse.

Verzeichnis - /usr/lib

Bibliotheken für Programmierung und Pakete.

Zweck: / usr / lib enthält Objektdateien, Bibliotheken und interne Binärdateien, die nicht direkt von Benutzern oder Shell-Skripten ausgeführt werden sollen.

Hinweis 1: Verschiedene architekturunabhängige anwendungsspezifische statische Dateien und Unterverzeichnisse müssen in / usr / share abgelegt werden.

Anwendungen können ein einzelnes Unterverzeichnis unter / usr / lib verwenden. Wenn eine Anwendung ein Unterverzeichnis verwendet, müssen alle architekturabhängigen Daten, die ausschließlich von der Anwendung verwendet werden, in diesem Unterverzeichnis abgelegt werden.

Hinweis 2: Zum Beispiel das Unterverzeichnis perl5 für Perl 5-Module und -Bibliotheken.

Verzeichnis - /usr/lib<qual>

Alternative Formatbibliotheken (optional).

Zweck: /usr/lib<qual> Führt die gleiche Rolle wie / usr / lib für ein alternatives Binärformat aus, außer dass die symbolischen Verknüpfungen /usr/lib<qual>/sendmailund /usr/lib<qual>/X11nicht erforderlich sind.

Hinweis: In dem Fall, in dem / usr / lib und /usr/lib<qual>identisch sind (einer ist ein symbolischer Link zum anderen), existieren diese Dateien und die anwendungsspezifischen Unterverzeichnisse.

TLDR;

Im Allgemeinen:

Wenn sich Bibliotheken in den Verzeichnissen / bin oder / sbin befinden, die von einer ausführbaren Datei benötigt werden, sollten sich diese Bibliotheken in den Verzeichnissen / lib * befinden.

Wenn es Bibliotheken für die Verwendung von Programmen und Paketen gibt, werden diese in / usr / lib / * abgelegt. Wenn es ausführbare Dateien gibt, die von einer bestimmten Bibliothek benötigt werden, von den Benutzern jedoch nicht direkt oder von root aufgerufen werden sollen, werden sie in / usr / libexec abgelegt.


Vielen Dank. Können Sie jedoch klarstellen, wann eine Bibliothek mit 32-Bit- oder 64-Bit-Version im Gegensatz zum entsprechenden lib <qual> -Ordner in lib abgelegt wird? Ich habe deine Erklärung nicht ganz verstanden.
Gsingh2011

Der Hauptzweck von / lib besteht darin, Bibliotheken für Tools zu enthalten, die sich in / bin und / sbin befinden. Vorausgesetzt, / lib kann eine Mischung aus 32-Bit- und 64-Bit-Bibliotheken enthalten. Ich werde diesen Kommentar auch zur Antwort hinzufügen!
slm

Vielleicht den TLDR-Bereich ganz oben platzieren?
Kevinarpe

1
Was ist der Unterschied zwischen lib32 und libx32?
Mikko Rantalainen

2
libx32 ist für x32 . Sie können das fileDienstprogramm mit den Bibliotheken in diesen Verzeichnissen verwenden, um den Unterschied zu erkennen.
Elmicha
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.