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)csignifica cambio,dsignifica borrar,asignifica 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