Como Salvar a Saída do Terminal em um Arquivo no Linux

O terminal é o coração de um sistema Linux. Todo programa que roda no Linux está sendo executado sob uma linha de comando do terminal. Isso inclui programas massivos, como navegadores da web e até mesmo simples, como editores de texto. Assim, ser capaz de usar corretamente o terminal é um passo importante se você deseja entender como o sistema operacional funciona.
Com isso, enquanto trabalha no terminal Linux, você pode querer salvar a saída do terminal de um comando em um arquivo. Este arquivo pode ser usado como informação para outra operação ou simplesmente para registrar a atividade do terminal. Este artigo ensina cinco maneiras de salvar a saída do terminal em um arquivo.
Índice
- Usar Terminais Específicos
- Redirecionamento de Saída
- Tee
- Script
- Captura de Framebuffer do Terminal
- Perguntas Frequentes
Leia também: Como Usar o Comando dd no Linux
1. Usar Terminais Específicos
A primeira maneira de lidar com isso é usando um Terminal que suporte salvar a saída em um arquivo. Por exemplo, o terminal Konsole que vem com uma instalação padrão do KDE inclui uma opção para escrever a saída em um arquivo.
Para fazer isso, pressione o botão “Arquivo” na barra de menu e clique em “Salvar saída como … “

Isso abrirá uma janela de diálogo onde você pode salvar a saída do terminal. A partir daí, você pode escolher onde deseja salvar o arquivo.
Você também pode salvar a saída de um comando no terminal GNOME. Basta clicar com o botão direito no terminal e pressionar “Copiar saída como HTML.” Isso, então, carregará o texto do terminal para sua área de transferência. A partir daí, você pode colá-lo em qualquer editor de texto.

Leia também: Como Usar o Comando Rm no Linux
2. Redirecionamento de Saída
Outra maneira de lidar com isso é usar os operadores embutidos do shell UNIX. Estas são funções padrão no Linux e podem redirecionar a saída de texto de um programa para um arquivo. Existem três operadores que podem fazer isso:
- O operador
>criará ou substituirá o conteúdo de um arquivo com a saída do seu programa. Isso é útil se você quiser despejar e visualizar o resultado atual do seu programa no mesmo arquivo. - O operador
>>também criará um arquivo com a saída do seu programa. No entanto, este operador apenas anexará a saída em vez de substituí-la. Isso é útil se você quiser despejar o resultado do seu programa continuamente em um único arquivo. - Por último, o operador
2>é um tipo especial de operador que imprimirá erros que serão relatados. Isso é muito útil durante a depuração, pois mostra o problema que o programa encontrou antes de falhar.

Sabendo disso, a maneira como você usa esses operadores é adicionando-os ao final do seu programa. Considere o seguinte exemplo:
echo"maketecheasier"> hello.txtEu instruí o programa echo a produzir a palavra “maketecheasier”, então adicionei o operador > e um nome de arquivo. Isso disse ao shell UNIX para escrever a saída no arquivo “hello.txt” em vez de imprimi-la na tela.

