Què fa exactament 2> / dev / null?

What Exactly Does 2 Dev Null Do



Tant si sou un nou usuari de Linux com si sou un programador bash experimentat, és molt probable que us trobeu amb l'ordre críptic 2> / dev / null. Tot i que aquesta ordre sembla tècnicament complexa, el seu propòsit és molt senzill. Es refereix a un dispositiu nul que s’utilitza per suprimir les sortides de diverses ordres. Aquest article desglossarà cada part de l'ordre 2> / dev / null, explicarà el seu propòsit i veurà exemples de com s'utilitza.

Dispositiu nul: '/ dev / null'

Tots els sistemes basats en Linux tenen una característica anomenada dispositius virtuals. Aquests dispositius virtuals interactuen com fitxers reals al sistema operatiu. El funcionament d'aquests dispositius virtuals és similar als dispositius reals; s’utilitzen per escriure i llegir dades. La principal diferència entre tots dos és que les dades dels dispositius virtuals les subministra el sistema operatiu.







/ dev / null és un dispositiu nul: un tipus especial de dispositiu virtual. Està present a tots els sistemes Linux i el propòsit d’aquest dispositiu és descartar tot allò que se li envia i llegir el final del fitxer (EOF). La majoria de dispositius virtuals s’utilitzen per llegir dades; no obstant això, / dev / null és únic, ja que s'utilitza per suprimir qualsevol dada que s'hi hagi escrit. En paraules simples, actua com un forat negre per a qualsevol dada que s’escrigui als sistemes operatius Linux.



Ara fem una ullada a les parts restants de l'ordre 2> / dev / null



Descriptor de fitxers: '2'

Cada execució d’ordres a Linux genera tres fitxers associats: entrada estàndard, sortida estàndard i fitxers d’error estàndard. El sistema operatiu Linux fa referència a cadascun d’aquests fitxers amb un enter únic no negatiu.





  • '0' per a l'entrada estàndard
  • '1' per a la sortida estàndard
  • '2' per a error estàndard

Els termes tècnics per als fluxos d’entrada estàndard, sortida estàndard i error estàndard són stdin, stdout i stderr, respectivament.

Sabem que el número '2' de l'ordre '2> / dev / null' fa referència al flux d'error estàndard (stderr).



Operador de redirecció de fitxers - '>'

El símbol '>' es coneix com a operador de redirecció de fitxers. El seu propòsit és dirigir el que queda a l'esquerra cap a les ordres del costat dret. En paraules més senzilles, qualsevol cadena de dades a l'esquerra es dirigirà al costat dret de l'operador.

Fins ara hem entès el propòsit de cada component de l'ordre 2> / dev / null. Envia el flux d'error a / dev / null, que el descarta. En altres paraules, aquesta ordre s'utilitza per descartar i suprimir les sortides d'error. Tot i això, si sou un veterà experimentat de Linux, podeu veure el contingut del fitxer / dev / null executant l'ordre següent al terminal:

$ls -la /dev/nul

Aquesta ordre s'utilitza normalment en escenaris on hem de filtrar la sortida en funció d'errors o quan volem descartar qualsevol sortida associada a descripcions errònies. Per avançar, veurem exemples del seu ús en un sistema Ubuntu.

Utilitzant 2> / dev / null

Com que sabem que l'ordre 2> / dev / null s'utilitza per descartar errors, sempre s'utilitzarà conjuntament amb altres ordres. Veurem un enfocament similar en els exemples següents. Podeu obrir el terminal accedint-hi a través del menú d’aplicacions o mitjançant la drecera de teclat Ctrl + Alt + T.

En el primer exemple, realitzarem una cerca al directori / sys / d'una cadena aleatòria (helloworld en aquest cas). L'ordre de cerca és grep i el seu argument serà la cadena de cerca. Introduïu l'ordre següent per cercar la vostra cadena.

$adherència -rHola món/sys/

Aquesta ordre de cerca mostrarà nombrosos errors ja que s’utilitza sense accés root. Enviarem el flux d’errors a / dev / null mitjançant l’ordre 2> / dev / null per descartar aquests errors.

$adherència -rHola món/sys/ 2> /dev/nul

Podem veure que la sortida de l’ordre és molt més senzilla i senzilla que l’anterior. La raó és que s’eliminen els errors mitjançant l’ús de 2> / dev / null i, atès que l’ordre grep no ha pogut trobar cap fitxer que coincideixi amb la nostra cadena ‘helloworld’, no mostra cap sortida.

Per entendre millor l'ús de / dev / null, veurem l'exemple següent de fer ping a qualsevol lloc web (google.com en el nostre cas). Podeu fer ping a google.com executant l'ordre següent:

$pinggoogle.com

Si volem excloure tots els pings fallits, podem utilitzar l'ordre 2> / dev / null:

$pinggoogle.com2> /dev/nul

En aquest cas, el flux d’error estàndard (que mostra els pings fallits a google.com) s’envia al dispositiu virtual / dev / null que els descarta.

Tanmateix, si volem veure només els pings fallits, podem executar l'ordre següent:

$pinggoogle.com1> /dev/nul

Aquí, enviem el flux de sortida estàndard (stdout) al dispositiu / dev / null que el descarta. En conseqüència, només ens queden els pings que no han arribat al servidor de google.com. No obstant això, en el nostre cas, no hi va haver pings fallits. També podem dirigir stdout i stderr a diferents ubicacions. Això és útil si volem descartar la sortida i emmagatzemar els errors en un registre o viceversa. Podeu executar l'ordre següent per emmagatzemar els pings fallits en un registre d'errors mentre es descarta la sortida estàndard de l'ordre ping:

$pinggoogle.com1> /dev/nul2>error.log

De vegades, és possible que vulgueu suprimir tota la sortida d'una ordre (inclosa la sortida estàndard i els errors estàndard). Ho podem aconseguir fent servir el dispositiu / dev / null d’una manera lleugerament diferent. Podeu escriure l'ordre següent per suprimir tota la sortida:

$pinggoogle.com> /dev/nul2> &1

Tingueu en compte que l'ordre de les ordres aquí és molt important. Després d’executar l’ordre ping, ‘> / dev / null’ indica al sistema que suprimeixi la sortida i ‘2> & 1’ dirigeix ​​el flux d’error estàndard a la sortida estàndard. D'aquesta manera, es descarta tota la sortida de l'ordre.

Conclusió

Hem disseccionat l'ordre 2> / dev / null i exemples senzills en aquest article i, amb sort, ara enteneu què fa cada part. Tot i això, aquesta és només la punta de l’iceberg; els dispositius nuls s’utilitzen de moltes maneres en la programació bash. Alguns dels usos més avançats inclouen comprovar l'existència de fitxers, automatitzar les instal·lacions de paquets i evitar que els scripts s'executin en excepcions no desitjades.