Tutorial comando diff en GNU/Linux
Sommario:
- Come usare il comando
diff
- Formato normale
- Formato di contesto
- Formato unificato
- Ignora il caso
- Conclusione
diff
è un'utilità da riga di comando che ti consente di confrontare due file riga per riga. Può anche confrontare i contenuti delle directory.
Il comando
diff
è più comunemente usato per creare una patch contenente le differenze tra uno o più file che possono essere applicati usando il comando
patch
.
Come usare il comando
diff
La sintassi per il comando
diff
è la seguente:
diff… FILES
Il comando
diff
può visualizzare l'output in diversi formati con i formati normale, contestuale e unificato che sono 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
, useremo i seguenti due file per spiegare come funziona il comando
diff
:
Ubuntu Arch Linux Debian CentOS Fedora
file2
Kubuntu Ubuntu Debian Arch Linux Centos Fedora
Formato normale
Nella sua forma più semplice quando il comando
diff
viene eseguito su due file di testo senza alcuna opzione, produce un output nel formato normale:
diff file1 file2
L'output sarà simile al seguente:
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 è simile alla seguente:
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 change è seguito dalle righe complete che vengono rimosse (
<
) e aggiunte al file (
>
).
Spieghiamo l'output:
-
0a1
- Aggiungi la riga1
del secondo file all'inizio del file1 (dopo la riga0
).-
> Kubuntu
- La riga della seconda riga che viene aggiunta al primo file come descritto sopra.
2d2
- Elimina la riga2
nel primo file. Il simbolo2
dopo il simbolod
indica che se la riga non viene eliminata, verrà visualizzata sulla riga2
nel secondo file.-
< Arch Linux
- la linea eliminata.
4c4, 5
- Sostituisci (cambia) la riga5
nel primo file con le righe4-5
dal secondo file.-
< CentOS
- La riga nel primo file da sostituire.---
- Separatore.> Arch Linux
e> Centos
- Linee dal secondo file che sostituiscono la linea nel primo file.
-
Formato di contesto
Quando viene utilizzato il formato di output del contesto, il comando
diff
visualizza diverse righe di contesto attorno alle righe che differiscono tra i file.
L'opzione
-c
dice a
diff
di produrre output nel formato di 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 e i timestamp se i file confrontati e una o più sezioni che descrivono le differenze. Ogni sezione è simile alla seguente:
*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…
-
from-file-line-numbers
eto-file-line-numbers
: i numeri di riga o l'intervallo di righe separati da virgola nel primo e nel secondo file, rispettivamente.from-file-line
eto-file-line
- Le linee che differiscono e le linee di contesto:- Le linee che iniziano con due spazi sono linee di contesto, le linee che sono le stesse in entrambi i file. Le linee che iniziano con il simbolo meno (
-
) sono le linee che non corrispondono a nulla nel secondo file. Righe mancanti nel secondo file. Le linee che iniziano con il simbolo più (+
) sono le righe che non corrispondono a nulla nel primo file. Righe mancanti nel primo file Le righe che iniziano con il punto esclamativo (!
) Sono le righe che vengono modificate tra due file. Ogni gruppo di linee che iniziano con!
dal primo file ha una corrispondenza corrispondente nel secondo file.
- Le linee che iniziano con due spazi sono linee di contesto, le linee che sono le stesse in entrambi i file. Le linee che iniziano con il simbolo meno (
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 la gamma delle linee dal primo e secondo file che sono inclusi in questa sezione.Ubuntu
,Debian
,Fedora
e il l'ultima riga vuota è la stessa in entrambi i file. Queste linee iniziano con un doppio spazio- Arch Linux
Linea- Arch Linux
dal primo file corrisponde a niente nel secondo file. Sebbene questa riga esista anche nel secondo file, le posizioni sono diverse. Linea+ Kubuntu
dal secondo file corrisponde a nulla nel primo file! CentOS
Linea! CentOS
! CentOS
dal primo file e linee! Arch Linux
! Arch Linux
e! CentOS
! CentOS
dal secondo file vengono cambiati tra i file.
Per impostazione predefinita, il numero delle linee di contesto è impostato su tre. Per specificare un altro numero utilizzare l'opzione
-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 unificato
Il formato di output unificato è una versione migliorata del formato di contesto e produce un output più piccolo.
Usa l'opzione
-u
per dire a
diff
di 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 e i timestamp dei file e una o più sezioni che descrivono le differenze. Ogni sezione ha 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 dal primo e dal secondo file inclusi in questa sezione.line-from-files
- Le linee che differiscono e le linee di contesto:- Le linee che iniziano con due spazi sono linee di contesto, le linee che sono le stesse in entrambi i file. Le linee che iniziano con il simbolo meno (
-
) sono le linee che vengono rimosse dal primo file. Le linee che iniziano con il simbolo più (+
) sono le righe aggiunte dal primo file.
- Le linee che iniziano con due spazi sono linee di contesto, le linee che sono le stesse in entrambi i file. Le linee che iniziano con il simbolo meno (
Ignora il caso
Come puoi notare negli esempi precedenti, il comando
diff
è sensibile al maiuscolo / minuscolo per impostazione predefinita.
Usa l'opzione
-i
per dire a
diff
di ignorare il 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
Conclusione
Il confronto dei file di testo per le differenze è una delle attività più comuni per gli amministratori di sistemi Linux.
Il comando
diff
confronta i file riga per riga. Per ulteriori informazioni, digitare
man diff
nel proprio terminale.
Cogli la riga di comando con il comando Take

Integra il prompt dei comandi, la GUI e un potente linguaggio batch con il potente toolkit Take Command.
Componente aggiuntivo Diff-IE per Internet Explorer consente di identificare le modifiche su una pagina Web

Diff-IE è un prototipo Aggiungi da Microsoft Research per Internet Explorer, che evidenzia le modifiche a una pagina Web dall`ultima volta che l`hai visitata.
Comando chmod in linux (permessi dei file)

In Linux l'accesso ai file è gestito attraverso le autorizzazioni, gli attributi e la proprietà dei file. Questa esercitazione illustra come utilizzare il comando chmod per modificare le autorizzazioni di accesso a file e directory.