Linux – i significati di console, terminale, emulatore, shell

Per chi usa Linux i termini console, terminale e shell sono all’ordine del giorno e prima o poi viene da chiedersi che differenza ci siano tra loro (o se ve ne sono).

La risposta veloce è che anche se vi sono delle differenze tecnicoEtimoStoriche tra i tre termini (e qualche loro variante) di fatto vengono utilizzati informalmente come sinonimi, in quanto alla finfine vengono richiamati nel discorso per gli stessi motivi.

Per i puristi invece è necessario addentrarsi un pò più a fondo, partiamo dal termine CONSOLE (e non consolle!) che nasce con i primi sistemi unix (quegli degli anni ’70 per intenderci), in tali sistemi il computer era fisicamente un ammasso piuttosto ingrombrante di schede elettroniche, cavi e circuiti, spesso dislocati in armadi metallici (i personal computer ancora non esistevano), l’insieme ‘fisico’ di una tastiera ed un monitor era quello che veniva chiamato appunto console, ovvero l’hardware che l’operatore usava per inviare e ricevere dati al mainframe presente da qualche parte.

Se la parte fisica era la console, la parte ‘funzionale’ era il TERMINALE, ovvero un punto di accesso attraverso il quale l’operatore interagiva con il computer, se vogliamo possiamo considerare più o meno la stessa distinzione che facciamo tra ‘hardware’ e ‘software’ quando parliamo di personal computer, sono la stessa cosa (il personal computer) ma vista da due punti di vista differnti.

Questa la storia, ai giorni nostri il concetto di console forse è un pò desueto ma è ancora in grado di rendere l’idea. Quello che invece è importante è che il terminale, nell’accezzione più ‘pura’ del termine è il sistema con cui l’utente comunica con il computer una volta rimosse tutte le feature e i fronzoli di qualsiasi interfaccia, detto in altro modo, un terminale è un sitema esclusivamente a riga di comando rigorosamente testuale.

Un’installazione Linux ha tipicamente a disposizione 7 o 8 terminali e, sorpresa, non sono quelli che potete aprire sul desktop della vostra distribuzione, ad essere precisi quelli sono degli EMULATORI DI TERMINALE, programmi che agiscono in luogo (fanno le veci) dei terminale veri e propri.

Se volete vedere un terminale del vostro Linux in azione basta premere CTRL+ALT+Fn (e ALT+F7 per tornare alla modalità grafica) , quelli che apriamo sul desktop sono infatti solo emulatori, ne possiamo aprire finchè ne vogliamo, possiamo colorarli a piacimento, ecc, ma appunto sono solo degli emulatori (la differenza a livello di potenza ed operativitià è nulla).

Infine resta il discorso della SHELL, e qui torniamo sul filosofico, la SHELL (guscio) è cioè che fa da interfaccia tra noi e il kernel, è il programma che (o meglio ‘le shello sono i programmi che…’) trasducono quello che l’utente fa in qualcosa che il kernel comprende e che trasduce quello che il kernel fa in qualcosa che noi comprendiamo. Abbiamo shell testuali come bash, sh e via dicendo che in pratica sono degli interpreti di comandi, l’utente da terminale li digita, la shell li interpreta per il kernel che in questo modo è in grado di eseguirli.

É però un concetto astratto, in quanto anche X (il motore grafico) è una shell (in questo caso si parla di shell grafica), l’utente clicca e sposta il mouse e la shell grafica traduce queste azioni per il kernel (che ad esempio copia un file o lo cancella).

Il fatto che solo le shell testuali vengano chiamate shell nel quotidiano è solo per ragioni di consuetudine.

 

e quindi anche l’ambiente grafico X è a conti fatti una shell, è un qualcosa che ‘media’ tra noi e il kernel, che rappresenta i file con icone, che ci permette di usare il mouse, ecc… tutte sovrastrutture che il kernel non possiede nè che necessita (ma che fanno comodo a noi). Ora…dato che un emulatore di terminale viene aperto solo dentro X, dato che è inscritto in una finestra, che può essere spostata ridimensionata e via dicendo appare chiaro che è qualcosa di molto più ricamato di un terminale vero e proprio (che non ha robe come finestre, variabili nel mouse ecc..).

X a ragione può essere indicata come shell (una shell di tipo grafico) esattamente come BASH (che è una shell di tipo testuale, come moltre altre simili), il fatto che solo la seconda venga indicata nel quotidiano come shell è solo per ragioni di consuetudine.