Introduzione
In alcune situazioni, potresti voler troncare (svuotare) un file esistente a lunghezza zero. In parole semplici, troncare un file significa rimuovere il contenuto del file senza eliminare il file.
Troncare un file è molto più veloce e più facile che eliminarlo o ricrearlo e impostare le autorizzazioni e proprietà corrette. Inoltre, se il file viene 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 usando il reindirizzamento della shell e il comando truncate
.
Shell Redirection
Il metodo più semplice e più utilizzato per troncare i file è utilizzare l'operatore >
di reindirizzamento della shell.
Il formato generale per troncare i file utilizzando il reindirizzamento è:
: > filename
Analizziamo il comando:
- I due punti
:
significanotrue
e non producono output. - L'operatore di reindirizzamento
>
reindirizza l'output del comando precedente sul file specificato. filename
, il file che si desidera troncare.
Se il file esiste, verrà troncato a zero. Altrimenti, verrà creato il file.
Invece di :
è possibile anche usare un altro comando che non produce output.
Ecco un esempio dell'uso del comando cat
per generare il contenuto del dispositivo /dev/null
, che restituisce solo un carattere di fine file:
cat /dev/null > filename
Un altro comando che può essere utilizzato è echo
. L'opzione -n
dice di non aggiungere una nuova riga:
echo -n > filename
Sulla maggior parte delle shell moderne come Bash o Zsh è possibile omettere il comando prima del simbolo di reindirizzamento e utilizzare:
> filename
Per poter troncare un file, è necessario disporre delle autorizzazioni di scrittura sul file. Di solito, useresti il comando sudo
, ma i privilegi di root elevati non si applicano al reindirizzamento. Ecco un esempio:
sudo : > /var/log/syslog
Dovresti ricevere un messaggio di output simile al seguente:
bash: /var/log/syslog: Permission denied
Esistono diverse soluzioni che consentono 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 è di inoltrare l'output al comando tee
, elevare i privilegi tee
con sudo
e scrivere l'output vuoto in un determinato file:
: | sudo tee filename
Comando truncate
truncate
è un'utilità della riga di comando che consente di ridurre o estendere la dimensione di un file a una determinata 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 su zero.
Ad esempio, per svuotare il registro di accesso (file log) di Nginx dovresti usare:
sudo truncate -s 0 /var/log/nginx/access.log
Svuotare tutti i file di registro (log)
Nel tempo, l'unità disco potrebbe essere ingombra di molti file di registro di grandi dimensioni che occupano grandi quantità di spazio su disco.
Il seguente comando svuota i file che terminano con ".log" nella directory /var/log
:
sudo truncate -s 0 /var/log/**/*.log
Un'opzione migliore sarebbe quella di ruotare, comprimere e rimuovere i file di registro con lo strumento logrotate
.
Conclusione
Per troncare un file in Linux, utilizzare l'operatore di reindirizzamento >
seguito dal nome del file.