Em termos técnicos, “/ dev / null” é um arquivo de dispositivo virtual. No que diz respeito aos programas, eles são tratados como arquivos reais. Os utilitários podem solicitar dados desse tipo de fonte, e o sistema operacional os alimenta com os dados. Mas, em vez de ler do disco, o sistema operacional gera esses dados dinamicamente. Um exemplo de tal arquivo é “/ dev / zero.”
Neste caso, entretanto, você gravará em um arquivo de dispositivo. O que quer que você escreva para “/ dev / null” é descartado, esquecido, jogado no vazio. Para entender por que isso é útil, você deve primeiro ter um conhecimento básico da saída padrão e do erro padrão em sistemas operacionais do tipo Linux ou * nix.
stdout e stder
Um utilitário de linha de comando pode gerar dois tipos de saída. A saída padrão é enviada para stdout. Os erros são enviados para stderr.
Por padrão, stdout e stderr estão associados à janela do terminal (ou console). Isso significa que qualquer coisa enviada para stdout e stderr é normalmente exibida na tela. Mas, por meio de redirecionamentos de shell, você pode alterar esse comportamento. Por exemplo, você pode redirecionar stdout para um arquivo. Dessa forma, em vez de exibir a saída na tela, ela será salva em um arquivo para você ler mais tarde – ou você pode redirecionar o stdout para um dispositivo físico, digamos, um LED digital ou display LCD.
Um artigo completo sobre canais e redirecionamentos está disponível se você quiser saber mais.
- Com
2>
você redireciona mensagens de erro padrão. Exemplo:2>/dev/null
ou2>/home/user/error.log
. - Com
1>
você redireciona a saída padrão. - Com
&>
você redireciona o erro padrão e a saída padrão.
Use / dev / null para se livrar da saída que você não precisa
Como existem dois tipos de saída, saída padrão e erro padrão, o primeiro caso de uso é filtrar um tipo ou outro. É mais fácil entender por meio de um exemplo prático. Digamos que você esteja procurando uma string em “/ sys” para encontrar arquivos que se referem às configurações de energia.
grep -r power /sys/
Haverá muitos arquivos que um usuário comum não root não poderá ler. Isso resultará em muitos erros de “Permissão negada”.

Isso confunde a saída e torna mais difícil localizar os resultados que você está procurando. Como os erros de “permissão negada” fazem parte do stderr, você pode redirecioná-los para “/ dev / null.”
grep -r power /sys/ 2>/dev/null

Como você pode ver, isso é muito mais fácil de ler.
Em outros casos, pode ser útil fazer o inverso: filtrar a saída padrão para que você possa ver apenas os erros.
ping google.com 1>/dev/null

A captura de tela acima mostra que, sem redirecionar, o ping exibe sua saída normal quando pode alcançar a máquina de destino. No segundo comando, nada é exibido enquanto a rede está online, mas assim que ela é desconectada, apenas mensagens de erro são exibidas.
Você pode redirecionar stdout e stderr para dois locais diferentes.
ping google.com 1>/dev/null 2>error.log
Nesse caso, as mensagens stdout não serão exibidas e as mensagens de erro serão salvas no arquivo “error.log”.
Redirecionar todas as saídas para / dev / null
Às vezes, é útil eliminar toda a saída. Existem duas maneiras de fazer isso.
grep -r power /sys/ >/dev/null 2>&1
A corda >/dev/null
significa “enviar stdout para / dev / null” e a segunda parte, 2>&1
, significa enviar stderr para stdout. Neste caso, você deve se referir a stdout como “& 1” em vez de simplesmente “1”. Escrever “2> 1” apenas redirecionaria o stdout para um arquivo chamado “1”.
O que é importante observar aqui é que a ordem é importante. Se você reverter os parâmetros de redirecionamento como este:
grep -r power /sys/ 2>&1 >/dev/null
não funcionará como pretendido. Isso porque assim que 2>&1
é interpretado, stderr é enviado para stdout e exibido na tela. Em seguida, stdout é suprimido quando enviado para “/ dev / null.” O resultado final é que você verá erros na tela em vez de suprimir todas as saídas. Se você não consegue se lembrar da ordem correta, há um redirecionamento mais simples que é muito mais fácil de digitar:
grep -r power /sys/ &>/dev/null
Nesse caso, &>/dev/null
equivale a dizer “redirecionar stdout e stderr para este local”.
Outros exemplos onde pode ser útil redirecionar para / dev / null
Digamos que você queira ver a rapidez com que seu disco pode ler dados sequenciais. O teste não é extremamente preciso, mas é preciso o suficiente. Você pode usar dd
para isso, mas o dd produz saída para stdout ou pode ser instruído a gravar em um arquivo. Com of=/dev/null
você pode dizer ao dd para gravar neste arquivo virtual. Você nem mesmo precisa usar redirecionamentos de shell aqui. if=
especifica a localização do arquivo de entrada a ser lido; of=
especifica o nome do arquivo de saída, onde escrever.
dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct

Em alguns cenários, você pode querer ver a rapidez com que pode fazer download de um servidor. Mas você não quer gravar em seu disco desnecessariamente. Simplesmente, não escreva em um arquivo normal, escreva em “/ dev / null.”
wget -O /dev/null http://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso
Conclusão
Esperançosamente, os exemplos neste artigo podem inspirá-lo a encontrar suas próprias maneiras criativas de usar “/ dev / null.”
Conhece um caso de uso interessante para este arquivo de dispositivo especial? Deixe um comentário abaixo e compartilhe o conhecimento!