La shell è un componente fondamentale di tutti i sistemi UNIX, compresi quelli simili come Linux: è l’interfaccia tramite cui un utente può lanciare e controllare i processi. Dove l’utente può anche essere di sistema, caso classico dei demoni: processi lanciati dal sistema stesso per offrire un servizio.
L’uso di tutte queste funzionalità permette la creazione di script, insiemi di istruzioni per eseguire un certo compito.
La shell opera interpretando i comandi che riceve per fare qualche operazione, in genere l’avvio di un programma, offrendo anche degli strumenti di controllo (if
), di ripetizione (for
) e di gestione, per esempio dividendo tra processi in primo piano (foreground) e in secondo piano (background). Permette anche la definizione e l’uso di variabili, spesso d’ambiente – ovvero impostate a livello di sistema.
Gli script nei sistemi Linux hanno un’importanza enorme: praticamente tutto avviene tramite loro, in particolar modo per quanto riguarda le operazioni automatiche. E possono diventare anche molto sofisticati ed articolati, tanto da poter essere considerati veri e propri programmi.
Insomma, l’importanza della shell ora dovrebbe essere chiara a tutti. E mentre infuria la polemica su CentOS 8 – o meglio, sulla morte prematura del prodotto – qualche notizia potrebbe passare inosservata. Come il rilascio lunedì 7 dicembre di una nuova versione della shell per eccellenza di Linux: bash. A esattamente 11 mesi dal rilascio della 5.0, la major, abbiamo una minor: 5.1.
Proprio come esistono molti linguaggi di programmazione diversi, esistono molte shell: zsh, ksh, tcsh, dash… giusto per citarne alcune. In generale supportano almeno le istruzioni previste dalla shell originaria di UNIX, con le specifiche definite ed aggiornate in POSIX, ma ognuna aggiunge le proprie estensioni e peculiarità. Ma bash è sicuramente la più usata e diffusa, e per questo una sua nuova versione è tanto importante.
In questa nuova versione cambiano tante cosette sotto il cofano, comportamenti e implementazioni al più nascoste all’occhio dell’utilizzatore normale. Ma almeno una modifica sarà evidente e (forse importante): SRANDOM
.
Bash implementa una serie di variabili e comandi internamente, definiti built-in, utili in alcune occasioni per non appoggiarsi a programmi o strumenti esterni: questo aumenta l’efficienza (non dover aspettare altri programmi) e la stabilità del codice (un programma che cambia il modo in cui viene chiamato costringe a modificare il proprio codice). Una di queste variabili è RANDOM
, che genera un numero pseudo-casuale tra 0 e 32767 (215-1).
Il problema con i computer è che sono deterministici: sanno contare, ma fanno molta fatica a fare cose a caso. E generare un numero a caso è proprio una delle cose più difficili.
Normalmente si è risolto con generazioni pseudo-casuali: serie di numeri, da un minimo a un massimo, in cui ogni numero è dato una sola volta e in ordine che sembra casuale. Ma non lo è mai: la funzione è deterministica, pertanto partendo da un numero (seed), la serie è sempre la stessa.
Se questo per applicazioni scientifiche è sufficientemente valido (la ripetibilità è addirittura desiderabile, proprio per verificare il comportamento a parità di condizioni), in altri ambiti è particolarmente dannoso. Per esempio, in crittografia la scelta di un numero a caso è fondamentale: sapendo il seed e l’ultimo numero generato, sarebbe possibile prevedere tutti i successivi e ricostruire tutti i precedenti.
Nei sistemi moderni si ovvia usando l’entropia del sistema, ovvero una variabile che viene modificata da eventi che capitano intorno alla macchina e che non sono controllabili a priori: temperatura della CPU e dell’aria, quantità di dati letti dal disco in un certo momento, caratteri digitati in console… quasi tutto può contribuire.
SRANDOM
nasce proprio per poter usare questi strumenti e fornire un numero realmente casuale. E anche con una variabilità maggiore, variando da 0 a circa 2 miliardi (231-1). Un bell’aumento, non c’è che dire!
Altre novità riguardano l’implementazione di alcuni nuovi comandi built-in (attivabili in fase di compilazione, ma non di default):
- mktemp
- accept
- mkfifo
- csv
- cut
- lcut
Ci sono poi modifiche di comportamento nella modalità più stretta POSIX, e in particolare la possibilità di usare la sostituzione di processo (process substitution).
Chiude l’elenco delle novità più importanti l’abbandono dell’opzione compat50
per attivare la compatibilità con la nuova major, sostituita dalla variabile BASH_COMPAT
.
Segnaliamo che insieme alla release di Bash, è stato rilasciato anche la nuova versione di redline
, la 8.1: una libreria per leggere l’input dell’utente da terminale. Insieme alle librerie ncurses
, permette la costruzione di vere e proprie interfacce testuali.
Insomma, qualche novità all’orizzonte. Che gli utenti di Arch (come di altre rolling release) possono già testare con mano. Chissà quando sarà il turno di CentOS Stream… 😉
Ho coltivato la mia passione per l’informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.
Lascia un commento