Comando diff
El comando diff (difference) es una potente utilidad de línea de comandos en sistemas operativos tipo Unix y Linux que se encarga de comparar dos archivos línea por línea. Su función principal es mostrar las diferencias exactas entre ambos ficheros, lo que lo convierte en un recurso fundamental para programadores, desarrolladores y administradores de sistemas que necesitan auditar cambios en códigos fuente, configuraciones o scripts.
| Categoría | Comparación de Archivos y Control de Versiones |
|---|---|
| Disponible en | Linux / Unix / macOS / Entornos POSIX (y disponible en Windows mediante herramientas como Git Bash o WSL) |
| Equivalente en Windows | fc (File Compare en CMD) / Compare-Object (en PowerShell) |
| Sustituye a | Métodos manuales de revisión visual de documentos largos o comparadores rudimentarios antiguos. |
| ¿Requiere permisos de administrador? | No, salvo que se intente comparar archivos del sistema que tengan restricciones de lectura para el usuario actual. |
¿Qué significa su nombre?
DIFF proviene directamente de la abreviatura en inglés de difference (diferencia). Creado originalmente a principios de los años 70 por Douglas McIlroy y otros colaboradores para los primeros sistemas Unix, su algoritmo matemático (basado en la subsecuencia común más larga) se convirtió en la piedra angular de herramientas modernas de control de versiones como Git.
Su impacto en la informática ha sido tan profundo que el formato de salida que genera (conocido como formato diff o parche) es el estándar universal utilizado en la industria para proponer y aplicar correcciones de código.
¿Para qué sirve?
El comando diff sirve principalmente para:
- Comparar dos versiones de un archivo de código o configuración para ver exactamente qué líneas han sido modificadas, añadidas o borradas.
- Generar archivos de parche (
.patcho.diff) para aplicar cambios de manera automatizada en otros equipos o fuentes. - Auditar cambios en archivos de registro (logs) o configuraciones del sistema tras una actualización o fallo.
- Comparar directorios completos de forma recursiva para comprobar si hay discrepancias entre ficheros.
Sintaxis
diff [opciones] [archivo1] [archivo2]
Las opciones más habituales son:
| Opción | Descripción |
|---|---|
-u |
Genera una salida en formato unificado (unified diff), mucho más clara y legible, mostrando contexto alrededor de los cambios. |
-i |
Ignora las diferencias entre mayúsculas y minúsculas durante la comparación. |
-w |
Ignora todos los espacios en blanco (útil para obviar cambios de tabulación o indentación). |
-r |
Compara directorios de forma recursiva (incluyendo todas sus subcarpetas y archivos internos). |
-s |
Informa explícitamente si los dos archivos analizados son idénticos (por defecto no muestra nada si no hay cambios). |
Comandos más utilizados
| Comando | Descripción |
|---|---|
diff archivo1.txt archivo2.txt |
Compara dos archivos de texto mostrando las diferencias en formato estándar. |
diff -u original.conf modificado.conf |
Compara dos configuraciones utilizando el formato unificado moderno. |
diff -r dir1/ dir2/ |
Compara el contenido de dos directorios de forma recursiva. |
diff -u a.txt b.txt > cambios.patch |
Genera un archivo de parche con las diferencias detectadas entre ambos ficheros. |
Equivalencia con otros sistemas
| Acción | Linux / Unix / macOS | Windows (CMD) | Windows (PowerShell) |
|---|---|---|---|
| Comparar dos archivos | diff |
fc |
Compare-Object |
| Comparación detallada / Unificada | diff -u |
fc /n |
Uso de scripts o herramientas externas |
Ejemplos
Comparar dos versiones de un archivo de texto plano
diff archivo_v1.txt archivo_v2.txt
Comparar dos ficheros usando el formato unificado y legible
diff -u config_antigua.conf config_nueva.conf
Comparar dos archivos ignorando los espacios en blanco y mayúsculas
diff -iw texto1.txt texto2.txt
Generar un archivo de parche con los cambios para compartirlos
diff -u script_v1.sh script_v2.sh > actualizacion.patch
Ejemplo de salida
--- config_antigua.conf 2026-06-01 10:00:00.000000000 +0200
+++ config_nueva.conf 2026-06-05 12:30:00.000000000 +0200
@@ -3,4 +3,4 @@
server_ip = 192.168.1.10
-max_connections = 100
+max_connections = 250
timeout = 30
¿Cómo interpretar la salida?
- --- config_antigua.conf / +++ config_nueva.conf: Indican el archivo original (representado con signos de resta
---) y el archivo modificado (representado con signos de suma+++). - @@ -3,4 +3,4 @@: Muestra el número de línea y el rango de contexto donde se localizan los cambios en ambos ficheros.
- -max_connections = 100: Las líneas precedidas por el signo menos (
-) estaban presentes en el archivo original pero han sido eliminadas o cambiadas en la nueva versión. - +max_connections = 250: Las líneas precedidas por el signo más (
+) son las nuevas incorporaciones introducidas en la versión modificada.
Errores habituales
- Confundir el orden de los archivos al ejecutar el comando: recuerda que
diffcompara el archivo1 con el archivo2, por lo que las líneas marcadas con-pertenecerán al primero y las marcadas con+al segundo. - Intentar interpretar salidas extensas sin utilizar la opción unificada
-u, lo cual dificulta enormemente la lectura de qué partes específicas del documento han cambiado.
Conceptos relacionados
- Control de versiones (Git)
- Archivos de parche (Patches)
- Algoritmos de comparación de texto
- Flujos de trabajo de desarrollo colaborativo
- Comparación de directorios
Comandos relacionados
patchcommcmpgit diffgrep
Curiosidades
El comando diff es la base conceptual sobre la que se sustuntan casi todos los sistemas modernos de control de versiones. Cuando escribes comandos como git diff en tu terminal para revisar los cambios de código antes de hacer un commit, por debajo se está ejecutando una versión optimizada de este clásico algoritmo de Unix creado hace más de cincuenta años.
Prácticas propuestas
- Crea un archivo de texto de prueba llamado
origen.txtcon tres líneas de texto descriptivas. - Crea una copia del archivo anterior llamada
modificado.txty cambia alguna palabra o añade una línea nueva al final. - Ejecuta el comando básico
diff origen.txt modificado.txtpara observar cómo la terminal resalta las diferencias. - Vuelve a ejecutar la comparación añadiendo la opción unificada
diff -u origen.txt modificado.txtpara comprobar la claridad visual que aportan los signos de suma y resta. - Prueba a generar un archivo de parche utilizando el operador de redirección (
>) y guarda los cambios en un fichero con extensión.patch. - Si estás trabajando en un entorno Windows, compara el funcionamiento de
diffutilizando el comando nativofcdesde la consola de CMD.
Consejo: Adquiere la costumbre de utilizar siempre la opción -u (unified) al trabajar con diff; te ofrecerá un contexto visual mucho más limpio y es el estándar que utilizan los desarrolladores en todo el mundo.