Ah oui, c’est une partie très déroutante si vous avez traité avec Unix pendant un certain temps. Il existe une norme que la plupart des Unix "essaient" de suivre et qui s'appelle FHS - FileSystem Hierarchy Standard .
Etant donné que j'utilise principalement les distributions basées sur Red Hat, je connais bien mieux leur conception de FHS. pour les distributions Linux Fedora, CentOS et RHEL. Mais j'ai aussi utilisé des distributions basées sur Debian et BSD, et elles ne diffèrent pas beaucoup en ce qui concerne l'emplacement des données, du point de vue du système de fichiers.
Maintenant à vos questions. Je regarderais le document FHS , qui gouverne vaguement ces structures de répertoires. En général:
Annuaire - /lib
Contient les bibliothèques partagées essentielles et les modules du noyau.
Objectif: Le répertoire / lib contient les images de la bibliothèque partagée nécessaires au démarrage du système et à l'exécution des commandes dans le système de fichiers racine, c'est-à-dire. par les binaires dans / bin et / sbin.
Remarque1: Les bibliothèques partagées qui ne sont nécessaires que pour les fichiers binaires de / usr (tels que tous les fichiers binaires X Window) ne doivent pas se trouver dans / lib. Seules les bibliothèques partagées requises pour exécuter les fichiers binaires dans / bin et / sbin peuvent être ici.
Note2: Etant donné que le but principal de / lib est de contenir des bibliothèques pour les outils déployés dans les répertoires / bin & / sbin, les bibliothèques dans / lib peuvent être 32 bits ou 64 bits.
Par exemple (système Fedora 14 64 bits)
$ 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
Voici un échantillon des fichiers de mon / 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
Annuaire - /lib<qual>
Bibliothèques partagées essentielles au format alternatif (facultatif). Ce sont les répertoires / lib32, / lib64, etc.
Objectif: Il peut exister une ou plusieurs variantes du répertoire / lib sur les systèmes prenant en charge plusieurs formats binaires nécessitant des bibliothèques distinctes. Ceci est couramment utilisé pour la prise en charge 64 bits ou 32 bits sur des systèmes prenant en charge plusieurs formats binaires, mais nécessitant des bibliothèques du même nom.
Remarque: Dans ce cas, / lib32 et / lib64 peuvent être les répertoires de la bibliothèque et / lib un lien symbolique vers l'un d'entre eux.
Annuaire - /usr/lib
Bibliothèques de programmation et de packages.
Objectif: / usr / lib inclut les fichiers objet, les bibliothèques et les fichiers binaires internes qui ne sont pas destinés à être exécutés directement par les utilisateurs ou les scripts shell.
Remarque1: Divers fichiers statiques et sous-répertoires spécifiques à une application, indépendants de l'architecture, doivent être placés dans / usr / share.
Les applications peuvent utiliser un seul sous-répertoire sous / usr / lib. Si une application utilise un sous-répertoire, toutes les données dépendantes de l'architecture utilisées exclusivement par l'application doivent être placées dans ce sous-répertoire.
Remarque2: Par exemple, le sous-répertoire perl5 pour les modules et les bibliothèques Perl 5.
Annuaire - /usr/lib<qual>
Bibliothèques de formats alternatifs (facultatif).
But: /usr/lib<qual>
effectue le même rôle que / usr / lib pour un format binaire autre, sauf que les liens symboliques /usr/lib<qual>/sendmail
et /usr/lib<qual>/X11
ne sont pas nécessaires.
Remarque: Dans le cas où / usr / lib et /usr/lib<qual>
sont identiques (l'un est un lien symbolique vers l'autre), ces fichiers et les sous-répertoires par application existeront.
TLDR;
En général:
S'il existe des bibliothèques requises par un exécutable dans les répertoires / bin ou / sbin, ces bibliothèques doivent figurer dans les répertoires / lib *.
S'il existe des bibliothèques pour utiliser des programmes et des packages, elles se trouvent dans / usr / lib / *. S'il existe des exécutables requis par une bibliothèque particulière, mais que ces derniers ne sont pas supposés être appelés par les utilisateurs directement ou par root, ils se trouvent dans / usr / libexec.