Linux - Lo shell

Introduzione allo shell

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

Le shell, une coquille entre l\'OS et l\'utilisateur

Lo shell è così incaricato di fare da intermediario tra il sistema operativo e l'utente mediante delle linee di comandi inserite da quest'ultimo. Il suo ruolo consiste quindi nel leggere la linea di comando, interpretare il suo significato, eseguire il comando e poi rinviare il risultato alle uscite.

Lo shell è anche un file eseguibile incaricato di interpretare i comandi, di trasmetterli al sistema di rinviare il risultato. Esiston più shell, fra i più diffusi sh (detto «Bourne shell»), bashBourne again shell»), cshC Shell»), TcshTenex C shell»), kshKorn shell») et zshZero shell»). I loro nomi corrispondono generalmente al nome dell'eseguibile.

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

/bin/bash

Prompt

Lo shell si inizializza leggendo la propria configurazione globale (in un file della cartella /etc/), poi leggendo la configurazione propria dell'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 prompt promptcome segue :

machine:/repertoire/courant$
Per default nella maggiorparte 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 dal sistema oppure da un comando dello shell nonché da alcuni parametri opzionali :

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

Entrata-uscita standard

All'esecuzione di un comando, si crea un processo. Questo va ad aprire tre flussi :

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

entrées-sorties standard : STDOUT, STDIN, STDERR

Da default all'esecuzione di un programma, i dati sono quindi LUES partendo dalla tastiera e il programma invia la propria uscita e i propri errori sullo schermo, ma è possibile leggere i dati partendo da qualsiasi periferica d'entrata, anche da un file e inviare l'uscita su una periferica di visualizzazione, un file, ecc.

Ridirezione

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

Così, l'utilizzo del carattere «>» permette di rindirizzare 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 :
cat toto > toto2
La ridirezione «>» ha lo scopo di creare un nuovo file. Quindi, se esiste un file con lo stesso nome, questo sarà eliminato. Il comando successivo crea semplicemente un file vuoto :
> file
L'impiego di un doppio carattere «>>» permette di concatenare l'uscita standard al file, cioè aggiungere l'uscita al file, senza eliminarlo.

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

cat < toto.txt

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

cat << STOP

Tubi di comunicazione (pipes)

I tubi (in inglese «pipes", tuyaux) costituiscono un meccanismo di comunicazione proprio ad ogni sistema UNIX. Un tubo, simbolizzato da una barra verticale (carattere «|»), permette di attribuire l'uscita standard di un comando all'entrata standard di un'altra.

Così nell'esempio seguente, l'uscita standard del comando ls -al è inviato al programma sort incaricato di smistare il risultato in ordine alfabetico :

ls -al | sort

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

ls -l | grep zip | wc -l


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


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.