Trouver des liens symboliques en erreur
Un lien symbolique (ou symlink) est en fait une entrée spéciale, que l'on trouve généralement sur les systèmes Unix, et qui permet de pointer vers un fichier ou un répertoire de manière transparente (cf Nom B sur le schéma ci-dessous).
Parfois, ces liens sont en erreur suite au renommage d'un fichier ou au déplacement d'un répertoire. Voici une commande qui permet de scanner l'ensemble des liens symboliques d'un système et de détecter ceux qui sont erronés.
On notera l'utilisation de perl pour tester le bon fonctionnement du lien symbolique :
find / -type l | perl -lne 'print if ! -e'
5 Commentaires pour "Trouver des liens symboliques en erreur"
Flux des commentaires de cet article Ajouter un commentaireAutre solution sans perl :
sudo find -L / -type l 2>/dev/null
Bonjour,
merci pour ces deux commandes.
Une question cependant, peut-on faire entièrement confiance à ces deux commandes et si oui, une commande pour enlever ces liens morts serait peut-être pas mal ?
@Jbbarth : il serait intéressant de voir qu'elle est la commande la plus rapide.
@LGC : oui tu peux faire confiance à ces commandes. Par contre, plutôt que les supprimer, il faudrait se demander pourquoi ils sont en erreur...
@jbbarth : après test avec la commande time, il se trouve que ta commande est beaucoup moins rapide que celle citée ici, avec l'utilisation de Perl. Si on enlève la redirection d'erreur, on se rend compte que find fait beaucoup de boucle le récursive et indique le message suivant "répertoire sur lequel il pointe a déjà été visité".
Autre fait étrange, l'option -L de find n'est pas documentée dans le man (elle permet de tester les chemins des liens symboliques). Même si celle-ci est visiblement bien prise en compte.
@pti-seb: chez moi l'option -L est bien documenté: