GNU/Linux >> Tutoriales Linux >  >> Linux

Comando Dif en Linux

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.

La diff El comando 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 patch comando.

Cómo usar el diff Comando #

La sintaxis para diff El comando es el siguiente:

diff [OPTION]... FILES

La diff El comando puede mostrar la salida en varios formatos, siendo el formato normal, de contexto y unificado los más comunes. La salida incluye información sobre qué líneas en los archivos deben cambiarse para que sean idénticos. Si los archivos coinciden, no se produce ningún resultado.

Para guardar el resultado del comando en un archivo, use el operador de redirección:

diff file1 file2 > patch

En este artículo, usaremos los siguientes dos archivos para explicar cómo diff el comando funciona:

archivo1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
archivo2
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora

Formato normal #

En su forma más simple cuando diff El comando 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á 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 - Agrega las líneas.
  • c - Cambiar las líneas.
  • d - Eliminar las líneas.

El comando de cambio va seguido de las líneas completas que se eliminan (< ) y agregado al archivo (> ).

Expliquemos el resultado:

  • 0a1 - Añadir línea 1 del segundo archivo al principio del archivo1 (después de la línea 0 ).
    • > Kubuntu - La línea de la segunda línea que se agrega al primer archivo como se describe arriba.
  • 2d2 - Eliminar línea 2 en el primer archivo. El 2 después de la d símbolo significa que si la línea no se elimina, aparecerá en la línea 2 en el segundo archivo.
    • < Arch Linux - la línea eliminada.
  • 4c4,5 - Reemplazar (cambiar) línea 5 en el primer archivo con líneas 4-5 del segundo archivo.
    • < CentOS - La línea en el primer archivo a ser reemplazado.
    • --- - Separador.
    • > Arch Linux y > Centos - Líneas del segundo archivo reemplazando la línea en el primer archivo.

Formato de contexto #

Cuando se usa el formato de salida de contexto, el diff El comando muestra varias líneas de contexto alrededor de las líneas que difieren entre los archivos.

El -c opción le dice a diff para producir 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

El resultado comienza con los nombres y las marcas de tiempo de los archivos que se comparan, 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-numbers y to-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-line y to-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.
    • 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.
    • 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.
    • 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 comienza con ! del primer archivo tiene una coincidencia correspondiente en el segundo archivo.

Expliquemos las partes más importantes del resultado:

  • 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íneas Ubuntu , Debian , Fedora , y la última línea vacía son iguales en ambos archivos. Estas líneas comienzan con doble espacio.
  • Línea - Arch Linux del 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.
  • Línea + Kubuntu del segundo archivo no corresponde a nada en el primer archivo.
  • ¡Línea ! CentOS desde el primer archivo y líneas ! Arch Linux y ! CentOS del segundo archivo se cambian entre los archivos.

De forma predeterminada, el número de líneas de contexto es tres. Para especificar otro número use -C (--contexts ) opción:

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.

Usa el -u opción para decirle a diff para imprimir 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 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.
    • Líneas que comienzan con el símbolo menos (- ) son las líneas que se eliminan del primer archivo.
    • Líneas que comienzan con el símbolo más (+ ) son las líneas que se agregan del primer archivo.

Ignorar caso #

Como puede notar en los ejemplos anteriores, el diff el comando distingue entre mayúsculas y minúsculas de forma predeterminada.

Usa el -i opción para decirle a diff para ignorar mayúsculas y minúsculas:

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 #

Comparar archivos de texto en busca de diferencias es una de las tareas más comunes para los administradores de sistemas Linux.

La diff El comando compara archivos línea por línea. Para obtener más información, escriba man diff en tu terminal.

Si tiene alguna pregunta, deje un comentario a continuación.


Linux
  1. 8 consejos para la línea de comandos de Linux

  2. Tener una vaca en la línea de comandos de Linux

  3. Encárguese en la línea de comandos de Linux

  4. comando linux mv

  5. Linux du comando

Cómo iniciar en la línea de comandos de Linux

Domina la línea de comandos de Linux

Comando Df en Linux

Comando diff en Linux

Conceptos básicos de la línea de comandos de Linux:sudo

Ejemplos de comandos diff de Linux