Mein 64-Bit-Ubuntu 13.04-System hat die folgenden Verzeichnisse /
:
lib
lib32
lib64
libx32
libexec
Im /usr
Verzeichnis befindet sich:
lib
lib32
libx32
libexec
Dies schien etwas zu sein, das sich leicht mit einer Suche beantworten ließe, aber ich habe online nichts gefunden, außer dass diese Verzeichnisse gemeinsam genutzte Bibliotheken speichern (außer libexec). Aber welche gemeinsam genutzten Bibliotheken gehören in welche Ordner (außer 32-Bit in lib32 und 64-Bit in lib64)? Könnte jemand den Unterschied zwischen all diesen Verzeichnissen erklären?
Antwort1
Ja, das ist ein sehr verwirrender Teil, wenn Sie sich schon länger mit Unixen beschäftigen. Es gibt einen Standard, dem die meisten Unixe zu folgen versuchen, derFHS - Dateisystemhierarchiestandard.
Da ich hauptsächlich Red Hat-basierte Distributionen verwende, bin ich am besten vertraut mitihre Meinung zu FHSfür Fedora-, CentOS- und RHEL-Linux-Distributionen. Aber ich habe auch Debian- und BSD-basierte Distributionen verwendet und sie unterscheiden sich hinsichtlich der Speicherorte der Dinge, was das Dateisystem betrifft, nicht allzu sehr.
Nun zu Ihren Fragen. Ich würde einen Blick auf dieFHS-Dokument, das diese Verzeichnisstrukturen lose regelt. Im Allgemeinen:
Verzeichnis -/lib
Enthält wichtige gemeinsam genutzte Bibliotheken und Kernelmodule.
Zweck:Das Verzeichnis /lib enthält die zum Booten des Systems und Ausführen der Befehle im Root-Dateisystem erforderlichen gemeinsam genutzten Bibliotheksabbilder, d. h. durch Binärdateien in /bin und /sbin.
Anmerkung 1:Gemeinsam genutzte Bibliotheken, die nur für Binärdateien in /usr erforderlich sind (wie etwa X Window-Binärdateien), dürfen nicht in /lib liegen. Nur die gemeinsam genutzten Bibliotheken, die zum Ausführen von Binärdateien in /bin und /sbin erforderlich sind, dürfen hier liegen.
Anmerkung 2:Da der Hauptzweck von /lib darin besteht, Bibliotheken für Tools zu enthalten, die in den Verzeichnissen /bin und /sbin bereitgestellt werden, können die Bibliotheken in /lib entweder 32-Bit oder 64-Bit 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 meiner /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>
Alternatives Format für wichtige gemeinsam genutzte Bibliotheken (optional). Dies wären die Verzeichnisse /lib32, /lib64 usw.
Zweck:Auf Systemen, die mehr als ein Binärformat unterstützen und separate Bibliotheken erfordern, kann es eine oder mehrere Varianten des Verzeichnisses /lib geben. Dies wird häufig für 64-Bit- oder 32-Bit-Unterstützung auf Systemen verwendet, die mehrere Binärformate unterstützen, aber Bibliotheken mit demselben Namen benötigen.
Notiz:In diesem Fall könnten /lib32 und /lib64 die Bibliotheksverzeichnisse sein und /lib ein symbolischer Link zu einem davon.
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.
Anmerkung 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.
Anmerkung 2:Beispielsweise das Unterverzeichnis perl5 für Perl 5-Module und -Bibliotheken.
Verzeichnis -/usr/lib<qual>
Alternative Formatbibliotheken (optional).
Zweck: /usr/lib<qual>
erfüllt dieselbe Rolle wie /usr/lib für ein alternatives Binärformat, außer dass die symbolischen Links /usr/lib<qual>/sendmail
und /usr/lib<qual>/X11
nicht erforderlich sind.
Notiz:Wenn /usr/lib und /usr/lib<qual>
identisch sind (das eine ist ein symbolischer Link zum anderen), sind diese Dateien und die Unterverzeichnisse pro Anwendung vorhanden.
Kurz und knapp;
Allgemein:
Wenn es Bibliotheken gibt, die von einer ausführbaren Datei in den Verzeichnissen /bin oder /sbin benötigt werden, sollten diese Bibliotheken in die Verzeichnisse /lib* verschoben werden.
Wenn Bibliotheken für die Verwendung von Programmen und Paketen vorhanden sind, werden sie in /usr/lib/* abgelegt. Wenn ausführbare Dateien vorhanden sind, die von einer bestimmten Bibliothek benötigt werden, diese aber nicht direkt von den Benutzern oder von Root aufgerufen werden dürfen, werden sie in /usr/libexec abgelegt.