GNU/Linux >> Linux Esercitazione >  >> Linux

/dev/null in Linux

/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

Linux
  1. Come generare una password casuale in Linux usando /dev/random

  2. In che modo Linux gestisce più separatori di percorsi consecutivi (/home////nomeutente///file)?

  3. Linux:differenza tra /dev/console , /dev/tty e /dev/tty0?

  4. Quanto sono portatili /dev/stdin, /dev/stdout e /dev/stderr?

  5. Quando usare /dev/random vs /dev/urandom?

tty (/dev/tty ) vs pts (/dev/pts) in Linux

Che cos'è "/dev/null 2&1" in Linux

Come reindirizzare l'output su /dev/null in Linux

Che cos'è /dev/null in Linux

echo o print /dev/stdin /dev/stdout /dev/stderr

Esiste una directory equivalente a /dev/null in Linux?