L'interprete di comandi è l'interfaccia tra l'utente e il sistema operativo, da cui il suo nome in inglese «shell», che significa «conchiglia».
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»), bash («Bourne again shell»), csh («C Shell»), Tcsh («Tenex C shell»), ksh («Korn shell») et zsh («Zero 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
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 :
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
All'esecuzione di un comando, si crea un processo. Questo va ad aprire tre flussi :
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.
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/miofilediconfigurazioneIl comando seguente è equivalente ad una copia di file :
cat toto > toto2La 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 :
> fileL'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
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