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 (que no sean 32 bits en lib32 y 64 bits en lib64)? ¿Alguien podría explicar la diferencia entre todos estos directorios?
directory-structure
libraries
gsingh2011
fuente
fuente
Respuestas:
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)
Aquí hay una muestra de los archivos de mi / lib
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>/sendmail
y/usr/lib<qual>/X11
no 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.
fuente
file
utilidad con las bibliotecas en estos directorios para ver la diferencia.