Comando cmp en Linux: Comparación de archivos byte a byte

Introducción y fundamentos

A diferencia de herramientas orientadas a texto estructurado como diff, la utilidad cmp en entornos Linux permite inspeccionar discrepancias a nivel de bytes con una velocidad sobresaliente. Esta guía técnica aborda desde el cotejo inicial entre archivos planos y binarios hasta la integración de sus parámetros clave en flujos de trabajo automatizados dentro de scripts en Bash.

Cotejo básico: Detección del primer byte y línea divergentes

Para estructurar un entorno de pruebas controlado y sin interferencias, procedemos a generar un directorio de trabajo temporal y situarnos en él mediante mkdir -p ~/cmp_test && cd ~/cmp_test.

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

A continuación, creamos tres ficheros de muestra utilizando echo: dos con contenido idéntico (file1.txt y file2.txt) y un tercero (file3.txt) con una ligera variación en la última palabra.

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

El comportamiento por omisión de cmp consiste en examinar minuciosamente ambos elementos byte a byte. Siguiendo la filosofía clásica de Unix, cuando dos ficheros coinciden en su totalidad, la herramienta finaliza de manera silenciosa sin emitir ningún mensaje en la terminal.
⚙️ [Opciones fundamentales]

-b : Muestra en pantalla tanto el código numérico como la representación del carácter en el punto de discrepancia.
-l : Desglosa un listado exhaustivo con la posición y el valor octal de cada byte divergente.
-n : Restringe el alcance de la comprobación a una cantidad máxima de bytes predefinida.
-i : Omite un número inicial determinado de bytes en cada archivo antes de evaluar similitudes.
-s : Suprime la salida estándar y comunica el resultado exclusivamente mediante el código de salida (0 o 1).

cmp file1.txt file2.txt

Al contrastar dos archivos con diferencias ejecutando cmp file1.txt file3.txt, el comando señala de inmediato la posición exacta donde ocurre la primera discordancia, indicando tanto el offset de byte como la línea correspondiente.

cmp file1.txt file3.txt

Análisis pormenorizado: Reporte completo de bytes y caracteres (-l, -b)

Para ilustrar el análisis granular de discrepancias, generamos un par de archivos sencillos (f1.txt y f2.txt) que difieren puntualmente en un único carácter alfabético.

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

Al incorporar el modificador -l mediante cmp -l f1.txt f2.txt, la utilidad enumera todas las divergencias detectadas señalando el desplazamiento decimal y los valores octales correspondientes en cada fuente. En este caso, se visualiza que en el tercer byte el primer archivo posee el valor octal 103 (C), mientras que el segundo registra 130 (X).

cmp -l f1.txt f2.txt

Por su parte, la opción -b facilita una interpretación más intuitiva al desplegar directamente el símbolo ASCII legible junto a su representación octal en el instante en que detecta la variación inicial: byte 3 con 103 (C) frente a 130 (X).

cmp -b f1.txt f2.txt

Al combinar ambos parámetros a través de cmp -lb f1.txt f2.txt, obtenemos una salida integral que desglosa la ubicación métrica, la codificación octal y la grafía de cada byte no coincidente, simplificando drásticamente la depuración de datos binarios o cadenas de texto.

cmp -lb f1.txt f2.txt

Automatización y scripting: Operación silenciosa y códigos de retorno (-s)

En entornos de administración automatizados, la bandera -s resulta indispensable, ya que bloquea cualquier impresión hacia la consola y confía el veredicto exclusivamente a la variable de estado $?. Al evaluar dos archivos gemelos, el comando retorna el valor 0, confirmando identidad absoluta.

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

En cambio, si procesamos dos archivos que discrepan entre sí con este mismo modo mudo, el proceso finaliza devolviendo el código 1, el cual constata de forma unívoca la presencia de inconsistencias entre los datos.

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

Esta mecánica permite insertar cmp -s directamente en estructuras condicionales if dentro de scripts de Bash. Al validarse la igualdad de contenido (retorno 0), el flujo prosigue por la rama positiva de manera limpia y sin generar ruido en los registros de salida.

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

Delimitación del alcance: Omisión de offsets (-i) y límite de lectura (-n)

Para experimentar con el control de rangos de escaneo, preparamos data1.txt y data2.txt, los cuales comparten un sufijo en común pero poseen encabezados discordantes.

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

Al contrastarlos sin modificadores adicionales mediante cmp data1.txt data2.txt, la detección salta de forma instantánea en el byte inicial (línea 1), interrumpiendo de inmediato la verificación.

cmp data1.txt data2.txt

Si requerimos descartar cabeceras o metadatos prefijados, empleamos -i 7 para instruir al comando que desestime los primeros 7 bytes. Puesto que la sección restante (Alpha_Data) es idéntica en ambas fuentes, la comprobación concluye con éxito y sin arrojar advertencias.

cmp -i 7 data1.txt data2.txt

Asimismo, la opción -n 6 restringe la inspección a una ventana máxima de 6 bytes a partir del origen del fichero. Como la divergencia radica justamente en dicho segmento preliminar, se señala oportunamente el conflicto en el primer byte examinado.

cmp -n 6 data1.txt data2.txt

Dominar estas variantes de cmp proporciona una ventaja operativa crucial al auditar la integridad de paquetes pesados, firmwares o archivos binarios complejos donde una revisión de texto estándar resultaría ineficiente.