diff compara dos archivos línea por línea y muestra qué es diferente entre ellos. Es uno de los comandos más útiles de Linux — lo usarás cada vez que necesites ver qué cambió en un archivo de configuración, revisar un parche, o verificar que dos directorios están sincronizados.

Sintaxis

diff [opciones] archivo1 archivo2
diff [opciones] archivo1 directorio
diff [opciones] directorio1 directorio2

Cuando pasas un archivo y un directorio, diff busca un archivo con el mismo nombre dentro del directorio. Cuando pasas dos directorios, compara los archivos con nombres coincidentes en ambos.

Leer la salida de diff

Ejecutar diff sin opciones da el formato normal. Con estos dos archivos:

numeros1.txt

1
2
3
4
5
6

numeros2.txt

1
2
3
4
7
6

diff numeros1.txt numeros2.txt

Salida:

5c5
< 5
---
> 7

La notación funciona así:

  • 5c5 — la línea 5 del archivo1 debe ser cambiada para coincidir con la línea 5 del archivo2
  • < — líneas del archivo1 (lado izquierdo)
  • > — líneas del archivo2 (lado derecho)
  • c significa cambio, d significa borrar, a significa agregar

La salida es en realidad un conjunto de instrucciones para transformar archivo1 en archivo2.

Formato unificado (-u)

El formato unificado es el que más vas a usar. Es más fácil de leer y es el formato que usa git diff y la mayoría de las herramientas de parches.

diff -u numeros1.txt numeros2.txt

Salida:

--- numeros1.txt    2026-05-29 10:00:00
+++ numeros2.txt    2026-05-29 10:01:00
@@ -3,4 +3,4 @@
 3
 4
-5
+7
 6

Las líneas que empiezan con - están solo en el archivo1. Las que empiezan con + están solo en el archivo2. Las que tienen un espacio son iguales en ambos (líneas de contexto).

Para mostrar más líneas de contexto (el valor por defecto es 3):

diff -U 5 archivo1 archivo2

Comparación lado a lado (-y)

Muestra ambos archivos uno al lado del otro. Las diferencias se marcan con |, las líneas solo en archivo1 con <, y las solo en archivo2 con >.

diff -y numeros1.txt numeros2.txt

Salida:

1                   1
2                   2
3                   3
4                   4
5         |         7
6                   6

Para ocultar las líneas idénticas y mostrar solo las diferencias:

diff -y --suppress-common-lines numeros1.txt numeros2.txt

También puedes usar sdiff, que reproduce este comportamiento.

Comparar directorios recursivamente (-r)

diff -r directorio1/ directorio2/

Compara los archivos con nombres coincidentes en ambos directorios e informa los archivos que solo existen en uno de los dos lados.

Para listar solo qué archivos son diferentes sin mostrar el contenido de las diferencias:

diff -rq directorio1/ directorio2/

Muy útil para una verificación rápida cuando necesitas confirmar que dos árboles de directorios están sincronizados.

Ignorar espacios en blanco

Ignorar todas las diferencias de espacios en blanco:

diff -w archivo1 archivo2

Ignorar cambios en la cantidad de espacios en blanco (pero no su presencia):

diff -b archivo1 archivo2

Ignorar líneas en blanco:

diff -B archivo1 archivo2

Útil al comparar archivos de configuración que han sido reformateados, o código donde se ajustó la indentación.

Ignorar mayúsculas y minúsculas (-i)

diff -i archivo1 archivo2

Trata mayúsculas y minúsculas como idénticas. Útil para comparar salidas de diferentes sistemas o configuraciones sin distinción de mayúsculas.

Solo informar si los archivos difieren (-q)

diff -q archivo1 archivo2

Salida:

Files archivo1 and archivo2 differ

Sin salida de diff, solo una respuesta sí/no. Muy útil en scripts.

Crear un archivo de parche

La forma estándar de distribuir cambios es guardar el diff unificado en un archivo:

diff -u original.conf modificado.conf > cambios.patch

El archivo .patch se puede compartir y aplicar en otra máquina.

Aplicar un parche

Usa el comando patch para aplicar un archivo de parche:

patch original.conf < cambios.patch

Para aplicar un parche a un directorio de archivos:

patch -p1 < cambios.patch

El -p1 elimina un nivel del directorio inicial de las rutas en el parche — habitual cuando los parches se generan con git diff o desde la raíz de un proyecto.

Para hacer una simulación antes de aplicar:

patch --dry-run original.conf < cambios.patch

Ejemplos prácticos

Comparar dos configuraciones de nginx y mostrar solo las diferencias, lado a lado:

diff -y --suppress-common-lines nginx.conf nginx.conf.bak

Verificar si dos directorios de backup son idénticos:

diff -rq /backup/sitio/ /backup/sitio.prev/ && echo "idénticos" || echo "difieren"

Comparar una configuración con la predeterminada ignorando comentarios y líneas vacías:

grep -v '^#' archivo1 > /tmp/f1 && grep -v '^#' archivo2 > /tmp/f2 && diff /tmp/f1 /tmp/f2

Generar un parche entre dos versiones de un script:

diff -u deploy-v1.sh deploy-v2.sh > deploy.patch

Comparar un archivo local con uno en un servidor remoto:

diff archivo.conf <(ssh usuario@servidor cat /etc/app/app.conf)

Comparar dos directorios recursivamente, solo resumen:

diff -rq /etc/nginx/ /etc/nginx.bak/

Comparar archivos ignorando cambios de espacios:

diff -uw httpd.conf httpd.conf.nuevo

vimdiff

Si prefieres una comparación visual en el terminal, vimdiff abre dos archivos lado a lado en Vim con las diferencias resaltadas:

vimdiff archivo1 archivo2

Navega entre diferencias con ]c (siguiente) y [c (anterior). Útil para revisar cambios de forma interactiva.


Relacionados: grep — buscar patrones en archivos · sed — buscar y reemplazar en archivos

Publicado originalmente: 20 de mayo de 2007 · Última actualización: 29 de mayo de 2026