Comanda Linux patch vă permite să transferați modificările de la un set de fișiere la alt set de fișiere rapid și în siguranță. Aflați cum să utilizați patch-ul într-un mod simplu.
Cuprins
Comenzile de patch și diff
Imaginați-vă că aveți un fișier text pe computer. Primiți o versiune modificată a acelui fișier text de la altcineva. Cum transferați rapid toate modificările din fișierul modificat în fișierul original? Acolo intră în joc patch-ul și diferența. patch-ul și diff se găsesc în Linux și alte sisteme de operare asemănătoare Unix, cum ar fi macOS.
Comanda diff examinează două versiuni diferite ale unui fișier și enumeră diferențele dintre ele. Diferențele pot fi stocate într-un fișier numit fișier patch.
Comanda patch poate citi un fișier patch și poate folosi conținutul ca un set de instrucțiuni. Urmând aceste instrucțiuni, modificările din fișierul modificat sunt replicat în original fişier.
Acum imaginați-vă că acest proces se întâmplă într-un întreg director de fișiere text. Toate într-o singură mișcare. Aceasta este puterea patch-ului.
Uneori nu vi se trimit fișierele modificate. Tot ce primești este fișierul de corecție. De ce să trimiți zeci de fișiere când poți trimite un fișier sau să postezi un fișier pentru descărcare ușoară?
Ce faceți cu fișierul de corecție pentru a vă corecta fișierele? În afară de faptul că este aproape un șofer, aceasta este și o întrebare bună. Vă vom prezenta în acest articol.
Comanda patch este folosită cel mai adesea de persoanele care lucrează cu fișiere de cod sursă software, dar funcționează la fel de bine cu orice set de fișiere text, indiferent de scopul lor, codul sursă sau nu.
Exemplul nostru de scenariu
În acest scenariu, ne aflăm într-un director numit work, care conține alte două directoare. Unul se numește lucru, iar celălalt se numește cel mai recent. Directorul de lucru conține un set de fișiere de cod sursă. Cel mai recent director deține cea mai recentă versiune a acelor fișiere de cod sursă, dintre care unele au fost modificate.
Pentru a fi în siguranță, directorul de lucru este o copie a versiunii curente a fișierelor text. Nu este singura copie a acestora.
Găsirea diferențelor între două versiuni ale unui fișier
Comanda diff găsește diferențele dintre două fișiere. Acțiunea sa implicită este de a lista liniile modificate în fereastra terminalului.
Un fișier se numește slang.c. Vom compara versiunea din directorul de lucru cu cea din cel mai recent director.
Opțiunea -u (unificată) îi spune lui diff să listeze și unele dintre liniile de text nemodificate de înainte și după fiecare dintre secțiunile modificate. Aceste linii sunt numite linii de context. Ele ajută comanda patch să găsească exact unde trebuie făcută o modificare în fișierul original.
Oferim numele fișierelor, astfel încât diff să știe ce fișiere să compare. Fișierul original este listat mai întâi, apoi fișierul modificat. Aceasta este comanda pe care o lansăm pentru a diferi:
diff -u working/slang.c latest/slang.c
diff produce o listă de ieșire care arată diferențele dintre fișiere. Dacă fișierele ar fi identice, nu ar exista nicio ieșire listată. Vederea acestui tip de ieșire de la diff confirmă că există diferențe între cele două versiuni de fișiere și că fișierul original necesită corecție.
Crearea unui fișier de corecție
Pentru a captura acele diferențe într-un fișier de corecție, utilizați următoarea comandă. Este aceeași comandă ca mai sus, cu rezultatul de la diff redirecționat într-un fișier numit slang.patch.
diff -u working/slang.c latest/slang.c > slang.patch
Dacă totul merge bine, există o singură linie de ieșire care vă spune că patch-ul este corectarea fișierului.
Efectuarea unei copii de rezervă a fișierului original
Putem instrui patch-ul să facă o copie de rezervă a fișierelor corecţionate înainte ca acestea să fie modificate utilizând opţiunea -b (backup). Opțiunea -i (input) îi spune patch-ului numele fișierului de corecție de utilizat:
patch -u -b working.slang.c -i slang.patch
Fișierul este corectat ca înainte, fără nicio diferență vizibilă în rezultat. Cu toate acestea, dacă te uiți în folderul de lucru, vei vedea că fișierul numit slang.c.orig a fost creat. Marcajele cu data și oră ale fișierelor arată că slang.c.orig este fișierul original și slang.c este un fișier nou creat de patch.
Folosind diff cu directoare
Putem folosi diff pentru a crea un fișier patch care conține toate diferențele dintre fișierele din două directoare. Apoi putem folosi acel fișier de corecție cu patch pentru a aplica acele diferențe fișierelor din folderul de lucru cu o singură comandă.
Opțiunile pe care le vom folosi cu diff sunt opțiunea -u (context unificat) pe care am folosit-o mai devreme, opțiunea -r (recursivă) pentru a face diff să se uite în orice subdirectoare și opțiunea -N (fișier nou).
Opțiunea -N îi spune lui diff cum să gestioneze fișierele din cel mai recent director care nu se află în directorul de lucru. O obligă pe diff să pună instrucțiuni în fișierul de corecție, astfel încât patch-ul să creeze fișiere care sunt prezente în cel mai recent director, dar lipsesc din directorul de lucru.
Puteți grupa opțiunile împreună, astfel încât acestea să utilizeze o singură cratimă (-).
Rețineți că furnizăm doar numele directoarelor, nu îi spunem lui diff să se uite la anumite fișiere:
diff -ruN working/ latest/ > slang.patch
Privire în interiorul fișierului de corecție
Să aruncăm o privire rapidă în fișierul de corecție. Vom folosi mai puțin pentru a ne uita la conținutul său.
Partea de sus a fișierului arată diferențele dintre cele două versiuni de slang.c.
Derulând mai în jos prin fișierul de corecție, vedem că acesta descrie apoi modificările dintr-un alt fișier numit structs.h. Acest lucru verifică că fișierul de corecție conține cu siguranță diferențele dintre diferitele versiuni ale mai multor fișiere.
Nu te pripi
Corectarea unei colecții mari de fișiere poate fi puțin deranjantă, așa că vom folosi opțiunea –dry-run pentru a verifica că totul este în regulă înainte de a face pasul și de a ne angaja să facem modificările.
Opțiunea –dry-run îi spune patch-ului să facă totul în afară de modificarea efectivă a fișierelor. patch-ul va efectua toate verificările sale înainte de zbor asupra fișierelor și, dacă întâmpină probleme, le raportează. În orice caz, niciun fișier nu este modificat.
Dacă nu sunt raportate probleme, putem repeta comanda fără opțiunea –dry-run și putem corecta cu încredere fișierele noastre.
Opțiunea -d (director) spune patch-ului în ce director să lucreze.
Rețineți că nu folosim opțiunea -i (input) pentru a spune patch-ului care fișier de corecție conține instrucțiunile de la diff. În schimb, redirecționăm fișierul patch în patch with <. wp_automatic_readability="17.5">
patch --dry-run -ruN -d workingOut of the entire directory, diff found two files to patch. The instructions regarding the modifications for those two files have been checked by patch , and no problems have been reported.
Pre-flight checks are OK; we’re ready for take-off.
Patching a Directory
To genuinely apply the patches to the files we use the previous command without the --dry-run option.
patch -ruN -d workingThis time each line of output doesn’t start with “checking,” each line starts with “patching.”
And no problems are reported. We can compile our source code, and we’ll be on the latest version of the software.
Settle Your Differences
This is by far the easiest and safest way to use patch. Copy your target files to a folder and patch that folder. Copy them back when you’re happy that the patching process completed error free.