Como truncar (vazio) arquivos no Linux
Em algumas situações, você pode querer truncar (vazio) um arquivo existente para um comprimento zero. Em palavras simples, truncando um arquivo significa remover o conteúdo do arquivo sem apagar o arquivo.
Truncando um arquivo é muito mais rápido e fácil do que apagar o arquivo, recriar e definir as permissões e propriedade corretas. Além disso, se o arquivo for aberto por um processo, remover o arquivo pode causar o mau funcionamento do programa que o usa.
Este tutorial explica como truncar arquivos para tamanho zero em sistemas Linux usando o redirecionamento de shell e o comando truncate
>
Reorientação de Shell #
O método mais fácil e mais usado para truncar arquivos é usar o operador de redirecionamento de shell >
.
O formato geral para truncatar ficheiros usando redireccionamento é:
: > filename
Deixamos quebrar o comando:
- Os
:
dois pontos significamtrue
e não produzem saída. - O operador de redirecionamento
>
redireciona o output do comando anterior para o arquivo dado. -
filename
, o arquivo que você quer truncar.
Se o arquivo existir, ele será truncado a zero. Caso contrário, o arquivo será criado.
Em vez de :
também pode usar outro comando que não produz nenhuma saída.
Aqui está um exemplo de uso do comando cat
para produzir o conteúdo do dispositivo /dev/null
, que retorna apenas um caractere de fim de arquivo:
cat /dev/null > filename
Outro comando que pode ser usado é echo
. A opção -n
diz echo
para não anexar uma nova linha:
echo -n > filename
Na maioria dos shells modernos como Bash ou Zsh você pode omitir o comando antes do símbolo de redirecionamento e usar:
> filename
Para poder truncar um arquivo, você precisa ter permissões de escrita no arquivo. Normalmente, você usaria sudo
para isso, mas os privilégios de root elevados não se aplicam ao redirecionamento. Aqui está um exemplo:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Existem várias soluções que permitem o redirecionamento com sudo
. A primeira opção pode executar uma nova shell com o sudo e executar um comando dentro dessa shell usando o comando -c
flag:
sudo sh -c '> filename'
Outra opção é pipear a saída para o comando tee
, elevar os privilégios tee
com sudo
, e escrever a saída vazia para um determinado arquivo:
: | sudo tee filename
comando truncado #
truncate
é um utilitário de linha de comando que lhe permite encolher ou estender o tamanho de um ficheiro para um determinado tamanho.
A sintaxe geral para truncatar ficheiros até ao tamanho zero com o comando truncate
, é a seguinte:
truncate -s 0 filename
A opção -s 0
coloca o tamanho do ficheiro a zero.
Por exemplo, para esvaziar o log de acesso Nginx que você usaria:
Empty All Log Files #
Acima do tempo, a sua unidade de disco pode ficar desorganizada com uma grande quantidade de arquivos de log de grandes dimensões, ocupando uma grande quantidade de espaço em disco.
O seguinte comando irá esvaziar arquivos terminando com “.log” sob o directório /var/log
:
sudo truncate -s 0 /var/log/**/*.log
A melhor opção seria rodar, comprimir e remover os ficheiros de logs com o ficheiro logrotate
tool.
Conclusion #
Para truncar um ficheiro no Linux use o operador de redireccionamento >
seguido do nome do ficheiro.