Que é / dev / null e como pode axudarche?

Se xa temos algunhas nocións da árbore de directorios GNU / Linux, polo menos deberiamos estar familiarizados coa referencia / dev /, que é efectivamente onde están todos os ficheiros relacionados dispositivos de hardware.

Se buscamos no directorio / dev / veremos un "ficheiro" chamado nulo, pero se queremos abrilo para ver o seu contido, o sistema diranos que non é posible xa que non é contido ordinario. Puxen a palabra ficheiro porque, como todos sabedes para Linux, todo (hardware e software) represéntase como un ficheiro.

Esta é unha contribución de Daniel Durante, converténdose así nun dos gañadores da nosa competición semanal: «Comparte o que sabes sobre Linux«. Parabéns Daniel!

A que dispositivo corresponde / dev / null?

A efectos prácticos, imaxina un colector de lixo, un pozo sen fondo ou espazo exterior no que tirar calquera cousa sen a posibilidade de recuperalo (por moito que o intenten os rapaces da NASA).

Pero se xa teño comandos como rm, por que quero eliminar algo novo?

Porque o xeito no que funcionan ambos os "buracos negros" é completamente diferente: como se podería substituír a saída estándar dun erro nun comando dentro dun script de shell no tempo de execución? Aquí é onde entra / dev / null.

Vexámolo cun exemplo.

Creamos un ficheiro chamado tests que contén a cadea "Hello World". Se queremos representar o contido dese ficheiro na liña de comandos, poderiamos facelo do seguinte xeito:

usuario @ portátil: ~ $ proba de gato
Ola Mundo

Se o ficheiro non existise ou se nomease como probas (cunha "s" ao final), obteríamos o seguinte erro na consola:

usuario @ portátil: ~ $ probas de gato
cat: tests: o ficheiro ou directorio non existe

Que podemos facer para evitar a mensaxe de erro? Ben, simplemente redirixa a saída do comando, en caso de erro, a unha "papeleira", é dicir a / dev / null

Como o especificamos en caso de erro? Aquí introduce os valores de entrada, saída e erro estándar dun programa: STDIN, STDOUT e STDERR (que poden substituírse por 0, 1 e 2 respectivamente). Deste xeito, se poñemos ...

usuario @ portátil: ~ $ cat tests 2> / dev / null
usuario @ portátil: ~ $

... Veremos que a mensaxe de erro non se producirá na consola.

Hai que ter coidado porque a sintaxe é esencial: entre os caracteres 2 e> non debe haber espazo. En caso contrario, daría o seguinte:

usuario @ portátil: ~ $ cat tests 2> / dev / null
cat: tests: o ficheiro ou directorio non existe
cat: 2: O ficheiro ou directorio non existe

Pola contra, un espazo entre> e / dev / null non afectará negativamente o resultado.

Tamén poderiamos usar a redirección de erros, por exemplo, para capturar erros nun ficheiro de rexistro como segue:

usuario @ portátil: ~ $ cat tests 2> err.log

Outro caso interesante sería a recollida de resultados noutro ficheiro sempre que non se produza un erro, para o que poñeríamos:

usuario @ portátil: ~ $ cat test 1> output_result 2> err.log

Finalmente, paga a pena poñer a expresión «> / dev / null 2> & 1» na que se combinan a saída estándar e a saída de erro, redirixíndoas para que en ningún caso se obteña a información de saída.


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

8 comentarios, deixa os teus

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.

  1.   Guido Ignatius Ignatius dixo

    Ah, pero falta unha das utilidades máis usadas que ten / dev / null, que é baleirar ficheiros: $ cat / dev / null> file.log Deste xeito, o ficheiro file.log estará baleiro. Engádeo

    1.    Eduardo H. dixo

      Precisamente era a explicación que buscaba.
      Apoio a moción para engadila =)

      Saúdos!

  2.   Pablo dixo

    Ola, primeiro de todo o artigo é moi bo! o segundo gustaríame aportar algo con esta ligazón sobre o tema traballo cron en php desde Cpanel e o terceiro parabén polo blog!

  3.   Pablo dixo

    Bonito artigo sobre dev / null, que pena creo que comentei por erro nun sitio equivocado antes. Pido desculpas

  4.   Anónimo dixo

    grazas boa contribución

  5.   camisolas dixo

    Saúdos estou a recibir un ataque nulo. Eu uso andrirc e obtengo un privado do meu alcume coa palabra Nulo. 2 segundos despois pecha o programa. Estiven lendo e polo que vexo isto só o pode facer Shell, non alguén externo. Intentei ignorarme / ignorar -lrpcntikd e nada me sorprende que o comando siga chegando. Se tes algunha forma de intentar bloquealo agradeceríao. Graciñas

  6.   Sofía Martínez dixo

    Que pasa se ao executar a frase non se coloca o símbolo>?

    Alguén me podería guiar?

  7.   Cero dixo

    Bos días, instalei Debian netinst en ACER Extensa 5620Z – 32 bits. Unha vez rematada a instalación desde USB e eliminado o pendrive para que arranque dende o disco duro (non reinstale dende o bolígrafo) pero no momento do arranque o sistema pregúntame:
    inicio de sesión debian: xxxxxxxx (ok)
    Contrasinal: xxxxxxxx (ok)
    nil@debian:~$ ???? que é isto? Que debo poñer alí?

    Sen este comando non podo continuar co arranque do sistema.
    Podes axudarme? Non sei como debo continuar.
    Moitas grazas. Saúdos.