Python su Linux: perché usarlo per automatizzare attività sistemistiche
Chi utilizza Linux con una certa frequenza finisce prima o poi per ripetere le stesse operazioni: controllare lo spazio disponibile, raccogliere informazioni sul sistema, verificare alcuni file oppure preparare un riepilogo da consultare quando qualcosa non funziona.
Possiamo eseguire queste attività manualmente dal terminale, oppure utilizzare Bash per riunire più comandi in uno script. Quando però le operazioni diventano più articolate, dobbiamo elaborare dati, applicare condizioni o produrre rapporti leggibili, Python può diventare un alleato prezioso.
Non serve essere programmatori esperti per iniziare. Python ci permette di trasformare operazioni ripetitive in piccoli strumenti riutilizzabili, partendo da esempi semplici e aggiungendo funzionalità soltanto quando servono.
Vediamo perché può essere utile nell’amministrazione Linux e come realizzare il nostro primo controllo automatico.
Perché utilizzare Python per la sistemistica Linux
Python è un linguaggio di programmazione disponibile sulle principali distribuzioni Linux, anche se la versione installata e la sua disponibilità possono variare. È apprezzato per una sintassi relativamente leggibile e per una libreria standard che offre strumenti già pronti per lavorare con file, directory, date, processi e informazioni sul sistema.
Immaginiamo di voler controllare ogni giorno lo spazio disponibile sul disco. Possiamo utilizzare il comando df, leggere manualmente il risultato e decidere se intervenire. Se vogliamo ripetere il controllo su più sistemi, applicare una soglia di attenzione e generare un rapporto sempre uguale, uno script Python può rendere il procedimento più ordinato.
Il vantaggio non consiste soltanto nell’eseguire automaticamente un comando. Possiamo anche elaborare i risultati, applicare regole e decidere come presentarli.
Python è utile anche quando dobbiamo leggere file di configurazione, elaborare dati CSV, interrogare servizi attraverso API o costruire strumenti che combinano più sorgenti di informazioni.
Python o Bash: quale scegliere?
Bash e Python non sono concorrenti che devono necessariamente escludersi a vicenda. Sono strumenti differenti, ciascuno con i propri punti di forza.
Bash è particolarmente comodo quando dobbiamo concatenare comandi già disponibili nel sistema, gestire redirezioni, utilizzare pipeline e organizzare procedure relativamente brevi. Se vogliamo eseguire un backup con tar o rsync, per esempio, uno script Bash può essere una soluzione semplice ed efficace.
Python diventa interessante quando la logica cresce: dobbiamo confrontare valori, elaborare strutture di dati, gestire diversi casi di errore o produrre risultati in formati precisi. La libreria standard ci evita inoltre di dover ricorrere sempre a comandi esterni.
Non esiste una regola secondo cui un’attività debba essere scritta per forza in un linguaggio o nell’altro. Possiamo scegliere lo strumento più adatto al problema e, quando ha senso, far collaborare Bash e Python.
Se stiamo imparando a creare automazioni, può essere utile partire dalla nostra guida allo scripting Bash per la ricerca e la modifica dei file.
Prepariamo Python sul nostro sistema
Prima di scrivere il programma, verifichiamo se Python 3 è disponibile. Dal terminale eseguiamo:
python3 --version
Se il comando restituisce una versione, possiamo già iniziare. Se Python non è installato, utilizziamo il gestore dei pacchetti della nostra distribuzione per installare il pacchetto appropriato, evitando di sostituire alla cieca la versione di sistema.
Creiamo una directory nella nostra cartella personale, così da mantenere il progetto separato dai file di sistema:
mkdir -p ~/script-python
cd ~/script-python
Ora possiamo preparare il nostro primo programma. Non ci servono librerie aggiuntive: useremo soltanto funzionalità incluse in Python.
Il nostro primo script: controllare lo spazio su disco
Creiamo un file chiamato controllo_disco.py:
nano controllo_disco.py
Inseriamo il codice seguente:
import shutil
percorso = "/"
totale, usato, libero = shutil.disk_usage(percorso)
percentuale = usato / totale * 100
print("Controllo dello spazio su disco")
print(f"Percorso controllato: {percorso}")
print(f"Spazio totale: {totale / (1024 ** 3):.2f} GiB")
print(f"Spazio utilizzato: {usato / (1024 ** 3):.2f} GiB")
print(f"Spazio libero: {libero / (1024 ** 3):.2f} GiB")
print(f"Utilizzo del disco: {percentuale:.1f}%")
if percentuale >= 80:
print("ATTENZIONE: lo spazio utilizzato è elevato.")
else:
print("Spazio su disco entro la soglia impostata.")
Salviamo il file con Ctrl+O, confermiamo con Invio e usciamo da Nano con Ctrl+X.
Questo programma controlla il filesystem che contiene la directory /, cioè la radice del sistema. Non analizza automaticamente tutti i dischi e tutti i punti di montaggio: è un primo esempio pensato per comprendere il meccanismo.
La funzione shutil.disk_usage() restituisce tre valori: spazio totale, spazio utilizzato e spazio libero. Calcoliamo quindi la percentuale di utilizzo e la confrontiamo con una soglia del 80%.
Le istruzioni if ed else permettono al programma di scegliere quale messaggio mostrare in base al risultato. Le stringhe precedute da f sono chiamate f-string: ci consentono di inserire valori direttamente nel testo e di controllare la formattazione dei numeri.
Per esempio, :.1f mostra una cifra decimale, mentre :.2f ne mostra due. La divisione per 1024 ** 3 converte i byte in GiB, cioè gibibyte.
La soglia dell’80% è soltanto un valore dimostrativo: in un ambiente reale andrebbe scelta in base al tipo di filesystem, alla crescita dei dati e alle esigenze del servizio.
Eseguiamo il programma e leggiamo il risultato
Non abbiamo bisogno di rendere eseguibile il file per avviarlo con Python. Dalla directory in cui lo abbiamo salvato, utilizziamo:
python3 controllo_disco.py
Il programma mostrerà le informazioni relative allo spazio disponibile e un messaggio in base alla soglia impostata. I valori saranno naturalmente diversi da un computer all’altro.
Se riceviamo un errore, leggiamo con attenzione il messaggio del terminale. Un nome di file sbagliato, un errore di indentazione o una parentesi mancante possono impedire l’esecuzione. In Python l’indentazione è parte della struttura del programma: le istruzioni appartenenti al blocco if devono mantenere lo stesso rientro.
Notiamo anche un dettaglio importante: per questo controllo non abbiamo utilizzato sudo. Lo script legge informazioni normalmente accessibili all’utente e non deve modificare il sistema. È una buona abitudine iniziare con i privilegi minimi necessari, senza eseguire automaticamente ogni programma come amministratore.
Come trasformare lo script in uno strumento di automazione
Abbiamo appena costruito un piccolo controllo, ma il principio può essere esteso gradualmente.
Potremmo modificare lo script per controllare più punti di montaggio, salvare i risultati in un file CSV oppure generare un messaggio di avviso quando una soglia viene superata. Potremmo anche integrare il controllo in una procedura più ampia di manutenzione.
Per eseguire un programma a intervalli regolari, però, non dobbiamo necessariamente aggiungere un sistema di pianificazione dentro Python. Possiamo utilizzare strumenti già disponibili in Linux, come cron o i Timer di systemd, e lasciare allo script il compito specifico per cui è stato progettato.
I Timer di systemd, in particolare, permettono di pianificare l’esecuzione di un servizio e di consultare i relativi messaggi attraverso gli strumenti del sistema. Per approfondire questo aspetto, possiamo leggere la nostra guida ai Timer di systemd per automatizzare attività su Linux.
Quando iniziamo a raccogliere informazioni da più fonti, è importante anche prevedere gli errori: un file potrebbe non esistere, un servizio potrebbe non rispondere o un filesystem potrebbe non essere accessibile. Uno script destinato a un uso continuativo deve distinguere i risultati normali dai problemi, invece di limitarsi a stampare un messaggio apparentemente positivo.
Python nel nostro homelab Linux
In un homelab possiamo utilizzare Python per raccogliere informazioni da più macchine, verificare la presenza di file, elaborare dati di monitoraggio o interrogare servizi che espongono un’interfaccia API.
Possiamo cominciare con un singolo computer e un controllo semplice, come quello appena realizzato, e successivamente ampliare il progetto. Non è necessario costruire subito un sistema complesso: ogni funzionalità dovrebbe rispondere a una necessità concreta.
Il nostro homelab Linux può diventare così un ambiente sicuro in cui imparare a programmare, verificare le modifiche e capire come si comportano gli script prima di utilizzarli su un server importante.
Conclusioni
Python è uno strumento prezioso per l’automazione sistemistica perché permette di unire informazioni provenienti dal sistema, condizioni logiche e risultati facilmente leggibili. Non sostituisce Bash in ogni situazione, ma amplia le possibilità quando le procedure diventano più articolate.
Con il nostro primo script abbiamo verificato lo spazio su disco, calcolato una percentuale e applicato una soglia di attenzione senza installare librerie aggiuntive né utilizzare privilegi amministrativi.
Il passo successivo sarà imparare a raccogliere informazioni da fonti diverse e a elaborarle in modo più strutturato. È così che piccoli programmi, sviluppati un problema alla volta, possono trasformarsi in strumenti davvero utili per amministrare Linux.
LICENZA E CONDIZIONI D’USO
Questo How-to è rilasciato sotto licenza Creative Commons Attribution-NonCommercial 3.0 Italy.
CONTATTI DELL’AUTORE
Marco Ciammella marco@orvietolinux.it
Orvieto Linux User Group info@orvietolinux.it