web-dev-qa-db-fra.com

Différence entre lib, lib32, lib64, libx32 et libexec

Mon système Ubuntu 13.04 64 bits possède les répertoires suivants dans /:

lib
lib32
lib64
libx32
libexec

Dans le /usr répertoire il y a:

lib
lib32
libx32
libexec

Cela semblait être quelque chose qui pourrait être facilement répondu par une recherche, mais je n'ai rien trouvé en ligne, à part que ces répertoires stockent des bibliothèques partagées (sauf libexec). Mais quelles bibliothèques partagées vont dans quels dossiers (autres que 32 bits en lib32 et 64 bits en lib64)? Quelqu'un pourrait-il expliquer la différence entre tous ces répertoires?

42
gsingh2011

Ah oui, c'est une partie très déroutante si vous avez traité des Unix pendant une longue période. Il existe une norme que la plupart des Unix "essayent" de suivre, appelée FHS - Filesystem Hierarchy Standard .

Étant donné que j'utilise principalement des distributions basées sur Red Hat, je suis le plus familier avec leur version de FHS pour les distributions Fedora, CentOS et RHEL Linux. Mais j'ai également utilisé des distributions basées sur Debian et BSD et elles ne sont pas si différentes en termes de stockage, du point de vue du système de fichiers.

Passons maintenant à vos questions. Je voudrais jeter un oeil au document FHS , qui régit 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 bibliothèque partagée nécessaires pour démarrer le système et exécuter les commandes dans le système de fichiers racine, c'est-à-dire. par des binaires dans/bin et/sbin.

Note1: Les bibliothèques partagées qui ne sont nécessaires que pour les binaires dans/usr (comme tous les binaires X Window) ne doivent pas être dans/lib. Seules les bibliothèques partagées requises pour exécuter les binaires dans/bin et/sbin peuvent être ici.

Note2: Étant 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 ma/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 seraient les répertoires/lib32,/lib64, etc.

Objectif: Il peut y avoir une ou plusieurs variantes du répertoire/lib sur les systèmes qui prennent 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 les systèmes qui prennent en charge plusieurs formats binaires, mais nécessitent 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 des fichiers objets, des bibliothèques et des fichiers binaires internes qui ne sont pas destinés à être exécutés directement par les utilisateurs ou les scripts Shell.

Remarque 1: Divers fichiers statiques et sous-répertoires spécifiques à l'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 exclusivement utilisées par l'application doivent être placées dans ce sous-répertoire.

Note2: Par exemple, le sous-répertoire Perl5 pour les modules et bibliothèques Perl 5.

Annuaire - /usr/lib<qual>

Bibliothèques de formats alternatifs (facultatif).

Objectif: /usr/lib<qual> joue le même rôle que/usr/lib pour un autre format binaire, sauf que les liens symboliques /usr/lib<qual>/sendmail et /usr/lib<qual>/X11 ne sont pas obligatoires.

Remarque: Le cas où/usr/lib et /usr/lib<qual> sont les mêmes (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 être placées dans les répertoires/lib *.

S'il y a des bibliothèques pour utiliser des programmes et des packages, elles vont dans/usr/lib/*. S'il existe des exécutables nécessaires à une bibliothèque particulière, mais que ces exécutables ne sont pas supposés être appelés par les utilisateurs directement ou par root, ils vont dans/usr/libexec.

40
slm