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

41

Mon système Ubuntu 13.04 64 bits contient les répertoires suivants /:

lib
lib32
lib64
libx32
libexec

Dans le /usrré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 dans lib32 et 64 bits dans lib64)? Quelqu'un pourrait-il expliquer la différence entre tous ces répertoires?

Gsingh2011
la source
Et BSD, Fedora, AIX et Solaris ont leurs propres modifications aux structures de répertoires.

Réponses:

39

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>/sendmailet /usr/lib<qual>/X11ne 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.

slm
la source
Merci. Pourriez-vous préciser quand une bibliothèque 32 bits ou 64 bits sera placée dans lib par opposition à son dossier correspondant lib <qual>? Je n'ai pas bien compris votre explication.
Gsingh2011
Le principal objectif de / lib est de contenir des bibliothèques pour les outils situés dans / bin et / sbin. Étant donné que / lib peut contenir un mélange de bibliothèques 32 bits et 64 bits. Je vais aussi ajouter ce commentaire à la réponse!
slm
Peut-être mettre la section TLDR en haut?
kevinarpe
1
Quelle est la différence entre lib32 et libx32?
Mikko Rantalainen
2
libx32 est pour x32 . Vous pouvez utiliser l' fileutilitaire avec les bibliothèques de ces répertoires pour voir la différence.
Elmicha