El comando Diff en Linux se usa para comparar el contenido de dos archivos línea por línea y, si se encuentra la diferencia, también enumerará las diferencias junto con los números de línea. El comando Diff también se puede usar para comparar el contenido de dos directorios.
El comando Diff juega un papel importante en el script de shell donde queremos ejecutar el comando en función de la diferencia de dos archivos.
sintaxis del comando diff
$ diferencia
La salida del comando diff puede tener el siguiente formato:
- Normal (predeterminado)
- Contexto
- Unificado
Diferentes símbolos de la salida del comando diff:
- a -> indica que se ha añadido algo
- c -> indica que se ha cambiado algún texto
- d -> indica que se ha eliminado algún texto
De forma predeterminada, el comando diff muestra la salida en formato normal, lo que significa que cuando el contenido de dos archivos es idéntico, no producirá ninguna salida, pero obtendremos el aviso.
En esta publicación, discutiremos el comando diff con ejemplos prácticos.
1) Compara dos archivos con el comando diff
Supongamos que tenemos dos archivos aachen.txt y sydney.txt ya continuación se muestra el contenido de estos archivos,
[[email protected] ~]# cat aachen.txt Linux Rocks in the open source world, followings are the linux distributions: CentOS Red Hat Ubuntu Debian Linux Mint OpenSUSE Fedora [[email protected] ~]# cat sydney.txt Linux Rocks in the open source world, followings are the linux distributions: CentOS Red Hat Ubuntu Debian Linux Mint OpenSUSE Fedora [[email protected] ~]#
Comparemos el contenido de estos archivos usando el comando diff,
[[email protected] ~]# diff aachen.txt sydney.txt [[email protected] ~]#
La salida anterior confirma que ambos archivos son idénticos. Hagamos algunos cambios en aachen.txt, reescribamos el código abierto como "código abierto".
Ahora vuelva a ejecutar el comando diff,
[[email protected] ~]# diff aachen.txt sydney.txt
Salida,
En la salida, 1c1 indica que se debe cambiar la primera línea del primer archivo para que ambos archivos sean idénticos.
Retrocedamos el cambio anterior y agreguemos una nueva línea "Arch Linux ” en sydeny.txt al final del archivo y ejecute el comando diff nuevamente,
Salida del comando diff “7a8 ” indica que después de la línea 7 en el primer archivo, necesitamos agregar otra línea para que coincida con la línea 8 del segundo archivo.
Eliminemos "Arch Linux" y "Fedora" de sydney.txt y luego intentemos comparar estos archivos,
Salida del comando diff “7d6 ” indica que necesitamos eliminar la séptima línea en el primer archivo para sincronizar con el segundo archivo en la línea número 6.
2) Salida del comando Diff en formato de contexto (-c)
Use la opción '-c' en el comando diff para producir la salida del comando diff en formato de contexto. El ejemplo se muestra a continuación,
[[email protected] ~]# diff -c aachen.txt sydney.txt
Las primeras dos líneas representan los nombres de archivo junto con su fecha y hora de modificación y el símbolo de tres asteriscos ("*** “) indica el primer archivo y el símbolo de tres guiones (“— “) indica el segundo archivo.
Solo un guión simple "-" indica que la línea debe eliminarse y el símbolo más "+" indica que la línea debe agregarse en el archivo. Si hay alguna línea que no requiere ningún cambio, tiene dos espacios como prefijo.
3) Salida del comando Diff en formato unificado (-u)
Use la opción '-u' en el comando diff si desea producir su salida en formato unificado, el ejemplo se ilustra a continuación,
[[email protected] ~]# diff -u aachen.txt sydney.txt
La salida anterior es algo similar al formato de contexto, pero el formato unificado muestra la salida de manera concisa, aquí las dos primeras líneas indican los nombres de los archivos junto con su fecha y hora de modificación.
Tres guiones ("-") representan el primer archivo y tres símbolos más ("+++") representan el segundo archivo, después de dos @ el signo "-1,7" indica las líneas del primer archivo y "+1,7" representa las líneas van desde el segundo archivo. Además, el símbolo (+Core OS) indica que esta línea debe agregarse en el primer archivo y el símbolo de guión (-Fedora) indica que esta línea debe eliminarse del primer archivo para que sea idéntica al segundo archivo.
4) Ignorar mayúsculas y minúsculas al comparar archivos (-i)
De forma predeterminada, el comando diff distingue entre mayúsculas y minúsculas y si desea ignorar mayúsculas y minúsculas en el comando diff, use la opción '-i', el ejemplo se muestra a continuación,
Supongamos que tenemos el siguiente contenido de dos archivos
Ejecute el comando diff sin ninguna opción,
[[email protected] ~]# diff aachen.txt sydney.txt 5,6c5,6 < Ubuntu debian < Linux mint --- > Ubuntu Debian > Linux Mint [[email protected] ~]#
Ahora ejecute el comando diff con la opción -i,
[[email protected] ~]# diff -i aachen.txt sydney.txt [[email protected] ~]#
Como podemos ver en el resultado anterior, el comando diff ha ignorado la función de distinción entre mayúsculas y minúsculas cuando usamos la opción -i.
5) Los archivos de informe son idénticos con el comando diff (-s)
Puede haber algunas situaciones en las que estemos comparando los archivos usando el comando diff y si el contenido es idéntico, entonces queremos mostrar el mensaje de que el archivo es idéntico, esto se puede lograr pasando la opción '-s' en el comando diff,
[[email protected] ~]# cat filex.txt DevOPs Engineer Cloud Stack Engineer Linux System Admin Monitoring Team [[email protected] ~]# cat filey.txt DevOPs Engineer Cloud Stack Engineer Linux System Admin Monitoring Team [[email protected] ~]# diff -s filex.txt filey.txt Files filex.txt and filey.txt are identical [[email protected] ~]#
6) Ignorar los espacios en blanco al comparar archivos con diff (-b)
Supongamos que tenemos dos archivos filea.txt y archivo.txt donde los espacios en blanco no son consistentes, por lo que si usamos el comando diff sin ninguna opción, mostrará la diferencia de espacios en blanco aunque los contenidos sean idénticos, por lo que en tales casos podemos ignorar los espacios en blanco inconsistentes en el comando diff usando la opción -b, ejemplo se muestra a continuación,
[[email protected] ~]# cat filea.txt Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. [[email protected] ~]# cat fileb.txt Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. [[email protected] ~]#
Compare los archivos sin ninguna opción con el comando diff,
[[email protected] ~]# diff filea.txt fileb.txt 1c1 < Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. --- > Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. [[email protected] ~]#
Ahora use la opción -b en el comando diff anterior
[[email protected] ~]# diff -b filea.txt fileb.txt [[email protected] ~]#
Si desea ignorar todos los espacios en blanco durante la comparación con el comando diff, utilice “-w ” opción
[[email protected] ~]# diff -w filea.txt fileb.txt
7) Ignorar el espacio en blanco al final de la línea durante la comparación (-Z)
Si desea ignorar el espacio de prueba al final de la línea durante la comparación, utilice "-Z ” opción
[[email protected] ~]# diff -Z filea.txt fileb.txt
Usa “-B ” en el comando diff para ignorar todas las líneas en blanco durante la comparación,
[[email protected] ~]# diff -B filea.txt fileb.txt
8) Compara dos directorios
Supongamos que tenemos dos directorios con el nombre lab01 y lab02, estos tienen los siguientes archivos y subdirectorios
[[email protected] ~]# ls -l lab01/ total 0 -rw-r--r--. 1 root root 0 Feb 1 17:49 filea.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 fileb.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filec.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filed.txt drwxr-xr-x. 2 root root 23 Feb 1 17:50 sitea [[email protected] ~]# ls -l lab02/ total 0 -rw-r--r--. 1 root root 0 Feb 1 17:49 filea.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 fileb.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filec.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filed.txt drwxr-xr-x. 2 root root 23 Feb 1 17:50 sitea [[email protected] ~]#
Comparemos estos dos directorios usando el siguiente comando diff,
[[email protected] ~]# diff -qr lab01/ lab02/ [[email protected] ~]#
donde:
- -q -> indica al comando diff que informe solo cuando los archivos son diferentes
- -r -> indica al comando diff que busque la diferencia en los subdirectorios de forma recursiva
Como obtenemos una salida en blanco, significa que ambos directorios son idénticos. Eliminemos archivado.txt de lab02 y luego intentemos comparar,
[[email protected] ~]# cd lab02/ [[email protected] lab02]# rm -f filed.txt [[email protected] lab02]# cd [[email protected] ~]# diff -qr lab01/ lab02/ Only in lab01/: filed.txt [[email protected] ~]#
El resultado anterior dice que archivado.txt solo está presente en el directorio lab01
9) Redirigir la salida del comando diff a un archivo
La salida del comando Diff se puede redirigir a un archivo usando el símbolo ">". Se vuelve muy útil en scripts de shell donde queremos realizar una tarea solo si la salida del comando diff contiene diferencias.
[[email protected] ~]# diff aachen.txt sydney.txt 9,10d8 < SLES < Puppy Linux [[email protected] ~]# diff aachen.txt sydney.txt > diff.txt [[email protected] ~]# cat diff.txt 9,10d8 < SLES < Puppy Linux [[email protected] ~]#
Ejemplo adicional
Compare dos archivos en la terminal uno al lado del otro
Cuando usamos la opción '-y' mientras comparamos dos archivos usando el comando diff, muestra ambos archivos en la terminal uno al lado del otro.
[[email protected] ~]# diff -y /etc/fstab /tmp/fstab
salida
La salida anterior muestra claramente la diferencia de dos archivos.
Eso es todo de este artículo, espero que ahora tenga una mejor comprensión del comando diff al revisar los ejemplos anteriores. No dude en compartir sus opiniones y comentarios.
Lea también :16 ejemplos de comandos de eco en Linux
Leer también : 8 ejemplos de comandos de cabeza en Linux