
Ok, estou tentando esvaziar um arquivo. É um arquivo de log de texto, que está sendo gravado continuamente. Meu ls -lh diz que tem 3 GB
eu corro
> file.log
Meu ls -lh diz que ainda tem 3 GB
No entanto, o tamanho da pasta que contém este arquivo é 3 GB menor. Estranho, contar as linhas diz que não está vazio e não consigo abri-lo com o vim (muito grande).
Não tenho acesso de administrador, mas sou o proprietário do arquivo.
Tentei criar um novo arquivo apenas com a primeira linha para ver o que está acontecendo
head -1 file.log > first_line.txt
E o first_line.txt tem 3 GB. Este é realmente um comportamento estranho.
Pergunta 1: Por que meu primeiro comando não esvazia o arquivo?
Pergunta 2: Como posso esvaziar o arquivo sem excluí-lo?
Obrigado,
EDITAR após comentários: o arquivo está sendo aberto e gravado por outros processos, continuamente.
Infelizmente, não posso interferir nesses processos, por isso não posso encerrá-los ou reiniciá-los temporariamente
Responder1
seu arquivo está sendo mantido por um processo, você não pode excluí-lo.
use lsof file.log
para saber qual processo está gravando nele.
então
mv file.log old.file.log
reinicie o processo. (isso depende do processo).
a seguir, você poderá excluir old.file.log
.
Se o ID do seu arquivo estiver listado, /etc/logrotate.d/*
você pode emitir um comando logrotate.
Responder2
Para (quase) esvaziar o arquivo, use o comando
echo "" > file.log
Ou, se o seu sistema operacional tiver,
truncate file.log --size 0
Irá truncá-lo para 0 bytes.
Se o arquivo não tiver feeds de linha, é possível que o arquivo inteiro tenha 1 linha, explicando um arquivo de 3 GB.
Você pode pegar uma amostra do arquivo usando o comando como
dd if=file.log of=firstpart.txt count=1 bs=200
O que ocupará os primeiros 200 bytes do arquivo. (Se precisar de mais, aumente o parâmetro "bs" até 4096, se precisar de mais do que isso, use o parâmetro count, ou seja, para obter 8192 blocos, count=2 bs=4096)
O conselho do @Archemar é bom, mas não tenho certeza se responde às suas perguntas.