GNU/Linux >> Linux Esercitazione >  >> Linux

9 esempi di comandi diff in Linux

Il comando Diff in Linux viene utilizzato per confrontare il contenuto di due file riga per riga e se viene trovata la differenza, elencherà anche le differenze insieme ai numeri di riga. Il comando Diff può essere utilizzato anche per confrontare il contenuto di due directory.

Il comando Diff svolge un ruolo importante nello script della shell in cui vogliamo eseguire il comando in base alla differenza di due file.

Sintassi del comando diff

$ diff file1 file2

L'output del comando diff può essere nel seguente formato:

  • Normale (predefinito)
  • Contesto
  • Unificato

Simboli diversi dell'output del comando diff:

  • a -> indica che è stato aggiunto qualcosa
  • c -> indica che del testo è stato modificato
  • d -> indica che del testo è stato cancellato

Per impostazione predefinita, il comando diff mostra l'output in formato normale, significa che quando il contenuto di due file è identico non produrrà alcun output ma otterremo il prompt.

In questo post, discuteremo del comando diff con esempi pratici.

1) Confronta due file con il comando diff

Supponiamo di avere due file aachen.txt e sydney.txt e di seguito è riportato il contenuto di questi file,

[[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] ~]#

Confrontiamo il contenuto di questi file usando il comando diff,

[[email protected] ~]# diff aachen.txt sydney.txt
[[email protected] ~]#

L'output sopra conferma che entrambi i file sono identici. Apportiamo alcune modifiche in aachen.txt, riscriviamo open source come "open-source".

Ora riesegui il comando diff,

[[email protected] ~]# diff aachen.txt sydney.txt

Uscita,

Nell'output, 1c1 indica che la prima riga del primo file deve essere modificata per rendere entrambi i file identici.

Eseguiamo il rollback della modifica precedente e aggiungiamo una nuova riga "Arch Linux ” in sydeny.txt alla fine del file ed esegui di nuovo il comando diff,

Output del comando diff “7a8 ” indica che dopo la settima riga nel primo file, è necessario aggiungere un'altra riga che corrisponda all'ottava riga del secondo file.

Rimuoviamo "Arch Linux" e "Fedora" da sydney.txt e poi proviamo a confrontare questi file,

Output del comando diff “7d6 ” indica che dobbiamo eliminare la settima riga nel primo file per sincronizzare con il secondo file alla riga numero 6.

2) Output del comando Diff in formato contestuale (-c)

Usa l'opzione '-c' nel comando diff per produrre l'output del comando diff in formato contesto. L'esempio è mostrato di seguito,

[[email protected] ~]# diff -c aachen.txt sydney.txt

Le prime due righe rappresentano i nomi dei file, la data e l'ora di modifica e tre asterischi ("*** ") indica il primo file e tre trattini (" “) indica il secondo file.

Solo un trattino singolo "-" indica che la riga deve essere rimossa e il simbolo più "+" indica che la riga deve essere aggiunta nel file. Se una riga non richiede alcuna modifica, viene preceduta da due spazi.

3) Output del comando Diff in formato unificato (-u)

Usa l'opzione '-u' nel comando diff se vuoi produrre il suo output in formato unificato, l'esempio è illustrato di seguito,

[[email protected] ~]# diff -u aachen.txt sydney.txt

L'output sopra è in qualche modo simile al formato di contesto ma il formato unificato mostra l'output in modo conciso, qui le prime due righe indicano i nomi dei file insieme alla data e all'ora di modifica.

Tre trattini ("—") rappresentano il primo file e tre simboli più ("+++") rappresentano il secondo file, dopo due segni @ "-1,7" indica le righe del 1° file e "+1,7" rappresenta le linee vanno dal 2° file. Inoltre, il simbolo (+Core OS) indica che questa riga deve essere aggiunta nel primo file e il simbolo trattino (-Fedora) indica che questa riga deve essere rimossa dal primo file per renderla identica al secondo file.

4) Ignora la distinzione tra maiuscole e minuscole durante il confronto dei file (-i)

Per impostazione predefinita, il comando diff fa distinzione tra maiuscole e minuscole e se vuoi ignorare la distinzione tra maiuscole e minuscole nel comando diff, usa l'opzione '-i', l'esempio è mostrato di seguito,

Supponiamo di avere il seguente contenuto di due file

