Agence web » Actualités du digital » Comment rechercher et supprimer des liens symboliques brisés sous Linux

Comment rechercher et supprimer des liens symboliques brisés sous Linux

comment-utiliser-pandoc-pour-convertir-des-fichiers-sur-la-ligne-4147938
Fatmawati Achmad Zaenuri / Shutterstock

Les liens symboliques sous Linux sont une fonctionnalité fantastique, mais ils peuvent se rompre et ne pointer vers rien. Voici comment localiser les liens symboliques rompus, les examiner et les supprimer de votre système si nécessaire.

Liens symboliques 101

Les liens symboliques, également appelés «liens souples» et «liens symboliques», sont une forme de raccourcis qui peuvent pointer vers des fichiers et des répertoires. Un lien symbolique ressemble à un fichier ou à un répertoire normal dans une fenêtre de gestionnaire de fichiers. Il apparaît également comme une entrée dans une liste de fichiers dans une fenêtre de terminal. Le fichier ou le répertoire vers lequel pointe le lien symbolique peut se trouver n’importe où dans l’arborescence du système de fichiers.

Par exemple, disons que vous avez un lien symbolique dans votre répertoire personnel appelé «dave-link» qui pointe vers un fichier appelé «text-file.txt» situé ailleurs dans l’arborescence du système de fichiers. Les commandes que vous utilisez sur le lien symbolique sont automatiquement appliquées au fichier vers lequel il pointe. Si vous essayez d’utiliser cat ou less sur le lien symbolique, vous verrez en fait le contenu du fichier «text-file.txt».

Une installation Linux standard contient de nombreux liens symboliques. Même si vous n’en créez pas vous-même, le système d’exploitation les utilise. Les routines d’installation d’applications utilisent souvent des liens symboliques pour pointer vers des fichiers exécutables. Lorsque le logiciel est mis à jour, le fichier binaire est remplacé par la nouvelle version et tous les liens symboliques continuent à fonctionner comme avant, tant que le nom du nouveau fichier est le même que l’ancien.

Nous pouvons facilement voir certains liens symboliques en utilisant ls dans le répertoire racine. Certaines des entrées sont affichées dans une couleur différente – sur notre machine de test Ubuntu 20.10, elles sont affichées en bleu clair.

Nous tapons ce qui suit:

ls /

ls / dans une fenêtre de terminal.

Nous pouvons examiner de plus près en utilisant le -l (longue liste) option. Nous tapons la commande suivante pour regarder toutes les entrées «lib» et la seule entrée «bin»:

ls -l /lib* /bin

ls -l / lib * / bin dans une fenêtre de terminal.

Au début de chaque ligne se trouve un «l», qui indique que l’élément est un lien symbolique. Le texte après «->» montre vers quoi pointe le lien symbolique. Dans notre exemple, les cibles sont tous des répertoires.

Les autorisations sont répertoriées comme lecture, écriture et exécution pour le propriétaire, le groupe et autres. Ce sont de fausses entrées par défaut. Ils ne reflètent pas les autorisations réelles sur les objets vers lesquels pointent les liens symboliques. Ce sont les autorisations sur le fichier ou le répertoire cible qui ont la priorité et sont respectées par le système de fichiers.

Liens symboliques brisés

Un lien symbolique est rompu (ou laissé en suspens) lorsque le fichier vers lequel il pointe est supprimé ou déplacé vers un autre emplacement. Si la routine de désinstallation d’une application ne fonctionne pas correctement ou est interrompue avant la fin, vous risquez de vous retrouver avec des liens symboliques rompus.

Si quelqu’un supprime manuellement un fichier sans savoir que les liens symboliques pointent vers lui, ces liens symboliques ne fonctionneront plus. Ils seront comme des panneaux routiers indiquant une ville détruite au bulldozer.

Nous pouvons facilement voir ce comportement en utilisant un lien symbolique appelé «bonjour» dans le répertoire courant. Nous tapons ce qui suit, en utilisant ls voir ça:

ls -l

Il pointe vers un programme appelé «htg» dans un répertoire appelé «bin». Si nous «exécutons» le lien symbolique, il exécute le programme pour nous:

./hello

Nous pouvons maintenant vérifier si c’est ce qui se passe en exécutant directement le programme:

../bin/htg

Comme prévu, nous obtenons la même réponse. Supprimons le fichier programme:

rm ../bin/htg

Maintenant, quand nous regardons le lien symbolique, nous voyons qu’il est répertorié en rouge parce que Linux sait qu’il est cassé. Il nous indique également vers quoi il pointait, afin que nous puissions remplacer le fichier, recompiler le programme ou faire tout ce qui est nécessaire pour réparer le lien symbolique.

Notez que si nous essayons d’exécuter le lien symbolique, l’erreur que nous obtenons fait référence au nom du lien symbolique, plutôt qu’au nom du programme vers lequel pointe le lien symbolique.

