Redirecionamento de entrada e saída em exemplos de Linux/Unix

⚡ Resumo Inteligente

Em Linux e Unix, o redirecionamento altera o local onde um comando lê a entrada ou envia a saída, ou seja, troca de local.ping o teclado e a tela para arquivos ou dispositivos usando operadores como o sinal de maior que, o sinal de menor que e o operador de anexação.

  • 🔀 Redirecionamento: O redirecionamento altera a entrada ou saída padrão de um comando, do teclado e da tela para um arquivo ou dispositivo.
  • ➡️ Saída: O operador > escreve a saída em um arquivo, enquanto >> anexa conteúdo a um arquivo existente sem apagá-lo.
  • ⬅️ Entrada: O operador < utiliza um arquivo como entrada padrão para um comando, em vez do teclado.
  • 🔢 Descritores de arquivo: Cada arquivo aberto recebe um número: 0 para stdin, 1 para stdout e 2 para stderr.
  • ⚠️ Redirecionamento de erro: Usar 2> envia mensagens de erro para um arquivo separado, para que elas não poluam a saída normal.
  • 🔗 Fluxos combinados: A sintaxe 2>&1 direciona o erro padrão para o mesmo destino que a saída padrão.
  • 🤖 Ajuda da IA: Assistentes de IA e o GitHub Copilot podem criar e explicar comandos de redirecionamento e scripts de shell.

Redirecionamento de entrada e saída no Linux e Unix com exemplos

O redirecionamento é uma das funcionalidades mais úteis do Linux e o shell Unix, porque permite que você decida onde um comando lê sua entrada e envia sua saída. Esta página explica o redirecionamento de saída, entrada e erros com exemplos práticos.

O que é redirecionamento?

O redirecionamento é um recurso do Linux que permite alterar os dispositivos de entrada e saída padrão ao executar um comando. Esse é o fluxo de trabalho básico de qualquer sistema. Comando Linux É que recebe uma entrada e fornece uma saída.

  • O dispositivo de entrada padrão (stdin) é o teclado.
  • O dispositivo de saída padrão (stdout) é a tela.

Com o redirecionamento, a entrada e a saída padrão acima podem ser alteradas.

Redirecionamento de saída

O gráfico abaixo marca o início dos exemplos de redirecionamento de saída.

Gráfico de cabeçalho da seção de redirecionamento de saída

O símbolo '>' é usado para redirecionamento de saída (STDOUT).

Exemplo:

ls -al > listings

Aqui, a saída do comando `ls -al` é redirecionada para o arquivo "listings" em vez de ser exibida na sua tela. A captura de tela abaixo mostra o resultado.

Terminal mostrando a listagem do comando `ls -al` redirecionada para o arquivo de listagens.

Nota: Use o nome de arquivo correto ao redirecionar a saída do comando para um arquivo. Se um arquivo com o mesmo nome já existir, o comando redirecionado apagará o conteúdo dele e o sobrescreverá.

Se você não deseja sobrescrever um arquivo, mas quer adicionar mais conteúdo a um arquivo existente, use o operador '>>'. A captura de tela abaixo mostra o conteúdo adicionado com '>>'.

Terminal mostrando a saída de um comando anexada a um arquivo existente com o operador "maior que" duplo.

Você pode redirecionar a saída padrão não apenas para arquivos, mas também para dispositivos.

$ cat music.mp3 > /dev/audio

O comando "cat" lê o arquivo de música.mp3 e envia a saída para /dev/audio, que é o dispositivo de áudio. Se a configuração de som do seu PC estiver correta, este comando reproduzirá o arquivo de música.mp3.

Redirecionamento de entrada

O gráfico abaixo apresenta o redirecionamento de entrada.

Título gráfico da seção de redirecionamento de entrada

O símbolo '<' é usado para redirecionamento de entrada (STDIN).

Exemplo: O programa de e-mail do Linux permite enviar e-mails a partir do terminal.

Você pode digitar o conteúdo do e-mail usando o teclado, o dispositivo de entrada padrão. Mas, se quiser anexar um arquivo ao e-mail, você pode usar o operador de redirecionamento de entrada no seguinte formato.

mail -s "Subject" to-address < Filename

A captura de tela abaixo mostra o comando mail lendo um arquivo como entrada.

Comando mail usando redirecionamento de entrada para anexar um arquivo a um e-mail

Isso anexa o arquivo ao e-mail, que é então enviado ao destinatário.

Os exemplos acima foram simples. Agora, observe algumas técnicas avançadas de redirecionamento que utilizam descritores de arquivo.

Envie o Descriptors (FD)

Em Linux e Unix, tudo é um arquivo. Arquivos comuns, diretórios e até mesmo dispositivos são arquivos. Cada arquivo possui um número associado chamado descritor de arquivo (FD).

O diagrama abaixo mostra os fluxos padrão e seus descritores de arquivo.

Diagrama dos fluxos padrão de entrada, saída e erro e seus descritores de arquivo.

Sua tela também possui um descritor de arquivo. Quando um programa é executado, a saída é enviada para o descritor de arquivo da tela, e você vê a saída do programa no seu monitor. Se a saída fosse enviada para o descritor de arquivo da impressora, a saída do programa seria impressa.

Redirecionamento de erros

