GNU/Linux >> Linux Esercitazione >  >> Linux

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

/dev/null è un file pseudo-dispositivo in Linux, che viene utilizzato per scartare l'output proveniente dai programmi, specialmente quelli eseguiti sulla riga di comando. Questo file si comporta come un sink, ovvero un file di destinazione che può essere scritto, tuttavia non appena un flusso di dati viene scritto su questo file, viene immediatamente eliminato.

Questo è utile per eliminare l'output che non è richiesto dall'utente. Programmi e processi possono generare registri di output di enorme lunghezza e a volte diventa complicato analizzare il registro.

Ad esempio, a volte vengono generati due errori da un programma, ma i registri degli errori vengono persi da qualche parte tra centinaia di registri dei messaggi informativi. In tal caso, possiamo scaricare i log dei messaggi informativi su /dev/null .

Nell'esempio sopra, l'errore emesso da un programma è chiamato STDERR (Errore standard ) in Linux ed è rappresentato dall'intero '2' , mentre l'output di successo e di informazioni è chiamato STDOUT (Uscita standard ), ed è rappresentato dall'intero '1' .

Ora, potresti aver visto molto spesso la seguente istruzione della riga di comando, che scarta entrambi STDERR e STDOUT su /dev/null .

$ command_name > /dev/null 2>&1

Cerchiamo di capire cosa significa.

L'operatore '>' è chiamato operatore di reindirizzamento. Reindirizza l'output al file specificato dopo di esso, che in questo caso è /dev/null , invece di stamparlo sul terminale.

Significa TUTTI l'output del comando viene reindirizzato a /dev/null con il '>' operatore? No. Se utilizzato come mostrato sopra, l'operatore reindirizza solo a STDOUT .

Quindi, abbiamo l'ultima parte del comando. '2>&1' significa:reindirizzare STDERR (2) a STDOUT (1) . Il motivo per cui dobbiamo specificare '&1' e non semplicemente '1' è semplicemente scrivere '1' reindirizzerà l'output a un file di testo con il nome '1' . Con la e commerciale (&) il sistema riconosce che il 1 non è un nome file, ma il descrittore di file STDOUT .

Pertanto, reindirizziamo STDOUT su /dev/null e STDERR a STDOUT e in tal modo, l'output completo dei programmi viene scartato in /dev/null .

Ad esempio, eseguendo il comando mv con e senza '>/dev/null 2>&1' .

Senza reindirizzamento:

$ mv tmp.txt test/tmp2.txt /tmp

Con reindirizzamento di STDOUT:

$ mv tmp.txt test/tmp2.txt /tmp > /dev/null

Con reindirizzamento di STDOUT e STDERR:

$ mv tmp.txt test/tmp2.txt /tmp > /dev/null 2>&1
Conclusione

In questo articolo, abbiamo cercato di capire qual è il significato della frase di comando comunemente usata in Linux:'> /dev/null 2>&1' . Se vuoi saperne di più su "/dev/null ' in modo più approfondito, puoi farlo qui.

Se hai domande o commenti, faccelo sapere nei commenti qui sotto!


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

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

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

  4. DD da /dev/zero a /dev/null... cosa succede realmente

  5. È sbagliato collegare /dev/random a /dev/urandom su Linux?

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

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

Che cos'è /dev/null in Linux

/dev/null in Linux

ls -l output nella directory /dev del sistema Unix/Linux

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