Cómo encontrar y eliminar enlaces simbólicos rotos en Linux

Una ventana de terminal en una computadora portátil con Linux.
Fatmawati Achmad Zaenuri / Shutterstock

Los enlaces simbólicos en Linux son una gran característica, pero pueden romperse y no apuntar a nada. Aquí se explica cómo localizar enlaces simbólicos rotos, examinarlos y eliminarlos de su sistema si es necesario.

Índice de contenidos
  1. Enlaces simbólicos 101
  2. Symlinks rotos
  3. Encuentra enlaces simbólicos rotos
  4. Buscar, revisar y luego quitar
  5. Eliminar enlaces simbólicos rotos
  6. Recuerde revisar primero

Enlaces simbólicos 101

Los enlaces simbólicos, también llamados "enlaces virtuales" y "enlaces simbólicos", son una forma de enlaces 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 puede estar 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 algún otro lugar del árbol del sistema de archivos. Los comandos utilizados en el enlace simbólico se aplican automáticamente al archivo al que apunta. Si intentas usar cat o 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 crea ninguno, el sistema operativo los usa. Las rutinas de instalación de aplicaciones a menudo utilizan enlaces simbólicos para apuntar a archivos ejecutables. Cuando se actualiza el software, el archivo binario se reemplaza por 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. Algunos de los elementos se muestran en un color diferente; en nuestra máquina de prueba Ubuntu 20.10, se muestran en azul claro.

Escribimos lo siguiente:

ls /

ls / en una ventana de terminal.

Podemos echar un vistazo más profundo utilizando el -l opción (lista larga). Escribimos el siguiente comando para examinar todas las entradas "lib" y la única entrada "bin":

ls -l /lib* /bin

ls -l / lib * / bin en una ventana de terminal.

Al principio de cada línea hay una "l", que indica que el elemento es un enlace simbólico. El texto después de "->" muestra a qué 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 predeterminadas. No reflejan los permisos reales sobre los objetos a los que apuntan los enlaces simbólicos. Son los permisos en el archivo o directorio de destino los que tienen prioridad y son respetados por el sistema de archivos.

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 detiene antes de completarse, es posible que se queden 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 indiquen una ciudad que ha sido demolida.

Podemos ver fácilmente este comportamiento usando un enlace simbólico llamado "hola" en el directorio actual. Escribimos lo siguiente, usando ls para verlo:

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 comprobar si esto es lo que está sucediendo ejecutando el programa directamente:

../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á muerto. También nos dice a qué apuntaba, por lo que podemos reemplazar el archivo, recompilar el programa o hacer lo que sea necesario para reparar 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

ls -l en una ventana de terminal.

Encuentra enlaces simbólicos rotos

La mayoría de las versiones modernas de find tener el xtype opción (tipo extendido), lo que facilita la búsqueda de enlaces simbólicos rotos. Usaremos el archivo l bandera con xtype, para decirle que busque enlaces. Utilizando find es xtype de la siguiente manera, sin ninguno de los demás type banderas, fuerzas xtype para devolver enlaces rotos:

find . -xtype l

busque -xtype l en una ventana de terminal.

Al ejecutar el comando en nuestro directorio de inicio de prueba, se encuentran algunos 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 "hola" aparece en la lista, que cortamos a propósito, como se esperaba. Uno de los otros enlaces simbólicos está relacionado con el navegador Firefox y el resto está asociado con instantáneas.

Si enrutamos la salida a través de wc con el -l (líneas), podemos contar las líneas, lo que equivale a contar enlaces simbólicos rotos.

Escribimos lo siguiente:

find . -xtype l | wc -l

encontrar .  -xtype l |  wc -l en una ventana de terminal.

Se nos informa que tenemos 24 enlaces simbólicos rotos que no apuntan a nada.

Buscar, revisar y luego quitar

Antes de que se apresure y elimine todos los enlaces simbólicos rotos, observe los resultados del archivo find mando. Compruebe si existe una razón válida para alguno 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 apunte a nada, pero el objetivo real está ahí. En este caso, volver a crear el enlace simbólico sería la solución.

También es posible que un enlace simbólico aparentemente roto se esté utilizando como otra cosa, como un indicador de bloqueo de archivos u otro indicador de pasa / no pasa. Firefox hace esto; este es el primer enlace simbólico de nuestra lista. Firefox no se está utilizando en nuestra máquina de prueba, por lo que es seguro para nosotros eliminarlo.

También es posible que el objetivo solo esté presente periódicamente, y este es el comportamiento esperado (y deseado) de ese software en particular. Quizás el archivo de destino se copia desde otra máquina o la nube, realiza su función y luego se elimina nuevamente, solo para ser reemplazado por un programa diferente en el siguiente ciclo.

El enlace simbólico roto también podría ser un síntoma de una instalación de software fallida. En ese caso, en lugar de eliminar el enlace simbólico, debe corregirlo manualmente o repetir la instalación.

Después de arreglar los enlaces rotos que necesita mantener, repita el comando para realizar la búsqueda. Por lo tanto, los enlaces simbólicos duros no deben 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 archivo find Resultados de la búsqueda. Usaremos rm para eliminar cualquier 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 terminar la lista de comandos deseados -exec correr. Usaremos una barra invertida () para "escapar" del punto y coma, por lo que se trata como parte del find comando, en lugar de algo Bash debería actuar.

Escribimos lo siguiente:

find . -xtype l -exec rm {} ;

encontrar .  -xtype l -exec rm {} ;  en una ventana de terminal.

Regresamos al símbolo del sistema sin indicios de que hubiera sucedido algo. Para verificar que se han eliminado los enlaces rotos, repetimos el comando para buscarlos, de la siguiente manera:

find . -xtype l

encontrar .  -xtype l en una ventana de terminal.

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 revisar 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 apropiados.

Por ejemplo, arriba, podríamos haber ejecutado el comando en el directorio ".snap" y luego eliminar manualmente el enlace simbólico "hola" solitario. Esto habría dejado intacto el enlace simbólico de bloqueo de Firefox.

Descubre más contenido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Nelida Haydee Saldivia.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a KnownHost que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Subir