Prosegue lo sviluppo del mio script per la pulizia del sistema, cominciato qui. Dalle iniziali 83 righe di codice, già ora siamo a 227. Il sorgente aggiornato è disponibile qui:
http://docs.mirkopagliai.it/bash/system-cleaner/system-cleaner_0.2-alpha

Ribadendo che si tratta ancora di uno script altamente sperimentale (tant’è che crea un piccolo problema a Firefox/Iceweasel), comincio col riportarne le funzionalità al momento dell’ultimo aggiornamento:

  1. pulire la cache dei pacchetti (apt-get clean e apt-get autoclean) e rimuovere i pacchetti inutilizzati (apt-get autoremove);
  2. rimuovere pacchetti obsoleti, pacchetti orfani e residui di configurazione (tramite dkpg con le opportune opzioni e deborphan, che deve essere installato sulla macchina);
  3. rimuovere i file di localizzazione non utilizzati (tramite localepurge, anch’esso da installare sulla macchina);
  4. rimuovere i file temporanei (per intenderci, il contenuto di /tmp), svuotare il cestino, rimuovere le thumbnail (le anteprime delle immagini, che vengono salvate in cache) e diversi “file spazzatura” (ovvero file di backup, quelli che hanno la tilde ~ all’inizio del nome, file Thumbs.db e file Desktop.ini);
  5. svuotare la cache dei browser (attualmente Firefox/Iceweasel, Google Chrome, Chromium, Opera, Galeon);
  6. rimuovere lo storico delle conversazioni dei client di messaggistica e, là dove presente, la loro cache (attualmente Empathy, Skype, Emesene, Amsn, Pidgin);
  7. rimuovere cookie e cache di Adobe Flash.

Ecco uno screenshot del risultato nel terminale:

Script pulizia del sistema

Poi le modifiche, che vanno ben oltre l’estensione delle funzionalità già descritte:

  1. essendo sudo uno strumento indispensabile per l’esecuzione dello script, all’inizio della sua esecuzione viene controllata la presenza dello stesso e in caso di esito negativo viene terminato lo script;
  2. ho razionalizzato – genericamente parlando – l’uso di sudo, prevedendolo solo là dove era strettamente necessario;
  3. ho colorato l’output a seconda dell’esito delle varie operazioni (verde in caso di successo, giallo in caso di skip di un determinato passaggio, rosso in caso di errore);
  4. ho integrato una funzione di logging, molto spartana e troppo “improvvisata” (e quindi completamente da rivedere e da migliorare), ma nonostante tutto già ben funzionante (viene tutto registrato). Lo script è capace di impostare i permessi adeguati per scrivere nel file di log creato e al suo termine indica all’utente la sua ubicazione;
  5. ho aggiunto localepurge per la pulizia dei file di localizzazione non utilizzati, come già indicato tra le funzionalità;
  6. per gli strumenti cosiddetti “esterni” usati dallo script (per ora deborphan e localepurge, la cui installazione non è prevista di default, ovvero non sono installati “out of the box” e quindi richiedono l’installazione manuale dell’utente) viene effettuato un controllo della loro presenza prima dell’esecuzione, simile a quello già descritto per sudo. In questo caso, però, se questi sono assenti verrà effettuato lo skip del determinato passaggio dello script che li riguarda, essendo assolutamente opzionali;
  7. nel caso della cancellazione di file legati a un programma (es., la cache dei vari browser) viene preventivamente controllata l’esistenza della cartella che li contiene, anche per una semplice questione di pulizia dell’output;
  8. ho risolto il problema delle risposte case-sensitive (prima “s” e “S” venivano lette diversamente, ora invece alla stregua) e ho previsto un sistema di risposte predefinite, per il quale è possibile digitare invio per selezionare la risposta definita. Nel corpo della domanda, la risposta predefinita – come da prassi negli script bash – è indicata con la lettera maiuscola. Ciò sta a significare, ad esempio, che “(s/N)” sta ad indicare che la risposta predefinita è “no”.
    Questo è stato possibile implementando il seguente costrutto if per le domande la cui risposta predefinita è “sì”:

    if [[ $sure = "s" || $sure = "S" || $sure = "" ]]

    e il seguente costrutto per le domande la cui risposta predefinita è “no”:

    if [[ $sure = "s" || $sure = "S" || $sure = "" ]]
  9. ho aggiunto la cancellazione della cache di Chromium, Opera e Galeon, la cancellazione della cache e dei log di Pidgin, Emesene e Amsn e la cancellazione dei cookie e della cache di Adobe Flash.

Infine, altre osservazioni oltre quelle già espresse nel precedente post:

  1. non riesco a capire dove e come è implementata la cache di Epiphany e Midori. Da testare per i client di messaggistica, invece, Konqueror;
  2. se dpkg è già impegnato, in output non viene mostrato niente, anzi peggio viene segnalato il successo dell’operatore, mentre solo nel file di log viene riportato l’ovvio errore:
    E: Impossibile impostare il blocco /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)

    Anche volendo, non è possibile riportare questo errore – intendo così com’è – nel normale “output” dello script. Sarebbe invece interessante avere la possibilità di controllarlo e nello script segnalare l’insuccesso dell’operazione, rimandando al file di log per ulteriori informazioni;

  3. è indispensabile informare l’utente non solo delle funzionalità generiche e dei singoli passaggi dello script, ma anche e soprattutto delle possibili conseguenze dovuto ad un uso sprovveduto di deborphan e localepurge;
  4. un amico mi ha chiesto se fosse possibile indicare, al termine dello script, la quantità di spazio recuperata utilizzando il mio script. Dopo averci riflettuto a lungo mentre tornavo in macchina da lavoro ( :-) ) sono giunto alla conclusione che, sì, è possibile. Il problema è che molto complesso al punto che buona parte dello script dovrebbe svolgere questo compito e che buona parte dello sviluppo dovrebbe essere svolta per realizzare questa funzione. Il risultato finale è che – a conti fatti – non ne vale la pena, in quanto l’obiettivo principale dello script deve essere quello di pulire il sistema e non di informare l’utente sulla qualità di quella pulizia, facendo sì che – da un punto di vista del codice – questa sia una priorità rispetto alla prima.
Espandi/comprimi Commenti

[…] uno script che svecchiava tutti i files di log quando poi mi sono imbattuto in uno script di Mirko Pagliai che faceva al caso […]

XHTML - Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>