<Precedenti | Contenuti | Succ.>
diff
Come comm programma, diff viene utilizzato per rilevare le differenze tra i file. Tuttavia, diff è uno strumento molto più complesso, che supporta molti formati di output e ha la capacità di elaborare grandi raccolte di file di testo contemporaneamente. diff viene spesso utilizzato dagli sviluppatori di software per esaminare le modifiche tra diverse versioni del codice sorgente del programma e quindi ha la capacità di esaminare ricorsivamente le directory del codice sorgente, spesso denominate alberi di origineUn uso comune per diff è la creazione di file diff or patch che vengono utilizzati da programmi come patch (di cui parleremo tra poco) per convertire una versione di un file (o di più file) in un'altra versione.
Se usiamo diff per guardare i nostri file di esempio precedenti:
[io@linuxbox~]$ diff file1.txt file2.txt
1d0
< a 4a4
> e
[io@linuxbox~]$ diff file1.txt file2.txt
1d0
< a 4a4
> e
vediamo il suo stile di output predefinito: una descrizione concisa delle differenze tra i due file. Nel formato predefinito, ogni gruppo di modifiche è preceduto da un cambia comando nella forma di gamma di funzionamento per descrivere le posizioni e i tipi di modifiche necessarie per convertire il primo file nel secondo file:
Tabella 20-4: comandi di modifica diff
Descrizione della modifica
Descrizione della modifica
r1ar2 Aggiungi le linee nella posizione r2 nella seconda fila alla posizione
r1 nel primo file.
r1cr2 Cambia (sostituisci) le linee in posizione r1 con le linee nella posizione r2 nel secondo file.
r1dr2 Elimina le righe nel primo file nella posizione r1, che sarebbe apparso a distanza r2 nel secondo file
In questo formato, un intervallo è un elenco separato da virgole della riga iniziale e della riga finale. Sebbene questo formato sia quello predefinito (principalmente per la conformità POSIX e la retrocompatibilità con le versioni Unix tradizionali di diff), non è così ampiamente utilizzato come altri formati opzionali. Due dei formati più popolari sono formato del contesto e la formato unificato.
Quando visualizzato utilizzando il formato di contesto (il -c opzione), vedremo questo:
[io@linuxbox~]$ diff -c file1.txt file2.txt
*** file1.txt 2008-12-23 06:40:13.000000000 -0500
--- file2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ es
[io@linuxbox~]$ diff -c file1.txt file2.txt
*** file1.txt 2008-12-23 06:40:13.000000000 -0500
--- file2.txt 2008-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- abcd
--- 1,4 ----
bcd
+ es
L'output inizia con i nomi dei due file e i rispettivi timestamp. Il primo file è contrassegnato da asterischi e il secondo da trattini. Nel resto dell'elenco, questi marcatori indicheranno i rispettivi file. Successivamente, vediamo gruppi di modifiche, incluso il numero predefinito di righe di contesto circostanti. Nel primo gruppo, vediamo:
*** 1,4 ***
che indica le righe da 1 a 4 nel primo file. Più avanti vedremo:
--- 1,4 ---
che indica le righe da 1 a 4 nel secondo file. All'interno di un gruppo di modifiche, le righe iniziano con uno dei quattro indicatori:
Tabella 20-5: Indicatori di modifica del formato del contesto diff
Significato dell'indicatore
Significato dell'indicatore
vuoto Una riga mostrata per contesto. Non indica una differenza tra i due file.
- Una riga eliminata. Questa riga apparirà nel primo file ma non nel secondo.
+ Aggiunta una riga. Questa riga apparirà nel secondo file ma non nel primo.
! Una riga è stata modificata. Verranno visualizzate le due versioni della riga, ciascuna nella rispettiva sezione del gruppo di modifica.
Il formato unificato è simile al formato contestuale ma è più conciso. È specificato con -u opzione:
[io@linuxbox~]$ diff -u file1.txt file2.txt
--- file1.txt 2008-12-23 06:40:13.000000000 -0500
+++ file2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 +1,4 @@
-abcd
+e
[io@linuxbox~]$ diff -u file1.txt file2.txt
--- file1.txt 2008-12-23 06:40:13.000000000 -0500
+++ file2.txt 2008-12-23 06:40:34.000000000 -0500
@@ -1,4 +1,4 @@
-abcd
+e
La differenza più evidente tra il formato contesto e quello unificato è l'eliminazione delle righe duplicate del contesto, rendendo i risultati del formato unificato più brevi di quelli del formato contesto. Nel nostro esempio precedente, vediamo timestamp dei file simili a quelli del formato contesto, seguiti dalla stringa @@ -1,4 +1,4 @@. Indica le righe del primo file e le righe del secondo file descritte nel gruppo di modifiche. Seguono le righe stesse, con le tre righe di contesto predefinite. Ogni riga inizia con uno dei tre possibili caratteri:
Tabella 20-6: indicatori di modifica del formato unificato diff
Significato del carattere
Significato del carattere
vuoto Questa riga è condivisa da entrambi i file.
- Questa riga è stata rimossa dal primo file.
+ Questa riga è stata aggiunta al primo file.