Sempre que você executa um programa ou comando no terminal, três arquivos são mantidos abertos: a entrada padrão, a saída padrão e o erro padrão.

Esses arquivos estão sempre presentes quando um programa é executado. Como explicado anteriormente, um descritor de arquivo está associado a cada um desses arquivos.

Envie o Envie o Descriptor
Entrada padrão STDIN 0
Saída padrão STDOUT 1
Erro padrão STDERR 2

Por padrão, o fluxo de erros é exibido na tela. O redirecionamento de erros direciona os erros para um arquivo que não seja exibido na tela.

Por que redirecionamento de erros?

O redirecionamento de erros é um dos recursos mais populares do Unix e do Linux.

Usuários frequentes de Unix sabem que muitos comandos geram uma quantidade enorme de erros. Por exemplo, ao procurar arquivos, normalmente se obtém o seguinte erro: permissão Erros de acesso negado geralmente não ajudam quem está procurando um arquivo específico. Ao executar scripts de shell, muitas vezes não se deseja que mensagens de erro interfiram na saída normal do programa.

A solução é redirecionar as mensagens de erro para um arquivo.

Exemplo 1

$ myprogram 2>errorsfile

A captura de tela abaixo mostra esse comando no terminal.

O terminal que executava meu programa apresentou erro padrão, redirecionando o usuário para o arquivo de erros.

Acima, estamos executando um programa chamado myprogram. O descritor de arquivo para erro padrão é 2. Usando “2>”, redirecionamos a saída de erro para um arquivo chamado “errorsfile”. Assim, a saída do programa não fica poluída com erros.

Exemplo 2

Aqui está outro exemplo que utiliza a instrução find.

find . -name 'my*' 2>error.log

Usando o comando find, estamos procurando no diretório atual “.” por um arquivo cujo nome começa com “my” e enviando quaisquer erros para error.log.

3 exemplo: Vejamos um exemplo mais complexo.

Administradores de servidores frequentemente listam diretórios e armazenam tanto a saída de erro quanto a saída padrão em um arquivo, que pode ser processado posteriormente. Aqui está o comando.

ls Documents ABC> dirlist 2>&1

O diagrama abaixo mostra os dois fluxos sendo capturados em um único arquivo.

Diagrama da saída padrão e do erro padrão, ambos redirecionados para o arquivo dirlist.

Aqui:

  • 2>&1 significa que STDERR é redirecionado para o mesmo destino que STDOUT (que é a lista de diretórios de arquivos).
  • A saída de erro é redirecionada para a saída padrão, que por sua vez é redirecionada para o arquivo dirlist. Portanto, ambos os fluxos são gravados no arquivo dirlist.

O diagrama abaixo resume como a entrada, a saída e o redirecionamento de erros se encaixam.

Diagrama que resume a entrada, a saída e o redirecionamento de erros no Linux e no Unix.

Perguntas Frequentes

A tubo O operador | envia a saída de um comando diretamente para outro comando como sua entrada. O redirecionamento, por sua vez, conecta um comando a um arquivo ou dispositivo, escrevendo a saída nele ou lendo a entrada. Os pipes unem comandos; o redirecionamento une um comando a um arquivo.

O operador > escreve a saída de um comando em um arquivo, substituindo qualquer conteúdo existente. O operador >> anexa a saída ao final do arquivo, mantendo o conteúdo existente.ping O que já está lá. Use >> sempre que quiser adicionar algo a um arquivo em vez de sobrescrevê-lo.

/dev/null é um arquivo especial que descarta tudo o que é gravado nele. Adicionar 2>/dev/null a um comando redireciona suas mensagens de erro para esse arquivo, descartando-as silenciosamente para que apenas a saída normal seja exibida na tela. É uma maneira comum de ocultar informações de erro indesejadas.

O comando `tee` lê da entrada padrão e escreve os dados simultaneamente na tela e em um ou mais arquivos, por exemplo, `ls -al | tee listing.txt`. Ele permite salvar a saída de um comando em um arquivo enquanto a visualiza na tela.

Um documento "here" usa o operador << para inserir várias linhas de texto em linha em um comando como entrada, terminando em uma palavra marcadora escolhida por você. É útil em scripts de shell para passar entradas de várias linhas, como o corpo de um e-mail, sem a necessidade de um arquivo separado.

Use a sintaxe 2>&1 após redirecionar a saída, como em `command > file 2>&1`, para que o erro padrão siga a saída padrão para o arquivo. No Bash moderno, o comando abreviado `&> file` faz a mesma coisa. A ordem importa: coloque `2>&1` após o redirecionamento da saída.

Assistentes de IA podem transformar uma solicitação em linguagem natural no comando de redirecionamento correto, explicar o que operadores como 2>&1 ou &> fazem e sinalizar erros antes que você os execute. Ferramentas de aprendizado de máquina também analisam arquivos de log e de erro redirecionados para identificar anomalias que uma revisão manual não detectaria.

Sim. Travas deslizantes portáteis Copiloto do GitHub É possível gerar comandos e scripts que redirecionam entradas, saídas e erros a partir de um breve comentário que descreve o objetivo, e executá-los conforme você digita. RevVeja qualquer comando sugerido para seus arquivos, especialmente aqueles que usam > que sobrescrevem dados existentes.

Resuma esta postagem com: