Como truncar o arquivo usado para redirecionar o stdout

4

Estou tentando truncar um arquivo, usado para stdout redirecionado. Por exemplo:

ping localhost>/tmp/test.log

Se eu chamar rm /tmp/test.log , o redirecionamento será interrompido, mas o comando funcionará.

Se eu chamo o truncate -s0 /tmp/test.log ou >/tmp/test.log ou echo .. e etc. o redirecionamento funciona, mas o arquivo contém zeros à esquerda porque a posição do fluxo não mudou.

Como posso truncar o arquivo?

    
por John 25.04.2017 / 14:26

2 respostas

2

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.

    
por 25.04.2017 / 16:01
0

Planeje com antecedência:

  1. Truncar ou excluir o arquivo, se existir.
  2. Use >> em vez de > .

Dessa forma, você aproveitará o fato de que >> é essencialmente "sempre busca o final do arquivo", enquanto > mantém um ponteiro para o último local escrito.

Em seguida, você poderá truncar o arquivo e >> obedecerá. Veja esta minha resposta , ela investiga o comportamento exato que você precisa.

    
por 14.09.2018 / 08:38