Comment patcher un fichier (et créer des patchs) fr Linux

Contenu

PC affichant une invite de shell sur un bureau Linux

Sous Linux patch La commande vous permet de transférer les modifications d'un ensemble de fichiers à un autre ensemble de fichiers rapidement et en toute sécurité. Apprendre à utiliser patch la manière simple.

Les commandes patch et diff

Imaginez que vous ayez un fichier texte sur votre ordinateur. Recevoir 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 viens jouer. patch et diff trouvé sur Linux et d'autres systèmes d'exploitation de type Unix, comme macOS.

Les diff commande examiner deux versions différentes d'un fichier et liste les différences entre eux. Les différences peuvent être stockées dans un fichier appelé fichier de correctif.

Les patch La commande peut lire un fichier de correctif et utiliser le contenu comme un ensemble d'instructions. En suivant ces instructions, les modifications apportées au fichier modifié sont reproduit dans l'original Record.

Imaginez maintenant que cette procédure se produise sur un répertoire entier de fichiers texte. Tout à la fois. C'est le pouvoir de patch.

Parfois, ils ne vous envoient pas de fichiers modifiés. Tout ce qui vous est envoyé est le fichier patch. Pourquoi soumettre des dizaines de fichiers lorsque vous pouvez soumettre un fichier ou publier un fichier pour un téléchargement facile?

Que faites-vous avec le fichier patch pour vraiment patcher vos fichiers? En plus d'être presque un virelangue, c'est aussi une bonne question. Nous vous guiderons dans cet article.

Les patch La commande est le plus souvent utilisée par les personnes qui travaillent avec des fichiers de code source de logiciels., mais cela fonctionne aussi bien avec n'importe quel ensemble de fichiers texte, quel que soit votre objectif, code source ou pas.

EN RELATION: Comment comparer deux fichiers texte dans un terminal Linux

Notre exemple de scénario

À ce stade, nous sommes dans un répertoire appelé work qui contient deux autres répertoires. L'un s'appelle la main d'oeuvre, et l'autre s'appelle plus récent. 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.

Trouver les différences entre deux versions d'un fichier

Les diff commande rechercher 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 avec celle du répertoire le plus récent.

Les -u l'option (unifié) dé diff pour énumérer davantage 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 le patch localiser précisément où une modification doit être apportée dans le fichier d'origine.

Nous fournissons les noms de fichiers afin que diff savoir quels fichiers comparer. Le fichier d'origine est répertorié en premier, après le fichier modifié. C'est la commande que nous envoyons à diff:

diff -u fonctionnant/argot.c dernier/argot.c

diff produit une liste de sortie montrant les différences entre les fichiers. Si les fichiers étaient identiques, aucun résultat ne serait inclus dans la liste. En voyant ce genre de sortie de diff confirme qu'il existe des différences entre les deux versions du fichier et que le fichier d'origine a besoin d'un correctif.

Créer un fichier correctif

Pour capturer ces différences dans un fichier de correctif, utilisez la commande suivante. C'est la même commande que la précédente, avec le départ de diff redirigé vers un fichier appelé slang.patch.

diff -u fonctionnant/argot.c dernier/argot.c > argot.patch

Le nom du fichier de correctif est arbitraire. Tu peux appeler ça comme tu le veux. Darle una extensión “.patches una buena idea; malgré cela, indiquer clairement de quel type de fichier il s'agit.

Pour faire patch agir sur le fichier patch et modifier le fichier de travail / argot.c, utilisez la commande suivante. Les -u option (unifié) permet patch sachez que le fichier de correctif contient des lignes de contexte unifiées. En d'autres termes, nous utilisons l'option -u avec diff, donc on utilise le -u option avec patch.

parche -u working.slang.c -i slang.patch

Si tout va bien, il n'y a qu'une seule ligne de départ qui vous dit patch corrige le fichier.

Faire une sauvegarde du fichier d'origine

Nous pouvons instruire patch de faire une sauvegarde des fichiers patchés avant qu'ils ne soient modifiés via le -b option (copie de sécurité). Les -i L'option (entrée) indique au correctif le nom du fichier de correctif à utiliser:

patch -u -b working.slang.c -i slang.patch

