Sistemi UNIX - Lo shell

Introduzione allo shell

L'iterprete di comandi è l'interfaccia tra l'utente e il sistema operativo, da cui il suo nome inglese «shell», che significa «conchiglia».

Lo shell, un\'interfaccia tra l\'OS e l\'utente

Lo shell è quindi incaricato di fare da intermediario tra il sistema operativo e l'utente grazie alle linee di comandi inserite da quest'ultimo. Il suo ruolo consiste nel leggere la linea di comando, interpretarla, eseguirla e poi riportare il risultato s

Lo shell è quindi un file eseguibile incaricato di interpretare i comandi, trasmetterli al sistema e riportare il risultato. Esistono più shell, i più diffusi sono sh (detto «Bourne shell»),bashBourne again shell»), cshC Shell»), TcshTenex C shell»), kshKorn shell») e zshZero shell»). Il loro nome corrisponde generalmente al nome dell'eseguibile.

Ogni utente ha uno shell di default, che sarà lanciato all'apertura di un invito di comando. Lo shell di default è precisato nel file di configurazione /etc/passwdnell'ultimo campo della linea corrispondente all'utente. E' possibile cambiare lo shell in una sessione eseguendo semplicemente il file eseguibile corrispondente, ad esempio :

/bin/bash

Invito di comando (prompt)

Lo shell si inizializza leggendo la propria configurazione globale (in un file della cartella /etc/), poi leggendo la configurazione propria all'utente (in un file nascosto, il cui nome comincia con un punto, posto nella cartella di base dell'utente, cioè /home/nome_dell_utente/.file_di_configurazione), poi visualizza un invito di comando (in inglese prompt) come segue :

terminale:/cartella/corrente$
Da default nella maggioranza degli shell il prompt è composto dal nome del terminale, seguito da due punti (:), dalla cartella corrente, poi da un carattere che indica il tipo di utente connesso  :
  • «$» indica che si tratta di un utente normale
  • «#» indica che si tratta dell'amministratore, detto «root»

Nozione di linea di comando

Una linea di comando è una stringa di caratteri costituita da un comando, corrispondente ad un file eseguibile del sistema oppure da un comando dello shell nonché dagli argomenti (parametri) opzionali :

ls -al /home/jf/
Nel comando qui sopra, ls è il nome del comando, -al e /home/jf/sono degli argomenti. Gli argomenti che cominciano con - sono detti opzioni. Per ogni comando esiste un certo numero di opzioni che possono essere dettagliate digitando uno dei comandi seguenti :
comando --help
comando -?
man comando

Entrate-uscite standard

All'esecuzione di un comando, viene creato un processo. Questo va allora ad aprire tre flussi :

  • stdin, detto entrata standard, nel quale il processo va a leggere i dati in entrata. Da default stdin corrisponde alla tastiera; STDIN è identificato dal numero 0;
  • stdout, detto uscita standard, nel quale il processo va a scrivere i dati in uscita. Da default stdout corrisponde allo schermo; STDOUT è identificato dal numero 1;
  • stderr, detto errore standard, nel quale il processo va a scrivere i messaggi di errore. Da default stderr corrisponde allo schermo. STDERR è identificato con il numero 2;

entrate-uscite standard: STOUT, STDIN, STDERR

Da default quando si esegue un programma, i dati sono quindi letti partendo dalla tastiera e il programma invia la sua uscita e i suoi errori sullo schermo, ma è possibile leggere i dati partendo da qualsiasi periferica in entrata, anche da un file e invi

Ridirezione

Linux, come tutti i sistemi di tipo Unix, ha dei meccanismi che permettono di ridirigere le entrate-uscite standard verso dei file.

Quindi, l'uso del carattere «>» permette di ridirigere l'uscita standard di un comando posto a sinistra verso il file posto a destra :

ls -al /home/jf/ > toto.txt
echo "Toto" > /etc/miofilediconfigurazione
Il comando seguente è equivalente ad una copia di file :
dato che toto > toto2
La ridirezione «>» ha come scopo di creare un nuovo file. Così, se esistesse un file con lo stesso nome, questo sarà eliminato. Il comando seguente crea semplicemente un file vuoto :
> file
L'uso di un doppio carattere «>>» permette di concatenare l'uscita standard verso il file, cioè di aggiungere l'uscita dopo il file, senza eliminarlo.

In modo analogo, il carattere «<» indica una ridirezione dell'entrata standard. Il comando seguente invia il contenuto del file toto.txt in entrata del comando cat, il cui scopo è di visualizzare il contenuto sull'uscita standard (esempio inutile ma formativo) :

cat < toto.txt

Infine l'uso della ridirezione «<<» permette di leggere sull'entrata standard fino a quello che la linea posta a destra sia incontrata. Così, l'esempio seguente leggerà l'entrata standard fino a che non trovi la parola STOP, poi visualizzerà il risultato :

cat << STOP

Tubi di comunicazione (pipes)

I tubi (in inglese « pipes », letteralmente tubi) costituiscono un meccanismo di comunicazione proprio a tutti i sistemi UNIX. Un tubo, simbolizzato da una sbarra verticale (carattere «|»), permette di attribuire l'uscita standard di un comando all'entrata standard di un altro, come un tubo

Così nell'esempio seguente, l'uscita standard del comando ls -al è inviata sul programma sort incaricato di smistare per ordine alfabetico :

ls -al | sort

In questo modo è possibile incatenare un certo numero di comandi per tubi successivi. Nell'esempio seguente il comando visualizza tutti i file della cartella corrente, seleziona le linee che contengono la parola "zip" (grazie al comandogrep) e conta il numero di linee totale :

ls -l | grep zip | wc -l


Ultime modificazione ilvenerdì 6 febbraio 2009 alle 16:52:01


Questo documento intitolato «  » da Kioskea (it.kioskea.net) è reso disponibile sotto la licenza Creative Commons. È possibile copiare, modificare le copie di questa pagina, alle condizioni previste dalla licenza, come questa nota appare chiaramente.