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>/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.