Librerías del sistema en una distribución Linux

En un post anterior explicamos que un documento llamado FHS (Filesystem Hierarchy Standard) se utiliza para estandarizar la estructura del árbol de directorios. Este estándar además indica el propósito y el contenido que se espera que tenga cada subdirectorio. De esta manera, al pasar de una distribución a otra no se necesita un reaprendizaje significativo, y los desarrolladores puedan saber de antemano la ubicación de las librerías del sistema que sus programas necesiten utilizar. El uso de dichas librerías es el tema que nos convoca en esta oportunidad.

Librerías del sistema

Una librería es un conjunto de funciones incluídas en un mismo archivo. Dichas funciones por lo general son utilizadas por una variedad de programas que, en vez de incorporarlas en su propio código (enlace estático), las llaman cuando es necesario (enlace dinámico). Esto, por supuesto, requiere que dichas librerías existan en el sistema previo al lanzamiento del programa. La ventaja reside en que en este último caso solamente es necesario una copia de la librería, la cual es compartida por todas las aplicaciones que la necesitan. El enlace estático, en cambio, requiere que cada programa disponga de su propia copia y la incluya como parte del programa en sí.

Ejemplos

De acuerdo al FHS, en el directorio /lib (o su equivalente para sistemas de 64 bits, /lib64) encontraremos librerías compartidas que son utilizadas por los programas ubicados en /bin y /sbin.

Tomemos como ejemplo a /sbin/sshd y a /bin/cat. Utilizaremos el comando file para determinar el tipo de cada archivo:

file /sbin/sshd
file /bin/cat

Como podemos ver en la Fig. 1, ambos son programas enlazados dinámicamente. En la misma imagen podemos ver, utilizando el comando ldd, cuáles son las librerías de las que depende /bin/cat:

ldd /bin/cat
Mostrando librerías enlazadas dinámicamente
Figura 1 – Mostrando librerías del sistema enlazadas dinámicamente

¿De qué nos sirve tener estas cosas en cuenta? En el próximo post veremos que hay ocasiones en las que necesitaremos saber si un determinado programa enlaza una cierta librería para conocer si incorpora o no una funcionalidad en particular, o si su comportamiento puede ser modificado al manipular la librería.

¡No se pierdan el próximo post!