La redirezione su Linux

La redirezione è una funzione del sistema operativo Linux che consente di inviare l'output di un comando come input del comando successivo tramite una pipe ( standard output ). Allo stesso modo si può usare come input un altro comando o un file ( standard input ).

Per redirigere l'output del comando si utilizza il simbolo maggiore > o >>. Per reindirizzare l'input si utilizza il simbolo minore < .

La redirezione può essere attuata sullo standard output, lo standard input e lo standard error. Può anche essere concatenata in azioni di input/output (I/O).

Nota. Il sistema operativo Linux associa un file a ogni dispositivo di input o di output. In questo modo è più facile gestire i flussi di input/output verso un dispositivo ed eventualmente reindirizzarlo verso altri.

Lo standard output

Nel sistema operativo Linux lo standard output di default è lo schermo.

E' indicato con l'abbreviazione stdout o con il descrittore di file numero 1.

un esempio pratico di standard output

Tuttavia, è possibile reindirizzare l'output anche verso altri dispositivi. Ad esempio, scriverlo in un file.

Per reindirizzare l'output si utilizza il simbolo > o >>.

Nota. Il simbolo > equivale alla forma estesa 1>. Nella forma estesa l'operatore di redirezione indica esplicitamente il numero del descrittore di file da usare ( 1=standard output ).

Un esempio pratico

Quando digito il comando ls l'output viene visualizzato sullo schermo.

Per redirigere l'output di LS su un file, basta aggiungere il simbolo > seguito dal nome del file.

ls -l > prova.txt

In questo modo, Linux salva le informazioni di LS su un file.

Nota. Se il file non esiste nella directory corrente, viene creato. Se invece già esiste, il suo contenuto viene sovrascritto.

Per aggiungere le informazioni in coda al file senza cancellare il contenuto precedente, basta sostituire il simbolo maggiore (>) con il doppio maggiore (>>).

ls -l >> prova.txt

Per fare una verifica posso visualizzare il contenuto del file appena creato con il comando CAT oppure con un editor di testo ( es. Nano ).

l'output del comando LS è stato salvato in un file

Lo standard input

Lo standard input di default su Linux è la tastiera.

E' indicato con l'abbreviazione stdin o con il descrittore di file numero zero (0).

come funziona lo standard input

Per reindirizzare l'input si utilizza il simbolo minore ( < ).

Nota. Il simbolo < equivale alla forma estesa 0<. Nella forma estesa l'operatore di redirezione specifica il numero del descrittore di file da prendere in considerazione ( 0=standard input ).

Un esempio pratico

Per usare il contenuto di un file come input di un comando, scrivo il nome del file dopo il simbolo minore

sort < prova.txt

In questo modo imposto il file prova.txt come input del primo comando ( SORT ).

Il comando SORT ordina il contenuto del file prova.txt e lo visualizza sullo schermo.

il risultato del reindirizzamento input

Il comando non modifica il contenuto del file, non ordina i record al suo interno, perché modifica soltanto la visualizzazione sullo schermo.

Lo standard error

Lo standard error di default su Linux è lo schermo.

E' indicato con l'aggregazione stderr e con il descrittore di file numero due.

come funziona lo standard error

Per modificare la direzione dei messaggi di errore posso indicare la nuova destinazione dopo il simbolo 2>

Esempio

Per salvare il messaggio di errore del comando digito

ls qualcosa 2> errori.txt

Il comando salva il messaggio di errore sul file errori.txt anziché visualizzarlo sullo schermo.

Nota. Il simbolo 2> reindirizza il messaggio di errore ( descrittore 2 ). Se avessi usato il simbolo > avrebbe reindirizzato l'output del comando. Per salvare sia l'output che gli errori si può usare l'operatore di redirezione 2>&1. In questo modo, comunico a Linux di reindirizzare i messaggi di errore verso il descrittore 1. Per indicare il descrittore è necessario anteporre il simbolo della e commerciale (&). In caso contrario, senza indicare il simbolo &, Linux salverebbe gli errori in un file chiamandolo 1.

Esempio 2

Può capitare di non voler né vedere i messaggi di errore sullo schermo, né salvarli in un file.

Per ottenere questo risultato reindirizzo gli errori verso il dispositivo /dev/null

ls qualcosa 2> /dev/null

In questo modo posso ignorare gli errori senza salvarli.

A cosa serve il file /dev/null? Il file /dev/null è una destinazione speciale. E' un file senza contenuti. Anche reindirizzandogli l'output o gli errori, il sistema operativo non può salvarli al suo interno.

Come concatenare le redirezioni input / output

Le redirezioni possono essere concatenate in un unico comando di input/output digitato sulla linea dei comandi.

Esempio

Il seguente comando ordina il contenuto del file prova.txt ma, anziché visualizzarlo sullo schermo, lo salva nel file prova2.txt

sort < prova.txt > prova2.txt

Nel precedente comando concatenato ho usato sia una redirezione di input (<) che una redirezione di output (>).

Altri esempi pratici

Nel seguente esempio la pipe è composta dalla concatenazione di due comandi.

tar cf - prova* | gzip > prova.tgz

Il primo comando della pipe, a sinistra del simbolo |, è il comando TAR.

Crea un file archivio con tutti i file prova* della

Nota. Nel comando tar non è indicato il nome del file perché è un file intermedio. Al suo posto c'è il simbolo meno ( - ).

Il secondo comando è GZIP.

Il comando GZIP prende in input l'output del comando precedente tramite il simbolo maggiore ( > ).

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Libri di approfondimento

Linux

FAQ