Comparaison de fichiers Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Bienvenue dans le laboratoire de comparaison de fichiers Linux. Dans les environnements de développement logiciel modernes, comparer des fichiers est une compétence essentielle pour suivre les modifications, déboguer les problèmes et maintenir l'intégrité du code. En tant qu'administrateur système ou développeur, vous devez souvent identifier les différences entre des fichiers de configuration, des versions de code ou des fichiers de données.

Dans ce laboratoire, vous apprendrez à utiliser la commande diff - un outil puissant de Linux pour comparer des fichiers ligne par ligne. L'outil diff vous aide à identifier précisément ce qui a changé entre les versions de fichiers, ce qui est crucial lors de la mise à jour des configurations, de l'examen des modifications de code ou de la résolution de problèmes.

En maîtrisant les techniques de comparaison de fichiers, vous pourrez gérer efficacement les versions de fichiers, créer des correctifs et garantir la cohérence dans tous vos environnements de développement. Cette compétence fondamentale est précieuse pour tous ceux qui travaillent avec du code, des fichiers de configuration ou tout type de données textuelles qui évoluent avec le temps.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/which("Command Locating") linux/VersionControlandTextEditorsGroup -.-> linux/diff("File Comparing") linux/VersionControlandTextEditorsGroup -.-> linux/patch("Patch Applying") subgraph Lab Skills linux/cat -.-> lab-271269{{"Comparaison de fichiers Linux"}} linux/which -.-> lab-271269{{"Comparaison de fichiers Linux"}} linux/diff -.-> lab-271269{{"Comparaison de fichiers Linux"}} linux/patch -.-> lab-271269{{"Comparaison de fichiers Linux"}} end

Comprendre la commande diff

La commande diff est un outil de base de Linux utilisé pour comparer le contenu de fichiers ligne par ligne. Dans cette étape, vous apprendrez la syntaxe de base de la commande diff et comment comparer deux fichiers texte simples.

Commençons par vérifier que l'outil diff est installé sur votre système. Ouvrez un terminal dans le répertoire /home/labex/project et exécutez :

which diff

Vous devriez voir une sortie similaire à :

/usr/bin/diff

Cela confirme que la commande diff est disponible. Si pour une raison quelconque elle n'est pas installée, vous pouvez l'installer avec :

sudo apt-get update && sudo apt-get install -y diffutils

Maintenant, créons deux fichiers texte simples à comparer. Nous allons créer des fichiers qui pourraient représenter des paramètres de configuration :

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config1.txt
echo "motor_speed = 100" >> /home/labex/project/files/config1.txt
echo "acceleration = 20" >> /home/labex/project/files/config1.txt
echo "max_rotation = 180" >> /home/labex/project/files/config1.txt

Maintenant, créons un deuxième fichier avec une petite différence :

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config2.txt
echo "motor_speed = 120" >> /home/labex/project/files/config2.txt
echo "acceleration = 20" >> /home/labex/project/files/config2.txt
echo "max_rotation = 180" >> /home/labex/project/files/config2.txt

Affichons les deux fichiers pour comprendre leur contenu :

cat /home/labex/project/files/config1.txt

Cela affiche :

## Configuration File for Robot Arm
motor_speed = 100
acceleration = 20
max_rotation = 180

Maintenant, affichons le deuxième fichier :

cat /home/labex/project/files/config2.txt

Cela affiche :

## Configuration File for Robot Arm
motor_speed = 120
acceleration = 20
max_rotation = 180

Maintenant, utilisons la commande diff pour comparer ces deux fichiers :

diff /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

Vous devriez voir une sortie similaire à :

2c2
< motor_speed = 100
---
> motor_speed = 120

Cette sortie nous indique :

  • La ligne 2 du premier fichier doit être modifiée pour correspondre à la ligne 2 du deuxième fichier
  • < indique la ligne du premier fichier
  • > indique la ligne du deuxième fichier
  • La ligne avec --- sépare les deux versions

La différence entre les fichiers est que la valeur de motor_speed est passée de 100 à 120.

Utilisation d'options avancées de diff

Dans l'étape précédente, vous avez utilisé la commande de base diff pour comparer deux fichiers. Maintenant, explorons quelques options avancées qui rendent la sortie plus lisible et utile dans différents scénarios.