Esegui il comando diff senza alcuna opzione,

[[email protected] ~]# diff aachen.txt sydney.txt
5,6c5,6
< Ubuntu debian
< Linux mint
---
> Ubuntu Debian
> Linux Mint
[[email protected] ~]#

Ora esegui il comando diff con l'opzione -i,

[[email protected] ~]# diff -i aachen.txt sydney.txt
[[email protected] ~]#

Come possiamo vedere nell'output sopra, il comando diff ha ignorato la funzione di distinzione tra maiuscole e minuscole quando utilizziamo l'opzione -i.

5) I file di report sono identici al comando diff (-s)

Ci possono essere alcune situazioni in cui stiamo confrontando i file usando il comando diff e se il contenuto è identico, vogliamo visualizzare il messaggio che i file sono identici, questo può essere ottenuto passando l'opzione '-s' nel 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) Ignora lo spazio bianco durante il confronto dei file con diff  (-b)

Supponiamo di avere due file filea.txt e fileb.txt dove gli spazi bianchi non sono coerenti, quindi se usiamo il comando diff senza alcuna opzione in quanto mostrerà la differenza di spazio bianco anche se i contenuti sono identici, quindi in questi casi possiamo ignorare gli spazi bianchi incoerenti nel comando diff usando -b opzione , l'esempio è mostrato di seguito,

[[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] ~]#

Confronta i file senza alcuna opzione con il 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] ~]#

Ora usa l'opzione -b nel comando diff sopra

[[email protected] ~]# diff -b filea.txt fileb.txt
[[email protected] ~]#

Se vuoi ignorare tutti gli spazi bianchi durante il confronto usando il comando diff, usa “-w opzione ”

[[email protected] ~]# diff -w filea.txt fileb.txt

7) Ignora lo spazio bianco alla fine della riga durante il confronto (-Z)

Se desideri ignorare lo spazio di prova all'estremità della riga durante il confronto, utilizza "-Z opzione ”

[[email protected] ~]# diff -Z filea.txt fileb.txt

Usa "-B ” nel comando diff per ignorare tutte le righe vuote durante il confronto,

[[email protected] ~]# diff -B filea.txt fileb.txt

8) Confronta due directory

Supponiamo di avere due directory con il nome lab01 e lab02, queste hanno i seguenti file e sottodirectory

[[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] ~]#

Confrontiamo queste due directory usando il comando diff di seguito,

[[email protected] ~]# diff -qr lab01/ lab02/
[[email protected] ~]#

Dove:

  • -q -> indica al comando diff di segnalare solo quando i file sono diversi
  • -r -> indica al comando diff di cercare la differenza nelle sottodirectory in modo ricorsivo

Quando otteniamo un output vuoto, significa che entrambe le directory sono identiche. Eliminiamo filed.txt da lab02 e poi proviamo a confrontare,

[[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] ~]#

L'output sopra dice che filed.txt è presente solo nella directory lab01

9) Reindirizzamento dell'output del comando diff su un file

L'output del comando Diff può essere reindirizzato a un file utilizzando il simbolo ">". Diventa molto utile negli script di shell in cui vogliamo eseguire un'attività solo se l'output del comando diff contiene differenze.

[[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] ~]#

Ulteriore esempio

Confronta due file sul terminale fianco a fianco

Quando utilizziamo l'opzione "-y" durante il confronto di due file utilizzando il comando diff, mostra entrambi i file sul terminale fianco a fianco.

[[email protected] ~]# diff -y /etc/fstab /tmp/fstab

uscita

L'output sopra mostra chiaramente la differenza di due file.

Questo è tutto da questo articolo, spero che ora tu abbia una migliore comprensione del comando diff passando attraverso gli esempi sopra. Non esitare a condividere feedback e commenti.

Leggi anche :16 esempi di comandi Echo in Linux

Leggi anche8 esempi di comandi principali in Linux


Linux
  1. sa Esempi di comandi in Linux

  2. w Esempi di comandi in Linux

  3. ac Esempi di comandi in Linux

  4. Esempi di comandi df in Linux

  5. du Esempi di comandi in Linux

9 Esempi di comandi tee in Linux

Comando IP Linux con esempi

Comando Diff in Linux

15 Comando Linux ps con esempi

Esempi di comandi di Linux diff

Esempi di comandi id in Linux