Trouver des liens symboliques en erreur


Symlink
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).

Un lien symbolique ou symlink

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 commentaire
  •  

    Autre solution sans perl :
    sudo find -L / -type l 2>/dev/null

    RépondreRépondre
    jbbarth , le 29 janvier 2010 à 10:33
  •  

    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 ?

    RépondreRépondre
    LCG , le 29 janvier 2010 à 12:02
  •  

    @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...

    RépondreRépondre
    pti-seb , le 29 janvier 2010 à 20:02
  •  

    @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.

    RépondreRépondre
    pti-seb , le 31 janvier 2010 à 15:41
  •  

    @pti-seb: chez moi l'option -L est bien documenté:

    -L Suivre les liens symboliques. Quand find analyse ou affiche les
    informations concernant un fichier, ce sont celles extraites des
    caractéristiques du fichier vers lequel mène les liens, et non
    celle du lien lui-même (sauf s'il s'agit d'un lien cassé, ou si
    find est incapable d'analyser le fichier vers lequel pointe le
    lien). L'utilisation de cette option implique -noleaf qui sera
    toujours active pour les utilisations ultérieures de l'option
    -P. Si l'option -L est active et que find découvre un lien sym‐
    bolique vers un sous-répertoire lors de ses recherches, le
    sous-répertoire pointé par le lien symbolique sera examiné.

    Quand l'option -L est active, le prédicat -type correspondra
    toujours au type du fichier pointé par le lien symbolique plutôt
    que celui du lien lui-même (sauf si le lien symbolique est
    cassé). Les prédicats -lname et -ilname renvoient toujours faux
    lors de l'utilisation de -L.

    RépondreRépondre
    mydjey , le 6 février 2010 à 02:24
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum