next up previous contents
Next: Caratteristiche della Shell Up: INTRODUZIONE A LINUX Previous: Un rapido sguardo al

Un punto di forza di Unix: la Shell

FA' CIÒ CHE VUOI
...questo vuol dire che posso fare tutto quello che mi pare, non credi?
No -- esclamò con quella sua voce profonda e tonante -- vuol dire
che devi fare quel che è la tua vera volontà.
E nulla è più difficile.
Cammina nella strada dei desideri, dall'uno all'altro, e fino all'ultimo.
L'ultimo ti condurrà alla tua vera volontà.


(Michael Ende - La Storia Infinita)

La shell è un interprete dei comandi estremamente potente. In quanto tale, viene usata anche come un linguaggio interpretato; i programmi realizzati per essa vengono detti script. Bisogna precisare che esistono molte diverse shell e, per estensione, anche altri interpreti dei comandi possono essere chiamati shell. Infatti, l'unica differenza concettuale tra una shell come la comunissima Bash (Bourne Again Shell) e un inteprete come, ad esempio, quello usato per il Perl (Practical Extraction and Report Language, oppure Pathologically Eclectic Rubbish Lister...) sta nel linguaggio utilizzato. Comunque, in entrambi i casi i programmi realizzati vengono chiamati ``script''. Negli esempi in questione si parla di script di bash (o script di shell), oppure di Perl Script.

Chiarito meglio che cosa si intende per ``shell'', preciso che da questo punto in poi per shell intendo una shell in senso stretto, cioè un interprete dei comandi UNIX, non un generico interprete di un linguaggio non compilato.

La shell rappresenta l'interfaccia principale con il Sistema Operativo UNIX; è estremamente diretta, versatile e potente. Infatti, nonostante UNIX abbia avuto un ambiente grafico (l'X Window System) ben prima di chi si sente paladino delle GUI (Graphical User Interfaces), l'accento è rimasto per molti versi su un'interazione più diretta col sistema, tramite la shell, anche detta (impropriamente) ``linea di comando''. Per esempio, sui computer sui quali sono ``root'' ho attenzione alla configurazione dell'ambiente grafico, ma senza una shell ben organizzata mi sentirei nudo e agli utenti che pretendono di farne completamente a meno in genere consiglio di non usare UNIX.

Come ho detto, la shell è un interprete dei comandi. Ma letteralmente ``shell'' significa ``conchiglia''. In questo senso la si può vedere come un guscio che protegge le parti interne del Sistema Operativo (in particolare, il kernel) fornendo all'utente un'interfaccia per interagire con esso... personalmente ritengo affascinante questo significato del suo nome.

Precisando ulteriormente, non esiste una sola shell, anzi, chiunque può scriverne una (essendone capace). Anche volendo considerare solo le più comuni, ne esistono tante: sh (shell di Bourne), bash, ksh (Korn shell), csh, tcsh, ecc. ecc.

Mi soffermo un attimo sulla csh. Il suo nome deriva da un accostamento del linguaggio C al concetto di shell. In effetti ha una sintassi molto analoga a quella del linguaggio C ed è pensata soprattutto per i programmatori. Il suo nome va pronunciato esattamente come ``Sea Shell'', che significa ``conchiglia di mare''... credo che tale nome sia veramente un bel prodotto della fantasia dei programmatori UNIX.

Nonostante il fascino insito nel nome della C shell, d'ora in poi si fa riferimento alla bash, essendo quest'ultima la più usata e quella di default delle distribuzioni Linux più comuni.

La prima volta che mi sono seduto davanti a una workstation UNIX, trovandomi davanti quella ``finestra di comando'', mi devo esser detto: ``e mo' che faccio?!'' UNIX mette a disposizione dell'utente più di 300 comandi tramite la shell, ma bisogna ammettere che all'inizio è difficile comprendere che si ha in mano ``la potenza'', ed è altrettanto difficile imparare a utilizzarla appieno. È ovvio che in poche pagine come quelle che sto scrivendo è assolutamente impossibile fare anche solo una rapida panoramica della maggior parte dei comandi UNIX. Inoltre, credo che neanche Ken Thompson e Linus Torvalds in persona conoscano a menadito tutti i comandi di UNIX. Una volta feci un conto approssimativo e mi accorsi di conoscerne quasi un centinaio, ma devo fare alcune precisazioni in merito. Quelli che uso frequentemente sono molti di meno: UNIX è così potente e sconfinato che nessuno ha bisogno di tutto ciò che offre e credo che nessuno possa sentirsi così erudito da essere considerato un esperto di tutto ciò che lo riguarda (quindi, con UNIX non avrete mai modo di annoiarvi...). Inoltre, ogni comando ha un numero enorme di opzioni che possono essere combinate in moltissimi modi. Questo vuol dire che normalmente neanche l'utente esperto conosce fino in fondo i comandi che usa solitamente, anche perché è decisamente meglio allenare l'intelligenza piuttosto che la memoria. Questo non è un problema, dato che UNIX offre anche pagine di manuale in linea sulla shell: ho visto utenti e amministratori esperti consultare con attenzione tali pagine in moltissime situazioni. Personalmente ritengo che la capacità di lavorare con UNIX vada misurata in termini di intelligenza ed eleganza nella soluzione dei problemi, molto più che in termini di capacità di memorizzarne i comandi e le relative opzioni. Ancora: non aspettatevi ``effetti speciali'' dalla shell (anche se permette di fare molti scherzetti divertenti): direi che è ``per molti, ma non per tutti'', senz'altro non è per l'utente eccessivamente ingenuo.

Ci si potrebbe chiedere: ma se ho davanti uno strumento potente e difficile da usare... posso fare danni seri?! Una volta un utente, di cui ho apprezzato molto la sincerità e il senso di responsabilità, mi manifestò questa sua preoccupazione. Dentro di me devo aver riflettuto piuttosto amaramente sugli equivoci indotti dall'uso di ambienti software ``personal'' molto diffusi, privi di protezioni e con un concetto di multiutenza molto ``sui generis''. Ho tranquillizzato quell'utente, spiegandogli che non doveva avere preoccupazioni nei miei confronti: il normale utilizzo di UNIX non permette di danneggiare il sistema neanche con uno strumento così potente. Insomma, anche se non conoscete la shell, non correte grossi rischi: al massimo potete danneggiare i vostri file personali se non li avete protetti, ma non potrete mai danneggiare quelli degli altri, né mettere a soqquadro la workstation che avete davanti. Anche per questo UNIX è lo strumento più adatto per un centro di calcolo propriamente detto, come ogni Università che si rispetti offre agli studenti. Ogni volta che l'amministratore vuole o deve modificare il sistema, deve deliberatamente assumere l'identità di root e da quel momento in poi fare ancora più attenzione alle proprie azioni. La chiara distinzione tra le identità dei vari utenti e tra il ruolo dell'utente e quello dell'amministratore è anche uno dei motivi che rendono UNIX scarsamente vulnerabile al concetto di virus, ma su questo non mi soffermo: osserviamo più da vicino questo strumento che ho già abbondantemente presentato.



 
next up previous contents
Next: Caratteristiche della Shell Up: INTRODUZIONE A LINUX Previous: Un rapido sguardo al

1999-05-16