Primeiros Passos com tee - Dividindo a Saida de Comandos

Primeiros Passos com tee - Dividindo a Saida de Comandos

O Que Voce Vai Aprender

  • O que e o tee e por que tem o nome de uma conexao em T de encanamento
  • Como exibir e salvar a saida de comandos simultaneamente com command | tee file
  • Como a flag -a adiciona ao final em vez de sobrescrever
  • Como gravar a saida em multiplos arquivos ao mesmo tempo
  • O padrao sudo tee para gravar em arquivos de propriedade do root com seguranca

O que e o tee?

Conclusao: tee envia a saida para tela e arquivo ao mesmo tempo - observe e registre simultaneamente.

Lina: Aprendi sobre pipes (|) para encadear comandos, mas quero salvar os resultados intermediarios tambem. Tem como fazer isso?
Veterano Linny: E exatamente para isso que o tee serve. Pense nele como uma conexao em T de encanamento - ele divide a saida em duas direcoes ao mesmo tempo.

Quando voce usa um pipe, a saida flui de um comando para o proximo e desaparece. Com tee, voce pode salvar a saida em um arquivo enquanto ainda a passa adiante.

Pipe normal:
ComandoA -> ComandoB  (o que esta no meio sumiu)

Com tee:
ComandoA -> tee ----> salvo em arquivo
                |
            flui para ComandoB tambem

De onde vem o nome

A letra maiuscula "T" - uma entrada, duas saidas. Mesma ideia de uma juncao em T na tubulacao.

Uso Basico

Conclusao: Insira tee nomedoarquivo em um pipeline para exibir a saida enquanto a salva em um arquivo.

Lina: Como eu uso?
Veterano Linny: Basta inserir tee nomedoarquivo no meio do seu pipeline.
command | tee filename

Exemplo: exibir a saida de ls -la na tela e salvar em list.txt

ls -la | tee list.txt

Ambos acontecem ao mesmo tempo - a saida aparece na tela e e gravada em list.txt.

O que o tee oferece

  • Saida na tela: ininterrupta, como se o tee nao estivesse ali
  • Salvamento em arquivo: acontece simultaneamente

tee vs Redirecionamento >

Lina: Qual a diferenca entre command | tee file e command > file?
Veterano Linny: Otima pergunta. Com >, a saida vai apenas para o arquivo - nada aparece na tela. Com tee, voce tem os dois.
Metodo Saida na tela Salvamento
command sim nao
command > file nao sim
command | tee file sim sim

Use > quando quiser apenas armazenar a saida silenciosamente. Use tee quando quiser observar e salvar ao mesmo tempo.

Salvando Logs Enquanto Observa a Saida

Conclusao: Adicione 2>&1 | tee install.log para capturar toda a saida enquanto a observa rolar.

Lina: Quando eu usaria isso na pratica?
Veterano Linny: Caso classico: executar um build ou instalacao longo e querer tanto observar o progresso quanto manter um log do que aconteceu.
make install 2>&1 | tee install.log

2>&1 redireciona stderr (mensagens de erro) para o mesmo fluxo que stdout, entao ambos acabam no arquivo de log.

O que 2>&1 significa

  • 1 = stdout (saida normal)
  • 2 = stderr (mensagens de erro)
  • 2>&1 = mesclar stderr com stdout

Sem isso, mensagens de erro vao apenas para o terminal e nunca alcancam o tee.

A Flag -a: Adicionar em Vez de Sobrescrever

Conclusao: tee sobrescreve por padrao - use -a para adicionar ao final e preservar entradas anteriores.

Lina: O tee sobrescreve o arquivo toda vez?
Veterano Linny: Sim, por padrao. Use -a se quiser adicionar ao final.
command | tee -a filename

Exemplo: acumular timestamps de execucao em um arquivo de log

date | tee -a run.log
date | tee -a run.log
cat run.log
Mon Jun  1 03:00:00 UTC 2026
Mon Jun  1 03:00:05 UTC 2026