Le fichier est patché comme avant, pas de différences visibles dans la sortie. Malgré cela, si vous regardez le dossier de travail, vous verrez que le fichier nommé slang.c.orig a été créé. La date et l'heure du fichier indiquent que slang.c.orig est le fichier d'origine et que slang.c est un nouveau fichier créé par patch.

Utiliser diff avec des répertoires

On peut utiliser diff pour créer un fichier patch contenant toutes les différences entre les fichiers dans deux répertoires. Ensuite, nous pouvons utiliser ce fichier de correctif avec patch afin que ces différences soient appliquées aux fichiers du dossier de travail avec une seule commande.

Les alternatives que nous utiliserons avec diff sont les -u (contexte unifié) que nous avons déjà utilisé, la -r (récursif) possibilité de faire diff rechercher dans n'importe quel sous-répertoire et le -N (nouveau fichier) option.

Les -N option dit diff comment gérer les fichiers dans un répertoire plus récent qui ne sont pas dans le répertoire de travail. Force diff mettre les instructions dans le fichier patch afin quepatch crée des fichiers présents dans le dernier répertoire mais manquants dans le répertoire de travail.

Vous pouvez regrouper les alternatives pour utiliser un seul script (-).

Veuillez noter que nous ne fournissons que les noms de répertoire, nous ne disons pas diff pour regarder des fichiers spécifiques:

diff -ruN working/ latest/ > argot.patch

argot.patch” width=”646″ height=”77″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(cette);” onerror=this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(cette);”>

Echando un vistazo dentro del archivo de parche

Echemos un vistazo rápido al archivo de parche. nous utiliserons less para mirar su contenido.

La parte de arriba del archivo muestra las diferencias entre las dos versiones de slang.c.

Desplazándonos hacia abajo por el archivo de parche, nous voyons que plus tard, il décrit les modifications dans un autre fichier appelé structs.h. Cela vérifie que le fichier de correctif contient bien les différences entre les différentes versions des différents fichiers.

Regarde avant de sauter

Patcher une grande collection de fichiers peut être un peu déconcertant, donc nous allons utiliser le --dry-run possibilité de vérifier que tout va bien avant de franchir le pas et de s'engager à apporter les modifications.

Les --dry-run option dit patch Pour tout faire, à part modifier les fichiers. patch effectuera toutes vos vérifications avant vol sur les fichiers et, si vous trouvez un problème, Va informer. De toute façon, aucun fichier n'est modifié.

Si aucun problème n'est signalé, nous pouvons répéter la commande sans le --dry-run option et patchez nos fichiers en toute confiance.

Les -d (annuaire) option dire patch dans quel répertoire travailler.

Veuillez noter que nous sommes non en utilisant le -i (entrée) possibilité de compter patch quel fichier de correctif contient les instructions pour diff. En échange, nous redirigeons le fichier de correctif vers patch avec <.

patch --dry-run -ruN -d fonctionne < argot.patch

De tout l'annuaire, diff J'ai trouvé deux fichiers à patcher. Les instructions concernant les modifications pour ces deux fichiers ont été vérifiées par patch et aucun problème n'a été signalé.

Les contrôles pré-vol sont très bien; nous sommes prêts à décoller.

Patcher un répertoire

Pour appliquer véritablement les correctifs aux fichiers, nous utilisons la commande ci-dessus sans le --dry-run option.

patch -ruN -d fonctionne < argot.patch

Cette fois, cada línea de salida no comienza concomprobación”, cada línea comienza conparcheo”.

Et aucun problème n'est signalé. Nous pouvons compiler notre code source et nous aurons la dernière version du logiciel.

Résolvez vos différends

C'est, avec beaucoup, le moyen le plus simple et le plus sûr d'utiliser patch. Copiez vos fichiers de destination dans un dossier et corrigez ce dossier. Copiez-les à nouveau lorsque vous êtes convaincu que la procédure de correction s'est terminée sans erreur.

setTimeout(fonction(){
!fonction(F,b,e,v,m,t,s)
{si(f.fbq)revenir;n=f.fbq=fonction(){n.callMethod?
n.callMethod.apply(m,arguments):n.queue.push(arguments)};
si(!f._fbq)f._fbq=n;n.push=n;n.chargé=!0;n.version=’2.0′;
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertAvant(t,s) } (window, document,'scénario',
'https://connect.facebook.net/en_US/fbevents.js’);
fbq('init', « 335401813750447 »);
fbq('Piste', « Page View »);
},3000);

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.