Excluir todos os / var / log?

26

Posso excluir tudo /var/log? Ou devo excluir apenas arquivos (recursivamente) /var/logmas deixar pastas?

Alguém tem uma boa rmlinha de comando? (Minhas habilidades de administrador me deixam nervoso.)

Nota: Estou usando o Debian. Não sei qual versão.

Aaron Copley
fonte
3
Excluir arquivos de log é uma má idéia (você também precisará encontrar todos os processos em execução que possuam seu próprio arquivo de log e "matá -HUP", uma reinicialização suave que resultará na recriação dos arquivos de log necessários. Eu recomendaria fortemente que não excluísse arquivos de log, confie em utilitários como logrotate para gerenciar automaticamente o conteúdo de / var / log para você (ele faz coisas como HUP nos processos). Se eu gostaria de resolver isso de um ângulo diferente. Que problema você está tentando resolver que o levou a considerar isso?
Twirrim 29/09/10

Respostas:

22

Em vez de excluir os arquivos, você deve girá-los, por exemplo, usando logrotate.

Você nunca sabe quando realmente precisará dos logs de algum tempo atrás; portanto, é melhor arquivá-los (até uma idade razoável, por exemplo, três meses).

logrotate pode compactar seus arquivos de log antigos para que eles não ocupem muito espaço em disco.

joschi
fonte
3
logrotate também pode excluir os arquivos mais antigos.
Kevin M
8
Bem, IMHO excluir todos os logs pode fazer sentido em alguns casos. Por exemplo, quero criar uma imagem do Virtial Machine para ser usada em novas implantações. Escusado será dizer que gostaria que fosse um sistema realmente limpo, sem registros, históricos, caches, etc. salvos.
Ivan
2
Desculpe, mas analisar arquivos de log com três meses de idade é arqueologia. Se você coletar logs para identificar problemas, avalie-os rapidamente.
Countermode
4
@countermode Você nunca está com disposição para nostalgia? Como olhar para os arquivos de log com 3 meses de idade, pensando nos bons e velhos tempos?
Broco
OK, eu vejo o comando. Como usá-lo? O man logrotate diz que use no cron. Suponho que com a opção -f?
SDsolar 13/08/19
17

Se você excluir tudo em / var / log, provavelmente terminará com toneladas de mensagens de erro em muito pouco tempo, pois existem pastas que devem existir (por exemplo, exim4, apache2, apt, cups, mysql, samba e mais). Mais: existem alguns serviços ou aplicativos que não criarão seus arquivos de log, se eles não existirem. Eles esperam que pelo menos um arquivo vazio esteja presente. Portanto, a resposta direta à sua pergunta é "Não faça isso !!!" .

Como joschi apontou, não há razão para fazer isso. Tenho servidores debian em execução que não têm um único arquivo de log excluído há anos.

wolfgangsz
fonte
Eu não percebi isso. bom saber. +1 + mudou minha aceitação.
1
Acabei de fazer isso. Desejo! Eu tinha lido esta resposta anteriormente
VarunAgw 30/05
Existem razões válidas para remover arquivos de log, IMHO. Por exemplo, você está exportando uma máquina virtual para uso por outras pessoas, mas não deseja que a imagem da máquina virtual contenha detalhes de tudo o que aconteceu antes da exportação.
a3nm
15

Exclua todos os arquivos:

find /var/log -type f -delete

Exclua todos os arquivos .gz e girados

find /var/log -type f -regex ".*\.gz$"
find /var/log -type f -regex ".*\.[0-9]$"

Tente executar o comando sem "-delete", para testá-lo.

bindbn
fonte
Achei isso útil para limpar os arquivos de log de uma caixa do Vagrant antes de empacotar.
Rudolf Vavruch
10

Estou clonando máquinas virtuais de um mestre. Faz todo o sentido limpar o log no mestre para que, quando você inicializar os clones, não obtenha o log do mestre. Eu fiz no tcsh:

cd /var/log
foreach ii ( `find . -type f` )
foreach? cp /dev/null $ii
foreach? end

que limpa os logs, mas mantém os arquivos.

Dror
fonte
Isso deve ser restrito a um caso de uso como você descreve.
Sven
4
No bash: encontre / var / log / -type f -exec cp / dev / null {} \;
gerard
7

Limpando todos os logs em um sistema Linux sem excluir os arquivos:

for CLEAN in $(find /var/log/ -type f)
do
    cp /dev/null  $CLEAN
done

O Samba ( /var/www/samba) cria nomes de arquivos de log com endereços IP, você pode excluí-los:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done
Pedro Lobito
fonte
2
Script útil.
Anmol Singh Jaggi
Você poderia trocar cp /dev/null $CLEANpor > $CLEAN.
ThoriumBR
2

Você pode usar a opção ctime para encontrar arquivos antigos ... por exemplo:

find -ctime +30

Como o bindbn explica, primeiro tente os arquivos de busca de busca e depois use a opção delete: D

Felipe Cardoso Martins
fonte
2

/var/loggeralmente possui permissões de drwxrwxr-x, portanto, não é gravável pelo usuário, a menos que o usuário seja root ou pertença a um grupo privilegiado. Isso significa que novos arquivos de log não podem ser criados por usuários não privilegiados.

Os aplicativos que esperam fazer logon em um ponto no interior /var/logcostumam tocar um arquivo em algum lugar da /var/loghierarquia durante o tempo de instalação (o que geralmente ocorre com privilégios elevados) chmode chown, nesse momento , terão permissão para obter as permissões apropriadas para os usuários não privilegiados que serão usando o aplicativo

Os logs do Apache, por exemplo, geralmente são gravados por nobody, que é um usuário com o mínimo de privilégios possível para que o Apache faça seu trabalho sem colocar o sistema em risco indevido. Mas mesmo um aplicativo mais comum geralmente espera poder gravar em um arquivo de log /var/log.

Então, o que acontece se o arquivo de log e o caminho para o arquivo de log não existirem? Isso depende inteiramente da aplicação. Alguns aplicativos ignoram o registro silenciosamente. Outros criarão muitos avisos. E outros simplesmente se salvam. Não existe regra rígida; depende da vigilância do desenvolvedor de aplicativos, bem como da importância que o desenvolvedor considera sua capacidade de registrar. Na melhor das hipóteses, o aplicativo tentará gravar ou, possivelmente, criar e, em seguida, gravar em um arquivo de log em um destino interno /var/log, e não poderá fazê-lo porque está sendo executado por um usuário que não tem privilégios para gravar. essa parte do sistema de arquivos.

Portanto, a resposta curta é não, não exclua tudo /var/log- ele quebra os usuários contratados com privilégios suficientes para fazer tais coisas com os aplicativos executados em seu sistema e causará algum ruído, alguma falha silenciosa no log e alguma quebra total.

A ação apropriada a ser tomada é configurar logrotatecom os arquivos de configuração apropriados. Normalmente, a rotação será associada a um trabalho cron. A rotação pode ser baseada em intervalo, tamanho ou ambos. É ainda possível configurar regras que evitem a rotação com base em intervalo se o arquivo de log ainda estiver vazio quando o intervalo expirar. A rotação pode incluir o envio de arquivos de log, compactação, exclusão, destruição e assim por diante.

O usuário médio não precisa se preocupar muito com a rotação do log. Os desenvolvedores provavelmente desejam garantir que os logs que eles usam tenham regras de rotação estabelecidas. De fato, é provável que seja uma boa maneira dos desenvolvedores configurar a rotação de logs no momento da instalação para quaisquer logs específicos de software que o software criará e gravará.

DavidO
fonte
1

Eu implementei um limpador simples aqui:

https://github.com/Lin-Buo-Ren/Coward-Unix-Log-Cleaner

Simplesmente:

  • Exclui nomes de arquivos com os seguintes padrões de nome de arquivo rotacionados em /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (não diferencia maiúsculas de minúsculas)
  • Truncar / Esvaziar arquivos com nomes de arquivos com os seguintes padrões de nome de arquivo de log em /var/log
    • ^.*/.+\.log$ (não diferencia maiúsculas de minúsculas)
Buo-Ren Lin
fonte
-2
function goodbyelogs {
find /var/log -type f
}

for i in return $(goodbyelogs);
do sudo cat /dev/null > $i;
echo "Log $i has been cleared";
done

crie um script executável e tente executar como root se o sudo não estiver funcionando para você

Ab edmo ri
fonte