Introdução
O comando tee no Linux é um utilitário poderoso que permite visualizar a saída de um comando no terminal enquanto a salva simultaneamente em um arquivo. Essa funcionalidade é particularmente útil para administradores de sistema e desenvolvedores que precisam inspecionar a saída em tempo real e preservá-la para análise posterior.
Este laboratório irá apresentá-lo aos fundamentos da multiplexação de saída usando o comando tee. Você aprenderá como exibir a saída e salvá-la simultaneamente, redirecionar o erro padrão e anexar a saída a arquivos existentes. Essas habilidades são essenciais para o gerenciamento eficaz de logs, depuração e monitoramento de sistemas em ambientes Linux.
Entendendo os Fundamentos do Comando tee
O comando tee no Linux recebe seu nome da conexão em forma de T usada em encanamentos, que divide o fluxo de água em duas direções. De forma semelhante, o comando tee divide a saída de um comando em duas direções: para o terminal e para um arquivo.
Vamos começar navegando para o nosso diretório de trabalho:
cd /home/labex/project
Criando um Arquivo de Teste
Primeiro, vamos criar um arquivo de texto simples que podemos usar para nossos experimentos:
echo "Hello, World" > hello.txt
Este comando cria um arquivo chamado hello.txt contendo o texto "Hello, World".
Usando o Comando tee
Agora, vamos usar o comando tee para exibir o conteúdo de hello.txt no terminal enquanto também o copia para outro arquivo:
cat hello.txt | tee copy.txt
Você deve ver a seguinte saída no seu terminal:
Hello, World
A parte cat hello.txt lê o conteúdo do arquivo hello.txt. O símbolo de pipe | pega essa saída e a envia para o comando tee. O comando tee então exibe o texto no terminal e simultaneamente o escreve no arquivo copy.txt.
Vamos verificar se o conteúdo foi realmente copiado para copy.txt:
cat copy.txt
Você deve ver a mesma saída:
Hello, World
Compreendendo a Estrutura do Comando
A sintaxe básica do comando tee é:
command | tee filename
Onde:
commandé qualquer comando que produz saída|(pipe) envia a saída do comando para teeteeé o próprio comandofilenameé o nome do arquivo onde a saída será salva
Redirecionando o Erro Padrão com tee
No Linux, os programas podem gerar informações por meio de dois canais principais:
- Saída padrão (stdout): Saída normal do programa
- Erro padrão (stderr): Mensagens de erro e diagnósticos
Por padrão, o comando tee captura apenas a saída padrão. No entanto, em muitas situações, você pode querer capturar também as mensagens de erro. É aqui que a redireção de saída entra em ação.
Compreendendo a Redireção de Erro Padrão
Vamos criar um script que gera tanto a saída padrão quanto o erro padrão. Navegue para o diretório do projeto primeiro (se você ainda não estiver lá):
cd /home/labex/project
Agora, vamos executar um comando que produzirá tanto a saída padrão quanto o erro padrão:
echo "This is standard output"
ls /nonexistentfile
Você deve ver uma saída semelhante a esta:
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Observe que a mensagem de erro do comando ls vai diretamente para o terminal.
Redirecionando o Erro Padrão para um Arquivo
Vamos primeiro ver como podemos redirecionar apenas a saída de erro para um arquivo:
echo "This is standard output"
ls /nonexistentfile 2> error.log
Desta vez, você deve ver apenas:
This is standard output
A mensagem de erro foi redirecionada para o arquivo error.log. A sintaxe 2> diz ao shell para redirecionar o erro padrão (descritor de arquivo 2) para o arquivo especificado.
Vamos verificar o conteúdo de error.log:
cat error.log
Você deve ver:
ls: cannot access '/nonexistentfile': No such file or directory
Capturando Tanto a Saída Quanto o Erro com tee
Agora, vamos usar tee para capturar tanto a saída padrão quanto o erro padrão em um arquivo, enquanto também os exibimos no terminal:
{
echo "This is standard output"
ls /nonexistentfile
} 2>&1 | tee both.log
Você deve ver tanto a saída quanto o erro no terminal:
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Vamos verificar o conteúdo de both.log:
cat both.log
Você deve ver a mesma saída:
This is standard output
ls: cannot access '/nonexistentfile': No such file or directory
Compreendendo a Estrutura do Comando
No comando 2>&1 | tee both.log:
{ ... }agrupa vários comandos2>&1redireciona o erro padrão (descritor de arquivo 2) para a saída padrão (descritor de arquivo 1)|canaliza a saída combinada para o comandoteetee both.logexibe a saída no terminal e a escreve emboth.log
Essa técnica é particularmente útil para registrar a saída de comandos durante a manutenção do sistema ou solução de problemas.
Anexando Saída com tee
Por padrão, o comando tee sobrescreve o arquivo de destino cada vez que é usado. No entanto, em muitos cenários, você pode querer adicionar novas informações a um arquivo existente, em vez de substituir seu conteúdo. É aqui que a opção -a (anexar) é útil.
Compreendendo a Opção Anexar
Navegue para o diretório do projeto, se você ainda não estiver lá:
cd /home/labex/project
Vamos primeiro criar um arquivo com informações do sistema:
uname -a | tee system_info.log
Este comando exibirá as informações do seu sistema no terminal e as salvará em system_info.log. A saída será algo parecido com isto (sua saída pode ser diferente):
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Agora, vamos verificar o conteúdo do arquivo:
cat system_info.log
Você deve ver as mesmas informações do sistema.
Anexando Informações ao Arquivo
Agora, vamos anexar mais informações a este arquivo usando a opção -a:
echo "Date and time: $(date)" | tee -a system_info.log
Isso exibirá algo como:
Date and time: Wed May 3 14:22:34 UTC 2023
A flag -a diz ao tee para anexar a saída ao arquivo em vez de sobrescrevê-lo.
Vamos verificar o conteúdo do arquivo novamente:
cat system_info.log
Você deve ver agora tanto as informações do sistema quanto a data:
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Adicionando Mais Informações
Vamos anexar ainda mais informações ao nosso arquivo de log:
echo "Disk usage:" | tee -a system_info.log
df -h | tee -a system_info.log
Isso exibirá informações de uso do disco e as anexará ao nosso arquivo de log. A saída variará dependendo do seu sistema, mas pode ser algo parecido com isto:
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
Vamos verificar o conteúdo do nosso arquivo de log mais uma vez:
cat system_info.log
Você deve ver agora todas as informações que adicionamos:
Linux ubuntu 5.15.0-1031-aws #35-Ubuntu SMP Fri Feb 10 02:14:02 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Date and time: Wed May 3 14:22:34 UTC 2023
Disk usage:
Filesystem Size Used Avail Use% Mounted on
/dev/root 19G 5.8G 13G 32% /
tmpfs 494M 0 494M 0% /dev/shm
tmpfs 198M 1.1M 197M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda15 105M 5.2M 100M 5% /boot/efi
tmpfs 100M 4.0K 100M 1% /run/user/1000
Compreendendo a Estrutura do Comando
A sintaxe para anexar com tee é:
command | tee -a filename
Onde:
commandé qualquer comando que produz saída|(pipe) envia a saída do comando parateeteeé o próprio comando-aé a opção para anexar ao arquivo em vez de sobrescrevê-lofilenameé o nome do arquivo onde a saída será anexada
Essa abordagem é particularmente útil para:
- Construir arquivos de log ao longo do tempo
- Capturar a saída de vários comandos em um único arquivo
- Manter um registro de estados ou operações do sistema
Resumo
Neste laboratório, você aprendeu a usar o comando tee para multiplexação de saída no Linux. Este utilitário poderoso permite que você visualize a saída do comando no terminal, enquanto simultaneamente a salva em arquivos, tornando-o uma ferramenta essencial para administradores de sistema e desenvolvedores.
Aqui estão as principais habilidades que você adquiriu:
Uso básico de tee: Você aprendeu a usar
teepara exibir a saída no terminal, enquanto simultaneamente a salva em um arquivo.Redirecionando o Erro Padrão: Você dominou como capturar tanto a saída padrão quanto o erro padrão usando a redireção
2>&1em combinação comtee, o que é crucial para um registro abrangente.Anexando Saída: Você descobriu como usar a opção
-acomteepara anexar a saída a arquivos existentes, em vez de sobrescrevê-los, permitindo que você construa logs incrementalmente.
Essas técnicas são valiosas para várias tarefas no Linux, incluindo:
- Criar logs detalhados para depuração
- Monitorar atividades do sistema
- Documentar as saídas de comandos durante a administração do sistema
- Preservar os resultados dos comandos para referência futura
Compreender como gerenciar efetivamente a saída no Linux é uma habilidade fundamental que o servirá bem à medida que você avança em sua jornada com sistemas Linux.



