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 è 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»),bash («Bourne again shell»), csh («C Shell»), Tcsh («Tenex C shell»), ksh («Korn shell») e zsh («Zero 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
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 :
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
All'esecuzione di un comando, viene creato un processo. Questo va allora ad aprire tre flussi :
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
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/miofilediconfigurazioneIl comando seguente è equivalente ad una copia di file :
dato che toto > toto2La 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 :
> fileL'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
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