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. |
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.
8 comentaris, deixa el teu
Ah però falta una de les utilitats més usades que té / dev / null, que és buidar arxius: $ cat / dev / null> file.log D'aquesta manera, l'arxiu file.log quedar buit. Agréguenlo!
Precisament era l'explicació que estava buscant.
Dono suport a la moció de afegir =)
Salutacions!
Hola, primer que tot està molt bé l'article! el segon voldria aportar alguna cosa amb aquest enllaç sobre el tema cron job en php des Cpanel i el tercer felicitacions pel blog!
Bon article sobre dev / null, que pena crec vaig comentar per error en el lloc equivocat abans! em disculpo
gràcies bona aportació
Salutacions estic rebent atac null. Utilitzo andrirc i m'arriba un privat de mi mateix nick amb la paraula Null. 2 segon després es tanca el programa he estat llegint i pel que veig això només ho pot fer la Shell no algú extern. He tractat d'ignorar-/ ignore -lrpcntikd i Res em sorprèn segueix arribant la comanda. Si tenen alguna forma de tractar de bloquejar-s'ho agrairia. Salutacions
Que passa si a l'executar la sentència no es col·loca el símbol>?
Podria algú orientar-me si us plau?
Bon dia, he instal·lat Debian netinst a ACER Extensa 5620Z – 32 bit. em demana:
debian login: xxxxxxxx (ok)
Password: xxxxxxxx (ok)
nil@debian:~$ ???? això què és? Què he de posar-hi?
Sense aquesta ordre no puc avançar amb l'arrencada del sistema.
Podeu ajudar-me? No sé com he de continuar.
Moltes gràcies. Salutacions cordials.