Enlaces simbólicos en Unix/Linux

Los diferentes sistemas de archivos en el universo UNIX/Linux permiten una variedad de entradas tales como archivos regulares, directorios, sockets, canalizaciones con nombre y enlaces. En este articulo...

Los diferentes sistemas de archivos en el universo UNIX/Linux permiten una variedad de entradas tales como archivos regulares, directorios, sockets, canalizaciones con nombre y enlaces. En este artículo te explicaré qué son los enlaces, qué tipos de enlaces existen, cómo crear un enlace simbólico y cómo detectar fácilmente los enlaces simbólicos rotos. Los enlaces le permiten tener múltiples puntos de entrada en un sistema de archivos, lo que le permite tener muchas menos copias (a veces solo una) pero manteniendo la flexibilidad al tener múltiples formas de llegar a un archivo determinado.

Entradas de enlace {#entradas de enlace}

En la línea de comandos de UNIX/Linux, la herramienta ln abrevia el término enlace. Le permite crear una referencia adicional a un archivo o directorio. Lo hace agregando un nombre adicional de una entrada en la tabla de asignación de archivos del sistema de archivos. Una vez hecho esto, puede acceder al archivo o directorio al que se hace referencia tanto con el nombre original como con el nuevo nombre también. Piense en una sola persona que podría ser un empleado, un cliente y un prospecto.

La herramienta ln pertenece a la lista de software esencial en Unix/Linux. En Debian GNU/Linux y Ubuntu es parte del paquete coreutils.

Hay una clara distinción entre enlaces duros y enlaces blandos. Los enlaces blandos también se denominan enlaces simbólicos. Hay bastantes diferencias entre los dos tipos que se enumeran a continuación:

Enlaces duros Enlace suave (enlace simbólico)


El objetivo debe existir Es posible que el objetivo ya exista, pero no es necesario Permitido solo dentro de los sistemas de archivos Permitido entre diferentes sistemas de archivos Vincula directamente al lugar donde se almacena el archivo Vincula a la entrada en la tabla del sistema de archivos (nodo) Eliminar el enlace significa eliminar todo el archivo. Eliminar el enlace significa eliminar el enlace al nodo, no el archivo en sí.

Ejecutar el comando ln sin opciones crea un enlace fijo desde el origen hasta el destino. En su lugar, con la ayuda de la opción -s crea un enlace simbólico. -s es el nombre corto de la opción, mientras que --symbolic es el nombre más largo. El enlace se creará en el directorio actual del sistema de archivos en el momento en que se cree. Los desarrolladores solo usan el término enlace simbólico. En general, llámalo de la siguiente manera:

1
$ ln -s [target] [link_name]

objetivo es el archivo o directorio al que enlazar, y nombre_enlace es el nombre del enlace que hará referencia al objetivo. Como ejemplo, esta llamada crea un enlace simbólico de link_to_python a /usr/bin/python:

Ejemplo 1: Creación de un enlace simbólico

1
2
3
$ ln -s /usr/bin/python link_to_python
$ ls -la link_to_python 
lrwxrwxrwx 1 frank frank 15 Oct  5 14:25 link_to_python -> /usr/bin/python

Para ver lo que hace ln, una opción útil es -v (--verbose para la opción más larga). Esto le da más información sobre la acción.

Ejemplo 2: Creación de un enlace simbólico con información adicional

1
2
$ ln -sv /usr/bin/python link_to_python
link_to_python -> /usr/bin/python

Como puede ver, la salida del comando muestra el nuevo enlace creado.

Casos de uso

En primer lugar, un caso de uso habitual que quizás no conozca son dos entradas del sistema de archivos de uso común: . (el directorio local) y .. (directorio principal). Estos se implementan como enlaces simbólicos.

En segundo lugar, los desarrolladores instalan varias versiones de un programa para realizar sus pruebas. El uso de enlaces simbólicos puede ser bastante útil para hacer referencia a la versión actual que se prueba y mantiene dos o más instancias disponibles sin muchos problemas.

¿Qué sucede si elimina un archivo que tiene un enlace simbólico que apunta a él? Nos referimos a estos enlaces con un "objetivo" inexistente como enlaces "muertos". Para detectar estos casos, el comando encontrar es bastante útil. Por lo tanto, entra en juego la opción -L y la acción -type l. El indicador -L le dice a find que siga enlaces simbólicos, mientras que -type l solo coincidirá con enlaces simbólicos.

En el Ejemplo 3, el directorio actual contiene dos archivos llamados auto y backup, así como dos enlaces simbólicos: data que apunta a auto y generic que apunta a files. Desafortunadamente, el archivo/directorio files no existe.

Usando el comando buscar, podemos examinar los enlaces y generar sus nombres en caso de que el destino del enlace no exista. En nuestro caso, es el enlace simbólico llamado genérico que apunta a archivos que no existe.

Ejemplo 3: Detectar enlaces rotos usando find

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ ls -la
total 4
drwxr-xr-x  2 frank frank 1024 Oct  5 13:36 .
drwxrwxrwt 44 root  root  3072 Oct  5 13:35 ..
-rw-r--r--  1 frank frank    0 Oct  5 13:34 auto
-rw-r--r--  1 frank frank    0 Oct  5 13:34 backup
lrwxrwxrwx  1 frank frank    1 Oct  5 13:35 data -> auto
lrwxrwxrwx  1 frank frank    1 Oct  5 13:35 generic -> files
$ find -L . -type l
./generic

Como alternativa, puede que le guste el comando symlinks. Este es un paquete no predeterminado disponible tanto para Debian GNU/Linux como para Ubuntu. Con las dos opciones -s y -v, symlinks detecta las entradas. Como se ve en el Ejemplo 4 a continuación, los enlaces sin objetivos válidos se clasifican como colgantes.

Ejemplo 4: Detectar enlaces rotos usando enlaces simbólicos

1
2
3
$ symlinks -sv .
dangling: /directory/generic -> files
relative: /directory/data -> auto

Conclusión

El concepto de enlaces simbólicos no es un gran misterio. La creación de estas referencias puede simplificar el uso del software y ayuda a probar diferentes versiones del mismo en el mismo sistema. Tenga en cuenta que el Instituto Profesional Linux (LPI) le hará preguntas al respecto durante la certificación para LPI1.

Agradecimientos

El autor quisiera agradecer a Geroldo Rupprecht por su apoyo y críticas durante la preparación de este artículo.