El comando diff en Linux: comparar archivos línea a línea

Introducción

En el día a día de administradores de sistemas, desarrolladores y usuarios avanzados de Linux, es frecuente necesitar saber qué diferencias existen entre dos versiones de un mismo archivo. Ya sea para revisar cambios en código fuente, validar configuraciones o simplemente confirmar que una copia de seguridad es idéntica al original, el comando diff se convierte en una herramienta indispensable. Este pequeño pero poderoso programa analiza dos archivos de texto y muestra, línea por línea, dónde coinciden y dónde divergen, ofreciendo una visión clara que facilita la toma de decisiones y la depuración de problemas.

Sintaxis básica

La forma más simple de invocar diff es indicar los dos archivos que se desean comparar: diff archivo1.txt archivo2.txt. Sin opciones adicionales, la salida utiliza el formato normal, que muestra las líneas que deben cambiarse en el primero para obtener el segundo, precedidas por símbolos como < (líneas del archivo 1) y > (líneas del archivo 2). Este modo es útil para comparaciones rápidas, aunque puede resultar menos legible cuando los archivos son extensos o contienen muchos cambios.

Opciones más usadas

  • -u (unified): genera un formato unificado que incluye líneas de contexto antes y después de cada cambio, lo que mejora la legibilidad y es el estándar en parches.
  • -c (context): similar al unificado pero con un estilo de contexto más tradicional, útil para revisar cambios en bloques mayores.
  • -i: ignora diferencias de mayúsculas y minúsculas, ideal cuando el caso no es relevante.
  • -w: elimina todos los espacios en blanco al comparar, de modo que solo se consideren diferencias reales de contenido.
  • -b: ignora cambios en la cantidad de espacios en blanco, tratando múltiples espacios como uno.
  • -r: recorre directorios de forma recursiva, comparando todos los archivos con el mismo nombre en subárboles.

Ejemplos prácticos

Supongamos que tenemos dos versiones de un script: script.sh y script_new.sh. Para ver un diff unificado con tres líneas de contexto, se ejecuta: diff -u script.sh script_new.sh. La salida mostrará algo como:

--- script.sh	2023-10-01 12:00:00.000000000 +0000
+++ script_new.sh	2023-10-02 09:15:00.000000000 +0000
@@ -5,7 +5,7 @@
 echo "Iniciando proceso"
- sleep 5
+ sleep 10
 echo "Esperando entrada"
 read entrada

Esto indica que en la línea 6 se cambió sleep 5 por sleep 10. Si se desea ignorar espacios en blanco, se añade -w: diff -w -u archivo1.cfg archivo2.cfg.

Uso avanzado

Beyond the basic file‑to‑file comparison, diff puede trabajar con entrada estándar, lo que permite integrarlo en tuberías. Por ejemplo, cmd1 | diff - archivo2.txt compara la salida de cmd1 con un archivo estático. Otra técnica útil es combinar diff con patch: el formato unificado generado por diff -u se aplica directamente con patch -p0 < cambios.patch para actualizar un árbol de fuentes. Además, la opción -q solo informa si los archivos difieren, sin mostrar los detalles, lo que resulta práctico en scripts de verificación donde se necesita un booleano rápido.

Consejos y trucos

  • Utilice diff -y para una vista lado a lado que muestra las diferencias en columnas, muy útil en terminales amplias.
  • Cuando compare directorios, combine -r con --exclude=pattern para omitir ciertos tipos de archivos, como --exclude='*.log'.
  • Para guardar el diff en un archivo legible, redirija la salida: diff -u orig.txt mod.txt > cambios.diff.
  • En entornos de CI/CD, es común usar diff -u como paso de validación para asegurarse de que no se introduzcan cambios no deseados en archivos de configuración.
  • Recuerde que diff trabaja con texto; para archivos binarios prefiera cmp o herramientas como hexdump.

Conclusión

El comando diff sigue siendo una pieza fundamental del arsenal de cualquier usuario de Linux gracias a su simplicidad, potencia y flexibilidad. Desde una comparación rápida de dos textos hasta la generación de parches complejos para actualizar grandes proyectos, sus opciones permiten adaptar la salida a casi cualquier escenario de revisión. Dominar sus variantes y combinarlo con otras herramientas como patch, grep o scripts de automatización le brinda un control preciso sobre los cambios en sus archivos, facilitando la detección de errores, la auditoría de configuraciones y la colaboración en equipos de desarrollo.

Esta obra está bajo una Licencia Creative Commons Atribución 4.0 Internacional para Francesc Roig francesc@vivaldi.net .

EspañolesEspañolEspañol