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

Contenu

Une fenêtre de terminal sur un ordinateur portable Linux.

Les liens symboliques sous Linux sont une fonctionnalité fantastique, mais ils peuvent être brisés et laissés pointés vers rien. Ensuite, Nous vous expliquons comment localiser les liens symboliques brisés, examinez-les et supprimez-les de votre système si nécessaire.

liens symboliques 101

Liens symboliques, aussi appelé “liens logiciels” et “liens symboliques”, ils 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 du gestionnaire de fichiers. Apparaît également en tant qu'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 dans le lien symbolique sont automatiquement appliquées au fichier vers lequel il pointe. Si vous essayez d'utiliser cat O less dans le lien symbolique, vous verrez le contenu du fichier “fichier texte.txt”.

Une installation Linux standard contient de nombreux liens symboliques. Même si tu ne les crois pas toi-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 de fonctionner comme avant, tant que le nom du nouveau fichier est le même que l'ancien.

On peut facilement voir quelques liens symboliques en utilisant ls dans le répertoire racine. Certains des billets sont affichés dans une couleur différente; sur notre machine de test Ubuntu 20.10, représenté en bleu clair.

Nous écrivons ce qui suit:

ls /

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

ls -l / lib * / bin

Au début de chaque ligne, il y a un “je”, 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 destinations sont toutes des annuaires.

Les autorisations sont répertoriées comme lues, acte et exécution pour le propriétaire, le groupe et les autres. Ce sont de fausses entrées par défaut. Ils ne reflètent pas les autorisations réelles sur les objets pointés par les liens symboliques. Ce sont les permissions sur le fichier ou le répertoire de destination qui sont prioritaires et respectées par le système de fichiers.

liens symboliques rompus

Un lien symbolique est rompu (ou est 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 pouvez vous retrouver avec des liens symboliques brisés.

Si quelqu'un supprime manuellement un fichier sans savoir que les liens symboliques y pointent, ces liens symboliques cesseront de fonctionner. Ils seront comme des panneaux de signalisation indiquant une ville rasée.

Nous pouvons facilement voir ce comportement à l’aide d’un lien symbolique appelé “Bonjour” Nous voulons trouver des fichiers contenant le mot. Nous écrivons ce qui suit, à l'aide de ls à voir:

ls -l

Cibler un programme appelé “htg” dans un répertoire appelé “poubelle”. Si nous "exécutons" le lien symbolique, exécuter le programme pour nous:

./Bonjour

Maintenant, nous pouvons vérifier si c'est ce qui se passe en exécutant le programme directement:

../poubelle/htg

Comment pourrions-nous attendre, on obtient la même réponse. Supprimons le fichier programme:

rm ../bin/htg

Maintenant, quand on regarde le lien symbolique, on voit qu'il est en rouge car Linux sait qu'il est cassé. Il nous dit aussi ce qu'il visait auparavant, afin que nous puissions remplacer le fichier, recompiler le programme ou faire le 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, au lieu du nom du programme vers lequel pointe le lien symbolique.

Nous écrivons ce qui suit:

./Bonjour

Trouver des liens symboliques rompus

Les versions les plus modernes de find avoir le xtype option (type étendu), qui simplifie la recherche de liens symboliques rompus. Nous utiliserons le l drapeau avec xtype, pour vous demander de rechercher des liens. À l'aide de find et xtype de la manière suivante, sans aucun des autres type banderas, les forces xtype pour retourner les liens brisés:

trouve . -xtype l

Lors de l'exécution de la commande dans notre répertoire de base de test, il y a pas mal de liens symboliques cassés. Notez que la recherche est récursive par défaut, donc il recherche automatiquement tous les sous-répertoires.

Le lien symbolique “Bonjour” que nous avons cassé exprès apparaît dans la liste, comme on s'y attendait. L'un des autres liens symboliques est lié au navigateur Firefox, et le reste est lié aux instantanés.

Si nous canalisons la sortie à travers wc avec lui -l (lignes), on peut compter les lignes, ce qui revient à compter les liens symboliques rompus.

Nous écrivons ce qui suit:

trouve . -xtype l | wc -l

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

Chercher, revoir puis supprimer

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

Parfois, le lien symbolique peut être le problème, au lieu du fichier de destination. Si le lien symbolique a été mal créé, il est possible qu'il ne vise rien, mais le vrai but est présent. Dans ce cas, la réponse serait de recréer le lien symbolique.

Il est également possible qu'un lien symbolique apparemment rompu soit utilisé comme autre chose, comme indicateur de verrouillage de fichier ou autre indicateur de départ / Ne pas aller. Firefox fait ça; c'est le premier lien symbolique de notre liste. Malgré cela, Firefox n'est pas utilisé sur notre machine de test, il est donc sûr pour nous de l'enlever.

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 de destination est copié depuis une autre machine ou depuis le cloud, remplit sa fonction puis est à nouveau retiré, uniquement pour être remplacé par un programme différent au cycle suivant.

Le lien symbolique rompu peut également être le symptôme d'un échec de l'installation du logiciel.. Dans ce cas, au lieu de supprimer le lien symbolique, vous devez le réparer manuellement ou répéter l'installation.

Lorsque vous avez réparé les liens brisés, vous devez conserver, répéter la commande pour rechercher. Les liens symboliques fixes doivent être absents des résultats de recherche.

Par souci de sécurité, il vaut mieux limiter la suppression des liens symboliques vers vos propres répertoires. Soyez très prudent lorsque vous exécutez ces commandes en tant que root ou dans les répertoires système.

Supprimer les liens symboliques rompus

Les -exec L'option (Cours) exécuter des commandes sur le find Résultats de recherche. nous allons utiliser rm pour supprimer tous les liens symboliques brisés. Les {} La chaîne est remplacée par le nom de chaque lien symbolique rompu au fur et à mesure que 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” du point-virgule, il est donc traité comme faisant partie du find commander, au lieu de quelque chose Bash doit agir.

Nous écrivons ce qui suit:

trouve . -xtype l -exec rm {} ;

Nous revenons à l'invite de commande sans aucune indication que quelque chose s'est passé. Pour vérifier que les liens rompus ont été supprimés, nous répétons la commande pour les rechercher, de la manière suivante:

trouve . -xtype l

Aucun résultat correspondant, ce qui signifie que les liens symboliques brisés ont été supprimés.

N'oubliez pas de vérifier d'abord

De nouveau, 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 les incertains en exécutant la commande pour les supprimer dans les répertoires appropriés.

Par exemple, dessus, nous aurions pu exécuter la commande dans le répertoire “.casser” puis supprimé manuellement le lien symbolique solitaire “Bonjour”. Cela aurait laissé le lien symbolique de blocage de Firefox intact.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.