Cosa fa esattamente 2>/dev/null?

What Exactly Does 2 Dev Null Do

Che tu sia un nuovo utente Linux o un programmatore bash esperto, è molto probabile che tu abbia incontrato il comando criptico 2>/dev/null. Sebbene questo comando sembri tecnicamente complesso, il suo scopo è molto semplice. Si riferisce a un dispositivo nullo utilizzato per sopprimere gli output di vari comandi. Questo articolo analizzerà ogni parte del comando 2>/dev/null, ne spiegherà lo scopo e vedrà esempi di come viene utilizzato.

Dispositivo nullo – '/dev/null'

Tutti i sistemi basati su Linux hanno una funzionalità chiamata dispositivi virtuali. Questi dispositivi virtuali interagiscono come file reali nel sistema operativo. Il funzionamento di tali dispositivi virtuali è simile ai dispositivi reali; sono usati per scrivere e leggere dati. La differenza principale tra i due è che i dati per i dispositivi virtuali sono forniti dal sistema operativo.



/dev/null è un dispositivo nullo, un tipo speciale di dispositivo virtuale. È presente in ogni sistema Linux e lo scopo di questo dispositivo è eliminare qualsiasi cosa gli sia stata inviata e leggere l'End of File (EOF). La maggior parte dei dispositivi virtuali viene utilizzata per leggere i dati; tuttavia, /dev/null è univoco poiché viene utilizzato per sopprimere tutti i dati scritti su di esso. In parole semplici, funge da buco nero per tutti i dati che vengono scritti su di esso nei sistemi operativi Linux.



Ora, diamo un'occhiata alle parti rimanenti del comando 2 > /dev/null



Descrittore di file – '2'

Ogni esecuzione di comando in Linux genera tre file associati: input standard, output standard e file di errore standard. Il sistema operativo Linux fa riferimento a ciascuno di questi file con un numero intero non negativo univoco.

  • '0' per l'input standard
  • '1' per uscita standard
  • '2' per errore standard

I termini tecnici per input standard, output standard e flussi di errore standard sono rispettivamente stdin, stdout e stderr.

Sappiamo che il numero '2' nel comando '2>/dev/null' si riferisce al flusso di errore standard (stderr).



Operatore di reindirizzamento file – '>'

Il simbolo '>' è noto come operatore di reindirizzamento dei file. Il suo scopo è indirizzare ciò che è alla sua sinistra ai comandi sul lato destro. In parole più semplici, qualsiasi stringa di dati a sinistra sarà diretta al lato destro dell'operatore.

Finora abbiamo capito lo scopo dietro ogni componente del comando 2>/dev/null. Invia il flusso di errore a /dev/null, che lo scarta. In altre parole, questo comando viene utilizzato per scartare e sopprimere le uscite di errore. Tuttavia, se sei un veterano esperto di Linux, puoi guardare il contenuto del file /dev/null eseguendo il seguente comando nel terminale:

$ls -l /sviluppo/nullo

Questo comando viene in genere utilizzato negli scenari in cui è necessario filtrare l'output in base agli errori o quando si desidera eliminare qualsiasi output associato a descrizioni errate. Andando avanti, esamineremo esempi del suo utilizzo su un sistema Ubuntu.

Usando 2>/dev/null

Poiché sappiamo che il comando 2>/dev/null viene utilizzato per eliminare gli errori, verrà sempre utilizzato insieme ad altri comandi. Vedremo un approccio simile nei seguenti esempi. Puoi aprire il terminale accedendovi tramite il menu delle applicazioni o utilizzando la scorciatoia da tastiera Ctrl + Alt + T.

Nel primo esempio, condurremo una ricerca nella directory /sys/ per una stringa casuale (helloworld in questo caso). Il comando per la ricerca è grep e il suo argomento sarà la stringa di ricerca. Inserisci il seguente comando per cercare la tua stringa.

$presa -RCiao mondo/sistema/

Questo comando di ricerca è destinato a visualizzare numerosi errori poiché viene utilizzato senza accesso root. Invieremo il suo flusso di errori a /dev/null utilizzando il comando 2>/dev/null per eliminare questi errori.

$presa -RCiao mondo/sistema/ 2> /sviluppo/nullo

Possiamo vedere che l'output del comando è molto più ordinato e semplice dell'ultimo. Il motivo è che gli errori vengono eliminati utilizzando 2> /dev/null e, poiché il comando grep non è stato in grado di trovare alcun file che corrisponda alla nostra stringa 'helloworld', non mostra alcun output.

Per comprendere meglio l'utilizzo di /dev/null, esamineremo il seguente esempio di ping di qualsiasi sito Web (google.com nel nostro caso). Puoi eseguire il ping su google.com eseguendo il seguente comando:

$pingGoogle come

Se desideriamo escludere tutti i ping falliti, possiamo usare il comando 2>/dev/null:

$pingGoogle come2> /sviluppo/nullo

In questo caso, il flusso di errore standard (che mostra i ping non riusciti a google.com) viene inviato al dispositivo virtuale /dev/null che li elimina.

Tuttavia, se desideriamo vedere solo i ping falliti, possiamo eseguire il seguente comando:

$pingGoogle come1> /sviluppo/nullo

Qui, inviamo il flusso di output standard (stdout) al dispositivo /dev/null che lo scarta. Di conseguenza, ci rimangono solo i ping che non sono riusciti a raggiungere il server google.com. Tuttavia, nel nostro caso, non ci sono stati ping falliti. Possiamo anche indirizzare stdout e stderr in posizioni diverse. Questo è utile se vogliamo eliminare l'output e memorizzare gli errori in un registro o viceversa. È possibile eseguire il comando seguente per memorizzare i ping non riusciti in un log degli errori mentre si scarta l'output standard del comando ping:

$pingGoogle come1> /sviluppo/nullo2>errore.log

A volte, potresti voler sopprimere tutto l'output di un comando (inclusi l'output standard e gli errori standard). Possiamo ottenere ciò utilizzando il dispositivo /dev/null in un modo leggermente diverso. È possibile digitare il seguente comando per sopprimere tutto l'output:

$pingGoogle come> /sviluppo/nullo2> &1

Nota che l'ordine dei comandi qui è molto importante. Dopo aver eseguito il comando ping, '>/dev/null' indica al sistema di sopprimere l'output e '2>&1' indirizza il flusso di errore standard all'output standard. In questo modo, tutto l'output del comando viene scartato.

Conclusione

Abbiamo analizzato il comando 2>/dev/null e semplici esempi in questo articolo e, si spera, ora capisci cosa fa ogni parte di esso. Tuttavia, questa è solo la punta dell'iceberg; i dispositivi null sono utilizzati in molti modi nella programmazione bash. Alcuni degli usi più avanzati includono il controllo dell'esistenza dei file, l'automazione delle installazioni dei pacchetti ed evitare che gli script vengano eseguiti in eccezioni indesiderate.