En tant qu'administrateurs système bien rangés, nous aimons nous assurer que les petites choses sont aussi bien couvertes que les grandes choses (lorsque le temps le permet). L'une de ces choses est de s'assurer que nos systèmes ne sont pas remplis de liens symboliques cassés.
Pourquoi ces petits flétrisseurs sont-ils un problème? Parce qu'ils vous font penser que les fichiers sont là quand ils ne le sont pas, ils peuvent être une indication de quelque chose de plus ennuyeux, et parce que la (petite) partie OCD de moi devient complètement folle avec tous ces avertissements lors de l'exécution de certaines commandes (comme grep -r
).
Alors, comment procéder pour détecter (et signaler, via e-mail ou système de surveillance) les liens cassés entre les parties d'un système dont l'administrateur est responsable (inutile de me dire qu'il y ~jbloggs
a un tas de liens symboliques cassés, c'est son problème )?
la source
Réponses:
Le problème
-L
est que cela a pour effet secondaire d'étendre la recherche dans des sous-répertoires qui sont les cibles desymlinks
, ce qui pourrait ne pas être attendu ou souhaité.Avec
GNU findutils
version defind
:sauf qu'il ne trouve pas de liens symboliques cycliques.
-execdir
dans l'autre réponse n'est pas aussi portable, donc distillez-le vers une solution portable qui trouve des liens symboliques rompus, y compris des liens cycliques:Voir cette question ou ynform.org pour plus de discussion. Consultez également la documentation de findutils pour plus de détails. Le lien ynform.org présente également une méthode pour détecter uniquement les liens cycliques.
la source
De nombreuses façons d'écorcher un chat
C'est assez portable (-L est une exigence posix)
Vous n'avez pas défini cassé, ce qui précède vous enverrait des liens rompus qui n'ont aucune cible dans la partie du système de fichiers qui vous intéresse. Il signale également les boucles du système de fichiers stderr et Trop de niveaux de problèmes de liens symboliques, etc. Si vous vous souciez d'eux aussi, redirigez stderr vers votre courrier
Si votre trouvaille le prend en charge, il
-readable
est utile et rapideCe qui précède comprend des liens avec trop de niveaux de problèmes de liens symboliques dans sa sortie, mais pas de boucles de système de fichiers.
Si les parties du système de fichiers qui vous intéressent ont des chemins différents,
la source
find -L
est problématique pour ce cas d'utilisation. Voir: unix.stackexchange.com/a/38691/6860Je vais vous donner une réponse Linux et vous pourrez l'adapter à votre Unix, si besoin:
find . -type l ! -execdir test -e {} \; -print >> broken_symlinks.txt; mutt -s "Broken symlinks" [email protected] < broken_symlinks.txt; rm -f broken_symlinks.txt
La deuxième option est
ls -LR | grep 'cannot access'
ou certaines modifications de la commande find ci-dessus.Éditer:
Ouais, c'est encore mieux:
find . -type l ! -execdir test -e {} \; -print | mail -s "Broken symlinks" [email protected]
la source
broken_symlinks.txt
entièrement et utiliser simplement une pipe? Et utilisermail
au lieu d'mutt
envoyer le courrier électronique?C'est une bonne façon de le faire avec GNU find:
La raison pour laquelle cela fonctionne est parce
-lname
qu'avec-follow
(ou -L) "... ce test retourne faux à moins que le lien symbolique ne soit rompu", selon la page de manuel find.Il serait probablement judicieux d'exécuter ce type d'analyse de disque lorsque le serveur n'est pas très utilisé. Il peut être utile d'utiliser
nice
et / ouionice
(voir ce blog pour une belle description d'ionice ) pour réduire la charge sur le serveur lors de l'exécution de cette tâche.la source
Fedora et Ubuntu fournissent l'
symlinks
utilitaire. L'utilitaire est un exécutable elf natif, et non un script shell wrapper. L'utilitaire a été préinstallé sur Fedora. Vous devrez peut-être installer l'utilitaire sur Ubuntu.Avec l'
symlinks
utilitaire, vous pouvez vérifier les liens pendants avec la commande suivante.Si les cibles des liens pendants peuvent être supprimées, procédez comme suit pour les supprimer.
Voici un exemple de sortie sur un serveur Fedora 31. Les
debian-logo.png
etubuntu-logo.png
sont corrects.la source