3. Tee
Além do redirecionamento de saída, você também pode salvar a saída de um comando do terminal usando um programa chamado tee. Este é um programa GNU que permite ler e escrever a partir da entrada padrão. Use este programa com pipes UNIX para escrever a saída de um comando em um arquivo.
Considere o seguinte exemplo:
echo"maketecheasier"|tee hello.txt
Aqui, em vez de usar o redirecionamento de saída, eu canalizei ( |) a saída para tee.
Nota: Um pipe pega a saída de um programa e a alimenta na entrada de outro. Isso permite que você conecte vários programas, desde que todos estejam usando entradas e saídas padrão.
Leia também: Como Corrigir o Problema de Não Conseguir Digitar no Terminal no Linux
4. Script
Outra maneira de extrair a saída do terminal é através do script, um programa embutido no Linux que grava tudo o que você digita no terminal, bem como sua saída.
Você pode usar o script para gravar o log da sua sessão de terminal em um formato de texto analisável. Isso é muito útil se você quiser enviar um log de erro online para obter suporte de outras pessoas.
Para usá-lo, execute o seguinte comando:
script filename.txt
Isso iniciará um ambiente de script onde você pode começar a executar comandos. Uma coisa importante a notar, no entanto, é que o script captura tudo o que você faz nessa sessão. Considere o seguinte exemplo:
Script started on 2022-03-2718:02:29+08:00 [TERM="rxvt-unicode-256color"TTY="/dev/pts/2"COLUMNS="77"LINES="22"]
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls
[?2004l
[0m[01;34mDesktop[0m [01;34mDownloads[0m [01;34mmail[0m [01;34mNews[0m [01;34mpods[0m [01;34mdocuments[0m [00;32mhello.txt[0m [01;34mMail[0m [01;34mpics[0m [01;34mtmp[0m [01;34mvids[0m
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit
[?2004l
exit
Script done on 2022-03-2718:03:19+08:00 [COMMAND_EXIT_CODE="0"]O script inclui todas as teclas pressionadas e caracteres de controle que você pressionou. No meu caso, incluiu todas as teclas “invisíveis” que pressionei, incluindo Tab e Backspace.
Uma vez que você tenha terminado a sessão, digite exit. Isso encerrará o programa Script e gravará todo o log no arquivo que você especificou.

Leia também: Como Usar o Comando lp no Linux para Imprimir Arquivos do Terminal
5. Captura de Framebuffer do Terminal
Por último, você também pode obter a saída do terminal puxando do framebuffer do Linux. Isso é útil se você estiver trabalhando diretamente em um teletipo e quiser capturar a saída de um programa.
Para capturar o dispositivo framebuffer, execute o seguinte comando enquanto estiver no teletipo:
cat/dev/fb0 > capture.raw
Uma coisa importante a notar é que capturar o dispositivo framebuffer dessa maneira significa que você está despejando os bytes brutos do framebuffer em um arquivo. Para visualizar esse arquivo, você precisa carregá-lo em um editor de imagens e ajustar manualmente a cor e a profundidade de bits. Não apenas esse processo é demorado, mas também é fácil de fazer errado.
Assim, uma maneira de lidar com isso é usando um programa de terceiros, como fbgrab. Isso irá capturar a tela atual do teletipo do dispositivo framebuffer e despejá-la em um arquivo PPM ou PNG.
Instalar o fbgrab também é relativamente simples. Em distribuições baseadas em Debian e Ubuntu, você pode usar o apt:
sudo apt install fbgrabPara Arch Linux, execute pacman:
sudo pacman -S fbgrab
Usando fbgrab para Capturar a Saída do Terminal
Uma vez instalado, acesse o teletipo pressionando Control + Shift + Alt + F3, e então execute fbcat ou fbgrab.
Fbcat é um programa mais simples que captura a tela atual do framebuffer e a salva em uma imagem PPM. Este é um formato de imagem bruta de baixo nível que você pode carregar em um editor de imagens para converter em PNG. Fbcat é principalmente útil se você estiver tentando capturar uma exibição de menor profundidade de bits que requer um formato de imagem bruta para capturar corretamente.
Para capturar usando o programa fbcat, execute o seguinte comando:
fbcat > capture.ppm
Isso irá capturar a tela exibida atualmente e despejar o conteúdo em um arquivo capture.ppm.
Fbgrab, por outro lado, é um programa mais complexo projetado para capturar exibições de maior profundidade de bits. Na maior parte, você o usará para capturar a tela do seu teletipo. Ele suporta salvar em PNG por padrão e tem a opção de selecionar um teletipo diferente para capturar.
Para capturar usando o programa fbgrab, execute o seguinte comando:
sudo fbgrab -c3 capture.png
Isso irá capturar a terceira tela do teletipo e salvá-la em um arquivo capture.png.
Se você está procurando mais guias para o terminal Linux, confira aquele que discute como enviar um e-mail a partir da linha de comando.
Perguntas Frequentes
1. Ajuda! Fbgrab não funciona; a imagem está apenas preta ou em branco.
Isso provavelmente acontece porque o fbgrab está usando um dispositivo framebuffer diferente para capturar a saída do terminal. Verifique o dispositivo framebuffer atual que o sistema está usando listando a pasta “/dev”.
ls/devA partir daí, procure um dispositivo “/dev/fbX”. Normalmente, o Linux usa “/dev/fb0” para seu framebuffer. No entanto, se seu sistema estiver usando um framebuffer diferente, como “/dev/fb1”, você pode passar o seguinte comando para informar ao fbgrab para puxar daquele framebuffer em vez disso:
fbgrab -d1 capture.png2. É possível capturar o conteúdo de um arquivo que escrevi como entrada para um programa?
Sim! Além dos três operadores discutidos acima, você também pode usar o operador < para puxar dados de um arquivo. O shell, então, tratará isso como uma entrada para um programa.
Fazendo dessa maneira também elimina a necessidade de depender de outros programas para imprimir o texto para você. Considere os seguintes exemplos:
[1]cat test.txt | program
[2] program < test.txt- O primeiro exemplo chama o programa cat para carregar o texto, então carrega um operador pipe com a saída do cat e canaliza para o seu programa.
- Por outro lado, o segundo exemplo chama imediatamente seu programa, então escolhe o operador
<, que trata o próximo argumento como sua entrada.
3. Existe uma maneira de forçar o script a capturar apenas a saída de um comando?
Sim, é possível fazer o script capturar apenas um único comando. Isso é muito útil durante a solução de problemas quando você só quer capturar a saída de um único programa. Faça isso executando o seguinte comando:
script -c"seu-comando" test.txtA flag -c informa ao programa script para executar apenas o programa: seu-comando. A partir daí, ele gravará sua saída em um arquivo de texto chamado test.txt.
Crédito da imagem: Unsplash