Què és / dev / null i com pot ajudar-te?

Si ja posseïm algunes nocions de l'arbre de directoris de GNU / Linux, ha de sonar-nos a el menys la referència / dev /, que és, efectivament on es troben tots els arxius relacionats amb dispositius de maquinari.

Si mirem al directori / Dev / veurem un "arxiu" anomenat nul, Però si volem obrir-lo per veure'n el contingut, el sistema ens dirà que no és possible ja que no és de contingut ordinari. He posat entre cometes la paraula arxiu perquè, com tots sabeu per a Linux tot (maquinari i programari) es representa com un arxiu.

Aquest és una aportació de Daniel Durant, convertint-se així en un dels guanyadors de la nostra competència setmanal: «Vaig compartir el que saps sobre Linux«. Felicitacions Daniel!

A què dispositiu es correspon / dev / null?

A efectes pràctics imagina't una galleda d'escombraries, un pou sense fons o l'espai sideral a què llançar qualsevol cosa sense possibilitat de recuperar-la (per molt que s'entestin els tipus de la Nasa).

Però si ja tinc ordres com rm, ¿per què vull una altra cosa nova que esborri?

Perquè la forma de treballar de tots dos "forats negres" és completament diferent: com faries per anul·lar en temps d'execució la sortida estàndard d'un error en una ordre dins d'un script per a la shell? Aquí és on entra / dev / null.

Anem a veure-ho amb un exemple.

Hem creat un fitxer anomenat proves contenint la cadena "Hola Món". Si volem representar el contingut d'aquest fitxer en la línia d'ordres, podríem fer-ho de la següent manera:

usuari @ laptop: ~ $ cat prova
Hola Món

Si el fitxer no existís o estigués nomenat com a proves (amb una 's' a al final), obtindríem el següent error a la consola:

usuari @ laptop: ~ $ cat proves
cat: proves: No existeix el fitxer o directori

Que podríem fer per evitar el missatge d'error? Doncs senzillament redirigir la sortida de la comanda, en cas d'error, a un "galleda d'escombraries", és a dir a / dev / null

Com especifiquem que sigui en cas d'error? Aquí entren els valors estàndard d'entrada, sortida i error per a un programa: entrada estàndard, sortida estàndard i stderr (que poden ser substituïts per 0, 1 i 2 respectivament). D'aquesta manera, si posem ...

usuari @ laptop: ~ $ cat proves 2> / dev / null
usuari @ laptop: ~ $

... veurem que no es produirà a la consola el missatge d'error.

Cal anar amb compte perquè la sintaxi és fonamental: entre els caràcters 2 i> no ha d'existir espai. Si no, donaria el següent:

usuari @ laptop: ~ $ cat proves 2> / dev / null
cat: proves: No existeix el fitxer o directori
cat: 2: No existeix el fitxer o directori

En canvi, un espai entre> i / dev / null no afectarà negativament el resultat.

També podríem fer servir la redirecció d'errors, per exemple, per a la captura d'errors en un arxiu de log de la següent manera:

usuari @ laptop: ~ $ cat proves 2> err.log

Un altre cas interessant seria la recollida de resultats en un altre fitxer sempre que no es produís un error, per a això posaríem:

usuari @ laptop: ~ $ cat prova 1> resultado_de_salida 2> err.log

Finalment cal posar l'expressió «> / dev / null 2> & 1» en la qual s'uneixen la sortida estàndard i la sortida d'error redireccionándolas perquè en cap cas s'obtingui informació de sortida.