Diferencia entre lib, lib32, lib64, libx32 y libexec

41

Mi sistema Ubuntu 13.04 de 64 bits tiene los siguientes directorios en /:

lib
lib32
lib64
libx32
libexec

En el /usrdirectorio hay:

lib
lib32
libx32
libexec

Esto parecía algo que podría responderse fácilmente con una búsqueda, pero no encontré nada en línea, aparte de que estos directorios almacenan bibliotecas compartidas (excepto libexec). ¿Pero qué bibliotecas compartidas van en qué carpetas (que no sean 32 bits en lib32 y 64 bits en lib64)? ¿Alguien podría explicar la diferencia entre todos estos directorios?

gsingh2011
fuente
Y BSD, Fedora, AIX y Solaris tienen sus propios giros en las estructuras de directorios.

Respuestas:

39

Ah, sí, esta es una parte muy confusa si ha tratado con Unixes durante algún tiempo. Existe un estándar que la mayoría de los Unixes "intentan" seguir llamado FHS - Estándar de jerarquía del sistema de archivos .

Dado que principalmente uso distribuciones basadas en Red Hat, estoy más familiarizado con su versión de FHS para las distribuciones Fedora, CentOS y RHEL Linux. Pero también he usado distribuciones basadas en Debian y BSD y no son tan diferentes en términos de dónde se guardan las cosas, en cuanto al sistema de archivos.

Ahora a sus preguntas. Echaría un vistazo al documento de FHS , que gobierna libremente estas estructuras de directorios. En general:

Directorio - /lib

Contiene bibliotecas compartidas esenciales y módulos de kernel.

Propósito: El directorio / lib contiene esas imágenes de biblioteca compartida necesarias para iniciar el sistema y ejecutar los comandos en el sistema de archivos raíz, es decir. por binarios en / bin y / sbin.

Nota 1: las bibliotecas compartidas que solo son necesarias para los archivos binarios en / usr (como los archivos binarios de X Window) no deben estar en / lib. Solo las bibliotecas compartidas necesarias para ejecutar binarios en / bin y / sbin pueden estar aquí.

Nota 2: Dado que el objetivo principal de / lib es contener bibliotecas para las herramientas implementadas en los directorios / bin & / sbin, las bibliotecas en / lib pueden ser de 32 bits o de 64 bits.

Por ejemplo (sistema Fedora 14 de 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

Aquí hay una muestra de los archivos de mi / 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

Directorio - /lib<qual>

Bibliotecas compartidas esenciales de formato alternativo (opcional). Estos serían los directorios / lib32, / lib64, etc.

Propósito: Puede haber una o más variantes del directorio / lib en sistemas que admiten más de un formato binario que requiere bibliotecas separadas. Esto se usa comúnmente para la compatibilidad de 64 bits o 32 bits en sistemas que admiten múltiples formatos binarios, pero requieren bibliotecas del mismo nombre.

Nota: En este caso, / lib32 y / lib64 pueden ser los directorios de la biblioteca y / lib un enlace simbólico a uno de ellos.

Directorio - /usr/lib

Bibliotecas para programación y paquetes.

Propósito: / usr / lib incluye archivos de objetos, bibliotecas y archivos binarios internos que no están destinados a ser ejecutados directamente por usuarios o scripts de shell.

Nota 1: Los archivos estáticos y subdirectorios específicos de la aplicación independientes de la arquitectura deben colocarse en / usr / share.

Las aplicaciones pueden usar un solo subdirectorio en / usr / lib. Si una aplicación utiliza un subdirectorio, todos los datos dependientes de la arquitectura utilizados exclusivamente por la aplicación deben colocarse dentro de ese subdirectorio.

Nota 2: Por ejemplo, el subdirectorio perl5 para módulos y bibliotecas Perl 5.

Directorio - /usr/lib<qual>

Bibliotecas de formato alternativo (opcional).

Propósito: /usr/lib<qual> realiza la misma función que / usr / lib para un formato binario alterno, excepto que los enlaces simbólicos /usr/lib<qual>/sendmaily /usr/lib<qual>/X11no son necesarios.

Nota: El caso donde / usr / lib y /usr/lib<qual>son iguales (uno es un enlace simbólico al otro) estos archivos y los subdirectorios por aplicación existirán.

TLDR;

En general:

Si un ejecutable requiere bibliotecas en los directorios / bin o / sbin, esas bibliotecas deberían ir en los directorios / lib *.

Si hay bibliotecas para usar programas y paquetes, estos van a / usr / lib / *. Si hay archivos ejecutables que necesita una biblioteca en particular, pero no se supone que los usuarios los llamen directamente o por root, van a / usr / libexec.

slm
fuente
Gracias. Sin embargo, ¿podría aclarar cuándo una biblioteca de 32 o 64 bits se colocará en lib en lugar de su carpeta lib <qual> correspondiente? No entendí tu explicación.
gsingh2011 05 de
El propósito principal de / lib es contener bibliotecas para herramientas que están en / bin y / sbin. Dado que / lib puede contener una mezcla de bibliotecas de 32 bits y 64 bits. ¡Agregaré este comentario a la respuesta también!
slm
¿Quizás poner la sección TLDR en la parte superior?
kevinarpe
1
¿Cuál es la diferencia entre lib32 y libx32?
Mikko Rantalainen
2
libx32 es para x32 . Puede usar la fileutilidad con las bibliotecas en estos directorios para ver la diferencia.
elmicha