Jak aplikovat opravu na soubor (a vytvořit opravy) v systému Linux

Příkaz Linux patch
umožňuje rychle a bezpečně přenášet změny z jedné sady souborů do jiné sady souborů. Naučte se, jak používat patch
jednoduchý způsob.
Příkazy Patch a Diff
Představte si, že máte v počítači textový soubor. Obdržíte upravenou verzi tohoto textového souboru od někoho jiného. Jak rychle přenesete všechny změny z upraveného souboru do původního? To je místo patch
a diff
vstupte do hry. patch
a diff
nacházejí se v Linuxu a dalších operačních systémech podobných Unixu, jako je macOS.
diff
Příkaz zkoumá dvě různé verze souboru a vyjmenovává rozdíly mezi nimi. Rozdíly lze uložit do souboru s názvem opravný soubor.
patch
Příkaz může číst soubor oprav a obsah jako soubor instrukcí. Podle těchto pokynů se změny v upraveném souboru replikují v původním souboru.
Nyní si představte, že se tento proces děje s celým adresářem textových souborů. Vše najednou. To je síla patch
.
Někdy nedostanete zaslané upravené soubory. Vše, co dostanete odesláno, je soubor opravy. Proč posílat desítky souborů dokola, když můžete odeslat jeden soubor nebo zveřejnit jeden soubor pro snadné stažení?
Co děláte s opravným souborem, abyste skutečně opravili své soubory? Kromě toho, že je to skoro jazyk, je to také dobrá otázka. Provedeme vás tím v tomto článku.
patch
Příkaz se nejčastěji používají lidé, kteří pracují s kódem zdrojových souborů software, ale funguje stejně dobře s jakýmkoliv souborem textových souborů bez ohledu na jejich účel, zdrojový kód, nebo ne.
SOUVISEJÍCÍ: Jak porovnat dva textové soubory v terminálu Linux
Náš příklad scénáře
V tomto scénáři jsme v adresáři s názvem práce, který obsahuje další dva adresáře. Jeden se nazývá pracovní a druhý nejnovější . Pracovní adresář obsahuje sadu souborů zdrojového kódu. Nejnovější adresář obsahuje nejnovější verzi těchto souborů zdrojového kódu, z nichž některé byly upraveny.
Z bezpečnostních důvodů je pracovní adresář kopií aktuální verze textových souborů. Není to jejich jediná kopie.
Nalezení rozdílů mezi dvěma verzemi souboru
diff
Příkaz najde rozdíly mezi dvěma soubory. Jeho výchozí akcí je vypsat upravené řádky v okně terminálu.
Jeden soubor se volá slang.c
. Porovnáme verzi v pracovním adresáři s verzí v nejnovějším adresáři.
Možnost -u
(sjednocený) říká, diff
že také seznam některých nezměněných textových řádků z před a za každou ze změněných částí. Tyto řádky se nazývají kontextové řádky. Pomáhají patch
příkazu najít přesně místo, kde je třeba provést změnu v původním souboru.
Poskytujeme názvy souborů, abychom diff
věděli, které soubory mají být porovnány. Nejprve je uveden původní soubor, poté upravený soubor. Toto je příkaz, který vydáváme diff
:
diff -u working / slang.c nejnovější / slang.c
diff
vytvoří výstupní seznam zobrazující rozdíly mezi soubory. Pokud by byly soubory identické, nebyl by vůbec uveden žádný výstup. Vidět tento typ výstupu z diff
potvrzuje, že existují rozdíly mezi dvěma verzemi souborů a že původní soubor potřebuje opravu.
Vytvoření opravného pole
Chcete-li zachytit tyto rozdíly v souboru opravy, použijte následující příkaz. Je to stejný příkaz jako výše, s výstupem z diff
přesměrování do souboru s názvem slang.patch.
diff -u working / slang.c latest / slang.c> slang.patch
Název souboru opravy je libovolný. Můžete to nazvat jak chcete. Dát příponu „.patch“ je dobrý nápad; protože však jasně ukazuje, o jaký typ souboru jde.
Chcete-li patch
jednat podle souboru opravy a upravit pracovní soubor / slang.c, použijte následující příkaz. Možnost -u
(unified) umožňuje patch
vědět, že soubor opravy obsahuje sjednocené kontextové řádky. Jinými slovy jsme použili volbu -u s diffem, takže použijeme -u
možnost s patch
.
patch -u working.slang.c -i slang.patch
Pokud vše půjde dobře, existuje jediný řádek výstupu, který vám říká, patch
že soubor opravujete.
Vytvoření zálohy původního pole
Můžeme dát pokyn patch
k vytvoření záložní kopie opravených souborů před jejich změnou pomocí možnosti -b
(zálohování). Volba -i
(vstup) sděluje oprávce název souboru opravy, který se má použít:
patch -u -b working.slang.c -i slang.patch
Soubor je opraven jako dříve, bez viditelného rozdílu ve výstupu. Pokud se však podíváte do pracovní složky, uvidíte, že byl vytvořen soubor s názvem slang.c.orig. Datová a časová razítka souborů ukazují, že slang.c.orig je původní soubor a slang.c je nový soubor vytvořený uživatelem patch
.
Použití rozdílu s adresáři
Můžeme použít diff
k vytvoření souboru opravy, který obsahuje všechny rozdíly mezi soubory ve dvou adresářích. Tento soubor opravy pak můžeme použít k tomu, patch
aby se tyto rozdíly aplikovaly na soubory v pracovní složce jediným příkazem.
Možnosti, které použijeme, diff
jsou možnost -u
(sjednocený kontext), kterou jsme použili dříve, možnost -r
(rekurzivní), abychom se diff
podívali do všech podadresářů, a možnost -N
(nový soubor).
Tato -N
volba říká, diff
jak zacházet se soubory v posledním adresáři, které nejsou v pracovním adresáři. Vynucuje diff
vložit pokyny do souboru opravy, aby se patch
vytvořily soubory, které jsou přítomny v posledním adresáři, ale chybí v pracovním adresáři.
Možnosti můžete seskupit tak, aby používaly jeden spojovník ( -
).
Všimněte si, že poskytujeme pouze názvy adresářů, neříkáme, abychom diff
se dívali na konkrétní soubory:
diff -ruN working / latest /> slang.patch
Nahlédnutí do opravného souboru
Pojďme se rychle podívat na soubor opravy. Podíváme less
se na jeho obsah.
V horní části souboru jsou uvedeny rozdíly mezi dvěma verzemi souboru slang.c.
Při procházení souboru opravy dále vidíme, že pak popisuje změny v jiném souboru s názvem structs.h. Tím se ověří, zda opravný soubor rozhodně obsahuje rozdíly mezi různými verzemi více souborů.
Podívejte se, než skočíte
Oprava velké sbírky souborů může být trochu znervózňující, takže využijeme tuto --dry-run
možnost, abychom zkontrolovali, zda je vše v pořádku, než se pustíme do provádění změn.
Tato --dry-run
možnost říká, patch
že je třeba dělat vše kromě skutečné úpravy souborů. patch
provede všechny své předletové kontroly souborů a pokud narazí na nějaké problémy, nahlásí je. Ať tak či onak, nebudou upraveny žádné soubory.
Pokud nejsou hlášeny žádné problémy, můžeme příkaz opakovat bez --dry-run
možnosti a s jistotou opravit naše soubory.
Možnost -d
(adresář) určuje, na patch
kterém adresáři se má pracovat.
Všimněte si, že jsme to pomocí -i
volby (vstup) říci patch
, který soubor náplast obsahuje pokyny diff
. Místo toho přesměrováváme soubor opravy na patch
pomocí <
.
patch --dry-run -ruN -d pracuje <slang.patch
Z celého adresáře byly diff
nalezeny dva soubory k opravě. Pokyny týkající se úprav těchto dvou souborů byly zkontrolovány patch
a nebyly hlášeny žádné problémy.
Předletové kontroly jsou v pořádku; jsme připraveni na vzlet.
Oprava adresáře
K opravnému použití oprav na soubory používáme předchozí příkaz bez --dry-run
možnosti.
patch -ruN -d pracuje <slang.patch
Tentokrát každý řádek výstupu nezačíná „kontrolou“, každý řádek začíná „opravou“.
A nejsou hlášeny žádné problémy. Můžeme sestavit náš zdrojový kód a budeme na nejnovější verzi softwaru.
Vyrovnejte své rozdíly
Toto je zdaleka nejjednodušší a nejbezpečnější způsob použití patch
. Zkopírujte své cílové soubory do složky a opravte tuto složku. Zkopírujte je zpět, až budete rádi, že proces opravy byl dokončen bez chyb.