Mi sistema Ubuntu 13.04 de 64 bits tiene los siguientes directorios en /
:
lib
lib32
lib64
libx32
libexec
En el /usr
directorio 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 (aparte de 32 bits en lib32 y 64 bits en lib64)? ¿Alguien podría explicar la diferencia entre todos estos directorios?
Respuesta1
Ah, sí, esta es una parte muy confusa si has trabajado con Unixes durante algún tiempo. Existe un estándar que la mayoría de Unixes "intentan" seguir llamadoFHS - Estándar de jerarquía del sistema de archivos.
Dado que uso principalmente distribuciones basadas en Red Hat con las que estoy más familiarizadosu opinión sobre FHSpara 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 tus preguntas. yo echaría un vistazo adocumento FHS, que gobierna vagamente estas estructuras de directorios. En general:
Directorio -/lib
Contiene bibliotecas compartidas esenciales y módulos del kernel.
Objetivo:El directorio /lib contiene las imágenes de biblioteca compartidas 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 sólo son necesarias para los binarios en /usr (como cualquier binario de X Window) no deben estar en /lib. Aquí solo pueden estar las bibliotecas compartidas necesarias para ejecutar archivos binarios en /bin y /sbin.
Nota 2:Dado que el propósito principal de /lib es contener bibliotecas para herramientas implementadas en los directorios /bin y /sbin, las bibliotecas en /lib pueden ser de 32 o 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.
Objetivo:Puede haber una o más variantes del directorio /lib en sistemas que admiten más de un formato binario que requiere bibliotecas independientes. Esto se usa comúnmente para compatibilidad con 64 o 32 bits en sistemas que admiten múltiples formatos binarios, pero que requieren bibliotecas con el mismo nombre.
Nota:En este caso, /lib32 y /lib64 podrían 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.
Objetivo:/usr/lib incluye archivos objeto, bibliotecas y binarios internos que no están destinados a ser ejecutados directamente por usuarios o scripts de shell.
Nota 1:Varios archivos estáticos y subdirectorios específicos de la aplicación independientes de la arquitectura deben colocarse en /usr/share.
Las aplicaciones pueden utilizar un único 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 de Perl 5.
Directorio -/usr/lib<qual>
Bibliotecas de formatos alternativos (opcional).
Objetivo: /usr/lib<qual>
realiza la misma función que /usr/lib para un formato binario alternativo, excepto que los enlaces simbólicos /usr/lib<qual>/sendmail
y /usr/lib<qual>/X11
no son necesarios.
Nota:En el caso en que /usr/lib y /usr/lib<qual>
sean iguales (uno es un enlace simbólico al otro), estos archivos y los subdirectorios por aplicación existirán.
TLDR;
En general:
Si hay bibliotecas que requiere un ejecutable en los directorios /bin o /sbin, esas bibliotecas deben ir en los directorios /lib*.
Si hay bibliotecas para programas y paquetes de uso, van en /usr/lib/*. Si hay ejecutables que una biblioteca en particular necesita, pero se supone que estos ejecutables no deben ser llamados directamente por los usuarios o por el root, van en /usr/libexec.