Você precisa entender os sistemas de arquivos Unix antes de poder responder a essa pergunta.
A única coisa que o rm
faz é apagar os arquivos nome , efetivamente um ponteiro da sua estrutura de diretórios para os blocos do disco.
Quando você corre
ping localhost > /tmp/test.log
rm /tmp/test.log
O redirecionamento não pára. O comando continua sendo executado e os dados continuam se acumulando na área do disco. Você simplesmente não tem acesso para acessar esses dados porque apagou o nome dele.
Você é livre para criar outro arquivo completamente não relacionado chamado /tmp/test.log
.
Como você observou, ao tentar truncar o arquivo, você se livra dos dados que costumavam estar lá, mas o descritor de arquivos interno sabe a posição no arquivo para o qual aponta e grava após o final do arquivo. o arquivo. Daí os zeros à esquerda.
Se você quiser "redefinir" o redirecionamento, será necessário eliminar o programa ping
, apagar ou truncar o arquivo /tmp/test.log
e, em seguida, reiniciar o programa ping
.
Você também pode usar um programa como rotatelogs
ping localhost | rotatelogs ping.out.%Y%m%d.%H%M 600
para girar o arquivo de registro com base no tempo decorrido ou no tamanho do arquivo.