Un esempio è /dev/null. È un file speciale presente in ogni singolo sistema Linux. Tuttavia, a differenza della maggior parte degli altri file virtuali, invece di leggere, viene utilizzato per scrivere. Qualunque cosa scrivi a /dev/null verrà scartata, dimenticata nel vuoto. È noto come dispositivo nullo in un sistema UNIX.
Perché dovresti voler gettare qualcosa nel vuoto?? Vediamo cos'è /dev/null e il suo utilizzo.
Prerequisiti
Prima di approfondire l'uso di /dev/null, dobbiamo avere una chiara comprensione del stdout e stderr flusso di dati. Dai un'occhiata a questa guida approfondita su standard, stderr, e stdout.
Facciamo un rapido aggiornamento. Ogni volta che viene eseguita un'utilità della riga di comando, genera due output. L'uscita va a stdout e l'errore (se generato) va a stderr. Per impostazione predefinita, entrambi questi flussi di dati sono associati al terminale.
Ad esempio, il seguente comando stamperà la stringa tra virgolette doppie. Qui, l'output è memorizzato in stdout.
$ echo “Ciao mondo”
Il comando successivo ci mostrerà lo stato di uscita del comando eseguito in precedenza.
$ eco $?
Poiché il comando precedente è stato eseguito correttamente, lo stato di uscita è 0. In caso contrario, lo stato di uscita sarà diverso. Cosa succede quando provi a eseguire un comando non valido?
$ adfadsf$ eco $?
Ora, dobbiamo conoscere il descrittore di file. Nell'ecosistema UNIX, questi sono valori interi assegnati a un file. Tutti e due stdout (descrittore di file = 1) e stderr (descrittore di file = 2) avere un descrittore di file specifico. Utilizzando il descrittore di file (1 e 2 in questa situazione), possiamo reindirizzare il stdout e stderr ad altri file.
Per cominciare, il seguente esempio reindirizzerà il stdout del comando echo in un file di testo. Qui, non abbiamo specificato il descrittore di file. Se non specificato, verrà utilizzato bash stdout per impostazione predefinita.
$ echo “Hello World” > log.TXT
Il seguente comando reindirizzerà il stderr in un file di testo.
$ asdfadsa 2> errore.TXT
Usando /dev/null
Reindirizzare l'output a /dev/null
Ora siamo pronti per imparare a usare /dev/null. Innanzitutto, diamo un'occhiata a come filtrare l'output normale e l'errore. Nel comando seguente, grep proverà a cercare una stringa (ciao, in questo caso) nella directory "/sys".
$ grep -r ciao /sys/
Tuttavia, genererà molti errori poiché senza il privilegio di root, grep non può accedere a un numero di file. In tal caso, risulterà in errori di "Autorizzazione negata". Ora, usando il reindirizzamento, possiamo ottenere un output più chiaro.
$ grep -r ciao /sys/ 2> /dev/null
L'output sembra molto migliore, giusto? Niente! In questo caso, grep non ha accesso a molti file e quelli che sono accessibili non hanno la stringa "ciao".
Nell'esempio seguente, eseguiremo il ping di Google.
$ ping google.come
Tuttavia, non vogliamo vedere tutti quei risultati di ping di successo. Invece, vogliamo concentrarci solo sugli errori quando il ping non è riuscito a raggiungere Google. Come lo facciamo?
$ ping google.com 1> /dev/null
Qui, il contenuto di stdout vengono scaricati in /dev/null, lasciando solo gli errori.
Reindirizza tutto l'output a /dev/null
In determinate situazioni, l'output potrebbe non essere affatto utile. Usando il reindirizzamento, possiamo scaricare tutto l'output nel vuoto.
$ grep -r ciao /sys/ > /dev/null 2>&1
Rompiamo un po' questo comando. Per prima cosa, scarichiamo tutti i stdout a /dev/null. Quindi, nella seconda parte, diciamo a bash di inviare stderr per stdout. In questo esempio, non c'è niente da produrre. Tuttavia, se sei confuso, puoi sempre controllare se il comando è stato eseguito correttamente.
$ eco $?
Il valore è 2 perché il comando ha generato molti errori.
Se tendi a dimenticare il descrittore di file di stdout e stderr, il seguente comando andrà bene. È un formato più generalizzato del comando precedente. Tutti e due stdout e stderr verrà reindirizzato a /dev/null.
$ grep -r ciao /sys/ &> /dev/null
Altri esempi
Questo è interessante. Ricorda lo strumento dd? È un potente strumento per convertire e copiare file. Ulteriori informazioni su dd. Usando dd, possiamo testare la velocità di lettura sequenziale del tuo disco. Certo, non è una misurazione accurata. Tuttavia, per un test rapido, è piuttosto utile.
$ dd se=
Qui, ho usato Ubuntu 18.04.4 ISO come file grande.
Allo stesso modo, puoi anche testare la velocità di download della tua connessione Internet.
$ wget -O /dev/null
Pensieri finali
Si spera che tu abbia una chiara comprensione di cosa sia questo file /dev/null. È un dispositivo speciale che, se scritto su di esso, scarta e se letto da, legge null. Il vero potenziale di questa interessante funzionalità è negli interessanti script bash.
Sei interessato allo scripting bash?? Dai un'occhiata alla guida per principianti allo scripting bash.
Godere!