🧹 Il mio disordinato sistema Linux
Con il passare degli anni, il mio sistema Linux inizia a diventare un po’… disordinato.
La mia directory ~/Downloads è una vera e propria discarica digitale. È un accumulo di ISO, script di test e quelle enormi immagini di macchine virtuali da svariati gigabyte che devo testare una volta e poi dimentico. Aggiungete a questo ~/Pictures/Screenshots, che trabocca di migliaia di catture rapide che non guarderò mai più.
Lo spazio su disco oggi costa poco, ma mi piace avere le cose in ordine e pulite. Potrei procedere a una pulizia manuale… Ma chi si ricorda di farlo?
Così ho configurato una rapida soluzione automatizzata; si è rivelata un’ottima occasione per studiare i timer di systemd!
La mia regola è semplice: se non ho effettuato l’accesso (o “aperto”) un file in uno di questi due percorsi per 30 giorni, lo considero spazzatura e voglio che venga rimosso.

(vi prego di perdonare l’immancabile e stucchevole immagine generata dall’IA)
🗂️ Il tuo personale spazzino systemd
Dobbiamo solo creare due semplici file di testo:
- Un file
.service: dice allo spazzino cosa fare. - Un file
.timer: dice allo spazzino quando farlo.
Prima di tutto, ci serve un posto dove posizionare i nostri nuovi file. Systemd cerca i file dell’utente in ~/.config/systemd/user/.
mkdir -p ~/.config/systemd/user/
Il primo file definirà il comando di pulizia.
Create un nuovo file chiamato ~/.config/systemd/user/cleanup-files.service:
[Unit]
Description=Clean up old files in Download and Screenshots
[Service]
Type=oneshot
ExecStart=/usr/bin/find %h/Downloads %h/Pictures/Screenshots -type f -atime +29 -delete
Nice=19
IOSchedulingClass=idle
Analizziamolo nel dettaglio:
Type=oneshot: significa semplicemente che esegue un singolo comando e si ferma.ExecStart=...: questo è il comando magico!%h/Downloads %h/Pictures/Screenshots:%hè la scorciatoia speciale di systemd per la vostra home directory. Diciamo afinddi cercare in entrambi i percorsi.-type f: trova solo file, non directory vuote.-atime +29: trova i file il cui ultimo accesso risale a più di 29 giorni fa (ovvero, 30 o più giorni).-delete: sì, li elimina.Nice=19eIOSchedulingClass=idle: queste sono buone maniere per il sistema. Gli dicono di eseguire questo comando con la priorità più bassa possibile, in modo da non rallentare mai il vostro lavoro reale.
nota: se il filesystem della vostra /home/ è montato con le opzioni noatime o relatime per migliorare le prestazioni, potreste ottenere risultati più prevedibili utilizzando invece mtime (tempo di modifica). In questo modo verranno eliminati i file che non subiscono modifiche da 30 giorni.
⚠️ Avviso di sicurezza! Prima di lasciarlo girare, fate una prova! Copiate il comando nel terminale, ma rimuovete la parte -delete.
# QUESTO ELENCHERÀ SOLO I FILE. NON ELIMINERÀ NULLA.
find ~/Downloads ~/Pictures/Screenshots -type f -atime +29
Ora creiamo la pianificazione.
Create un nuovo file chiamato ~/.config/systemd/user/cleanup-files.timer:
[Unit]
Description=Run cleanup-files.service daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
Questo è semplice:
OnCalendar=daily: esegue l’operazione una volta al giorno (solitamente intorno a mezzanotte).Persistent=true: questa è la parte migliore. Se il computer era spento a mezzanotte, eseguirà il comando non appena avviate il sistema ed effettuate l’accesso.
⏲️ Avviate il vostro timer!
Avete creato lo spazzino; è ora di attivarlo. Dite a systemd di leggere i vostri nuovi file:
systemctl --user daemon-reload
Abilitate e avviate il timer:
systemctl --user enable --now cleanup-files.timer
Potete verificare che il timer sia attivo e in attesa eseguendo:
systemctl --user status cleanup-files.timer
systemctl --user list-timers
🗑️ Passaggio bonus: pulizia dei pacchetti
(per gli utenti openSUSE 🦎)
La pulizia dei file è ottima, ma come utente Tumbleweed, il mio sistema riceve aggiornamenti costanti, che possono lasciare pacchetti “orfani” o non necessari — dipendenze che erano state installate per qualcosa ma che non sono più richieste. Per questo ho anche un comodo alias
alias zclean='zypper packages --orphaned && zypper packages --unneeded'
che mi mostra i pacchetti potenzialmente candidati, che posso poi rimuovere con le loro dipendenze:
zypper rm -u <PACKAGENAME>
Godetevi il vostro sistema più pulito e buon hacking!