Primeiros Passos com tee - Dividindo a Saída de Comandos
O Que Você Vai Aprender
- O que é o
teee por que tem o nome de uma conexão em T de encanamento - Como exibir e salvar a saída de comandos simultaneamente com
command | tee file - Como a flag
-aadiciona ao final em vez de sobrescrever - Como gravar a saída em múltiplos arquivos ao mesmo tempo
- O padrão
sudo teepara gravar em arquivos de propriedade do rootA conta de administrador especial que pode fazer qualquer coisa no sistema. com segurança
O que é o tee?
Conclusão:
teeenvia a saída para tela e arquivo ao mesmo tempo - observe e registre simultaneamente.
|) para encadear comandos, mas quero salvar os resultados intermediários também. Tem como fazer isso?tee serve. Pense nele como uma conexão em T de encanamento - ele divide a saída em duas direções ao mesmo tempo.Quando você usa um pipe, a saída flui de um comando para o próximo e desaparece. Com tee, você pode salvar a saída 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 maiúscula "T" - uma entrada, duas saídas. Mesma ideia de uma junção em T na tubulação.
Uso Básico
Conclusão: Insira
tee nomedoarquivoem um pipeline para exibir a saída enquanto a salva em um arquivo.
tee nomedoarquivo no meio do seu pipeline.command | tee filename
Exemplo: exibir a saída de ls -la na tela e salvar em list.txt
ls -la | tee list.txt
Ambos acontecem ao mesmo tempo - a saída aparece na tela e é gravada em list.txt.
O que o tee oferece
- Saída na tela: ininterrupta, como se o tee não estivesse ali
- Salvamento em arquivo: acontece simultaneamente
tee vs Redirecionamento >
command | tee file e command > file?>, a saída vai apenas para o arquivo - nada aparece na tela. Com tee, você tem os dois.| Método | Saída na tela | Salvamento |
|---|---|---|
command |
sim | não |
command > file |
não | sim |
command | tee file |
sim | sim |
Use > quando quiser apenas armazenar a saída silenciosamente. Use tee quando quiser observar e salvar ao mesmo tempo.
Salvando Logs Enquanto Observa a Saída
Conclusão: Adicione
2>&1 | tee install.logpara capturar toda a saída enquanto a observa rolar.
make install 2>&1 | tee install.log
2>&1 redireciona stderr (mensagens de erro) para o mesmo fluxo que stdout, então ambos acabam no arquivo de log.
O que 2>&1 significa
1= stdout (saída normal)2= stderr (mensagens de erro)2>&1= mesclar stderr com stdout
Sem isso, mensagens de erro vão apenas para o terminalUm programa interativo que interpreta os comandos digitados e os executa. e nunca alcançam o tee.
A Flag -a: Adicionar em Vez de Sobrescrever
Conclusão:
teesobrescreve por padrão - use-apara adicionar ao final e preservar entradas anteriores.
-a se quiser adicionar ao final.command | tee -a filename
Exemplo: acumular timestamps de execução 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 Múltiplos Arquivos
Conclusão: Liste múltiplos nomes de arquivo após
teepara gravar a mesma saída 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 conteúdo. Você pode listar quantos precisar.
O Padrão sudo tee
Conclusão:
sudo echo > filefalha; useecho ... | sudo tee -a /etc/fileem vez disso.
sudo tee brilha. É um padrão clássico do Linux que confunde muitos iniciantes.Você pode esperar que isto funcione - mas não funciona:
# Isto falha sudo echo "127.0.0.1 example.local" >> /etc/hosts
Por que sudo echo > file falha
sudo se aplica apenas ao próprio comando echo. O redirecionamento >> é processado pelo shell, que executa como seu usuário normal. O shell tenta abrir /etc/hosts para gravação antes mesmo do sudo echo executar - e tem a permissãoAs regras de acesso de leitura / escrita / execução definidas em um arquivo ou diretório. negada.
A abordagem correta é sudo tee:
echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts
Aqui, echo executa como seu usuário (sem problema - ele apenas grava em stdout), e sudo tee executa como root e faz a gravação privilegiada.
tee imprime o conteúdo no terminal também. Para suprimir essa saída, redirecione stdout para /dev/null:
echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts > /dev/null
Sempre faça backup antes de editar arquivos do sistema
sudo cp /etc/hosts /etc/hosts.bak
Erros em /etc/hosts ou arquivos similares podem quebrar a resolução de rede do seu sistema.
Depurando Pipelines
Conclusão: Insira
tee /tmp/stage.txtno meio do pipeline para capturar dados sem quebrar o fluxo.
tee em qualquer ponto para capturar os dados naquele estágio - 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 ocorrências
Você pode então inspecionar /tmp/errors.txt separadamente para ver exatamente o que entrou na etapa de ordenação - útil quando a saída final parece inesperada.
Para depuração profunda de pipeline, adicione múltiplas chamadas tee em diferentes estágios:
cat data.txt | step1 | tee /tmp/stage1.txt | step2 | tee /tmp/stage2.txt | step3
Compare os arquivos de estágio para isolar exatamente onde as coisas dão errado.
Padrões Comuns em um Relance
Conclusão: Seis padrões de
teecobrem tudo: salvar, append, multi-arquivo, sudo, depuração, stderr.
sudo tee, vai usá-lo o tempo todo para edição de arquivos de configuração. É 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 múltiplos arquivos | command | tee file1 file2 |
| Gravar em arquivo do root | echo "..." | sudo tee -a /etc/hosts |
| Capturar ponto médio do pipeline | cmd1 | tee /tmp/debug.txt | cmd2 |
| Capturar toda saída incluindo erro | command 2>&1 | tee output.log |