diff
est un utilitaire en ligne de commande qui vous permet de comparer deux fichiers ligne par ligne. Il peut également comparer le contenu des répertoires.
Le diff
La commande est le plus souvent utilisée pour créer un patch contenant les différences entre un ou plusieurs fichiers pouvant être appliqués à l'aide du patch
commande.
Comment utiliser le diff
Commande #
La syntaxe du diff
commande est la suivante :
diff [OPTION]... FILES
Le diff
La commande peut afficher la sortie dans plusieurs formats, les formats normal, contextuel et unifié étant les plus courants. La sortie inclut des informations sur les lignes des fichiers qui doivent être modifiées pour qu'elles deviennent identiques. Si les fichiers correspondent, aucune sortie n'est produite.
Pour enregistrer la sortie de la commande dans un fichier, utilisez l'opérateur de redirection :
diff file1 file2 > patch
Dans cet article, nous utiliserons les deux fichiers suivants pour expliquer comment le diff
la commande fonctionne :
Ubuntu
Arch Linux
Debian
CentOS
Fedora
file2Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora
Format normal #
Dans sa forme la plus simple lorsque le diff
est exécutée sur deux fichiers texte sans aucune option, elle produit une sortie au format normal :
diff file1 file2
La sortie ressemblera à ceci :
0a1
> Kubuntu
2d2
< Arch Linux
4c4,5
< CentOS
---
> Arch Linux
> Centos
Le format de sortie normal consiste en une ou plusieurs sections décrivant les différences. Chaque section ressemble à ceci :
change-command
< from-file-line...
---
> to-file-line...
0a1
, 2d2
et 4c4,5
sont des commandes de modification. Chaque commande de modification contient les éléments suivants, de gauche à droite :
- Le numéro de ligne ou la plage de lignes dans le premier fichier.
- Un caractère de changement spécial.
- Le numéro de ligne ou la plage de lignes dans le deuxième fichier.
Le caractère de changement peut être l'un des suivants :
a
- Ajoutez les lignes.c
- Changer les lignes.d
- Supprimez les lignes.
La commande de modification est suivie des lignes complètes qui sont supprimées (<
) et ajouté au fichier (>
).
Expliquons le résultat :
0a1
- Ajouter la ligne1
du deuxième fichier au début du fichier1 (après la ligne0
).> Kubuntu
- La ligne de la deuxième ligne qui est ajoutée au premier fichier comme décrit ci-dessus.
2d2
- Supprimer la ligne2
dans le premier fichier. Le2
après led
signifie que si la ligne n'est pas supprimée, elle apparaîtra sur la ligne2
dans le second fichier.< Arch Linux
- la ligne supprimée.
4c4,5
- Remplacer (modifier) la ligne5
dans le premier fichier avec les lignes4-5
du deuxième fichier.< CentOS
- La ligne du premier fichier à remplacer.---
- Séparateur.> Arch Linux
et> Centos
- Lignes du deuxième fichier remplaçant la ligne du premier fichier.
Format de contexte #
Lorsque le format de sortie contextuel est utilisé, le diff
La commande affiche plusieurs lignes de contexte autour des lignes qui diffèrent entre les fichiers.
Le -c
l'option indique diff
pour produire une sortie au format contextuel :
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
La sortie commence par les noms et les horodatages des fichiers comparés, et une ou plusieurs sections décrivant les différences. Chaque section ressemble à ceci :
***************
*** from-file-line-numbers ****
from-file-line...
--- to-file-line-numbers ----
to-file-line...
from-file-line-numbers
etto-file-line-numbers
- Les numéros de ligne ou la plage de lignes séparées par des virgules dans le premier et le deuxième fichier, respectivement.from-file-line
etto-file-line
- Les lignes qui diffèrent et les lignes de contexte :- Les lignes commençant par deux espaces sont des lignes de contexte, les lignes qui sont identiques dans les deux fichiers.
- Lignes commençant par le signe moins (
-
) sont les lignes qui ne correspondent à rien dans le deuxième fichier. Lignes manquantes dans le second fichier. - Lignes commençant par le signe plus (
+
) sont les lignes qui ne correspondent à rien dans le premier fichier. Lignes manquantes dans le premier fichier. - Lignes commençant par le point d'exclamation (
!
) sont les lignes qui sont modifiées entre deux fichiers. Chaque groupe de lignes commençant par!
du premier fichier a une correspondance correspondante dans le second fichier.
Expliquons les parties les plus importantes de la sortie :
- Dans cet exemple, nous n'avons qu'une seule section décrivant les différences.
*** 1,6 ****
et--- 1,7 ----
nous indique la plage des lignes des premier et deuxième fichiers qui sont inclus dans cette section.- Lignes
Ubuntu
,Debian
,Fedora
, et la dernière ligne vide sont les mêmes dans les deux fichiers. Ces lignes commencent par un double espace. - Ligne
- Arch Linux
du premier fichier ne correspond à rien dans le second fichier. Bien que cette ligne existe également dans le deuxième fichier, les positions sont différentes. - Ligne
+ Kubuntu
du deuxième fichier ne correspond à rien dans le premier fichier. - Ligne
! CentOS
du premier fichier et lignes! Arch Linux
et! CentOS
du deuxième fichier sont modifiés entre les fichiers.
Par défaut, le nombre de lignes de contexte est par défaut de trois. Pour spécifier un autre numéro, utilisez le -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
Format unifié #
Le format de sortie unifié est une version améliorée du format de contexte et produit une sortie plus petite.
Utilisez le -u
option pour dire diff
pour imprimer la sortie au format unifié :
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 sortie commence par les noms et les horodatages des fichiers et une ou plusieurs sections qui décrivent les différences. Chaque section prend la forme suivante :
***************
@@ from-file-line-numbers to-file-line-numbers @@
line-from-files...
@@ from-file-line-numbers to-file-line-numbers @@
- Le numéro de ligne ou la plage de lignes des premier et deuxième fichiers inclus dans cette section.line-from-files
- Les lignes qui diffèrent et les lignes de contexte :- Les lignes commençant par deux espaces sont des lignes de contexte, les lignes qui sont identiques dans les deux fichiers.
- Lignes commençant par le signe moins (
-
) sont les lignes qui sont supprimées du premier fichier. - Lignes commençant par le signe plus (
+
) sont les lignes qui sont ajoutées du premier fichier.
Ignorer le cas #
Comme vous pouvez le remarquer dans les exemples ci-dessus, le diff
la commande est sensible à la casse par défaut.
Utilisez le -i
option pour dire diff
pour ignorer la casse :
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
Conclusion #
La comparaison de fichiers texte pour les différences est l'une des tâches les plus courantes pour les administrateurs de systèmes Linux.
Le diff
La commande compare les fichiers ligne par ligne. Pour plus d'informations, tapez man diff
dans votre terminal.
Si vous avez des questions, veuillez laisser un commentaire ci-dessous.