Comando cat: revelar o invisível nos ficheiros Linux

Terminal Linux a mostrar o comando cat -A a revelar carateres invisíveis num script

Há comandos que toda a gente julga conhecer e o cat é o exemplo perfeito. A maioria dos administradores usa-o apenas para despejar um ficheiro no terminal e segue em frente. No entanto, quando um script falha “sem razão”, quando um Makefile se queixa de indentação ou quando um ficheiro de configuração é ignorado pela aplicação, é quase sempre o cat — com as opções certas — que revela o problema em segundos.

Neste artigo da série sobre comandos Linux, vamos além do uso básico: explicamos as opções que transformam o cat numa ferramenta de diagnóstico, mostramos onde ele encaixa no trabalho de cibersegurança e disponibilizamos um simulador interativo para praticar sem sair do navegador.

O que faz o cat

O nome vem de concatenate: o cat lê um ou mais ficheiros pela ordem indicada e escreve o conteúdo no standard output. Se não receber ficheiros, lê do teclado (standard input) até receber Ctrl+D. É esta simplicidade que o torna omnipresente: serve para ver ficheiros pequenos, juntar vários num só, alimentar pipes e criar ficheiros rapidamente com redirecionamentos.

cat [OPÇÕES] [FICHEIRO...]

cat relatorio.txt                 # mostra um ficheiro
cat parte1.txt parte2.txt > todo.txt   # concatena dois ficheiros num terceiro
cat >> notas.txt                  # acrescenta o que escrever ao fim do ficheiro

O verdadeiro valor para quem administra sistemas está, porém, nas opções de visualização: o cat consegue tornar visíveis carateres que normalmente não se veem — tabulações, finais de linha e bytes não imprimíveis — e é aí que ele resolve problemas que parecem inexplicáveis.

As opções que interessam

Numerar e comprimir linhas

  • -n — numera todas as linhas do output, incluindo as vazias. Útil para dar coordenadas exatas quando se discute um ficheiro com um colega ou se documenta um incidente.
  • -b — numera apenas as linhas com conteúdo; as vazias ficam sem número. Quando -b e -n são usados em conjunto, o -b prevalece.
  • -s — comprime sequências de linhas em branco repetidas numa única linha vazia. Excelente para ler ficheiros de configuração muito espaçados.
$ cat -b config.ini
     1  [base]
     2  host = localhost

     3  porta = 3306

Revelar o invisível

  • -E — marca o fim de cada linha com $. É a forma mais rápida de detetar espaços esquecidos no fim de uma linha: se houver espaço entre o texto e o $, está lá o problema.
  • -T — mostra cada tabulação como ^I. Indispensável em Makefiles (que exigem tabs) e em YAML (que os proíbe).
  • -v — mostra carateres não imprimíveis em notação visível: o carriage return do Windows aparece como ^M, o escape como ^[ e bytes com o oitavo bit ativo com o prefixo M-.
  • -A — equivale a -vET: revela tudo de uma vez. Se só decorar uma opção do cat, que seja esta.
  • -e e -t — atalhos para -vE e -vT, respetivamente.
$ cat -A deploy.sh
#!/bin/bash^M$
set -euo pipefail^M$
$
APP_DIR=/var/www/app   $
^Iecho "a actualizar"^M$

Neste exemplo vê-se de imediato o diagnóstico completo: o ^M denuncia finais de linha CR LF vindos do Windows, o ^I mostra indentação com tabulações e os espaços antes do $ revelam espaços pendurados no fim de uma linha. Três problemas invisíveis, expostos por um único comando.

Usos típicos além de “ver ficheiros”

  • cat a b > c — concatena vários ficheiros num só (a função que lhe deu o nome).
  • cat >> ficheiro — acrescenta ao fim do ficheiro o que for escrito no teclado, terminado com Ctrl+D.
  • cat << EOF > ficheiroheredoc: escreve um bloco inteiro de texto de uma vez, muito usado em scripts de aprovisionamento e automação.
  • cat /proc/cpuinfo — leitura de ficheiros virtuais do kernel, como os de /proc e /sys, que não existem em disco mas respondem como texto.

cat em cibersegurança

Análise de scripts suspeitos. Em resposta a incidentes, um script recolhido de uma máquina comprometida deve ser inspecionado com cat -A antes de qualquer outra coisa: carateres de controlo e sequências de escape podem ser usados para esconder comandos ou para manipular o que o terminal mostra. O -v neutraliza essa ocultação ao converter tudo em notação visível.

Ficheiros de configuração adulterados. Em hardening e auditoria, entradas com espaços finais ou tabulações inesperadas em ficheiros como sshd_config ou sudoers podem alterar o comportamento efetivo do serviço ou indicar edição manual não documentada. cat -A torna essas anomalias óbvias.

Triagem de artefactos em forense. Perante um ficheiro de origem desconhecida, a sequência prudente é file para identificar o tipo, depois cat -v (nunca cat simples) se for texto: despejar bytes arbitrários no terminal pode injetar sequências de controlo que alteram o título da janela, limpam o ecrã ou pior. Para binários, a análise passa para xxd ou hexdump -C.

Pipelines de análise de logs. O cat serve de ponto de entrada de pipelines rápidos — cat acesso.log | wc -l durante a exploração interativa — embora, como veremos, muitas vezes o comando seguinte possa ler o ficheiro diretamente.

Experimente no simulador interativo

O simulador abaixo mostra, lado a lado, o conteúdo real de três ficheiros de exemplo (um script vindo do Windows, um ficheiro de configuração problemático e um ficheiro limpo) e o que o cat imprime no terminal. Use o botão Demonstrar tudo para ver a sequência guiada completa, avance passo a passo com Anterior/Seguinte, ou clique diretamente nas opções (-n, -b, -s, -E, -T, -v, -A) para as combinar livremente e observar o efeito de cada uma.

Erros comuns e boas práticas

  • O “uso inútil do cat”: cat ficheiro | grep padrão cria um processo a mais sem qualquer benefício — escreva antes grep padrão ficheiro. Em scripts, a diferença acumula-se.
  • Despejar ficheiros grandes no terminal: para ficheiros que não cabem num ecrã, use less; para ver apenas o princípio ou o fim, head e tail.
  • Fazer cat a binários: além de ilegível, pode corromper o estado do terminal com sequências de controlo. Confirme primeiro com file e use cat -v ou xxd quando necessário.
  • Corrigir sintomas em vez da causa: quando o cat -A revela ^M, a correção definitiva é converter o ficheiro com dos2unix — e configurar o editor e o controlo de versões para não reintroduzirem CR LF.
  • Confundir -n com -b: em ficheiros com linhas vazias, os números não coincidem; ao reportar a linha de um problema, indique qual das opções usou.
  • Esquecer o tac: para ler um log do fim para o princípio (os eventos mais recentes primeiro), tac faz o inverso do cat linha a linha.

Conclusão

O cat é muito mais do que um visualizador de ficheiros: com -A torna-se a primeira ferramenta de diagnóstico a correr quando “nada faz sentido”, e com os redirecionamentos e heredocs é um bloco de construção essencial da automação em Linux. Dominar estas opções poupa horas de depuração — e, em cibersegurança, evita que carateres invisíveis passem despercebidos numa investigação. Se este tipo de conteúdo lhe é útil, a equipa HJFR oferece formação prática em Linux e cibersegurança, além de consultoria especializada: conheça o nosso catálogo de serviços e veja também o artigo anterior da série, sobre o comando useradd.

Este artigo faz parte da série «Comandos Linux, um a um» do blog HJFR — fique atento aos próximos comandos.