Linux - La shell

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

La shell è incaricata di fare da intermediario tra il sistema operativo e l'utente mediante dei comandi inseriti 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 in uscite:

Le shell, une coquille entre l\
La shell è anche un file eseguibile incaricato di interpretare i comandi, di trasmetterli al sistema di rinviare il risultato. Esistono più shell, fra le più diffuse sh (dette «Bourne shell») ci sono bashBourne again shell»), cshC Shell»), TcshTenex C shell»), kshKorn shell») e zshZero shell»). I loro nomi corrispondono generalmente al nome dell'eseguibile.

Ogni utente ha una shell di default, che viene avviata all'apertura di un prompt. La shell di default è precisata nel file di configurazione /etc/passwd nell'ultimo campo della linea corrispondente all'utente. È possibile cambiare shell in una sezione eseguendo semplicemente il file eseguibile corrispondente, ad esempio:

 /bin/bash

.

Prompt

La 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 come segue:

terminale:/directory/attuale$

.

Per default nella maggior parte delle 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 della shell nonché da alcuni parametri opzionali:

ls -al /home/nome_utente/

.

Nel comando qui sopra, ls è il nome del comando, -al e /home/nome_utente/ 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

Ingresso-uscita standard

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

stdin, detto ingresso 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 letti 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 che permettono di reindirizzare le entrate-uscite standard verso dei file. Così, l'utilizzo del carattere «>» permette di reindirizzare l'uscita standard di un comando posto a sinistra verso il file posto a destra:

ls -al /home/nome_utente/ > lista.txt
echo "lista" > /etc/file_di_configurazione

Il comando seguente è equivalente ad una copia di file:

cat lista1 > lista2

. 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 lista.txt in entrata del comando cat, il cui solo scopo è di visualizzare il contenuto sull'uscita standard (esempio inutile ma formativo):

cat < lista.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 (pipe)

I pipe (in italiano «tubi") costituiscono un meccanismo di comunicazione proprio ad ogni sistema UNIX. Un pipe, 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 totale delle linee:

ls -l | grep zip | wc -l

.

Foto: © Pixabay.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Linux - La shell » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.