Primeiros Passos com tee - Dividindo a Saida de Comandos
O Que Voce Vai Aprender
- O que e o
teee 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
-aadiciona ao final em vez de sobrescrever - Como gravar a saida em multiplos arquivos ao mesmo tempo
- O padrao
sudo teepara gravar em arquivos de propriedade do root com seguranca
O que e o tee?
Conclusao:
teeenvia a saida para tela e arquivo ao mesmo tempo - observe e registre simultaneamente.
|) para encadear comandos, mas quero salvar os resultados intermediarios tambem. Tem como fazer isso?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 tambemDe 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 nomedoarquivoem um pipeline para exibir a saida enquanto a salva em um arquivo.
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 >
command | tee file e command > file?>, 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.logpara capturar toda a saida enquanto a observa rolar.
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:
teesobrescreve por padrao - use-apara adicionar ao final e preservar entradas anteriores.
-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
teepara gravar a mesma saida em todos ao mesmo tempo.
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 > filefalha; useecho ... | sudo tee -a /etc/fileem vez disso.
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.txtno meio do pipeline para capturar dados sem quebrar o fluxo.
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:
grep "ERROR"filtra o logteesalva essas linhas correspondentes em/tmp/errors.txtsort | uniq -cconta 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
teecobrem tudo: salvar, append, multi-arquivo, sudo, depuracao, stderr.
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 |