Nous tapons ce qui suit:

./hello

ls -l dans une fenêtre de terminal.

Recherche de liens symboliques rompus

Les versions les plus modernes de find avoir le xtype (type étendu), qui simplifie la recherche de liens symboliques rompus. Nous utiliserons le l drapeau avec xtype, pour lui dire de rechercher des liens. En utilisant find et xtype comme suit, sans aucun des autres type drapeaux, forces xtype pour renvoyer des liens rompus:

find . -xtype l

trouver -xtype l dans une fenêtre de terminal.

L’exécution de la commande dans notre répertoire personnel de test trouve pas mal de liens symboliques rompus. Notez que la recherche est récursive par défaut, elle recherche donc automatiquement tous les sous-répertoires.

Le lien symbolique «bonjour» que nous avons rompu volontairement est répertorié, comme prévu. L’un des autres liens symboliques est lié au navigateur Firefox, et le reste est associé à des snaps.

Si nous canalisons la sortie à travers wc avec le -l (lines), nous pouvons compter les lignes, ce qui équivaut à compter les liens symboliques rompus.

Nous tapons ce qui suit:

find . -xtype l | wc -l

trouver .  -xtype l |  wc -l dans une fenêtre de terminal.

Nous sommes informés que nous avons 24 liens symboliques rompus ne pointant vers rien.

Rechercher, examiner, puis supprimer

Avant de vous précipiter et de supprimer tous les liens symboliques rompus, regardez les résultats de la find commander. Voyez s’il y a une raison valable pour l’un des liens symboliques rompus.

Parfois, le lien symbolique peut être le problème, plutôt que le fichier cible. Si le lien symbolique a été créé de manière incorrecte, il peut ne pointer vers rien, mais la véritable cible est présente. Recréer le lien symbolique serait le correctif dans ce cas.

Il est également possible qu’un lien symbolique apparemment rompu soit utilisé comme autre chose, comme un indicateur de verrouillage de fichier ou un autre indicateur go / no go. Firefox fait cela; c’est ce qu’est le premier lien symbolique de notre liste. Cependant, Firefox n’est pas utilisé sur notre machine de test, nous pouvons donc le supprimer en toute sécurité.

Il est également possible que la cible ne soit présente que périodiquement, et c’est le comportement attendu (et souhaité) de ce logiciel particulier. Peut-être que le fichier cible est copié à partir d’une autre machine ou du cloud, qu’il remplit sa fonction, puis est à nouveau supprimé, pour être remplacé par un programme différent au cycle suivant.

Le lien symbolique rompu peut également être le symptôme d’une installation logicielle qui a échoué. Dans ce cas, au lieu de supprimer le lien symbolique, vous devez soit le corriger manuellement, soit répéter l’installation.

Une fois que vous avez corrigé les liens rompus que vous devez conserver, répétez la commande pour effectuer la recherche. Les liens symboliques fixes devraient alors être absents des résultats de la recherche.

Pour des raisons de sécurité, il est préférable de limiter vos suppressions de liens symboliques à vos propres répertoires. Soyez extrêmement prudent lorsque vous exécutez ces commandes en tant que root ou sur les répertoires système.

Suppression des liens symboliques rompus

le -exec (exécuter) exécute des commandes sur find Résultats de recherche. Nous allons utiliser rm pour supprimer chaque lien symbolique rompu. le {} string est remplacé par le nom de chaque lien symbolique rompu lorsque chacun est découvert par find.

Nous devons utiliser un point-virgule (;) pour terminer la liste des commandes que nous voulons -exec courir. Nous utiliserons une barre oblique inverse () pour «échapper» le point-virgule, il est donc traité comme faisant partie du find commande, plutôt que quelque chose Bash devrait agir.

Nous tapons ce qui suit:

find . -xtype l -exec rm {} ;

trouver .  -xtype l -exec rm {} ;  dans une fenêtre de terminal.

Nous sommes retournés à l’invite de commande sans aucune indication que quoi que ce soit s’est passé. Pour vérifier que les liens rompus ont été supprimés, nous répétons la commande pour les rechercher, comme suit:

find . -xtype l

trouver .  -xtype l dans une fenêtre de terminal.

Il n’y a pas de résultats correspondants, ce qui signifie que les liens symboliques rompus ont été supprimés.

N’oubliez pas de vérifier d’abord

Encore une fois, prenez toujours le temps de revoir une liste de liens symboliques avant d’exécuter la commande pour les supprimer. Vous pouvez éviter de supprimer ceux dont vous n’êtes pas sûr en exécutant la commande pour les supprimer dans les répertoires appropriés.

Par exemple, ci-dessus, nous aurions pu exécuter la commande dans le répertoire «.snap», puis supprimer manuellement le lien symbolique solitaire «hello». Cela aurait laissé le lien symbolique de verrouillage de Firefox intact.

★★★★★