Los links simbólicos en Linux son una característica fantástica, pero pueden romperse y dejarse apuntando a nada. A continuación, le indicamos cómo localizar links simbólicos rotos, revisarlos y eliminarlos de su sistema si es necesario.
Links simbólicos 101
Los links simbólicos, además llamados «links suaves» y «links simbólicos», son una forma de atajos que pueden apuntar a archivos y directorios. Un link simbólico se parece a un archivo o directorio normal en una ventana del administrador de archivos. Además aparece como una entrada en una lista de archivos en una ventana de terminal. El archivo o directorio al que apunta el link simbólico puede estar en cualquier parte del árbol del sistema de archivos.
A modo de ejemplo, digamos que tiene un link 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 que utiliza en el link simbólico se aplican automáticamente al archivo al que apunta. Si intentas utilizar cat
o less
en el link simbólico, verá el contenido del archivo «text-file.txt».
Una instalación estándar de Linux contiene muchos links simbólicos. Inclusive si no los crea usted mismo, el sistema operativo los utiliza. Las rutinas de instalación de aplicaciones a menudo usan links simbólicos para apuntar a archivos ejecutables. Cuando se actualiza el software, el archivo binario se reemplaza por la versión nueva y todos los links simbólicos siguen funcionando como antes, siempre que el nombre del nuevo archivo sea el mismo que el anterior.
Podemos ver fácilmente algunos links simbólicos usando ls
en el directorio raíz. Algunas de las entradas se muestran en un color distinto; en nuestra máquina de prueba Ubuntu 20.10, se muestran en azul claro.
Escribimos lo siguiente:
ls /
Podemos echar un vistazo más profundo usando el -l
(lista larga) opción. Escribimos el siguiente comando para ver todas las entradas «lib» y la única entrada «bin»:
ls -l /lib* /bin
Al comienzo de cada línea hay una «l», que indica que el elemento es un link simbólico. El texto después de “->” muestra a lo que apunta el link 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 links simbólicos. Son los permisos en el archivo o directorio de destino los que disponen prioridad y son respetados por el sistema de archivos.
Links simbólicos rotos
Un link 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 factible que se quede con links simbólicos rotos.
Si alguien elimina manualmente un archivo sin saber que los links simbólicos apuntan a él, esos links simbólicos dejarán de funcionar. Serán como señales de tráfico que apuntan a una ciudad que ha sido arrasada.
Podemos ver fácilmente esta conducta usando un link 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 link simbólico, ejecuta el programa por nosotros:
./hello
Ahora podemos chequear si esto es lo que está sucediendo ejecutando el programa de forma directa:
../bin/htg
Como podíamos esperar, obtenemos la misma respuesta. Eliminemos el archivo del programa:
rm ../bin/htg
Ahora, cuando miramos el link simbólico, vemos que está en rojo debido a que Linux sabe que está roto. Además nos dice a qué solía apuntar, para que podamos reemplazar el archivo, recompilar el programa o hacer lo que sea necesario para reparar el link simbólico.
Tenga en cuenta que si intentamos ejecutar el link simbólico, el error que obtenemos hace referencia al nombre del link simbólico, en lugar del nombre del programa al que apunta el link simbólico.
Escribimos lo siguiente:
./hello
Hallar links simbólicos rotos
La mayoría de las versiones modernas de find
tener el xtype
opción (tipo extendido), que simplifica la búsqueda de enlaces simbólicos rotos. Usaremos el l
bandera con xtype
, para indicarle que busque links. Usando find
y xtype
de la próxima manera, sin ninguno de los otros type
banderas, fuerzas xtype
para devolver links rotos:
find . -xtype l
Al ejecutar el comando en nuestro directorio de inicio de prueba, se encuentran bastantes links simbólicos rotos. Tenga en cuenta que la búsqueda es recursiva de forma predeterminada, por lo que busca en todos los subdirectorios automáticamente.
El link simbólico «hola» que rompimos a propósito aparece en el listado, como esperábamos. Uno de los otros links simbólicos está relacionado con el navegador Firefox, y el resto está relacionado con instantáneas.
Si canalizamos la salida a través de wc
con el -l
(líneas), podemos contar las líneas, que es lo mismo que contar los links simbólicos rotos.
Escribimos lo siguiente:
find . -xtype l | wc -l
Se nos informa que tenemos 24 links simbólicos rotos que no apuntan a nada.
Buscar, revisar y después quitar
Antes de que se apresure y elimine todos los links simbólicos rotos, consulte los resultados de la find
mando. Vea si hay una razón válida para alguno de los links simbólicos rotos.
A veces, el link simbólico puede ser el problema, en lugar del archivo de destino. Si el link simbólico se creó incorrectamente, es factible que no apunte a nada, pero el objetivo real está presente. En ese caso, la respuesta sería volver a crear el link simbólico.
Además es factible que un link simbólico aparentemente roto se esté usando como otra cosa, como un indicador de bloqueo de archivo u otro indicador de ir / no ir. Firefox hace esto; ese es el primer link simbólico de nuestra lista. A pesar de esto, Firefox no se utiliza en nuestra máquina de prueba, por lo que es seguro para nosotros eliminarlo.
Además es factible que el objetivo solo esté presente periódicamente, y este es el comportamiento esperado (y deseado) de ese software en particular. Tal vez el archivo de destino se copia de otra máquina o de la nube, realiza su función y después se elimina nuevamente, solo para ser reemplazado por un programa distinto en el siguiente ciclo.
El link simbólico roto además puede ser un síntoma de una instalación de software que falló. En ese caso, en lugar de quitar el link simbólico, debe corregirlo manualmente o repetir la instalación.
Cuando haya arreglado los links rotos que necesita conservar, repita el comando para realizar la búsqueda. Los links simbólicos fijos deberían estar ausentes en los resultados de la búsqueda.
Por el bien de la seguridad, es mejor limitar las eliminaciones de links simbólicos a sus propios directorios. Tenga mucho cuidado al ejecutar estos comandos como root o en directorios del sistema.
Borrar links simbólicos rotos
los -exec
La opción (ejecutar) ejecuta comandos en el find
Resultados de la búsqueda. Vamos a utilizar rm
para quitar cada link simbólico roto. los {}
La cadena se reemplaza con el nombre de cada link simbólico roto a medida que cada uno es descubierto por find
.
Tenemos que utilizar un punto y coma (;
) para terminar la lista de comandos que queremos -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
debe 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 links rotos, repetimos el comando para buscarlos, de la próxima manera:
find . -xtype l
No hay resultados coincidentes, lo que significa que se han eliminado los links simbólicos rotos.
Recuerde revisar primero
Nuevamente, siempre tómese el tiempo para revisar una lista de links simbólicos antes de ejecutar el comando para eliminarlos. Puede evitar quitar cualquiera de los que no esté seguro ejecutando el comando para eliminarlos en los directorios apropiados.
A modo de ejemplo, arriba, podríamos haber ejecutado el comando en el directorio «.snap» y después haber eliminado manualmente el link simbólico solitario «hola». Esto habría dejado intacto el link simbólico de bloqueo de Firefox.
setTimeout(function(){
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s) } (window, document,’script’,
‘https://connect.facebook.net/en_US/fbevents.js’);
fbq(‘init’, ‘335401813750447’);
fbq(‘track’, ‘PageView’);
},3000);