Introduzione a Linux: l'ABC del pinguino

Kernel e Shell: il sistema invisible

Se una persona ti chiedesse che aspetto ha Windows, tu potresti rispondergli facilmente: Windows ha una barra delle applicazioni nella parte bassa dello schermo, il menù "Start" da cui si lanciano i programmi, ed una scrivania con le icone dei programmi più usati, alla quale può essere cambiato lo sfondo.

La domanda "Che aspetto ha Linux?" è una delle domande che potrebbero mandare in crisi anche i pinguini più preparati: Linux infatti è invisibile.

No, non è uno scherzo, e non sono a corto di ossigeno. Il punto è che Linux di per sè non è un sistema operativo vero e proprio, ma "soltanto" un kernel. Come avevamo già accennato in precedenza, il kernel è la parte centrale di ogni sistema operativo (kernel in inglese significa "nocciolo"), il nucleo, la parte "sotto il cofano" del sistema, che coordina tutte le altre parti, e le mette in comunicazione con l'hardware della macchina. Anche Windows ovviamente ha un kernel, che opera silenziosamente dietro alle finestre.

Si può dire, andando molto a grandi linee, che il compito del kernel sia quello di "manovrare" l'hardware della macchina (processore, memoria, scheda video, dischi rigidi, mouse, tastiera ecc...), a seconda delle esigenze del software (i programmi che girano sul computer). Attenzione però: il kernel non comunica direttamente con l'utente! Non è il kernel che sceglie cosa disegnare sullo schermo, nè è suo compito interpretare ciò che scrive l'utente, o andare a vedere dove ha fatto clic con il mouse. Per svolgere questi compiti (che sono indispensabili) è necessario che un'apposita componente del sistema "usi" il kernel per manovrare la scheda video, ad esempio, per far comparire sullo schermo lo sfondo con le icone e tutto il resto; o ancora, questo programma dovrà chiedere al kernel la posizione del mouse ogni millisecondo, in modo da poter raffigurare sullo schermo il cursore, o i tasti premuti dall'utente sulla tastiera per scrivere sul monitor quanto è stato digitato.

Questo tipo di programma si chiama shell (che in inglese significa "conchiglia", per indicare come questo componente stia all'esterno del sistema). La shell è quella parte del sistema operativo che riceve i comandi direttamente dall'utente, e li trasforma in istruzioni per il kernel (che a sua volta attiverà correttamente l'hardware per eseguire i comandi ricevuti).

Windows, ad esempio, possiede una piacevole shell grafica, che in Windows 7 si presenta così:

Interfaccia grafica di Windows 7

Parlando di Windows possiamo tranquillamente vedere kernel e shell come un unico oggetto; con un po' di approssimazione, infatti, si può dire che l'interfaccia grafica di Windows sia un tutt'uno con il nocciolo del sistema operativo: non si è mai vista una versione di Windows senza interfaccia grafica (a pensarci bene, "Windows" senza finestre sarebbe un bel controsenso...)! In Linux le cose sono un po' diverse: kernel e shell sono fortemente separati, al punto che esistono un sacco di shell diverse, e l'utente può scegliere quale utilizzare nel suo sistema; un po' come in Need for Speed, in cui alla stessa macchina si possono cambiare e colorare le diverse componenti della carrozzeria. Gli ambienti grafici più famosi sono due, Gnome (l'interfaccia grafica del progetto GNU) e Kde, ma ne esistono molti altri, ognuno con le sue peculiarità:

Gnome in esecuzione su Ubuntu Linux 10.10 KDE 4.30 Xfce 4,2-1 LXDE Enlightenment
Tante shell grafiche diverse, ma dietro ad ognuna di esse il kernel è sempre lo stesso: Linux. Da sinistra a destra: Gnome, KDE, Xfce, LXDE, ed Enlightenment.
Sembrano tante? Pensate che ce ne sono molte altre, e ognuna di esse può essere modificata in ogni dettaglio!

Bisogna dire, poi, che gli utenti più esperti di Linux generalmente hanno una singolare predilezione per le shell testuali "alla vecchia maniera". All'epoca di Unix, infatti, chi usava il computer generalmente non lo faceva attraverso un ambiente grafico (la maggior parte dei computer non aveva neppure il mouse), ma lo faceva impartendo dei comandi testuali. Ad esempio, per creare nel proprio spazio una cartella di nome "pippo", l'utente avrebbe scritto il comando mkdir pippo (mkdir sta per make directory, che in inglese significa "crea cartella"); dopo aver premuto il tasto invio (il nome si riferisce proprio all'invio del comando al sistema) la cartella sarebbe stata creata.

La shell testuale di Unix si chiamava sh (intuitivamente il nome sh sta per shell); sh fu riprodotta fedelmente da Stallman e soci, per essere usata nel sistema operativo GNU. Questa riproduzione si chiama GNU Bash, fu usata da Linus Torvalds assieme alle prime versioni di Linux, ed ancora oggi ne è una componente fondamentale.

Il modo più veloce di usare una shell testuale è aprire uno dei tanti emulatori di terminale presenti su Linux. Un emulatore di terminale, come dice il nome, è un programma che simula in una finestra il collegamento di un terminale al sistema Linux; questo collegamento avviene naturalmente utilizzando la shell testuale GNU Bash (per uscire è sufficiente digitare il comando "exit"):

A prima vista il terminale può sembrare uno strumento antiquato e inutile, ma in realtà non è così. Gli strumenti ereditati da Unix sono talmente potenti da permettere la gestione completa del sistema utilizzando solo comandi testuali; spesso utilizzare il terminale è una via addirittura più rapida ed efficace rispetto agli strumenti grafici.

Ma non voglio addentrarmi troppo: per imparare ad usare Linux attraverso la shell GNU Bash è necessaria una guida completa sull'argomento. In effetti questa guida è in corso di scrittura, e la si può trovare qui.

  1. Introduzione, storia e filosofia
  2. Un sistema per molti utenti
  3. Kernel e Shell: il sistema invisible
  4. Il Filesystem
  5. Distribuzioni
  6. Tips&Tricks