Estou trabalhando em um sistema HP-UX e quero descobrir se existem links simbólicos circulares.
Até agora estou usando o comando:
ls -lrt `find ./ -follow -type l`
Mas só está executando ls -lrt no diretório atual como resultado.
Que comando devo usar para encontrar todos os links simbólicos circulares em um sistema?
unix
find
symbolic-link
hp-ux
Vladimir
fonte
fonte
find
comando está apenas imprimindo.
ou não imprimindo nada (então você está apenas executandols -lrt
ouls -lrt .
) Não conhece o HP-UX o suficientefind
para saber como corrigir isso (talvez exija um explícito-print
? ) 2) O que você quer dizer com "circular"?./a -> ./b
e./b -> ./a
? Que tal/home/foo/a -> /home
? Ou/home/foo/a -> /home/bar
e/home/bar/b -> /home/foo
?-follow
realmente me dá alguns links reais são resultados?-follow
,find
examina o próprio link, não o arquivo para o qual aponta. Assim,find . -type l
imprime coisas que são links (porque são-type l
) sem sequer olhar para o que apontam (que seriam arquivos ou diretórios ou outros links que apontam para arquivos ou diretórios).Respostas:
A página de manual do GNU find diz que todos os achados do POSIX devem detectar loops do sistema de arquivos e emitir mensagens de erro nesses casos, e eu testei
no GNU find, que foi capaz de encontrar loops do formulário
./a -> ./b
e./b -> ./a
imprimir o erro(isso também funcionou
a->b->c->a
)Da mesma forma, loops do formulário
./foo/x -> ..
e./foo/a -> ./bar
+./bar/b -> ./foo
imprimiram os errosSe você quiser fazer algo com a saída que não seja ler, precisará redirecioná-lo do stderr para o stdout e canalizá-lo para algum script que possa analisar as mensagens de erro.
fonte
-follow
, sim.ls
vez de obter links reais, quando não está sendo usada-follow
?ls
comando usando a saída do seufind
comando. Seufind
comando não imprimiu nada; portanto, seu shell foi executadols
sem nada, o que lista o diretório atual.