In Linux, i programmi sono molto comunemente accessibili utilizzando la riga di comando e l'output, in quanto tale, viene visualizzato sullo schermo del terminale. L'output è composto da due parti:STDOUT (Uscita standard ), che contiene registri di informazioni e messaggi di successo, e STDERR (Errore standard ), che contiene messaggi di errore.
Molte volte, l'output contiene molte informazioni che non sono rilevanti e che utilizzano inutilmente le risorse di sistema. Soprattutto nel caso di script di automazione complessi, dove ci sono molti programmi in esecuzione uno dopo l'altro, il registro visualizzato è enorme.
In questi casi, possiamo utilizzare lo pseudo-dispositivo file '/dev/null 'per reindirizzare l'output. Quando l'output viene reindirizzato a /dev/null , viene immediatamente scartato e quindi non avviene alcun utilizzo delle risorse.
Vediamo come reindirizzare l'output a /dev/null in Linux.
Prendiamo un esempio del comando mv che tenta di spostare due file in una directory particolare, dove un file è stato spostato correttamente (visualizza STDOUT ) e l'altro restituisce un errore durante lo spostamento (visualizza STDERR ).
$ mv -v tmp.c /etc/apt/sources.list /tmp
Nota :Il '-v'
argomento a mv visualizza il registro di successo quando un file viene spostato. Senza la bandiera, non viene stampato nulla su STDOUT .
Ora, per reindirizzare solo STDOUT su /dev/null , ovvero per eliminare lo standard output, utilizzare quanto segue:
$ mv -v tmp.c /etc/apt/sources.list /tmp 1>/dev/null
Cosa significa "1>/dev/null"?
Qui '1'
indica STDOUT , che è un intero standard assegnato da Linux per lo stesso. L'operatore '>'
, chiamato operatore di reindirizzamento, scrive i dati in un file. Il file specificato in questo caso è /dev/null . Quindi, i dati vengono infine scartati.
Se è stato fornito un altro file invece di /dev/null , l'output standard sarebbe stato scritto in quel file.
Allo stesso modo, per reindirizzare solo STDERR su /dev/null , usa il numero intero '2'
invece di '1'
. Il numero intero '2'
sta per errore standard.
$ mv -v tmp.c /etc/apt/sources.list /tmp 2>/dev/null
Come puoi vedere, l'errore standard non viene visualizzato sul terminale ora poiché viene eliminato in /dev/null .
Infine, per eliminare entrambi gli STDOUT e STDERR allo stesso tempo, utilizzare quanto segue:
$ mv -v tmp.c /etc/apt/sources.list /tmp &>/dev/null
Il carattere e commerciale ('&')
denota che sia l'output standard che l'errore standard devono essere reindirizzati a /dev/null e scartato. Quindi, nell'ultimo screenshot, non vediamo alcun output stampato sullo schermo.
Conclusione
In questo articolo, abbiamo visto come reindirizzare l'output a /dev/null . Lo stesso può essere utilizzato in entrambi i comandi o in complessi script Bash che generano una grande quantità di log. Nel caso in cui lo script necessiti di debugging o debba essere testato; in questi casi, il log è necessario per visualizzare e analizzare correttamente gli errori.
Tuttavia, nei casi in cui l'output è già noto e anticipato, può essere eliminato con /dev/null . Se hai domande o feedback, faccelo sapere nei commenti qui sotto!