Manutenzione del sistema via SSH: rimuovere i file troppo grandi

Quando si utilizza un sistema operativo in remoto mediante SSH (ad esempio su VPS) è necessario effettuare o programmare preventivamente una manutenzione di sistema atta ad eliminare, ad esempio, i file di log troppo grossi, gli eventuali backup superflui e così via. Di fatto questo genere di operazioni impediscono la saturazione dello spazio disponibile che potrebbe impedire al sito di funzionare, provocando errori ad es. su MySql come:
partition with /var/lib/mysql is too full
che possono rendere impossibili da SSH operazioni di stop e riavvio del processo.
Si tratta di problematiche legate spesso allo gestione dello spazio su disco disponibile, e questo avviene se ad esempio è stata impostata male la generazione dei log (senza auto-cancellazione degli stessi con il comando logrotate): come fare, quindi, ad ottimizzare tale risorsa?
Trovare file che siano superiori ad una certa dimensione
Anzitutto per trovare i file “grandi” dobbiamo specificare una dimensione tramite il comando find, e farci restituire dal comando, dopo aver fatto login via SSH, ad esempio superiori ad una soglia prestabilita:
find / -size +10M -ls
Si specifica in proposito che 10M significa 10 Mebibyte e non 10 MB; si ricorda di eseguire le operazioni di cancellazione con la massima attenzione, e che non tutti i file possono essere, in generale, eliminati senza causare eventuali problemi, per cui è opportuno copiarseli ad esempio in locale con il comando scp. Ad esempio per copiare file.txt dall’host remoto (il sito) al vostro PC scrivete da una finestra del terminale:
scp username@xxx.xxx.xxx.xxx:file.txt /path/directory/locale
se avete Mac o Linux installati oppure installate il client grafico open source WinSCP se avete Windows: si noti come username sia la vostra username di ssh, xxx.xxx.xxx.xxx sia l’IP che il provider del VPS vi ha fornito, file.txt sia il nome del file e l’ultimo parametro del comando sia invece la cartella destinazione della copia.
Analogamente per ricopiare il file in remoto (ad esempio se cancellato per errore):
scp file.txt username@xxx.xxx.xxx.xxx:/path/directory/remota
Quando premerete invio, in entrambi i casi, sarà richiesta la password di accesso dell’utente username.
Trovare file che siano inclusi tra una dimensione minima e massima
Se analogamente volessimo usare il comando per specificare sia dimensione minima (10) che massima (12) scriveremo, invece:
find / -size +10M -size -12M -ls
Se siamo dentro ad una cartella, digitando:
ls -alt
vedremo in testa alla lista di file quelli che occupano maggiore spazio, ad esempio:
drwxrwxr-x 5 www-data ftpman 4096 Nov 15 09:40 . -rw-r--r-- 1 www-data www-data 1850748928 Nov 15 08:58 error_log.log -rw-r--r-- 1 www-data www-data 126084 Nov 12 23:16 sitemap2.xml -rw-r--r-- 1 www-data www-data 21854 Nov 12 23:16 sitemap2.xml.gz drwxr-xr-x 17 www-data ftpman 4096 Nov 3 16:01 el-content drwxr-xr-x 3 root root 4096 Nov 3 14:25 .. -rw-rw-rw- 1 www-data ftpman 745 Nov 3 12:42 .htaccess
Si ricorda inoltre che è possibile utilizzare una delle utility disco listate digitando sulla shell questo comando:
apt-cache search 'disk usage'
Rimozione dei file
Se vogliamo rimuovere un file ghi.log nella cartella /abc/def/, scriveremo così:
rm /abc/def/ghi.log
Se invece abbiamo ad esempio dei file di log numerati progressivamente (file1.log, …, file10.log) che vogliamo cancellare:
rm file{1..10}.log
che serve ad eliminare tutti i file con numerazione da 1 a 10. In generale rm<7em> non fornisce output esplicito di ciò che fa, a meno che non si usi il parametro -v (verbose).