O que exatamente 2>/dev/null faz?

O que exatamente 2>/dev/null faz?
Seja você um novo usuário do Linux ou um programador de bash experiente, é altamente provável que você encontre o comando enigmático 2>/dev/null. Embora este comando pareça tecnicamente complexo, seu propósito é muito simples. Refere -se a um dispositivo nulo usado para suprimir saídas de vários comandos. Este artigo quebrará cada parte do comando 2>/dev/null, explicar seu objetivo e ver exemplos de como ele é usado.

Dispositivo nulo - '/dev/null'

Todos os sistemas baseados em Linux têm um recurso chamado Dispositivos Virtuais. Esses dispositivos virtuais interagem como arquivos reais no sistema operacional. O funcionamento de tais dispositivos virtuais é semelhante a dispositivos reais; Eles são usados ​​para escrever e ler dados. A principal diferença entre os dois é que os dados para os dispositivos virtuais são fornecidos pelo sistema operacional.

/dev/null é um dispositivo nulo-um tipo especial de dispositivo virtual. Está presente em todos os sistemas Linux, e o objetivo deste dispositivo é descartar qualquer coisa enviada a ele e ler o final do arquivo (EOF). A maioria dos dispositivos virtuais é usada para ler dados; No entanto, /dev /null é único, pois é usado para suprimir qualquer dados escritos para ele. Em palavras simples, ele atua como um buraco negro para quaisquer dados que sejam gravados em sistemas operacionais Linux.

Agora, vamos dar uma olhada nas partes restantes do comando 2> /dev /null

Descritor de arquivo - '2'

Toda execução de comando no Linux gera três arquivos associados: entrada padrão, saída padrão e arquivos de erro padrão. O sistema operacional Linux refere-se a cada um desses arquivos com um número inteiro não negativo exclusivo.

  • '0' para entrada padrão
  • '1' para saída padrão
  • '2' para erro padrão

Os termos técnicos para entrada padrão, saída padrão e fluxos de erro padrão são stdin, stdout e stderr, respectivamente.

Sabemos que o número '2' no comando '2>/dev/null' refere -se ao fluxo de erro padrão (stderr).

Operador de redirecionamento de arquivos - '>'

O símbolo '>' é conhecido como operador de redirecionamento de arquivos. Seu objetivo é direcionar o que está para a esquerda para os comandos no lado direito. Em palavras mais simples, qualquer sequência de dados à esquerda será direcionada para o lado direito do operador.

Até agora, entendemos o propósito por trás de cada componente do comando 2>/dev/null. Ele envia o fluxo de erros para /dev /null, que o descarta. Em outras palavras, este comando é usado para descartar e suprimir saídas de erro. No entanto, se você é um veterano de Linux experiente, pode olhar para o conteúdo do arquivo /dev /null executando o seguinte comando no terminal:

$ ls -l /dev /null

Este comando é normalmente usado em cenários em que precisamos filtrar a saída com base em erros ou quando queremos descartar qualquer saída associada a descrições errôneas. Avançando, estaremos analisando exemplos de seu uso em um sistema Ubuntu.

Usando 2>/dev/null

Como sabemos que o comando 2>/dev/null é usado para descartar erros, ele sempre será usado em conjunto com outros comandos. Veremos uma abordagem semelhante nos exemplos a seguir. Você pode abrir o terminal acessando -o através do menu Aplicativos ou usando o atalho do teclado Ctrl + Alt + T.

No primeiro exemplo, estaremos conduzindo uma pesquisa no / sys / diretório de uma string aleatória (Helloworld neste caso). O comando de pesquisa é grep, e seu argumento será a string de pesquisa. Digite o seguinte comando para pesquisar sua string.

$ grep -r helloworld /sys /

Este comando de pesquisa deve exibir vários erros, pois está sendo usado sem acesso à raiz. Enviaremos seu fluxo de erros para/dev/null usando o comando 2>/dev/null para descartar esses erros.

$ grep -r helloworld /sys /2> /dev /null

Podemos ver que a saída do comando é muito mais negra e mais simples que a última. O motivo é que os erros estão sendo descartados usando 2> /dev /null e, como o comando Grep não conseguiu encontrar qualquer arquivo que corresponda à nossa string 'Helloworld', ele não mostra nenhuma saída.

Para entender melhor o uso de /dev /null, estaremos analisando o seguinte exemplo de ping em qualquer site (Google.com no nosso caso). Você pode ping ping google.com executando o seguinte comando:

$ ping google.com

Se desejarmos excluir todos os pings falhados, podemos usar o comando 2>/dev/null:

$ ping google.com 2> /dev /null

Nesse caso, o fluxo de erro padrão (que mostra os pings falhados no Google.com) é enviado ao dispositivo virtual /dev /nulo que os descarta.

No entanto, se desejarmos ver apenas os pings com falha, podemos executar o seguinte comando:

$ ping google.com 1> /dev /null

Aqui, enviamos o fluxo de saída padrão (stdout) para o dispositivo /dev /nulo que o descarta. Consequentemente, só ficamos com os pings que não conseguiram chegar ao Google.com servidor. No entanto, no nosso caso, não houve pings fracassados. Também podemos direcionar o stdout e o stderr para diferentes locais. Isso é útil se queremos descartar a saída e armazenar erros em um log ou vice -versa. Você pode executar o seguinte comando para armazenar os pings com falha em um log de erros enquanto descarta a saída padrão do comando ping:

$ ping google.com 1> /dev /null 2> erro.registro

Em ocasiões, você pode suprimir toda a saída de um comando (incluindo saída padrão e erros padrão). Podemos conseguir isso usando o dispositivo /dev /nulo de uma maneira ligeiramente diferente. Você pode digitar o seguinte comando para suprimir toda a saída:

$ ping google.com>/dev/null 2> & 1

Observe que a ordem dos comandos aqui é muito importante. Depois de executar o comando ping, '>/dev/null' diz ao sistema para suprimir a saída e '2> & 1' direciona o fluxo de erro padrão para a saída padrão. Dessa forma, toda a saída do comando é descartada.

Conclusão

Dissecamos o comando 2>/dev/null e exemplos simples neste artigo, e espero que agora você entenda o que cada parte dele faz. No entanto, essa é apenas a ponta do iceberg; Os dispositivos nulos são usados ​​de várias maneiras na programação de bash. Alguns dos usos mais avançados incluem a verificação da existência de arquivos, automatizando as instalações de pacotes e evitando scripts de se deparar com exceções indesejadas.