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 “.patch” es 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
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 con “comprobación”, cada línea comienza con “parcheo”.
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);