Le format unifié (option -u)

Le format unifié montre les différences dans un format plus sensible au contexte et est largement utilisé dans le développement logiciel. L'option -u affiche plusieurs lignes de contexte autour des différences.

Utilisons l'option -u pour comparer nos fichiers :

diff -u /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

Vous devriez voir une sortie similaire à :

--- /home/labex/project/files/config1.txt	2023-01-01 00:00:00.000000000 +0000
+++ /home/labex/project/files/config2.txt	2023-01-01 00:00:00.000000000 +0000
@@ -1,4 +1,4 @@
 ## Configuration File for Robot Arm
-motor_speed = 100
+motor_speed = 120
 acceleration = 20
 max_rotation = 180

Dans ce format :

  • Les lignes commençant par - (moins) sont présentes dans le premier fichier mais pas dans le deuxième
  • Les lignes commençant par + (plus) sont présentes dans le deuxième fichier mais pas dans le premier
  • L'en-tête montre quels fichiers sont comparés
  • La section @@ -1,4 +1,4 @@ indique les numéros de ligne affichés

Le format côte à côte (option -y)

Le format côte à côte affiche les deux fichiers en colonnes parallèles, ce qui facilite la visualisation des différences :

diff -y /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

La sortie devrait ressembler à :

## Configuration File for Robot Arm		## Configuration File for Robot Arm
motor_speed = 100				| motor_speed = 120
acceleration = 20				acceleration = 20
max_rotation = 180				max_rotation = 180

Dans cette vue :

  • Le caractère | au milieu indique que les lignes diffèrent
  • Les lignes identiques apparaissent dans les deux colonnes sans marqueur

Ignorer les espaces blancs (option -w)

Parfois, vous ne voulez comparer que le contenu sans prendre en compte les différences d'espaces blancs. L'option -w ignore tous les changements d'espaces blancs :

Créons un fichier avec des espaces différents :

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config3.txt
echo "motor_speed = 100  " >> /home/labex/project/files/config3.txt
echo "acceleration   = 20" >> /home/labex/project/files/config3.txt
echo "max_rotation = 180" >> /home/labex/project/files/config3.txt

Maintenant, comparons-le avec le premier fichier, d'abord sans puis avec l'option -w :

diff /home/labex/project/files/config1.txt /home/labex/project/files/config3.txt

Vous pourriez voir des différences dues aux espaces blancs. Essayons maintenant :

diff -w /home/labex/project/files/config1.txt /home/labex/project/files/config3.txt

Avec l'option -w, diff devrait montrer aucune différence car les seules variations concernent les espaces blancs.

Ces options avancées rendent diff plus polyvalent pour différents cas d'utilisation et types de fichiers. En combinant les options, vous pouvez personnaliser la sortie pour répondre à vos besoins spécifiques.

Création et application de fichiers de patch

Les fichiers de patch sont un moyen de distribuer des modifications apportées à des fichiers texte. Ils contiennent les différences entre deux versions d'un fichier, qui peuvent être appliquées pour transformer une version en une autre. Cela est particulièrement utile lorsque vous devez partager des modifications de code avec d'autres personnes ou mettre à jour des fichiers de configuration sur plusieurs systèmes.

Création d'un fichier de patch

Créons un fichier de patch qui capture les différences entre nos fichiers config1.txt et config2.txt :

diff -u /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt > /home/labex/project/files/config.patch

Cette commande crée un fichier de patch appelé config.patch en utilisant le format de diff unifié. Examinons le contenu de ce fichier de patch :

cat /home/labex/project/files/config.patch

Vous devriez voir une sortie similaire à celle que vous avez vue précédemment avec la commande diff -u :

--- /home/labex/project/files/config1.txt	2023-01-01 00:00:00.000000000 +0000
+++ /home/labex/project/files/config2.txt	2023-01-01 00:00:00.000000000 +0000
@@ -1,4 +1,4 @@
 ## Configuration File for Robot Arm
-motor_speed = 100
+motor_speed = 120
 acceleration = 20
 max_rotation = 180

Application d'un fichier de patch

Maintenant, créons une copie de config1.txt et appliquons le patch pour la mettre à jour :

cp /home/labex/project/files/config1.txt /home/labex/project/files/config1_copy.txt

