Guia Prático do Comando cmp no Linux: Comparação Byte a Byte

Visão Geral

Descubra como o utilitário cmp no ecossistema Linux viabiliza a checagem rápida e eficiente de integridade entre arquivos no nível de bytes. Ao longo deste guia, exploraremos suas principais flags operacionais, cobrindo cenários com arquivos de texto simples, binários compilados e padrões de controle de fluxo condicional em rotinas de automação com shell script.

Diagnóstico Inicial: Detectando o Primeiro Ponto de Divergência

Inicie criando um diretório de testes isolado no ambiente do terminal executando mkdir -p ~/cmp_test && cd ~/cmp_test para manter o fluxo organizado.

mkdir -p ~/cmp_test && cd ~/cmp_test

Em seguida, gere duas massas de dados com conteúdo perfeitamente espelhado (file1.txt e file2.txt) e uma terceira variante (file3.txt) apresentando pequena discrepância por meio do utilitário echo.

echo ‘Hello Linux World’ > file1.txt && echo ‘Hello Linux World’ > file2.txt && echo ‘Hello Linux Earth’ > file3.txt

A principal característica do cmp é sua análise posicional precisa: quando os arquivos examinados são idênticos em toda a sua extensão, o programa simplesmente finaliza em silêncio sem emitir qualquer saída no terminal.
⚙️ [Parâmetros Essenciais]

-b : Imprime os caracteres correspondentes e seus respectivos códigos ao identificar divergências.
-l : Lista todas as posições divergentes acompanhadas dos seus respectivos valores em base octal.
-n : Delimita o escopo da conferência até uma quantidade fixa de bytes.
-i : Ignora uma quantidade definida de bytes iniciais antes de começar o escaneamento.
-s : Modo silencioso que suprime toda a saída padrão e apenas sinaliza o resultado via código de retorno (0 ou 1).

cmp file1.txt file2.txt

Ao confrontar conjuntos divergentes com cmp file1.txt file3.txt, o utilitário interrompe imediatamente a verificação e relata com exatidão o número do byte e a respectiva linha onde ocorreu o primeiro descompasso.

cmp file1.txt file3.txt

Auditoria Detalhada: Mapeando Bytes e Caracteres Divergentes (-l, -b)

Para analisar comportamentos mais granulares em alterações de bytes, crie dois novos arquivos de teste (f1.txt e f2.txt) com sequências alfabéticas distintas.

echo ‘ABCDE’ > f1.txt && echo ‘ABXDE’ > f2.txt

Ao invocar cmp -l f1.txt f2.txt, o utilitário varre a estrutura integral dos dados e exibe em formato tabular o índice de cada byte discrepante junto aos valores em octal presentes em cada arquivo. Na terceira posição, observa-se que o primeiro arquivo carrega o valor octal 103 (C), enquanto o segundo registra 130 (X).

cmp -l f1.txt f2.txt

O modificador cmp -b f1.txt f2.txt agrega legibilidade imediata ao diagnóstico, associando o byte numérico ao caractere ASCII legível onde a primeira divergência ocorreu, destacando o contraste entre 103 (C) e 130 (X).

cmp -b f1.txt f2.txt

Combinando as duas flags no comando cmp -lb f1.txt f2.txt, obtém-se um relatório exaustivo: número do deslocamento, representação octal e caractere correspondente são detalhados linha a linha, simplificando investigações profundas de corrupção ou diferença de payload.

cmp -lb f1.txt f2.txt

Automação e Shell Scripting: Operação Silenciosa via Exit Codes (-s)

Em pipelines de CI/CD ou rotinas automatizadas, a flag -s viabiliza validações sem poluir a saída do terminal, transferindo o status da comparação unicamente para a variável de retorno do shell ($?). Havendo equivalência perfeita, o código 0 é produzido.

cmp -s file1.txt file2.txt; echo “종료 코드: $?”

Quando o comparador identifica qualquer discrepância entre os arquivos analisados sob o modo silencioso, o processo retorna o status 1, sinalizando inconsistência estrutural de maneira instantânea.

cmp -s file1.txt file3.txt; echo “종료 코드: $?”

Essa mecânica se encaixa naturalmente em estruturas condicionais if do Bash. A ausência de diferenças aciona o ramo verdadeiro do bloco de decisão, garantindo scripts elegantes e performáticos para conferência de integridade.

if cmp -s file1.txt file2.txt; then echo ‘두 파일이 일치합니다.’; else echo ‘두 파일이 다릅니다.’; fi

Ajuste Fino de Escopo: Ignorando Cabeçalhos (-i) e Limitando Bytes (-n)

Para cenários onde apenas certas seções de um arquivo interessam (como descartar metadados ou cabeçalhos proprietários), vamos gerar os arquivos data1.txt e data2.txt com prefixos distintos e sufixos padronizados.

echo ‘Prefix_Alpha_Data’ > data1.txt && echo ‘DiffId_Alpha_Data’ > data2.txt

A execução direta de cmp data1.txt data2.txt acusa divergência imediata logo no byte 1 da linha 1 em razão dos prefixos conflitantes.

cmp data1.txt data2.txt

Aplicando o parâmetro -i 7, instruímos o cmp a ignorar os primeiros 7 bytes de ambos os fluxos. Como o conteúdo subsequente (Alpha_Data) é idêntico, o comando encerra normalmente sem apontar erros.

cmp -i 7 data1.txt data2.txt

Em contrapartida, com a flag -n 6, a verificação fica estritamente restrita aos primeiros 6 bytes de cada arquivo. Constatando diferença nessa janela inicial delimitada, o utilitário emite o alerta referente ao primeiro byte inconsistente.

cmp -n 6 data1.txt data2.txt

Com esses recursos do utilitário cmp, você dispõe de uma solução ágil e de baixo consumo de recursos para checar arquivos volumosos, payloads binários e backups no ecossistema Linux com extrema precisão.