Fatmawati Achmad Zaenuri / Shutterstock
Los enlaces simbólicos en Linux son una característica fantástica, pero se pueden romper y dejar apuntando a nada. A continuación, le mostramos cómo localizar enlaces simbólicos rotos, examinarlos y eliminarlos de su sistema si es necesario.
Enlaces simbólicos 101
Los enlaces simbólicos, también conocidos como «enlaces simbólicos» y «enlaces simbólicos», son una forma de atajos que pueden apuntar a archivos y directorios. Un enlace simbólico se parece a un archivo o directorio normal en una ventana del administrador de archivos. También aparece como una entrada en una lista de archivos en una ventana de terminal. El archivo o directorio al que apunta el enlace simbólico se puede ubicar en cualquier lugar del árbol del sistema de archivos.
Por ejemplo, digamos que tiene un enlace simbólico en su directorio de inicio llamado «dave-link» que apunta a un archivo llamado «text-file.txt» ubicado en otra parte del árbol del sistema de archivos. Los comandos que usa en el enlace simbólico se aplican automáticamente al archivo al que apunta. Si intentas usar cat
Dónde less
en el enlace simbólico, verá el contenido del archivo «text-file.txt».
Una instalación estándar de Linux contiene muchos enlaces simbólicos. Incluso si no los crea usted mismo, el sistema operativo los usa. Las rutinas de instalación de aplicaciones a menudo utilizan enlaces simbólicos para señalar archivos ejecutables. Cuando se actualiza el software, el archivo binario se reemplaza con la nueva versión y todos los enlaces simbólicos continúan funcionando como antes, siempre que el nombre del nuevo archivo sea el mismo que el anterior.
Podemos ver fácilmente algunos enlaces simbólicos usando ls
en el directorio raíz. Algunas de las entradas se muestran en un color diferente: en nuestra máquina de prueba Ubuntu 20.10, se muestran en azul claro.
Escribimos lo siguiente:
ls /
Podemos profundizar nuestro conocimiento utilizando el -l
opción (lista larga). Escribimos el siguiente comando para ver todas las entradas «lib» y la única entrada «bin»:
ls -l /lib* /bin
Al principio de cada línea hay una «l», que indica que el elemento es un enlace simbólico. El texto después de «->» indica dónde apunta el enlace simbólico. En nuestro ejemplo, los destinos son todos directorios.
Los permisos se enumeran como lectura, escritura y ejecución para el propietario, el grupo y otros. Estas son entradas falsas por defecto. No reflejan los permisos reales sobre los objetos a los que apuntan los enlaces simbólicos. Los permisos en el archivo o directorio de destino tienen prioridad y son respetados por el sistema de archivos.
Enlaces simbólicos rotos
Un enlace simbólico se rompe (o se deja colgando) cuando el archivo al que apunta se elimina o se mueve a otra ubicación. Si la rutina de desinstalación de una aplicación no funciona correctamente o se interrumpe antes de que se complete, es posible que termine con enlaces simbólicos rotos.
Si alguien elimina manualmente un archivo sin saber que los enlaces simbólicos apuntan a él, esos enlaces simbólicos dejarán de funcionar. Serán como señales de tráfico que apuntan a una ciudad que ha sido derribada.
Podemos ver fácilmente este comportamiento usando un enlace simbólico llamado «hola» en el directorio actual. Escribimos lo siguiente, usando ls
mira esto:
ls -l
Apunta a un programa llamado «htg» en un directorio llamado «bin». Si «ejecutamos» el enlace simbólico, ejecuta el programa por nosotros:
./hello
Ahora podemos verificar si esto está sucediendo ejecutando directamente el programa:
../bin/htg
Como era de esperar, obtenemos la misma respuesta. Eliminemos el archivo del programa:
rm ../bin/htg
Ahora, cuando miramos el enlace simbólico, vemos que está listado en rojo porque Linux sabe que está roto. También nos dice a qué apuntaba, para que podamos reemplazar el archivo, recompilar el programa o hacer lo que sea necesario para arreglar el enlace simbólico.
Tenga en cuenta que si intentamos ejecutar el enlace simbólico, el error que obtenemos se refiere al nombre del enlace simbólico, en lugar del nombre del programa al que apunta el enlace simbólico.
Escribimos lo siguiente:
./hello
Encuentra enlaces simbólicos rotos
Las versiones más modernas de find
tener el xtype
opción (tipo extendido), lo que facilita la búsqueda de enlaces simbólicos rotos. Usaremos el l
bandera con xtype
, para decirle que busque enlaces. En ayuda de find
y xtype
de la siguiente manera, sin ninguno de los demás type
banderas, fuerzas xtype
para devolver enlaces rotos:
find . -xtype l
Al ejecutar el comando en nuestro directorio de inicio de prueba, se encuentran varios enlaces simbólicos rotos. Tenga en cuenta que la búsqueda es recursiva de forma predeterminada, por lo que busca automáticamente en todos los subdirectorios.
El enlace simbólico de ‘hola’ que rompimos intencionalmente aparece en la lista, como esperábamos. Uno de los otros enlaces simbólicos está relacionado con el navegador Firefox y los demás están asociados con instantáneas.
Si dirigimos la salida por wc
con el -l
(líneas), podemos contar las líneas, que es lo mismo que contar los enlaces simbólicos rotos.
Escribimos lo siguiente:
find . -xtype l | wc -l
Se nos informa que tenemos 24 enlaces simbólicos rotos que no apuntan a nada.
Buscar, revisar y eliminar
Antes de apresurarse y eliminar los enlaces simbólicos rotos, eche un vistazo a los resultados de la find
pedido. Vea si hay una razón válida para uno de los enlaces simbólicos rotos.
A veces, el enlace simbólico puede ser el problema, en lugar del archivo de destino. Si el enlace simbólico se creó incorrectamente, es posible que no indique nada, pero el objetivo real está presente. Recrear el vínculo simbólico sería la solución en este caso.
También es posible que un enlace simbólico aparentemente roto se pueda usar como otra cosa, como una bandera de bloqueo de archivo u otra bandera de ir / no ir. Firefox hace esto; este es el primer enlace simbólico de nuestra lista. Sin embargo, Firefox no está en uso en nuestra máquina de prueba, por lo que es seguro eliminarlo.
También es posible que el objetivo solo esté presente periódicamente, y este es el comportamiento esperado (y deseado) de este software en particular. Tal vez el archivo de destino se copia de otra máquina o de la nube, realiza su función y luego se elimina nuevamente, para ser reemplazado con un programa diferente en el siguiente ciclo.
El enlace simbólico roto también puede ser un síntoma de una instalación de software fallida. En este caso, en lugar de eliminar el enlace simbólico, debe repararlo manualmente o repetir la instalación.
Cuando haya arreglado los enlaces rotos que necesita mantener, repita el comando para realizar la búsqueda. Los enlaces simbólicos fijos no deberían aparecer en los resultados de la búsqueda.
Por razones de seguridad, es mejor limitar la eliminación de enlaces simbólicos a sus propios directorios. Tenga mucho cuidado al ejecutar estos comandos como root o en directorios del sistema.
Eliminar enlaces simbólicos rotos
los -exec
La opción (ejecutar) ejecuta comandos en el find
Resultados de la búsqueda. vamos a usar rm
para eliminar cada enlace simbólico roto. los {}
la cadena se reemplaza con el nombre de cada enlace simbólico roto a medida que cada uno es descubierto por find
.
Necesitamos usar un punto y coma (;
) para completar la lista de comandos que queremos -exec
correr. Usaremos una barra invertida () para «escapar» del punto y coma, por lo tanto, se trata como parte del
find
orden, en lugar de algo Bash
debería actuar.
Escribimos lo siguiente:
find . -xtype l -exec rm {} ;
Regresamos al símbolo del sistema sin ninguna indicación de que haya sucedido algo. Para verificar que se han eliminado los enlaces rotos, repetimos el comando para encontrarlos, así:
find . -xtype l
No hay resultados coincidentes, lo que significa que se han eliminado los enlaces simbólicos rotos.
Recuerde revisar primero
Nuevamente, siempre tómese el tiempo para examinar una lista de enlaces simbólicos antes de ejecutar el comando para eliminarlos. Puede evitar eliminar aquellos de los que no está seguro ejecutando el comando para eliminarlos en los directorios correctos.
Por ejemplo, arriba, podríamos haber ejecutado el comando en el directorio «.snap» y luego haber eliminado manualmente el enlace simbólico «hola». Esto habría dejado intacto el enlace simbólico de bloqueo de Firefox.