Voltar ao Diminua Blog

Artigo

Dominando o `tee` no Linux: Duplicando Saída e Monitorando Processos em Tempo Real

Um guia prático para usar o comando `tee` para visualizar e salvar a saída de comandos simultaneamente, essencial para depuração e monitoramento.

Dominando o `tee` no Linux: Duplicando Saída e Monitorando Processos em Tempo Real

No universo do Linux, a capacidade de observar e registrar o que acontece em tempo real é fundamental para o diagnóstico de problemas, monitoramento de processos e até mesmo para a automação de tarefas complexas. Uma ferramenta muitas vezes subestimada, mas incrivelmente útil para esse fim, é o comando tee. Ele permite que você veja a saída de um comando na tela enquanto, simultaneamente, a salva em um arquivo. Neste artigo, vamos explorar o poder do tee, suas aplicações práticas e como integrá-lo ao seu fluxo de trabalho no terminal.

O Que é o Comando `tee`?

O comando tee, nomeado em homenagem ao divisor de fluxo em T usado em encanamentos, lê a entrada padrão e a escreve na saída padrão e em um ou mais arquivos. Essencialmente, ele age como um duplicador de fluxo de dados. Isso significa que você pode executar um comando, ver sua saída em seu terminal para acompanhamento imediato e, ao mesmo tempo, garantir que essa saída seja armazenada em um arquivo para análise posterior, registro ou para ser usada como entrada para outro comando.

Sintaxe Básica e Opções Essenciais

A sintaxe básica do comando tee é a seguinte:

comando | tee [OPÇÕES] ARQUIVO...

Onde:

  • comando: É o comando cuja saída você deseja capturar.
  • |: É o pipe, que redireciona a saída padrão do comando para a entrada padrão do tee.
  • tee: O comando que duplica a entrada.
  • [OPÇÕES]: Modificadores que alteram o comportamento do tee.
  • ARQUIVO...: Um ou mais arquivos onde a saída será salva.

As opções mais comuns e úteis do tee incluem:

  • -a, --append: Anexa a saída aos arquivos especificados, em vez de sobrescrevê-los. Esta é uma opção crucial para manter um histórico contínuo.
  • -i, --ignore-interrupts: Ignora sinais de interrupção (como Ctrl+C). Útil em scripts onde você não quer que a interrupção de um comando filho afete o processo de salvamento.

Aplicações Práticas do `tee`

1. Monitoramento e Debugging de Comandos Longos

Imagine que você está executando um script de instalação complexo ou um comando que leva muito tempo para ser concluído. Você quer ver o progresso na tela, mas também quer um log detalhado caso algo dê errado. O tee é perfeito para isso:

./meu_script_de_instalacao.sh | tee install.log

Com este comando, você verá a saída do script em seu terminal enquanto ela é escrita no arquivo install.log. Se o script falhar, você terá o log completo para analisar.

2. Salvando Saída de Comandos de Rede

Ao executar comandos de rede como ping, traceroute ou curl, pode ser útil salvar os resultados para referência futura. O tee facilita:

ping -c 10 google.com | tee ping_google.log

Isso executará 10 pings para google.com, exibirá os resultados no terminal e salvará a mesma saída no arquivo ping_google.log.

3. Duplicando Saída para Múltiplos Arquivos

O tee pode escrever a saída em múltiplos arquivos simultaneamente. Isso é útil se você precisar de cópias do log em diferentes locais ou com nomes diferentes:

meu_comando_qualquer | tee saida1.log saida2.log saida_backup.log

A saída de meu_comando_qualquer será escrita em saida1.log, saida2.log e saida_backup.log.

4. Combinando com a Opção `--append`

Para cenários onde você deseja adicionar informações a um log existente sem apagar o conteúdo anterior, use a opção -a:

./outro_script.sh | tee -a system.log

Cada vez que você executar este comando, a saída de ./outro_script.sh será adicionada ao final do arquivo system.log, criando um histórico acumulativo.

5. Intercalando Saída com Outros Comandos

O tee não precisa ser o último comando em uma cadeia de pipes. Você pode usá-lo para capturar a saída intermediária e ainda processá-la:

cat meu_arquivo.txt | grep "ERRO" | tee erros.log | wc -l

Neste exemplo:

  • cat meu_arquivo.txt: Exibe o conteúdo do arquivo.
  • grep "ERRO": Filtra apenas as linhas que contêm "ERRO".
  • tee erros.log: Salva as linhas com "ERRO" no arquivo erros.log E as envia para o próximo comando.
  • wc -l: Conta o número de linhas que passaram pelo tee (ou seja, o número de erros encontrados).

Este fluxo é poderoso para análise e contagem de eventos específicos.

Cuidados e Considerações de Segurança

Embora o tee seja uma ferramenta de conveniência, é importante usá-lo com cautela:

  • Permissões de Arquivo: Certifique-se de que você tem permissão para escrever nos arquivos de destino. Se não tiver, o tee falhará ou criará o arquivo com permissões restritas, dependendo da configuração do seu sistema.
  • Sobrescrita de Arquivos: Por padrão, o tee sobrescreve os arquivos existentes. Use a opção -a se você quiser adicionar ao invés de apagar o conteúdo anterior.
  • Uso em Scripts: Ao usar tee em scripts, considere se você realmente quer que a saída também vá para o terminal. Em muitos casos de automação, você pode querer apenas direcionar a saída para um arquivo de log sem exibição interativa. Para isso, use o redirecionamento padrão > em vez do pipe para tee.
  • Dados Sensíveis: Se o comando que você está executando produz dados sensíveis, certifique-se de que o arquivo de log onde a saída está sendo salva esteja devidamente protegido contra acesso não autorizado.

Alternativas e Integração com Ferramentas Diminua

Para cenários de automação mais avançados, especialmente aqueles que envolvem o gerenciamento de URLs e a criação de links amigáveis, ferramentas como as de slugging e de encurtamento de links podem ser integradas em fluxos de trabalho onde a saída de um processo precisa ser formatada antes de ser salva ou processada. Por exemplo, se você estivesse gerando uma lista de URLs complexas e precisasse criar slugs para elas, poderia usar um script que gerasse a lista, a passasse para uma ferramenta de slugging e, em seguida, usasse o tee para salvar tanto a lista original quanto os slugs gerados.

Conclusão

O comando tee é um utilitário simples, mas extremamente eficaz, para qualquer usuário de Linux que precise monitorar a saída de comandos e salvá-la simultaneamente. Seja para depurar um script complexo, registrar resultados de rede ou criar logs históricos, o tee oferece uma solução elegante e direta. Dominar esta ferramenta pode economizar um tempo valioso na resolução de problemas e na manutenção de sistemas, adicionando uma camada extra de visibilidade e controle ao seu ambiente de linha de comando.

Foto de Rafael Minguet Delgado no Pexels.