GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Diff sous Linux

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 :

fichier1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
file2
Kubuntu
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 ligne 1 du deuxième fichier au début du fichier1 (après la ligne 0 ).
    • > Kubuntu - La ligne de la deuxième ligne qui est ajoutée au premier fichier comme décrit ci-dessus.
  • 2d2 - Supprimer la ligne 2 dans le premier fichier. Le 2 après le d signifie que si la ligne n'est pas supprimée, elle apparaîtra sur la ligne 2 dans le second fichier.
    • < Arch Linux - la ligne supprimée.
  • 4c4,5 - Remplacer (modifier) ​​la ligne 5 dans le premier fichier avec les lignes 4-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 et to-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 et to-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.


Linux
  1. 8 conseils pour la ligne de commande Linux

  2. Commande Linux mv

  3. Linux du command

  4. Commande IP Linux

  5. Commande cd Linux

Comment démarrer en ligne de commande Linux

Maîtrisez la ligne de commande Linux

Commande Df sous Linux

Commande diff sous Linux

Principes de base de la ligne de commande Linux :sudo

Exemples de commande Linux diff