Come troncare (svuotare) i file in Linux
In alcune situazioni, potresti voler troncare (svuotare) un file esistente ad una lunghezza zero. In parole semplici, troncare un file significa rimuovere il contenuto del file senza cancellare il file.
Troncare un file è molto più veloce e facile che cancellare il file, ricrearlo, e impostare i permessi e la proprietà corretti. Inoltre, se il file è aperto da un processo, la rimozione del file può causare il malfunzionamento del programma che lo utilizza.
Questo tutorial spiega come troncare i file a dimensione zero nei sistemi Linux utilizzando il reindirizzamento di shell e il comando truncate
.
Ridirezione di shell #
Il metodo più semplice e utilizzato per troncare i file è quello di utilizzare l’operatore di reindirizzamento di shell >
.
Il formato generale per troncare i file usando il reindirizzamento è:
: > filename
Sottolineiamo il comando:
- I due punti
:
significanotrue
e non produce output. - L’operatore di reindirizzamento
>
reindirizza l’output del comando precedente al file dato. -
filename
, il file che volete troncare.
Se il file esiste, sarà troncato a zero. Altrimenti, il file verrà creato.
Invece di :
puoi anche usare un altro comando che non produce output.
Ecco un esempio dell’uso del comando cat
per emettere il contenuto del dispositivo /dev/null
, che restituisce solo un carattere di fine file:
cat /dev/null > filename
Un altro comando che può essere usato è echo
. L’opzione -n
dice a echo
di non aggiungere una newline:
echo -n > filename
Nella maggior parte delle shell moderne come Bash o Zsh puoi omettere il comando prima del simbolo di reindirizzamento e usare:
> filename
Per poter troncare un file, devi avere i permessi di scrittura sul file. Di solito, useresti sudo
per questo, ma i privilegi elevati di root non si applicano al reindirizzamento. Ecco un esempio:
sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied
Ci sono diverse soluzioni che permettono il reindirizzamento con sudo
. La prima opzione può eseguire una nuova shell con sudo ed eseguire un comando all’interno di quella shell usando il flag -c
:
sudo sh -c '> filename'
Un’altra opzione è quella di convogliare l’output al comando tee
, elevare i privilegi di tee
con sudo
, e scrivere l’output vuoto in un dato file:
: | sudo tee filename
truncate Command #
truncate
è un’utilità a riga di comando che ti permette di ridurre o estendere la dimensione di un file a una data dimensione.
La sintassi generale per troncare i file a dimensione zero con il comando truncate
, è la seguente:
truncate -s 0 filename
L’opzione -s 0
imposta la dimensione del file a zero.
Per esempio, per svuotare il log di accesso di Nginx dovresti usare:
sudo truncate -s 0 /var/log/nginx/access.log
Empty All Log Files #
Con il tempo, il tuo disco potrebbe essere ingombro di un sacco di file di log di grandi dimensioni che occupano grandi quantità di spazio su disco.
Il seguente comando svuoterà i file che terminano con “.log” sotto la directory /var/log
:
sudo truncate -s 0 /var/log/**/*.log
Un’opzione migliore sarebbe quella di ruotare, comprimere e rimuovere i file di log con lo strumento logrotate
.
Conclusione #
Per troncare un file in Linux usa l’operatore di redirezione >
seguito dal nome del file.