Pour appliquer le patch, nous utilisons la commande patch :

patch /home/labex/project/files/config1_copy.txt < /home/labex/project/files/config.patch

Vous devriez voir une sortie indiquant que le patch a été appliqué avec succès :

patching file /home/labex/project/files/config1_copy.txt

Vérifions que le fichier corrigé correspond maintenant à config2.txt :

cat /home/labex/project/files/config1_copy.txt

La sortie devrait être identique à config2.txt :

## Configuration File for Robot Arm
motor_speed = 120
acceleration = 20
max_rotation = 180

Confirmons qu'il n'y a pas de différences entre le fichier corrigé et config2.txt :

diff /home/labex/project/files/config1_copy.txt /home/labex/project/files/config2.txt

S'il n'y a pas de sortie, cela signifie que les fichiers sont identiques, confirmant que le patch a été appliqué correctement.

Création de fichiers de patch plus complexes

Créons un patch plus complexe en modifiant plusieurs lignes dans un nouveau fichier :

cp /home/labex/project/files/config1.txt /home/labex/project/files/config4.txt

Maintenant, modifions le fichier pour apporter plusieurs modifications :

echo "## Updated Configuration File for Robot Arm" > /home/labex/project/files/config4.txt
echo "motor_speed = 150" >> /home/labex/project/files/config4.txt
echo "acceleration = 25" >> /home/labex/project/files/config4.txt
echo "max_rotation = 270" >> /home/labex/project/files/config4.txt
echo "safety_limit = enabled" >> /home/labex/project/files/config4.txt

Maintenant, créons un fichier de patch pour ces modifications :

diff -u /home/labex/project/files/config1.txt /home/labex/project/files/config4.txt > /home/labex/project/files/complex.patch

Examinons ce patch plus complexe :

cat /home/labex/project/files/complex.patch

Vous devriez voir un fichier de patch montrant plusieurs modifications de lignes, y compris des ajouts, des modifications et éventuellement des suppressions.

Les patches sont un moyen efficace de distribuer des modifications et de suivre les changements apportés aux fichiers. Ils sont largement utilisés dans le développement logiciel pour partager des modifications de code, créer des mises à jour et gérer les configurations.

Comparaison de répertoires et utilisation d'autres outils de comparaison

En plus de comparer des fichiers individuels, Linux propose des outils pour comparer des répertoires entiers et des outils de comparaison alternatifs qui peuvent être mieux adaptés à certains scénarios.

Comparaison de répertoires avec diff

La commande diff peut également comparer des répertoires en utilisant l'option -r (récursive) :

Créons deux répertoires avec quelques fichiers à comparer :

mkdir -p /home/labex/project/dir1
mkdir -p /home/labex/project/dir2

## Création de fichiers dans le premier répertoire
echo "This is file 1" > /home/labex/project/dir1/file1.txt
echo "This is file 2" > /home/labex/project/dir1/file2.txt
echo "This is file 3" > /home/labex/project/dir1/file3.txt

## Création de fichiers similaires dans le deuxième répertoire avec quelques différences
echo "This is file 1 - modified" > /home/labex/project/dir2/file1.txt
echo "This is file 2" > /home/labex/project/dir2/file2.txt
## Note : file3.txt est absent de dir2
echo "This is a new file" > /home/labex/project/dir2/file4.txt

Maintenant, comparons ces répertoires :

diff -r /home/labex/project/dir1 /home/labex/project/dir2

Vous devriez voir une sortie similaire à :

diff -r /home/labex/project/dir1/file1.txt /home/labex/project/dir2/file1.txt
1c1
< This is file 1
---
> This is file 1 - modified
Only in /home/labex/project/dir1: file3.txt
Only in /home/labex/project/dir2: file4.txt

