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. |
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.
8 comentarios, deixa os teus
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
Precisamente era a explicación que buscaba.
Apoio a moción para engadila =)
Saúdos!
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!
Bonito artigo sobre dev / null, que pena creo que comentei por erro nun sitio equivocado antes. Pido desculpas
grazas boa contribución
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
Que pasa se ao executar a frase non se coloca o símbolo>?
Alguén me podería guiar?
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.