Come troncare (svuotare) i file in Linux

Giu 15, 2021
admin

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 : significano true 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 sudoper 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.