Pipelines conectam pequenos comandos para que os dados fluam entre eles sem um arquivo intermediário. O comando tee pode copiar parte desse fluxo para um arquivo enquanto continua a encaminhá-lo.
Text-Fu · Lição 4
pipe e tee
Aprenda como pipelines conectam comandos e como tee salva um fluxo enquanto o encaminha.
Conexão de Comandos com |
Suponha que uma listagem de diretório seja longa demais para ler de uma vez:
$ ls -la /etc
Coloque o operador de pipe, |, entre os comandos para conectar stdout do comando à esquerda a stdin do comando à direita:
$ ls -la /etc | less
O shell inicia os comandos do pipeline e organiza a conexão do fluxo. Os comandos podem trabalhar simultaneamente: less pode começar a ler antes que ls produza toda a listagem.
Em ls -la /etc | less, quais fluxos | conecta por padrão?
Manutenção de stderr Separada
Um | simples transporta apenas stdout. Stderr do comando à esquerda mantém seu destino anterior, geralmente o terminal:
$ find /etc -name "*.conf" | less
Os caminhos correspondentes passam pelo pipe, enquanto os diagnósticos de permissão ainda podem aparecer diretamente no terminal. Redirecione stderr separadamente quando precisar de outro comportamento:
$ find /etc -name "*.conf" 2> find-errors.log | less
Em find /etc -name "*.conf" | less, para onde stderr de find normalmente vai quando não há outro redirecionamento?
Cópia de um Fluxo com tee
tee lê stdin, grava uma cópia em cada arquivo indicado e também envia os mesmos dados a stdout:
$ ls | tee listing.txt
Aqui, listing.txt recebe a listagem e stdout de tee continua conectada ao terminal. Por padrão, tee cria ou trunca o arquivo indicado, assim como >.
Qual comando exibe a saída de generate-report e também substitui report.txt pela mesma saída?
Use -a quando o conteúdo deva ser acrescentado ao arquivo em vez de substituí-lo:
$ date | tee -a activity.log
Qual comando exibe a data atual e a acrescenta a activity.log?
Salvamento de um Resultado Intermediário
Coloque tee no meio de um pipeline para salvar um fluxo intermediário e continuar seu processamento:
$ ls -la /etc | tee etc-listing.txt | grep "conf"
Esse pipeline:
- Produz a listagem longa completa.
- Salva o fluxo completo em
etc-listing.txt. - Envia o mesmo fluxo a
grep, que mostra apenas as linhas que contêmconf.
O arquivo contém os dados anteriores ao filtro de grep. Se quiser salvar apenas as linhas filtradas, coloque tee depois de grep.
O que all.txt contém depois que produce | tee all.txt | grep error termina com sucesso?
Para praticar pipelines e cópias de fluxos, experimente estes laboratórios:
- Redirecionamento de Entrada e Saída no Linux — Pratique o controle do fluxo de dados dos comandos manipulando a saída padrão (stdout), o erro padrão (stderr) e a entrada padrão (stdin) com operadores como
>,>>,2>e o comandotee. - Controle de Sequência e Pipeline — Aprenda a controlar sequências de comandos, usar pipelines e aproveitar ferramentas de texto como
cut,grep,wc,sorteuniq. - Redirecionamento de Fluxos de Dados — Aprenda a arte do redirecionamento de fluxos no Linux, incluindo a manipulação dos fluxos de entrada, saída e erro padrão, a combinação de saídas e o uso de
/dev/null.
Lição concluída
Você concluiu pipe e tee
Agora você sabe conectar comandos e preservar pontos escolhidos em um fluxo de dados.
Encaminhe stdout de um comando para stdin de outro.
Redirecione stderr separadamente quando necessário.
Copie a entrada para um arquivo e para stdout com
tee.Acrescente com
tee -aem vez de substituir o arquivo.Posicione
teeantes ou depois de um filtro conscientemente.
Salve seu progresso
Crie uma conta gratuita para salvar esta lição e continuar em qualquer dispositivo.
Criar uma conta gratuita