La shell dei sistemi Unix

Un utente avanzato che voglia definirsi tale deve necessariamente interagire con la riga di comando: la shell dei sistemi Unix. Tutti i comandi dei paragrafi seguenti sono digitati dalla console della shell. Per accedere ad una console potete usare due modi: cliccare sul simbolo (tipicamente una conchiglia13) disponibile nel vostro ambiente grafico preferito KDE/GNOME per accedere ad una console grafica oppure premere contemporaneamente Ctrl-Alt-F1 (per tornare alla grafica premere Ctrl-Alt-F7) per accedere ad una console di testo. Se usate il secondo metodo, dovrete rifare l'ingresso (login) nel sistema per ottenere l'invito (prompt) di una console di testo, reinserendo nome14 e parola d'ordine (password)15:

login: mario

Password: ******

La shell offre un'interfaccia a caratteri, rappresentata dalla riga di comando, che permette all'utente di interagire con certe caratteristiche di Linux in modo efficiente. La shell BASH (Bourne Again SHell) è la più usata in ambiente Linux, pur essendo una delle tante disponibili. Per sapere che shell state usando digitate:

$ echo $SHELL
BASH è un progetto GNU16 che venne sviluppato negli anni ottanta conservando la compatibilità con la shell Bourne (donde il nome), molto popolare all'epoca in ambiente Unix, includendo numerose caratteristiche presenti in altre shell. La shell può essere usata in tre modalità di funzionamento diverse:

shell di login

Questa è la modalità usata se si fa il login nel sistema da una console di testo. Il sistema leggerà le impostazioni nel file /etc/profile e leggerà poi anche /home/<utente>/.bash_profile se esiste. Il primo file contiene impostazioni valide per tutti gli utenti del sistema, il secondo contiene impostazioni valide solo per un determinato utente.

shell interattiva

Questa è la modalità usata quando si fa partire un emulatore di terminale (la console); vengono lette le impostazioni nel file ~/.bashrc se esiste17. In pratica, dopo aver fatto il login ed ottenuto l'invito dal sistema voi usate la shell in modalità interattiva, se digitate dei comandi.

shell non interattiva

Questa è la modalità usata quando si usa la shell come un interprete18, per l'esecuzione di script. In gergo Unix uno script è un file di testo, contenente istruzioni che l'interprete shell può capire, che l'utente ha il permesso di mandare in esecuzione. Se si invia in esecuzione un file di questo tipo, il sistema cerca una prima linea nella forma:

#!/bin/sh
e se esiste esegue automaticamente le istruzioni successive, utilizzando come standard input il file stesso, escludendo qualsiasi possibilità di interazione da parte dell'utente.

Segue un semplice esempio per chiarire il concetto di script. Creiamo da root il file misc_custom col nostro editor preferito scrivendoci dentro:

#!/bin/sh

hdparm -d1 -k1 /dev/hda

e salviamo il file col nome indicato. Il comando che abbiamo inserito in seconda riga attiva il DMA sul disco fisso identificato come ``hda''. Aggiungiamo al file appena creato il permesso di esecuzione:

# chmod u+x misc_custom
Se ora digitiamo il nome del file misc_custom e premiamo il tasto invio:

# misc_custom
ciò equivale a digitare19:

# hdparm -d1 -k1 /dev/hda
ottenendo in risposta dal sistema:

/dev/hda:

 setting using_dma to 1 (on)

 setting keep_settings to 1 (on)

 using_dma    =  1 (on)

 keepsettings =  1 (on)

che è proprio l'effetto del comando contenuto nello script da noi creato. Qualsiasi programma (non solo uno script) che viene lanciato da una console si può interrompere premendo Ctrl-C. Se volete maggiori informazioni su questo o altri comandi shell sono sempre disponibili le pagine Unix man accessibili in qualunque momento inserendo nel nostro caso:

$ man hdparm
Per saperne di più sul comando ``man'' inserire:

$ man man
Può essere utile sapere che se viene aggiunta una ``SPMamp;'' alla fine di un comando, la shell è in grado di fornire informazioni su eventuali problemi di malfunzionamenti del programma avviato appunto in secondo piano (background mode). Esempio:

kppp è un programma a corredo del KDE per la connessione internet via modem avviato cliccando col mouse sull'apposita icona. Supponiamo che cliccando sull'icona il programma non si avvii. Ebbene, per investigare sul perché avviamolo allora dalla console:

$ kppp &

bash: /usr/bin/kppp : permission denied

e veniamo così a sapere che il programma non parte perchè non abbiamo configurato bene i permessi20 dell'utente che ha avviato il programma.

Mauro Darida 2006-07-25