GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Diff in Linux

diff è un'utilità della riga di comando che consente di confrontare due file riga per riga. Può anche confrontare il contenuto delle directory.

Il diff Il comando è più comunemente usato per creare una patch contenente le differenze tra uno o più file che possono essere applicati usando la patch comando.

Come utilizzare il diff Comando #

La sintassi per diff il comando è il seguente:

diff [OPTION]... FILES

Il diff Il comando può visualizzare l'output in diversi formati con il formato normale, contesto e unificato i più comuni. L'output include informazioni su quali righe nei file devono essere modificate in modo che diventino identiche. Se i file corrispondono, non viene prodotto alcun output.

Per salvare l'output del comando in un file, utilizzare l'operatore di reindirizzamento:

diff file1 file2 > patch

In questo articolo, utilizzeremo i seguenti due file per spiegare come il diff il comando funziona:

file1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
file2
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora

Formato normale #

Nella sua forma più semplice quando il diff comando viene eseguito su due file di testo senza alcuna opzione, produce un output nel formato normale:

diff file1 file2

L'output sarà simile a questo:

0a1
> Kubuntu
2d2
< Arch Linux
4c4,5
< CentOS
---
> Arch Linux
> Centos

Il normale formato di output è costituito da una o più sezioni che descrivono le differenze. Ogni sezione ha questo aspetto:

change-command
< from-file-line...
---
> to-file-line...

0a1 , 2d2 e 4c4,5 sono comandi di modifica. Ogni comando di modifica contiene quanto segue, da sinistra a destra:

  • Il numero di riga o l'intervallo di righe nel primo file.
  • Un carattere di modifica speciale.
  • Il numero di riga o l'intervallo di righe nel secondo file.

Il carattere di modifica può essere uno dei seguenti:

  • a - Aggiungi le linee.
  • c - Cambia le linee.
  • d - Elimina le righe.

Il comando di modifica è seguito dalle righe complete che vengono rimosse (< ) e aggiunto al file (> ).

Spieghiamo l'output:

  • 0a1 - Aggiungi la riga 1 del secondo file all'inizio del file1 (dopo la riga 0 ).
    • > Kubuntu - La riga della seconda riga che viene aggiunta al primo file come descritto sopra.
  • 2d2 - Elimina la riga 2 nel primo fascicolo. Il 2 dopo il d il simbolo significa che se la riga non viene cancellata apparirà sulla riga 2 nel secondo file.
    • < Arch Linux - la riga eliminata.
  • 4c4,5 - Sostituisci (cambia) la riga 5 nel primo file con le righe 4-5 dal secondo file.
    • < CentOS - La riga nel primo file da sostituire.
    • --- - Separatore.
    • > Arch Linux e > Centos - Righe del secondo file che sostituiscono la riga del primo file.

Formato contesto #

Quando viene utilizzato il formato di output del contesto, diff Il comando visualizza diverse righe di contesto attorno alle righe che differiscono tra i file.

Il -c l'opzione dice diff per produrre output nel formato del contesto:

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

L'output inizia con i nomi ei timestamp se i file che vengono confrontati e una o più sezioni che descrivono le differenze. Ogni sezione ha questo aspetto:

***************
*** from-file-line-numbers ****
  from-file-line...
--- to-file-line-numbers ----
  to-file-line...
  • from-file-line-numbers e to-file-line-numbers - I numeri di riga o l'intervallo di righe separate da virgole rispettivamente nel primo e nel secondo file.
  • from-file-line e to-file-line - Le righe che differiscono e le righe di contesto:
    • Le righe che iniziano con due spazi sono righe di contesto, le righe che sono le stesse in entrambi i file.
    • Righe che iniziano con il simbolo meno (- ) sono le righe che non corrispondono a nulla nel secondo file. Righe mancanti nel secondo file.
    • Righe che iniziano con il simbolo più (+ ) sono le righe che non corrispondono a nulla nel primo file. Righe mancanti nel primo file.
    • Righe che iniziano con il punto esclamativo (! ) sono le righe che vengono modificate tra due file. Ogni gruppo di righe che iniziano con ! dal primo file ha una corrispondenza corrispondente nel secondo file.

Spieghiamo le parti più importanti dell'output:

  • In questo esempio abbiamo solo una sezione che descrive le differenze.
  • *** 1,6 **** e --- 1,7 ---- ci dice l'intervallo delle righe del primo e del secondo file che sono inclusi in questa sezione.
  • Righe Ubuntu , Debian , Fedora e l'ultima riga vuota è la stessa in entrambi i file. Queste righe iniziano con il doppio spazio.
  • Linea - Arch Linux dal primo file non corrisponde a nulla nel secondo file. Sebbene questa riga esista anche nel secondo file, le posizioni sono diverse.
  • Linea + Kubuntu dal secondo file non corrisponde a nulla nel primo file.
  • Linea ! CentOS dal primo file e righe ! Arch Linux e ! CentOS dal secondo file vengono modificati tra i file.

Per impostazione predefinita, il numero delle righe di contesto è tre. Per specificare un altro numero usa il -C (--contexts ) opzione:

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 unificato #

Il formato di output unificato è una versione migliorata del formato di contesto e produce un output più piccolo.

Usa -u opzione per dire a diff per stampare l'output nel formato unificato:

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

L'output inizia con i nomi ei timestamp dei file e una o più sezioni che descrivono le differenze. Ogni sezione assume la forma seguente:

***************
@@ from-file-line-numbers to-file-line-numbers @@
 line-from-files...
  • @@ from-file-line-numbers to-file-line-numbers @@ - Il numero di riga o l'intervallo delle righe del primo e del secondo file inclusi in questa sezione.
  • line-from-files - Le righe che differiscono e le righe di contesto:
    • Le righe che iniziano con due spazi sono righe di contesto, le righe che sono le stesse in entrambi i file.
    • Righe che iniziano con il simbolo meno (- ) sono le righe che vengono rimosse dal primo file.
    • Righe che iniziano con il simbolo più (+ ) sono le righe che vengono aggiunte dal primo file.

Ignora caso #

Come puoi notare negli esempi precedenti, il diff il comando fa distinzione tra maiuscole e minuscole per impostazione predefinita.

Usa -i opzione per dire a diff ignora le maiuscole:

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

Conclusione #

Il confronto dei file di testo per le differenze è una delle attività più comuni per gli amministratori di sistemi Linux.

Il diff il comando confronta i file riga per riga. Per ulteriori informazioni, digita man diff nel tuo terminale.

Se hai domande, lascia un commento qui sotto.


Linux
  1. 8 suggerimenti per la riga di comando di Linux

  2. Comando Linux mv

  3. Linux du comando

  4. comando IP Linux

  5. comando cd di Linux

Come avviare la riga di comando di Linux

Padroneggia la riga di comando di Linux

Comando Df in Linux

comando diff in Linux

Nozioni di base sulla riga di comando di Linux:sudo

Esempi di comandi di Linux diff