Este documento fornece uma introdução aos conceitos básicos de redirecionamento de fluxos de entrada e saída em sistemas Linux, descrevendo fluxos padrão, operadores de redirecionamento como >, >>, <, | e exemplos de seu uso.
Boas práticas de programação com Object Calisthenics
Operadores de redirecionamento
1. Instalação e configuração de Sistemas Operacionais de Redes
Operadores de
Redirecionamento
Profª Ivani Nascimento
2. Apresentação
Um shell Linux, como bash, recebe entrada e envia saída como
sequências ou fluxos de caracteres. Cada caractere é independente
do que vem antes e do que vem depois dele. Os caracteres não são
organizados em registros estruturados ou blocos de tamanho fixo.
Fluxos são acessados utilizando técnicas de E/S (Entrada/Saída)
de arquivo, não importa se o fluxo de caracteres real vem de ou vai
para um arquivo, um teclado, uma janela em um monitor ou outro
dispositivo de E/S.
3. Apresentação
Shells Linux usam três fluxos de E/S padrão, cada um dos quais é
associado com um descritor de arquivo:
• Entrada padrão (stdin) – Entrada de um fluxo de dados, podendo
ser destacado o teclado. Todos eles alimentam o computador com
informações. O descritor é representado pelo número 0.
• Saída padrão (stdout) – Saída de um fluxo de dados em condições
normais. Exemplos: monitor, impressora, arquivos, etc. O descritor
é representado pelo número 1.
• Saída de erro (stderr) – Saída de um fluxo de dados em condições
de erro ou insucesso em um determinado processamento, que
poderá ser direcionada para o monitor ou arquivo de LOG. O
descritor é representado pelo número 2.
4. Apresentação
• Fluxos de entrada fornecem entrada para programas, normalmente
de digitações em um terminal.
• Fluxos de saída imprimem caracteres de texto, normalmente para o
terminal.
• O terminal era originalmente uma máquina de escrever ASCII ou
terminal de exibição, mas agora é mais frequentemente uma janela
de texto em uma área de trabalho gráfica.
5. > (Redirecionamento simples)
• Redireciona a saída padrão de um programa/comando/script para
algum dispositivo ou arquivo ao invés do dispositivo de saída
padrão (tela).
• Quando é usado com arquivos, este redirecionamento cria ou
substitui o conteúdo do arquivo.
• Por exemplo:
o O comando ls é utilizado para listar arquivos. Para enviar a saída
para um arquivo, utilizar:
# ls > listagem.txt
o Para visualizar o conteúdo do arquivo listagem.txt:
# cat listagem.txt
6. > (Redirecionamento simples)
• O mesmo comando pode ser redirecionado para o segundo console
/dev/tty2 usando:
# ls >/dev/tty2
• Dessa forma, o resultado do comando ls será mostrado no segundo
console (em modo texto, pressionar ALT e F2 para mudar para o
segundo console e ALT e F1 para retornar ao primeiro).
• Outro exemplo:
# ls 1>/dev/tty2
• Assim, o número 1 indica que será capturada a saída padrão do
comando. Para redirecionar para um arquivo somente a saída de
erros do comando ls:
# ls 2>/tmp/erros-do-ls
7. >> (Redirecionamento duplo)
• Redireciona a saída padrão de um programa/comando/script para
algum dispositivo ou adiciona as linhas ao final de arquivo ao invés
do dispositivo de saída padrão (tela).
• A diferença entre este redirecionamento duplo e o simples, é se
caso for usado com arquivos, adiciona a saída do comando ao final
do arquivo existente ao invés de substituir seu conteúdo.
• Por exemplo, é possível acrescentar a saída do comando ls ao
arquivo listagem.txt do exemplo anterior usando:
# ls / >> listagem.txt.
• Para visualizar o conteúdo do arquivo listagem.txt:
# cat listagem.txt
8. <
• Direciona a entrada padrão de arquivo/dispositivo para um
comando. Este comando faz o contrário do anterior, ele envia
dados ao comando.
• Por exemplo, é possível usar o comando cat < teste.txt para enviar
o conteúdo do arquivo teste.txt ao comando cat que mostrará seu
conteúdo (é claro que o mesmo resultado pode ser obtido com cat
teste.txt mas este exemplo serviu para mostrar a funcionalidade do
<).
9. <<
• Este redirecionamento serve principalmente para marcar o fim de
exibição de um bloco. É especialmente usado em conjunto com o
comando cat, mas também tem outras aplicações. Por exemplo:
# cat << final
> este arquivo sera exibido
> ate que a palavra final
> comece a linha
> final
este arquivo sera exibido
ate que a palavra final
comece a linha
10. | (pipe)
• Envia a saída de um comando para a entrada do próximo comando
para continuidade do processamento. Os dados enviados são
processados pelo próximo comando que mostrará o resultado do
processamento.
• Exemplos:
# ls -la | more
• O comando acima faz a listagem longa de arquivos que é enviado
ao comando more (que tem a função de efetuar uma pausa a cada
25 linhas do arquivo).
11. | (pipe)
# locate find | grep "bin/"
/sbin/findfs
/usr/bin/find
/usr/bin/find2perl
• No exemplo acima, todos os caminhos/arquivos que contém find
na listagem serão mostrados (inclusive man pages, bibliotecas,
etc.).
• Dessa forma, para realizar um filtro, é utilizado o comando "bin/"
para mostrar somente os diretórios que contém binários. E ainda
que a listagem ocupe mais de uma tela, é possível acrescentar o
comando more:
# locate find | grep "bin/" | more
12. Referências
MORIMOTO, Carlos E.. Linux, guia prático. Porto
Alegre: Sul Editores, 2009.
FERREIRA, Rubem E.. Linux: guia do administrador
do sistema. São Paulo: Novatec, 2008.
MOTA FILHO, João Eriberto. Descobrindo o Linux:
entenda o sistema operacional GNU/linux. São
Paulo: Novatec, 2007.
13. Referências
• RIBEIRO, Uirá, Certificação Linux, 1ª Ed, Rio de
Janeiro, Axcel Books, 2004.
• Certificação Linux LPI- Nível 1 Exames 101 e 102.
Vários, 1ª Ed, São Paulo, Alta Books.
• NORTON, Peter; GRIFFITH, Arthur. Guia
Completo do Linux. Tradução Sérgio Facchim –
Complete Guide to Linux. São Paulo, Berkeley,
2000.