ChimeraRevo – Il punto di riferimento della tecnologia
menubar
Home > Guide > Redirezione nel terminale –…

Redirezione nel terminale – Parte 3: descriptor, standard error e conclusioni

Gaetano Abatemarco Mar 07, 2015

Siamo giunti all’ultima puntata della nostra piccola guida a quella che è la redirezione nel terminale: nella prima puntata abbiamo avuto modo di introdurre i concetti di input ed output e gli operatori principali (angolari e pipe), mentre nella parte successiva abbiamo analizzato i filtri più comuni applicandoli a diversi scenari.

shell

In questa parte andremo ad introdurre il concetto di standard error, quello di file descriptor e, infine, andremo a creare qualche comando utile combinando quanto appreso fino ad esso.

Redirezione nel terminale: Parte 1 – Angolari e pipe

Redirezione nel terminale: Parte 2 – I filtri 

Redirezione nel terminale: Parte 3 – File descriptor, standard error e conclusioni (vi trovate qui)

Redirezione nel terminale – Lo standard error

Fino ad ora abbiamo teso a generalizzare l’output di un comando come “ciò che il comando restituisce”, tuttavia prima di entrare nel discorso file descriptor è bene introdurre un altro tipo di eventuale restituzione da parte di un comando: gli errori. Si, perché se la maggior parte delle distribuzioni Linux mostra sia l’output che gli errori di esecuzione di un comando a terminale, il sistema operativo fa invece distinzione tra standard output e standard error.

Per standard error si intende quella parte in cui vengono dirottati i messaggi d’errore restituiti da un qualunque comando. Facciamo un esempio per comprenderne il funzionamento: dato un programma pincopallino in grado di ordinare alfabeticamente un qualsiasi file, è possibile far si che questo mostri a terminale i messaggi di output (le righe ordinate), mentre vada a salvare in un file di log i messaggi d’errore generati (ad esempio “File non trovato” o “Spazio su disco insufficiente per eseguire l’operazione”).

Questo tipo di distinzione è particolarmente usata dai programmatori sia per fini di debug che per comodità; tra qualche secondo, dopo aver introdotto il concetto di file descriptor, andremo a capire come.

Redirezione nel terminale – I file descriptor

Di norma, un programma per essere eseguito ha bisogno che venga aperto (in lettura, scrittura o entrambe le direzioni) almeno un file. Generalmente Linux identifica ciascun file aperto da qualsiasi programma con un numero intero: questo numero intero prende il nome di file descriptor.

Detto ciò, quando abbiamo parlato di filesystem abbiamo ricordato che Linux riconosce come file qualsiasi cosa, e in qualsiasi cosa andiamo ad includere anche le periferiche o i file da cui si prende input, le periferiche o i file su cui si rilascia output e le periferiche o i file su cui si rilasciano gli errori.

Ebbene, per impostazione predefinita all’atto dell’esecuzione di un programma Linux apre almeno 3 file, associati ad altrettanti file descriptor:

  • lo standard input, con file descriptor 0, è di norma la periferica da cui il programma riceve input, quindi la tastiera;
  • lo standard output, con file descriptor 1, è di norma il posto su cui il programma mostra l’output, quindi il terminale (identificato come /dev/ttyX o /dev/psX);
  • lo standard error, con file descriptor 2, è di norma il posto su cui si mostrano gli errori generati dal programma, che potrebbe corrispondere al terminale stesso oppure, a discrezione del programmatore, ad un file di log.

Ora, quando si invoca un programma e lo si accompagna con un operatore di redirezione, i file descriptor non vengono specificati in quanto sottintesi dal sistema operativo; in particolare (da notare che tra l’operatore di redirezione ed il file descriptor non c’è spazio)

  • se il primo operatore di redirezione di un’espressione è <, questa si intende riferita allo standard input; scrivere sort -n < lista_numeri.txt è equivalente a scrivere sort -n 0< lista_numeri.txt;
    sort1
  • se il primo operatore di redirezione di un’espressione è >, questa si intende riferita allo standard output; scrivere ls > lista_file.txt è equivalente a scrivere ls 1> lista_file.txt.
    ls1

Detto ciò, andiamo un po’ a giocare con questi file descriptor unendoli agli operatori di redirezione.

Redirezione nel terminale – esempi d’uso con file descriptor

Il comando

ls > lista_file 2>&1

andrà a redirigere sia lo standard output che lo standard error generati dal comando ls nel file lista_file (senza specificare la redirezione dello standard error, questo sarebbe stato mostrato a video senza essere salvato nel file). Notate come a destra dell’operatore > il file descriptor 1 sia preceduto dal simbolo “&”: in questo caso, la “&” dice al sistema operativo di interpretare il carattere successivo come un file descriptor e non come il nome di un file.

ls3

Come vi ho spiegato poc’anzi, Linux fa distinzione tra standard output e standard error. Ciò significa che se potrete visualizzare “a scorrimento” l’output di un comando usando il pipe un qualsiasi filtro (head, tail, more, less e via dicendo), ciò non succederà con gli errori – che saranno mostrati tutti in un colpo. A meno che non scriviate un comando del tipo

netstat 2>&1 | less

che a redirigere lo standard error (2) nello standard output, passando quest’ultimo al comando less. Ciò significa, in parole povere, che tutti gli errori saranno mostrati nello standard output e dati in pasto al comando less, che vi permetterà di vederli “a scorrimento”.

Con l’ultimo comando di questa lista andiamo a vedere la vera e propria differenza tra standard output e standard error: presi due terminali diversi, andremo ad invocare un comando sul primo mostrando gli eventuali errori su un secondo terminale. 

ls4

Infine, l’ultimo comando “demo” che voglio suggerire riguarda il filtro tee: esso permette infatti, sempre grazie al pipe, di mostrare l’output sia su standard output che su un certo numero di file. Ad esempio, il comando

ps aux | tee processi1 processi2 processi3

mostrerà la lista dei processi in esecuzione a terminale (standard output) e salverà la stessa lista nei file processi1, processi2 e processi3. 

Conclusioni

Gli operatori di redirezione sono un toccasana sia per l’utente home che per il professionista (sistemisti, programmatori e via dicendo) e permettono di ottenere risultati soddisfacenti minimizzando l’utilizzo di comandi accessori – evitando spesso sequenze lunghissime. Quelli mostrati nella nostra guida sono stati soltanto esempi, tuttavia è possibile combinare operatori, filtri e file descriptor in modo da creare programmi, script e alias che possano soddisfare le proprie esigenze.

Usare la redirezione non è un affare particolarmente compresso: con i cenni teorici ricevuti grazie alla nostra guida, un po’ di fantasia ed un minimo di pratica si possono ottenere risultati assolutamente soddisfacenti!

La migliore Fotocamera Compatta da comprare nel 2021

10 ore fa

In questa guida all’acquisto sempre aggiornata vi aiuteremo a scegliere la migliore fotocamera compatta per le vostre esigenze. Accomunate dall’impiego di un’ottica fissa – solitamente zoom – e da dimensioni ridotte, la facilità d’uso delle fotocamere compatte le rende leggi di più…

migliore fotocamera compatta

Fotocamere compatte Canon: le migliori da comprare nel 2021

10 ore fa

In questa guida all’acquisto sempre aggiornata vi mostreremo quali sono le migliori fotocamere compatte Canon attualmente disponibili sul mercato. Ci sono tanti motivi che spingono l’azienda nipponica a puntare sul mondo delle compatte, il principale è quello leggi di più…

migliori fotocamere compatte canon

Fotocamera compatta Fujifilm: le migliori da comprare nel 2021

10 ore fa

In questa guida d’acquisto sempre aggiornata vi mostreremo le migliori fotocamere compatte Fujifilm per le vostre esigenze. Come avremo modo di approfondire nel corso della guida questi dispositivi di nicchia nascono da una serie di leggi di più…

miglior fotocamera compatta fujifilm

Fotocamera Compatta Leica: le migliori da comprare nel 2021

10 ore fa

In questa guida sempre aggiornata vi introdurremo all’acquisto della miglior fotocamera compatta Leica per le vostre esigenze. Il brand tedesco non ha di certo bisogno di molte presentazioni: la sua qualità costruttiva e l’impeccabile cura nei dettagli leggi di più…

miglior fotocamera compatta Leica

Come capire se la TV supporta il DVB-T2

13 ore fa

Il DVB-T2, ovvero il nuovo standard che l’Italia adotterà per la visione dei canali TV, è sempre più vicino; difatti questo nuovo standard sarà disponibile a partire dal 2022. La quasi totalità dei telespettatori si leggi di più…

Come capire se la TV supporta il DVB T2 1

Iscriviti alla Newsletter

Articoli recenti

  • La migliore Fotocamera Compatta da comprare nel 2021
  • Fotocamere compatte Canon: le migliori da comprare nel 2021
  • Fotocamera compatta Fujifilm: le migliori da comprare nel 2021
  • Fotocamera Compatta Leica: le migliori da comprare nel 2021
  • Come capire se la TV supporta il DVB-T2
  • Chi siamo
  • Lavora con noi
  • Contattaci
  • Privacy

Copyright © 2020. Tutti i diritti riservati. ChimeraRevo SRL - P.I.: IT05544220659

Modifica impostazioni sulla privacy