Vi è mai capitato di ritrovarvi in una directory linux con un numero di file talmente grande da non riuscire a cancellarli? Non è una cosa che capita tanto di frequente, di solito succede senza colpa dell’operatore o dell’utente. Nel nostro caso capita relativamente spesso in un server che ospita un sito con moltissimo traffico, la directory in questione è quella che contiene i file di sessione php ovvero /var/lib/php/sessions. Ogni tanto il prode apache perde i colpi e per qualche motivo non riesce a fare pulizia dei file delle sessioni, in questo caso succede che dopo un po’ il sistema comincia ad andare in crisi e l’unica via è una pulizia manuale.
Attenzione: stiamo parlando di centinaia di migliaia, milioni di file, non è così facile mettere in crisi linux. Bene in questo caso il comando rm non ce la fa:
/bin/rm: Argument list too long.
In questi casi si può ricorrere a un trucchetto ovvero
find . -type f -exec rm -v {} \;
ma anche questa soluzione nel nostro caso non era ottimale: avendo a che fare con centinaia di migliaia di file dopo una notte intere stava ancora finendo di triturare. Serviva qualcosa di più veloce e così abbiamo trovato un’opzione forse non molto conosciuta e che può essere utile anche ad altri: il comando find ha inclusa l’opzione -delete ed è mostruosamente più veloce. Questo il comando che abbiamo utilizzato:
find . -type f -print -delete
L’opzione -print è ovviamente facoltativa, se volete guadagnare ancora qualcosa in termini di velocità e non vi interessa sapere cosa sta succedendo potete farne a meno. Il risultato è che in pochi minuti in questo modo siamo riusciti a ripulire la directory.
Lascia un commento