Next: Il file system, Previous: Nozioni elementari sul sistema operativo unix, Up: Nozioni elementari sul sistema operativo unix
Sui PC dell'aula computer e' installato il sistema operativo
unix
.
Questo sistema operativo e' molto diverso dal diffuso sistema
windows
.
Una caratteristica del sistema unix e' la possibilita' di dare comandi
da una finestra terminale per eseguire determinate operazioni (la
parola terminale
indica genericamente qualsiasi dispositivo
attraverso cui sia possibile interagire con il sistema operativo).
Nell'aula computer, una finestra terminale si ottiene cliccando col
bottone destro del mouse sullo sfondo e selezionando
Open terminal
: compare una finestra con una scritta in alto a
sinistra. La scritta e' qualcosa di simile a -bash-3.00$
e il
cursore si trova immediatamente alla sua destra.
La scritta si chiama prompt
ed e' prodotta da un programma che
si chiama genericamente shell
: la shell presente sui PC
dell'aula computer si chiama bash
(che sta per Bourne-Again
SHell).
La shell e' un programma essenziale del sistema operativo unix: il suo scopo e' quello di interpretare tutto cio' che l'utente digita e interagire di conseguenza con le varie parti del sistema operativo.
Vedete la shell come l'intermediario fra voi e il sistema operativo.
Quando la shell entra in esecuzione (nella finestra terminale), scrive il suo prompt e attende che l'utente digiti qualcosa: se l'utente non digita nulla, la shell rimane in attesa.
Per passare alla shell cio' che si e' digitato nella finestra
terminale, bisogna concludere pigiando il tasto Invio
.
Per esempio, se digitate il comando date
seguito da
Invio
, la shell legge cio' che avete scritto (la stringa
date
), lo riconosce come un comando unix, lo fa eseguire dal
sistema operativo e riporta sulla finestra terminale il risultato di
questa operazione, cioe' l'output del comando date
, che e' la
data e l'ora corrente:
dschgrazlin2:1> date Tue Feb 5 12:23:03 CET 2008 dschgrazlin2:2>
(In questo esempio, il prompt della shell e' dschgrazlin2:1>
,
diverso da quello citato prima: l'utente puo' personalizzare il prompt
della shell)
Il carattere Invio
non appare, ma e' stato digitato dopo la
stringa date
. La riga successiva e' stata prodotta dal comando
date
e viene restituita dalla shell al termine dell'esecuzione
del comando. Dopo di che, la shell ripresenta il suo prompt, in attesa
del prossimo comando.
Cio' che l'utente digita al prompt della shell puo' essere classificato in 3 categorie:
Invio
e' un
comando unix, la shell lo manda in esecuzione e restituisce l'output
prodotto da esso (o anche nulla, se il comando non produce output)
Invio
viene
riconosciuta dalla shell come un comando diretto a se stessa, la shell
lo esegue senza interagire con il sistema operativo.
Dal punto di vista dell'utente, c'e' poca differenza fra questi
comandi e quelli del punto precedente: l'utente in ogni caso digita
qualcosa e ottiene una risposta corrispondente.
Invio
non viene
riconosciuta dalla shell come un comando unix o un comando diretto a
se stessa, la shell risponde con un messaggio di errore.
Ad esempio:
dschgrazlin2:2> Hey, shell: dimmi qualcosa bash: Hey,: command not found dschgrazlin2:3>
In questo caso, la shell constata che la stringa Hey,
non e' un
comando valido e lo segnala.
Osservate una struttura tipica dei messaggi di errore in ambiente
unix: prima c'e' il nome del programma che ha generato il messaggio di
errore seguito da doppio punto (bash:
), poi l'oggetto
dell'errore stesso seguito da doppio punto (Hey,:
), infine la
breve spiegazione di cio' che non va (command not found
).
Provate a digitare le cose seguenti al prompt della shell in un terminale:
dschgrazlin2:1> whoami balducci dschgrazlin2:2>
echo
riscrive sul terminale tutto cio' che lo
segue (in questo caso la stringa Hello,world!)
Questo non e' un comando unix, ma un comando della shell. La shell
puo' essere programmata con un linguaggio ad essa
intelleggibile. Questo linguaggio consente di fare cose anche molto
complicate ed e' senz'altro al di fuori dello scopo di queste
note. Cio' che avete digitato in questo esempio e' un'assegnazione:
cioe' la stringa "I am a string" e' stata assegnata alla variabile
A. La shell esegue questa assegnazione e non risponde nulla in
output. Tuttavia, potete vedere che la shell ha eseguito il comando ad
essa diretto digitando echo $A
: in questo caso passate al
comando unix echo
(visto sopra), il contenuto della variabile
A (per usare il contenuto di una variabile definita dalla shell
si usa il suo nome preceduto dal segno del dollaro). Quindi e' come se
aveste digitato: echo "I am a string"
e il comando echo
riscrive sul terminale i suoi argomenti.
L'interazione fra l'utente e il sistema operativo unix attraverso un terminale e' mediata dalla shell.
L'utente digita stringhe di caratteri seguite da Invio
e la
shell interpreta queste stringhe e svolge delle azioni ad esse
conseguenti.
Tutto cio' che digitate in un terminale passa attraverso la shell, che si comporta di conseguenza: esegue comandi unix, esegue istruzioni nel suo linguaggio o semplicemente segnala che avete digitato qualcosa di sbagliato.