Sem -a, cada chamada do tee sobrescreve o arquivo do zero. Use -a sempre que quiser preservar entradas anteriores.

Gravando em Multiplos Arquivos

Conclusao: Liste multiplos nomes de arquivo apos tee para gravar a mesma saida em todos ao mesmo tempo.

Lina: Posso salvar em dois arquivos ao mesmo tempo?
Veterano Linny: Sim - basta lista-los um apos o outro.
command | tee file1 file2

Exemplo: salvar em /tmp/result.txt e ~/backup.txt

ls -la | tee /tmp/result.txt ~/backup.txt

Todos os arquivos listados recebem o mesmo conteudo. Voce pode listar quantos precisar.

O Padrao sudo tee

Conclusao: sudo echo > file falha; use echo ... | sudo tee -a /etc/file em vez disso.

Lina: E se eu precisar gravar em um arquivo que precisa de permissoes root?
Veterano Linny: E ai que o sudo tee brilha. E um padrao classico do Linux que confunde muitos iniciantes.

Voce pode esperar que isto funcione - mas nao funciona:

# Isto falha
sudo echo "127.0.0.1 example.local" >> /etc/hosts

Por que sudo echo > file falha

sudo se aplica apenas ao proprio comando echo. O redirecionamento >> e processado pelo shell, que executa como seu usuario normal. O shell tenta abrir /etc/hosts para gravacao antes mesmo do sudo echo executar - e tem a permissao negada.

A abordagem correta e sudo tee:

echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts

Aqui, echo executa como seu usuario (sem problema - ele apenas grava em stdout), e sudo tee executa como root e faz a gravacao privilegiada.

tee imprime o conteudo no terminal tambem. Para suprimir essa saida, redirecione stdout para /dev/null:

echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts > /dev/null

Sempre faca backup antes de editar arquivos do sistema

sudo cp /etc/hosts /etc/hosts.bak

Erros em /etc/hosts ou arquivos similares podem quebrar a resolucao de rede do seu sistema.

Depurando Pipelines

Conclusao: Insira tee /tmp/stage.txt no meio do pipeline para capturar dados sem quebrar o fluxo.

Lina: Quando tenho um pipeline longo, e dificil saber o que esta fluindo pelo meio.
Veterano Linny: Insira tee em qualquer ponto para capturar os dados naquele estagio - sem quebrar o fluxo.
cat access.log | grep "ERROR" | tee /tmp/errors.txt | sort | uniq -c

O que isto faz:

  1. grep "ERROR" filtra o log
  2. tee salva essas linhas correspondentes em /tmp/errors.txt
  3. sort | uniq -c conta ocorrencias

Voce pode entao inspecionar /tmp/errors.txt separadamente para ver exatamente o que entrou na etapa de ordenacao - util quando a saida final parece inesperada.

Para depuracao profunda de pipeline, adicione multiplas chamadas tee em diferentes estagios:

cat data.txt | step1 | tee /tmp/stage1.txt | step2 | tee /tmp/stage2.txt | step3

Compare os arquivos de estagio para isolar exatamente onde as coisas dao errado.

Padroes Comuns em um Relance

Conclusao: Seis padroes de tee cobrem tudo: salvar, append, multi-arquivo, sudo, depuracao, stderr.

Lina: O tee e muito pratico. Nao esperava que salvar e exibir fosse tao facil.
Veterano Linny: Depois que voce conhece o sudo tee, vai usa-lo o tempo todo para edicao de arquivos de configuracao. E um daqueles comandos pequenos que aparece em todo lugar no trabalho real com Linux.
Caso de uso Comando
Exibir e salvar ao mesmo tempo command | tee file.txt
Adicionar sem sobrescrever command | tee -a file.txt
Salvar em multiplos arquivos command | tee file1 file2
Gravar em arquivo do root echo "..." | sudo tee -a /etc/hosts
Capturar ponto medio do pipeline cmd1 | tee /tmp/debug.txt | cmd2
Capturar toda saida incluindo erro command 2>&1 | tee output.log

Proximas Leituras