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>/sendmail
und /usr/lib<qual>/X11
nicht 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.