Aprende leyendo en orden

Diferencias entre archivos — diff

Este artículo forma parte del Curso de Linux, con el que dominarás desde cero habilidades prácticas de Linux, desde los comandos básicos hasta los scripts de shell.
Mira cómo comprobar las diferencias entre dos archivos con diff. Leerás qué líneas se añadieron, eliminaron o cambiaron, con diagramas y una terminal práctica dentro de tu navegador.

Cuándo usar diff

Úsalo cuando quieras comprobar qué cambiaste después de editar un archivo, o si dos archivos tienen el mismo contenido. Le pasas dos archivos y muestra solo las líneas que difieren.

Comparar dos archivos — diff

diff compara dos archivos y muestra solo las partes que difieren. Lo usas como diff old.txt new.txt, tratando el primer archivo como la versión antigua (antes) y el segundo como la nueva (después). Las líneas iguales no se imprimen — solo se reportan las diferencias.

Comparar dos archivos con diff
old.txtapple / banana / cherrynew.txtapple / grape / cherrydiffSalida-banana+grapeantiguonuevomuestra el difflos dos archivos comparados
diff old.txt new.txt alinea los dos archivos y muestra solo la segunda línea que difiere como -banana (antiguo) y +grape (nuevo). Las iguales apple y cherry no se imprimen.

En la terminal del navegador, diff muestra las diferencias en formato unificado. Los --- y +++ iniciales son los nombres de los dos archivos comparados, la línea @@ indica dónde ocurrió el cambio, y en el cuerpo cada línea eliminada empieza con - y cada línea añadida con +. Las líneas sin cambios empiezan con un espacio y aparecen al lado como contexto.

SímboloSignificado
--- old.txtNombre del primer archivo (antiguo) comparado
+++ new.txtNombre del segundo archivo (nuevo) comparado
@@ -N,M +N,M @@Información de posición de dónde ocurrió el cambio
- líneaUna línea eliminada (estaba en el archivo antiguo)
+ líneaUna línea añadida (está en el archivo nuevo)
línea (espacio al inicio)Una línea sin cambios mostrada junto como contexto
Leer el formato unificado
Línea eliminada(archivo antiguo)@@ -1,3 +1,3 @@Indica dóndeocurrió el cambio- banana+ grapeLínea añadida(archivo nuevo)
En formato unificado, @@ indica la posición del cambio, - una línea eliminada (antiguo) y + una línea añadida (nuevo). Las líneas sin cambios aparecen al lado con un espacio al inicio.
printf 'apple\nbanana\ncherry\n' > old.txt   # crea la muestra
printf 'apple\ngrape\ncherry\n' > new.txt    # una muestra que difiere por una línea
diff old.txt new.txt
--- old.txt
+++ new.txt
@@ -1,3 +1,3 @@
 apple
-banana
+grape
 cherry

① Ejecuta printf 'apple\nbanana\ncherry\n' > old.txt para crear el primer archivo de muestra.

② Ejecuta printf 'apple\ngrape\ncherry\n' > new.txt para crear el segundo archivo de muestra, que difiere solo en la línea 2.

③ Pasa los dos archivos a diff en este orden y lee qué líneas reciben los marcadores - (eliminada) y + (añadida). (Ejecútalo correctamente y aparecerá la explicación).

Linux console
0 / 3 completado(s)
Loading Linux Terminal...

Leer añadidos y eliminaciones

Las diferencias no son solo reescrituras. Cuando se añade una línea solo en el archivo de la derecha, obtienes únicamente una línea +; cuando se elimina una línea del archivo de la izquierda, obtienes únicamente una línea -. En lugar de que - y + aparezcan en pareja como en una reescritura, que aparezca solo uno de ellos es la señal de un añadido o una eliminación. Invierte el orden en que comparas y la misma diferencia cambia entre + (añadida) y - (eliminada).

printf 'one\ntwo\n' > base.txt        # crea la muestra
printf 'one\ntwo\nthree\n' > more.txt  # una muestra con una línea añadida
diff base.txt more.txt
--- base.txt
+++ more.txt
@@ -1,2 +1,3 @@
 one
 two
+three
Invertir el orden cambia + y -
diffbase.txt more.txtInvierte el orden y+ y - se intercambiandiffmore.txt base.txt+ three(añadida)- three(eliminada)+ aparece- aparece
Con los mismos dos archivos, diff base.txt more.txt muestra +three (añadida), mientras que el invertido diff more.txt base.txt muestra -three (eliminada).

① Ejecuta printf 'one\ntwo\n' > base.txt para crear la primera muestra de dos líneas.

② Ejecuta printf 'one\ntwo\nthree\n' > more.txt para crear la segunda muestra con una tercera línea añadida.

③ Compara con diff en el orden base.txtmore.txt y confirma que la línea añadida empieza con +.

④ Luego invierte el orden a more.txtbase.txt y confirma que la misma diferencia se muestra como - (eliminada), y que invertir el orden cambia + y -.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

diff y patch, y cómo lo muestran otros entornos

El diff en formato unificado que produce diff puede aplicarse a otro archivo tal cual con el comando patch. Cuando un equipo intercambia correcciones, pasarse este diff (un parche) de un lado a otro es común. Este curso se centra en leer diffs y no cubre aquí cómo aplicarlos.

En la terminal del navegador de este curso, diff produce el formato unificado directamente. Con GNU diff en Ubuntu y similares, diff a secas muestra el formato tradicional usando 2c2 y < / >, y al añadir diff -u se obtiene el mismo formato unificado que se usa en este curso.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1En la salida en formato unificado de diff, ¿qué símbolo empieza una línea eliminada (una que estaba en el archivo antiguo)?

Pregunta 2¿Qué muestra una línea como @@ -1,3 +1,3 @@?

Pregunta 3Cuando se añade una línea solo en el archivo de la derecha, ¿cómo se ve la salida de diff?