Apagar tudo de / var / log?

25

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

Alguém tem uma boa linha de comando rm ? (Minhas habilidades administrativas me deixam nervosa.)

Nota: estou usando o Debian. Não tenho certeza de qual versão.

    
por Aaron Copley 28.09.2010 / 05:17

9 respostas

21

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

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

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

    
por 28.09.2010 / 08:49
16

Se você excluir tudo em / var / log, provavelmente terminará com toneladas de mensagens de erro em muito pouco tempo, já que existem pastas lá que devem existir (por exemplo, exim4, apache2, apt, cups, mysql, samba e mais). Além disso, 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. Eu tenho servidores Debian em execução que não tiveram um único arquivo de log excluído em anos.

    
por 28.09.2010 / 13:05
13

Excluir todos os arquivos:

find /var/log -type f -delete

Exclua todos os arquivos .gz e rotacionados

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

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

    
por 28.09.2010 / 05:49
10

Estou clonando máquinas virtuais de um mestre. Faz todo o sentido limpar o registro no mestre para que quando você inicializar os clones não obtenha o registro 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.

    
por 09.11.2012 / 10:43
5

Limpar todos os registros 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 arquivo de log com endereços IP, você pode querer excluí-los:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done
    
por 19.08.2015 / 17:04
2

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

find -ctime +30

Como bindbn explain, primeiro tente os arquivos find fetch e depois use a opção delete: D

    
por 28.09.2010 / 05:51
1

Eu implementei um simples limpador aqui:

link

Simplesmente:

  • Exclui nomes de arquivos com os seguintes padrões de nome de arquivo com rotação de log em /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (insensível a maiúsculas e minúsculas)
  • Truncar / Esvaziar arquivos com nomes de arquivos com os seguintes padrões de nome de arquivo de log em /var/log
    • ^.*/.+\.log$ (insensível a maiúsculas e minúsculas)
por 05.10.2017 / 22:30
1

/var/log geralmente tem 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 sem privilégios.

Os aplicativos que esperam registrar em um ponto dentro de /var/log geralmente inserem um arquivo em algum lugar na hierarquia /var/log durante o tempo de instalação (o que geralmente ocorre com privilégios elevados) e chmod e possivelmente chown nesse momento para permissões apropriadas para os usuários sem privilégios que usarão o aplicativo.

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

Então, o que acontece se o arquivo de log e o caminho para o arquivo de log não existirem? Isso é totalmente até o aplicativo. Alguns aplicativos silenciosamente ignoram o log. Outros criarão muitos avisos. E outros simplesmente irão salvar. Não há regra rígida; depende da vigilância do desenvolvedor do aplicativo e da importância do desenvolvedor considerar sua capacidade de registro. Na melhor das hipóteses, o aplicativo tentará gravar ou possivelmente criar e, em seguida, gravar em um arquivo de log em um destino dentro de /var/log , e não conseguirá fazê-lo porque está sendo executado por um usuário que não tem privilégios para escrever nessa parte do sistema de arquivos.

Portanto, a resposta curta é não, não exclua tudo em /var/log - ela divide os usuários do contrato com privilégios suficientes para fazer essas coisas com os aplicativos que são executados em seu sistema e causará algum ruído, alguns falha silenciosa para registrar e alguma quebra total.

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

O usuário comum não precisaria se preocupar muito com a rotação de logs. Os desenvolvedores provavelmente desejariam garantir que os logs que eles usam tivessem regras de rotação estabelecidas. Na verdade, é provável que as boas maneiras da parte dos desenvolvedores configurem a rotação de logs no momento da instalação para qualquer registro específico de software que o software esteja criando e gravando.

    
por 16.06.2017 / 16:20
-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ê

    
por 24.01.2017 / 05:20