La commande de correctif Linux vous permet de transférer les modifications d’un ensemble de fichiers vers un autre ensemble de fichiers rapidement et en toute sécurité. Apprenez à utiliser patch de manière simple.
Table des matières
Les commandes patch et diff
Imaginez que vous avez un fichier texte sur votre ordinateur. Vous recevez une version modifiée de ce fichier texte de quelqu’un d’autre. Comment transférer rapidement toutes les modifications du fichier modifié vers votre fichier d’origine? C’est là que patch et diff entrent en jeu. patch et diff se trouvent dans Linux et d’autres systèmes d’exploitation de type Unix, tels que macOS.
La commande diff examine deux versions différentes d’un fichier et énumère les différences entre eux. Les différences peuvent être stockées dans un fichier appelé fichier patch.
La commande patch peut lire un fichier de patch et utiliser le contenu comme un ensemble d’instructions. En suivant ces instructions, les modifications du fichier modifié sont répliqué dans l’original fichier.
Imaginez maintenant que ce processus se produise dans un répertoire entier de fichiers texte. Tout en une seule fois. C’est la puissance du patch.
Parfois, vous ne recevez pas les fichiers modifiés. Tout ce que vous recevez est le fichier de correctif. Pourquoi envoyer des dizaines de fichiers lorsque vous pouvez envoyer un fichier ou publier un fichier pour un téléchargement facile?
Que faites-vous avec le fichier de correctif pour corriger vos fichiers? En plus d’être presque un virelangue, c’est aussi une bonne question. Nous vous expliquerons cela dans cet article.
La commande patch est le plus souvent utilisée par les personnes travaillant avec des fichiers de code source de logiciels, mais elle fonctionne aussi bien avec n’importe quel ensemble de fichiers texte quel que soit leur objectif, code source ou non.
Notre exemple de scénario
Dans ce scénario, nous sommes dans un répertoire appelé work qui contient deux autres répertoires. L’un s’appelle le travail et l’autre s’appelle le dernier. Le répertoire de travail contient un ensemble de fichiers de code source. Le dernier répertoire contient la version la plus récente de ces fichiers de code source, dont certains ont été modifiés.
Pour être sûr, le répertoire de travail est une copie de la version actuelle des fichiers texte. Ce n’est pas la seule copie d’entre eux.
Recherche des différences entre deux versions d’un fichier
La commande diff trouve les différences entre deux fichiers. Son action par défaut est de lister les lignes modifiées dans la fenêtre du terminal.
Un fichier s’appelle slang.c. Nous comparerons la version du répertoire de travail à celle du dernier répertoire.
L’option -u (unifiée) indique à diff de lister également certaines des lignes de texte non modifiées avant et après chacune des sections modifiées. Ces lignes sont appelées lignes de contexte. Ils aident la commande patch à localiser précisément où une modification doit être apportée dans le fichier d’origine.
Nous fournissons les noms des fichiers afin que diff sache quels fichiers comparer. Le fichier d’origine est répertorié en premier, puis le fichier modifié. C’est la commande que nous émettons pour diff:
diff -u working/slang.c latest/slang.c
diff produit une liste de sortie montrant les différences entre les fichiers. Si les fichiers étaient identiques, aucune sortie ne serait répertoriée. Voir ce type de sortie de diff confirme qu’il existe des différences entre les deux versions de fichier et que le fichier d’origine doit être corrigé.
Créer un fichier de correctifs
Pour capturer ces différences dans un fichier de correctif, utilisez la commande suivante. C’est la même commande que ci-dessus, avec la sortie de diff redirigée vers un fichier appelé slang.patch.
diff -u working/slang.c latest/slang.c > slang.patch
patch -u working.slang.c -i slang.patch
Si tout se passe bien, il y a une seule ligne de sortie indiquant que le correctif corrige le fichier.
Faire une sauvegarde du fichier d’origine
Nous pouvons demander à patch de faire une copie de sauvegarde des fichiers patchés avant qu’ils ne soient modifiés en utilisant l’option -b (sauvegarde). L’option -i (entrée) indique à patch le nom du fichier de patch à utiliser:
patch -u -b working.slang.c -i slang.patch
Le fichier est patché comme précédemment, sans différence visible dans la sortie. Cependant, si vous regardez dans le dossier de travail, vous verrez que le fichier appelé slang.c.orig a été créé. La date et l’heure des fichiers indiquent que slang.c.orig est le fichier d’origine et slang.c est un nouveau fichier créé par patch.
Utilisation de diff avec des répertoires
Nous pouvons utiliser diff pour créer un fichier de correctif contenant toutes les différences entre les fichiers dans deux répertoires. Nous pouvons ensuite utiliser ce fichier de patch avec patch pour appliquer ces différences aux fichiers du dossier de travail avec une seule commande.
Les options que nous allons utiliser avec diff sont l’option -u (contexte unifié) que nous avons utilisée précédemment, l’option -r (récursive) pour que diff regarde dans tous les sous-répertoires et l’option -N (nouveau fichier).
L’option -N indique à diff comment gérer les fichiers du dernier répertoire qui ne se trouvent pas dans le répertoire de travail. Cela force diff à mettre des instructions dans le fichier de correctif afin que patch crée des fichiers qui sont présents dans le dernier répertoire mais absents du répertoire de travail.
Vous pouvez regrouper les options afin qu’elles utilisent un seul trait d’union (-).
Notez que nous ne fournissons que les noms de répertoires, nous ne disons pas à diff de regarder des fichiers spécifiques:
diff -ruN working/ latest/ > slang.patch