Como encontrar todos os arquivos de log recursivamente, deixando de fora um caminho de acesso específico negado?

1

Estou usando o Linux Mint 18.3 e tenho uma tarefa escolar para encontrar todos os arquivos de log em uma máquina linux sem mensagens de erro. Eu preciso montar um comando e explicá-lo completamente. Acho que encontrei uma maneira de usar o find, mas há uma mensagem de acesso negado em relação ao gvfs que não sei como lidar. Você pode me ajudar a montar um comando simples e inteligente que não apenas filtre cegamente todas as mensagens de erro, mas apenas exclua aqueles lugares onde realmente não faz sentido procurar? Minha primeira tentativa:

# find / -type f -name '*.log'

parece retornar todos os arquivos de log, mas o resultado inclui:

find: '/run/user/1000/gvfs': Permission denied

Então tentei deixar de fora uma pasta:

# find / -type d \( -name run \) -prune -o -type f -name '*.log' -print

mas não parece inteligente deixar de fora toda a pasta de execução então começou a especificar, para reduzi-la a um caminho específico, talvez. Encontrado este post, e unix.stackexchange.com/a/77592 respondem, e tentaram omitir este caminho específico:

# find / -name '*.log' -path '/run/user/1000/gvfs' -prune -o -type f -name '*.log' -print

mas parece não funcionar como eu esperava, retornando o mesmo, entre aparentemente todos os arquivos de log:

find: '/run/user/1000/gvfs': Permission denied

Agora eu me deparo com o problema de compreensão onde estou pensando errado ou estou deixando de fora esse caminho específico, a coisa mais simples e inteligente a ser feita.

    
por ktii 14.02.2018 / 23:25

3 respostas

1

Os arquivos de log são armazenados em /var/log , portanto não há necessidade de executar find em todo o diretório raiz. Se você insistir em fazer isso e quiser excluir esse diretório para não receber erros, sua sintaxe deverá ser:

find / -wholename /run -prune -o -type f -name '*.log' -print

Esse diretório é o ponto de montagem para o FUSE e não contém nenhum arquivo de log e o /run tem diretórios (pelo menos no Centos, Fedora e RHEL) dentro dos quais darão erros de permissão, então o comando acima excluirá completamente o diretório . Eu não tenho o Mint instalado para que você possa editar o comando para reduzir o volume até receber erros.

Além disso, uma coisa a ter em mente é que os arquivos de log nem sempre terminam em .log , como messages , dmesg , cron e secure .

    
por 15.02.2018 / 00:54
0

Basta fazer:

 find / -type f -name '*.log' 2>/dev/null

ou

find /var -type f -name '*.log'

até onde os logs devem estar em var

    
por 15.02.2018 / 12:49
0

O idioma correto para evitar as mensagens de erro "permissão negada" é:

find <root-path> ! -readable -prune -o <rest of your find arguments>

Aplicar isso à resposta original do dever de casa renderia:

find / ! -readable -prune -o -type f -name "*.log"

Isso deve satisfazer sua exigência de "montar um comando simples e inteligente". Ele também cumpre o requisito "que não apenas filtra cegamente qualquer mensagem de erro", pois apenas filtra coisas ilegíveis. O seu requisito final "mas apenas deixa de fora aqueles lugares onde realmente não faz sentido olhar" é completamente diferente, e faria uma boa pergunta separada, a saber: 'Existe uma maneira de um script encontrar o diretório raiz de log do sistema padrão? , no sistema específico em que o script está sendo executado? '. Não tenho conhecimento de uma variável de ambiente para isso.

    
por 15.02.2018 / 12:55