Tutorial comando diff en GNU/Linux
Tabla de contenido:
- Cómo usar el comando
diff - Formato normal
- Formato de contexto
- Formato unificado
- Ignorar caso
- Conclusión
diff
es una utilidad de línea de comandos que le permite comparar dos archivos línea por línea. También puede comparar el contenido de los directorios.
El comando
diff
se usa más comúnmente para crear un parche que contiene las diferencias entre uno o más archivos que se pueden aplicar usando el comando
patch
.
Cómo usar el comando
diff
La sintaxis para el comando
diff
es la siguiente:
diff… FILES
El comando
diff
puede mostrar la salida en varios formatos, siendo el formato normal, de contexto y unificado los más comunes. El resultado incluye información sobre qué líneas en los archivos deben cambiarse para que se vuelvan idénticas. Si los archivos coinciden, no se produce ninguna salida.
Para guardar la salida del comando en un archivo, use el operador de redirección:
diff file1 file2 > patch
, usaremos los siguientes dos archivos para explicar cómo funciona el comando
diff
:
Ubuntu Arch Linux Debian CentOS Fedora
file2
Kubuntu Ubuntu Debian Arch Linux Centos Fedora
Formato normal
En su forma más simple, cuando el comando
diff
se ejecuta en dos archivos de texto sin ninguna opción, produce una salida en el formato normal:
diff file1 file2
La salida se verá más o menos así:
0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos
El formato de salida normal consta de una o más secciones que describen las diferencias. Cada sección se ve así:
change-command < from-file-line… --- > to-file-line…
0a1
,
2d2
y
4c4, 5
son comandos de cambio. Cada comando de cambio contiene lo siguiente, de izquierda a derecha:
- El número de línea o rango de líneas en el primer archivo. Un carácter de cambio especial. El número de línea o rango de líneas en el segundo archivo.
El carácter de cambio puede ser uno de los siguientes:
-
a- Agregar las líneas.c- Cambiar las líneas.d- Eliminar las líneas.
El comando de cambio es seguido por las líneas completas que se eliminan (
<
) y se agregan al archivo (
>
).
Vamos a explicar el resultado:
-
0a1: agregue la línea1del segundo archivo al comienzo del archivo1 (después de la línea0).-
> Kubuntu: la línea de la segunda línea que se agrega al primer archivo como se describió anteriormente.
2d2- Eliminar la línea2en el primer archivo. El2después del símbolodsignifica que si la línea no se elimina, aparecerá en la línea2en el segundo archivo.-
< Arch Linux: la línea eliminada.
4c4, 5- Reemplace (cambie) la línea5en el primer archivo con las líneas4-5del segundo archivo.-
< CentOS- La línea en el primer archivo a ser reemplazado.---- Separador.> Arch Linuxy> Centos: líneas del segundo archivo que reemplazan la línea del primer archivo.
-
Formato de contexto
Cuando se utiliza el formato de salida de contexto, el comando
diff
muestra varias líneas de contexto alrededor de las líneas que difieren entre los archivos.
La opción
-c
le dice a
diff
que produzca resultados en el formato de contexto:
diff -c file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
La salida comienza con los nombres y las marcas de tiempo si se comparan los archivos y una o más secciones que describen las diferencias. Cada sección se ve así:
*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…
-
from-file-line-numbersyto-file-line-numbers- Los números de línea o el rango de líneas separadas por comas en el primer y segundo archivo, respectivamente.from-file-lineyto-file-line: las líneas que difieren y las líneas de contexto:- Las líneas que comienzan con dos espacios son líneas de contexto, las líneas que son iguales en ambos archivos. Las líneas que comienzan con el símbolo menos (
-) son las líneas que no corresponden a nada en el segundo archivo. Faltan líneas en el segundo archivo. Las líneas que comienzan con el símbolo más (+) son las líneas que no corresponden a nada en el primer archivo. Faltan líneas en el primer archivo!Las líneas que comienzan con el signo de exclamación (!) Son las líneas que se cambian entre dos archivos. ¡Cada grupo de líneas que comienzan con!desde el primer archivo tiene una coincidencia correspondiente en el segundo archivo.
- Las líneas que comienzan con dos espacios son líneas de contexto, las líneas que son iguales en ambos archivos. Las líneas que comienzan con el símbolo menos (
Vamos a explicar las partes más importantes de la salida:
- En este ejemplo, solo tenemos una sección que describe las diferencias.
*** 1, 6 ****y--- 1, 7 ----nos dice el rango de las líneas del primer y segundo archivo que se incluyen en esta sección. LíneasUbuntu,Debian,Fedoray el La última línea vacía es la misma en ambos archivos. Estas líneas comienzan con doble espacio- Arch LinuxLínea- Arch Linuxdesde el primer archivo no corresponde a nada en el segundo archivo. Aunque esta línea también existe en el segundo archivo, las posiciones son diferentes+ Kubuntudel segundo archivo no corresponde a nada en el primer archivo! CentOSLínea! CentOS! CentOSdesde el primer archivo y líneas! Arch Linux! Arch Linuxy! CentOS! CentOSdel segundo archivo se cambian entre los archivos.
Por defecto, el número de líneas de contexto se establece por defecto en tres. Para especificar otro número, use la opción
-C
(
--contexts
):
diff -C 1 file1 file2
*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora
Formato unificado
El formato de salida unificado es una versión mejorada del formato de contexto y produce una salida más pequeña.
Use la opción
-u
para indicar a
diff
que imprima la salida en el formato unificado:
diff -u file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora
La salida comienza con los nombres y las marcas de tiempo de los archivos y una o más secciones que describen las diferencias. Cada sección toma la siguiente forma:
*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…
-
@@ from-file-line-numbers to-file-line-numbers @@- El número de línea o rango de las líneas del primer y segundo archivo incluidos en esta sección.line-from-files: las líneas que difieren y las líneas de contexto:- Las líneas que comienzan con dos espacios son líneas de contexto, las líneas que son iguales en ambos archivos. Las líneas que comienzan con el símbolo menos (
-) son las líneas que se eliminan del primer archivo. Las líneas que comienzan con el símbolo más (+) son las líneas que se agregan desde el primer archivo.
- Las líneas que comienzan con dos espacios son líneas de contexto, las líneas que son iguales en ambos archivos. Las líneas que comienzan con el símbolo menos (
Ignorar caso
Como puede observar en los ejemplos anteriores, el comando
diff
distingue entre mayúsculas y minúsculas de forma predeterminada.
Use la opción
-i
para indicar a
diff
que ignore el caso:
diff -ui file1 file2
--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora
Conclusión
La comparación de archivos de texto por diferencias es una de las tareas más comunes para los administradores de sistemas Linux.
El comando
diff
compara los archivos línea por línea. Para obtener más información, escriba
man diff
en su terminal.
El complemento Diff-IE para Internet Explorer lo ayuda a identificar cambios en una página web
Diff-IE es un prototipo de Add-on de Microsoft Research para Internet Explorer, que destaca los cambios en una página web desde la última vez que la visitó.
Comando Chmod en Linux (permisos de archivo)
En Linux, el acceso a los archivos se gestiona a través de los permisos, atributos y propiedad del archivo. Este tutorial cubre cómo usar el comando chmod para cambiar los permisos de acceso de archivos y directorios.
Comando chgrp en linux (cambiar grupo)
En Linux, cada archivo está asociado con un propietario y un grupo y tiene permisos que determinan qué usuarios pueden leer, escribir o ejecutar el archivo. El comando chgrpc cambia la propiedad del grupo de los archivos dados.







