Como administradores de sistemas organizados, gostamos de garantir que as pequenas coisas sejam tão bem cobertas quanto as grandes (quando o tempo permitir). Uma dessas coisas é garantir que nossos sistemas não estejam cheios de links simbólicos quebrados.
Por que esses pequenos problemas são um problema? Como eles fazem você pensar que os arquivos estão lá quando não estão, podem ser uma indicação de algo mais irritante, e porque a parte (pequena) do TOC fica louca com todos esses avisos ao executar determinados comandos (como grep -r
).
Então, como alguém poderia detectar (e relatar, via e-mail ou sistema de monitoramento) links quebrados nas partes de um sistema pelo qual o administrador é responsável (não faz sentido me dizer que ~jbloggs
tem vários links simbólicos quebrados, esse é o problema dele )?
fonte
Respostas:
O problema
-L
é que isso tem o efeito colateral de expandir a pesquisa em subdiretórios que são os alvos desymlinks
, que podem não ser esperados ou desejados.Com
GNU findutils
versão defind
:exceto que não encontra links simbólicos cíclicos.
-execdir
na outra resposta, não é tão portátil, destilando-o para uma solução portátil que encontre links simbólicos quebrados, incluindo links cíclicos:Veja esta pergunta ou ynform.org para uma discussão mais aprofundada. Consulte também a documentação do findutils para obter detalhes. O link ynform.org também apresenta um método para detectar apenas links cíclicos.
fonte
Muitas maneiras de esfolar um gato
Isso é bastante portátil (-L é um requisito posix)
Você não definiu quebrado, o acima enviaria links quebrados que não têm destino na parte do sistema de arquivos de que você gosta. Ele também relata loops do sistema de arquivos stderr e muitos níveis de problemas de links simbólicos etc. Se você também se importa com eles, redirecione o stderr para o seu e-mail
Se o seu achado o suportar,
-readable
é útil e rápidoA descrição acima inclui links com muitos níveis de problemas de link simbólico em sua saída, mas não em loops do sistema de arquivos.
Se as partes do sistema de arquivos importantes para você tiver caminhos diferentes,
fonte
find -L
é problemático para este caso de uso. Veja: unix.stackexchange.com/a/38691/6860Vou lhe dar uma resposta do Linux e você pode ajustá-la ao seu Unix, se necessário:
find . -type l ! -execdir test -e {} \; -print >> broken_symlinks.txt; mutt -s "Broken symlinks" [email protected] < broken_symlinks.txt; rm -f broken_symlinks.txt
A segunda opção é
ls -LR | grep 'cannot access'
ou algumas modificações do comando find acima.Editar:
Sim, isso é ainda melhor:
find . -type l ! -execdir test -e {} \; -print | mail -s "Broken symlinks" [email protected]
fonte
broken_symlinks.txt
completamente e apenas usar um cachimbo? E usar emmail
vez demutt
enviar o email?Esta é uma boa maneira de fazer isso com o GNU find:
A razão pela qual isso funciona é porque
-lname
com-follow
(ou -L) "... esse teste retorna falso, a menos que o link simbólico seja quebrado", de acordo com a página de manual find.Provavelmente, seria sensato executar esse tipo de verificação de disco quando o servidor não for muito usado. Pode ser útil usar
nice
e / ouionice
(consulte este blog para uma boa descrição do ionice ) reduzir a carga no servidor durante a execução desta tarefa.fonte
O Fedora e o Ubuntu fornecem o
symlinks
utilitário. O utilitário é um elfo nativo executável e não um script de shell do wrapper. O utilitário foi pré-instalado no Fedora. Pode ser necessário instalar o utilitário no Ubuntu.Com o
symlinks
utilitário, você pode auditar os links pendentes com o seguinte comando.Se os destinos dos links pendentes puderem ser excluídos, emita o seguinte para excluí-los.
Aqui está um exemplo da saída em um servidor Fedora 31. O
debian-logo.png
eubuntu-logo.png
está correto.fonte