Cette sortie montre :

  • La différence de contenu dans file1.txt
  • file3.txt n'existe que dans dir1
  • file4.txt n'existe que dans dir2
  • file2.txt est identique dans les deux répertoires (donc aucune différence n'est signalée)

Utilisation de la commande diff3

Lorsque vous avez besoin de comparer trois fichiers (par exemple, lors de la fusion de modifications provenant de plusieurs sources), vous pouvez utiliser la commande diff3 :

Créons un troisième fichier de configuration avec ses propres modifications :

echo "## Configuration File for Robot Arm" > /home/labex/project/files/config5.txt
echo "motor_speed = 100" >> /home/labex/project/files/config5.txt
echo "acceleration = 30" >> /home/labex/project/files/config5.txt
echo "max_rotation = 180" >> /home/labex/project/files/config5.txt

Maintenant, utilisons diff3 pour comparer les trois fichiers :

diff3 /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt /home/labex/project/files/config5.txt

Le format de sortie de diff3 est un peu plus complexe, mais il montre comment chaque fichier diffère des autres, ce qui est utile pour résoudre les conflits de fusion.

Utilisation de la commande colordiff

L'utilitaire colordiff est un wrapper pour diff qui produit la même sortie mais avec une mise en évidence syntaxique en couleur, ce qui la rend plus facile à lire.

Installons d'abord colordiff :

sudo apt-get update && sudo apt-get install -y colordiff

Maintenant, comparons nos fichiers en utilisant colordiff :

colordiff /home/labex/project/files/config1.txt /home/labex/project/files/config2.txt

La sortie sera similaire à celle de la commande diff normale, mais avec une mise en évidence en couleur des lignes ajoutées, supprimées et modifiées.

Utilisation de la commande wdiff

La commande wdiff (comparaison mot à mot) compare les fichiers mot par mot plutôt que ligne par ligne, ce qui peut être plus utile pour les textes ou la documentation :

Installons wdiff :

sudo apt-get update && sudo apt-get install -y wdiff

Créons deux fichiers avec des modifications de phrases :

echo "The robot arm moves quickly and efficiently." > /home/labex/project/files/sentence1.txt
echo "The robot arm moves slowly but efficiently." > /home/labex/project/files/sentence2.txt

Maintenant, comparons-les avec wdiff :

wdiff /home/labex/project/files/sentence1.txt /home/labex/project/files/sentence2.txt

Vous devriez voir une sortie mettant en évidence les mots modifiés :

The robot arm moves [-quickly and-] {+slowly but+} efficiently.

Les différents outils de comparaison de Linux servent à diverses fins et scénarios :

  • diff pour la comparaison générale de fichiers
  • diff -r pour la comparaison de répertoires
  • diff3 pour la comparaison à trois voies
  • colordiff pour une sortie mise en évidence en couleur
  • wdiff pour la comparaison mot par mot

En choisissant l'outil approprié pour vos besoins spécifiques, vous pouvez rendre la comparaison de fichiers plus efficace.

Résumé

Dans ce laboratoire (lab), vous avez appris à utiliser efficacement les outils de comparaison de fichiers sous Linux, en mettant l'accent sur la polyvalente commande diff. Voici les compétences clés que vous avez acquises :

  1. Comparaison de fichiers de base : Vous avez appris à utiliser la commande diff de base pour identifier les différences entre des fichiers texte, ce qui vous permet de repérer rapidement les modifications dans les fichiers de configuration et le code.

  2. Options avancées de diff : Vous avez exploré diverses options telles que le format unifié (-u), la comparaison côte à côte (-y) et l'ignorance des espaces blancs (-w), chacune répondant à différents besoins de comparaison.

  3. Fichiers de patch : Vous avez créé et appliqué des fichiers de patch, une compétence essentielle pour distribuer des modifications, mettre à jour des systèmes et contribuer à des projets logiciels.

  4. Comparaison de répertoires : Vous avez utilisé l'option récursive (-r) pour comparer des répertoires entiers, ce qui vous permet d'identifier les différences entre plusieurs fichiers simultanément.

  5. Outils de comparaison alternatifs : Vous avez été présenté à des outils spécialisés tels que diff3 pour les comparaisons à trois voies, colordiff pour une sortie mise en évidence en couleur et wdiff pour la comparaison mot par mot.

Ces compétences en matière de comparaison de fichiers sont fondamentales pour l'administration système, le développement logiciel et la gestion de configuration. Elles vous permettent de suivre les modifications, déboguer les problèmes, maintenir le contrôle de version et garantir la cohérence entre les systèmes.

En maîtrisant ces outils, vous avez acquis des capacités précieuses qui amélioreront votre efficacité lorsque vous travaillerez avec des fichiers texte dans n'importe quel environnement Linux.