Primeiros Passos com tee - Dividindo a Saída de Comandos

Primeiros Passos com tee - Dividindo a Saída de Comandos

O Que Você Vai Aprender

  • O que é o tee e 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 -a adiciona ao final em vez de sobrescrever
  • Como gravar a saída em múltiplos arquivos ao mesmo tempo
  • O padrão sudo tee para 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: tee envia a saída para tela e arquivo ao mesmo tempo - observe e registre simultaneamente.

Lina: Aprendi sobre pipes (|) para encadear comandos, mas quero salvar os resultados intermediários também. Tem como fazer isso?
Veterano Linny: É exatamente para isso que o 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 tambem

De 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 nomedoarquivo em um pipeline para exibir a saída 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 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 >

Lina: Qual a diferença entre command | tee file e command > file?
Veterano Linny: Ótima pergunta. Com >, 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.log para capturar toda a saída enquanto a observa rolar.

Lina: Quando eu usaria isso na prática?
Veterano Linny: Caso clássico: executar um build ou instalação 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, 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: tee sobrescreve por padrão - use -a para adicionar ao final e preservar entradas anteriores.

Lina: O tee sobrescreve o arquivo toda vez?
Veterano Linny: Sim, por padrão. Use -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 tee para gravar a mesma saída em todos ao mesmo tempo.

Lina: Posso salvar em dois arquivos ao mesmo tempo?
Veterano Linny: Sim - basta listá-los um após 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 conteúdo. Você pode listar quantos precisar.

O Padrão sudo tee

Conclusão: 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 permissões root?
Veterano Linny: É aí que o 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.txt no meio do pipeline para capturar dados sem quebrar o fluxo.

Lina: Quando tenho um pipeline longo, é difícil saber o que está fluindo pelo meio.
Veterano Linny: Insira 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:

  1. grep "ERROR" filtra o log
  2. tee salva essas linhas correspondentes em /tmp/errors.txt
  3. sort | uniq -c conta 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 tee cobrem tudo: salvar, append, multi-arquivo, sudo, depuração, stderr.

Lina: O tee é muito prático. Não esperava que salvar e exibir fosse tão fácil.
Veterano Linny: Depois que você conhece o 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

Próximas Leituras