Olá pessoal.
Quem administra servidores
GNU/Linux sabe que, certas vezes, é necessário limpar arquivos de logs manualmente, para liberar espaço em disco na partição raiz.
Aparentemente, a solução mais simples é excluir os arquivos e aguardar que o(s) daemon(s) ao(s) qual(is) os arquivos pertencem recriem estes arquivos. Porém, muitas vezes estes arquivos são recriados com o dono e/ou grupo e/ou permissões diferentes daquelas que o arquivo tinha antes de ser apagado, e isso pode trazer sérios transtornos ao sistema rodando no servidor.
Esse dias foi preciso limpar uns arquivos de log de acesso do SARG para liberar espaço na partição raiz de um servidor.
Depois de tentar algumas combinações de comandos com o
find e o
xargs e depois de muito buscar na Web, encontrei uma solução utilizando os mesmos comandos (find e xargs) em um fórum.
Logado no servidor como usuário root, faça:
# find . -size +1M -iname \*.log | xargs -i bash -c "echo > {}"
Neste caso, os arquivos de log que se desejava limpar, foram filtrados pelo tamanho do arquivo (arquivos com tamanho acima de 1 MB), mas é possível aplicar diversos filtros.
Para ver as opções completas, basta digitar no terminal:
# man find
Referência
Observação: esta dica foi utilizada num servidor com a distribuição
CentOS.
Olá eldermarco. Obrigado pela contribuição. O logrotate limpa os logs automaticamente. Porém, essa dica é pra quando se necessita limpar arquivos de texto (e não apenas logs) de forma manual, por exemplo, limpar apenas logs muito grandes para liberar espaço, mas manter alguns outros logs que se necessite. Essa dica dá opções de filtrar determinados tipos de arquivos, com todas as opções e flexibilidade que o comando find oferece.