/dev/null in Linux è un file di dispositivo nullo. Questo eliminerà tutto ciò che è scritto e restituirà EOF in lettura.
Questo è un hack da riga di comando che agisce come un vuoto, che risucchia qualsiasi cosa gli venga lanciata.
Diamo un'occhiata per capire cosa significa e cosa possiamo fare con questo file.
/dev/null Proprietà
Questo restituirà una fine del file (EOF ) se provi a leggerlo usando il comando cat.
cat /dev/null
Questo è un file valido, che può essere verificato utilizzando
stat /dev/null
Questo mi dà un output di
File: /dev/null Size: 0 Blocks: 0 IO Block: 4096 character special file Device: 6h/6d Inode: 5 Links: 1 Device type: 1,3 Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-02-04 13:00:43.112464814 +0530 Modify: 2020-02-04 13:00:43.112464814 +0530 Change: 2020-02-04 13:00:43.112464814 +0530
Questo mostra che questo file ha una dimensione di 0 byte, ha zero blocchi allocati. Vengono inoltre impostate le autorizzazioni del file in modo che chiunque possa leggerlo/scrivere su di esso, ma non può eseguirlo.
Poiché non è un file eseguibile, non possiamo usare il piping usando |
operatore per reindirizzare a /dev/null
. L'unico modo è utilizzare i reindirizzamenti dei file (>
, >>
o <
, <<
).
Il diagramma seguente mostra che /dev/null
è davvero un file valido.
Diamo ora un'occhiata ad alcuni casi d'uso comuni per /dev/null
.
Reindirizzamento a /dev/null in Linux
Possiamo scartare qualsiasi output di uno script che utilizziamo reindirizzando a /dev/null
.
Ad esempio, possiamo provare a scartare echo
messaggi usando questo trucco.
echo 'Hello from JournalDev' > /dev/null
Non otterrai alcun output poiché è stato scartato!
Proviamo a eseguire un comando in modo errato e inviarlo tramite pipe a /dev/null
.
cat --INCORRECT_OPTION > /dev/null
Otteniamo ancora un output come questo:
cat: unrecognized option '--INCORRECT' Try 'cat --help' for more information.
Perché sta succedendo? Questo perché i messaggi di errore provengono da stderr
, ma stiamo solo scartando l'output da stdout
.
Dobbiamo prendere stderr
anche in considerazione.
Elimina i messaggi di errore
Reindirizziamo lo stderr a /dev/null , insieme a stdout. Possiamo usare il descrittore di file per stderr(=2 ) per questo.
cat --INCORRECT_OPTION > /dev/null 2>/dev/null
Questo ci darà ciò di cui abbiamo bisogno!
C'è un altro modo per fare lo stesso; reindirizzando prima stderr su stdout, quindi reindirizzando stdout su /dev/null .
La sintassi per questo sarà:
command > /dev/null 2>&1
Nota il 2>&1
alla fine. Reindirizziamo stderr(2 ) allo stdout(1 ). Usiamo &1
per indicare alla shell che il file di destinazione è un descrittore di file e non un nome di file.
cat --INCORRECT_OPTION > dev/null 2>&1
Quindi se usiamo 2>1
, reindirizzeremo solo stderr
in un file chiamato 1
. Non è quello che vogliamo!
Conclusione
Si spera che questo chiarisca un po' le cose, in modo che ora tu possa usare /dev/null in Linux, sapendo cosa significa! Sentiti libero di porre domande nella sezione commenti qui sotto.
Riferimenti
- Domanda sull'overflow dello stack