Javítás alkalmazása egy fájlra (és javítások létrehozása) Linuxban

A Linux patch parancs segítségével gyorsan és biztonságosan viheti át a módosításokat egyik fájlkészletről a másik fájlkészletre. Tanulja meg a javítás egyszerű használatát.

A javítás és a diff parancsok

Képzelje el, hogy van egy szöveges fájl a számítógépén. Valaki mástól kapja meg a szövegfájl módosított változatát. Hogyan lehet gyorsan átvinni az összes módosítást a módosított fájlból az eredeti fájlba? Itt jön képbe a patch és a diff. A patch és a diff megtalálható a Linuxban és más Unix-szerű operációs rendszerekben, például a macOS-ben.

A diff parancs megvizsgálja egy fájl két különböző verziója és felsorolja a köztük lévő különbségeket. A különbségeket patch fájlnak nevezett fájlban tárolhatjuk.

A patch parancs beolvashat egy javítófájlt, és a tartalmát utasításkészletként használhatja. Ha követi ezeket az utasításokat, a módosított fájl módosításai a következők replikálva az eredetiben fájlt.

Most képzelje el, hogy ez a folyamat egy teljes szöveges fájlok könyvtárával történik. Mindezt egy menetben. Ez a patch ereje.

Néha nem kapja meg a módosított fájlokat. Csak a javítófájlt kapja meg. Miért küldjön több tucat fájlt körbe, ha elküldhet egy fájlt, vagy elküldhet egy fájlt az egyszerű letöltés érdekében?

Mit csinál a javítófájllal, hogy ténylegesen javítsa a fájljait? Amellett, hogy szinte nyelvtörő, ez is jó kérdés. Ebben a cikkben végigvezetjük Önt ezen.

A patch parancsot leggyakrabban szoftveres forráskód fájlokkal dolgozó emberek használják, de ugyanolyan jól működik bármilyen szöveges fájllal, függetlenül attól, hogy milyen célt szolgálnak, forráskódot vagy sem.

Példaforgatókönyvünk

Ebben a forgatókönyvben egy munka nevű könyvtárban vagyunk, amely két másik könyvtárat tartalmaz. Az egyiket működőnek, a másikat legújabbnak hívják. A munkakönyvtár forráskódfájlokat tartalmaz. A legújabb könyvtár tartalmazza a forráskódfájlok legfrissebb verzióját, amelyek közül néhány módosult.

  Samsung Galaxy S20: Gesztusok bekapcsolása és a navigációs sáv gombsorrendjének módosítása

A biztonság kedvéért a munkakönyvtár a szövegfájlok aktuális verziójának másolata. Nem ez az egyetlen példányuk.

Különbségek keresése egy fájl két verziója között

A diff parancs megkeresi a különbségeket két fájl között. Az alapértelmezett művelet a módosított sorok listázása a terminálablakban.

Az egyik fájl neve slang.c. Összehasonlítjuk a munkakönyvtárban lévő verziót a legújabb könyvtárban lévővel.

Az -u (unifikált) opció arra utasítja a diff-t, hogy a módosított szakaszok előtti és utáni nem módosított szövegsorokat is listázza. Ezeket a sorokat környezeti soroknak nevezzük. Segítségükkel a patch parancs pontosan meghatározza, hol kell változtatni az eredeti fájlban.

Megadjuk a fájlok nevét, hogy a diff tudja, mely fájlokat kell összehasonlítani. Először az eredeti fájl jelenik meg, majd a módosított fájl. Ezt a parancsot adjuk ki a diff-re:

diff -u working/slang.c latest/slang.c

A diff kimeneti listát készít, amely megmutatja a fájlok közötti különbségeket. Ha a fájlok azonosak lennének, akkor a kimenet egyáltalán nem szerepelne. A diff ilyen típusú kimenete megerősíti, hogy különbségek vannak a két fájlverzió között, és hogy az eredeti fájl javításra szorul.

Javítófájl készítése

A különbségek javítási fájlban való rögzítéséhez használja a következő parancsot. Ugyanaz a parancs, mint fent, a diff kimenete át van irányítva a slang.patch nevű fájlba.

diff -u working/slang.c latest/slang.c > slang.patch

diff -u working/slang.c latest/slang.c > slang.patch egy terminálablakban” width=”646″ height=”57″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onerror=”this.onrror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<p>A javítófájl neve tetszőleges.  Bármilyennek hívhatod.  Jó ötlet „.patch” kiterjesztéssel ellátni;  azonban világossá teszi, hogy milyen típusú fájlról van szó.</p>
<p>Ha a javítást a javítófájlra szeretné használni, és módosítani szeretné a working/slang.c fájlt, használja a következő parancsot.  Az -u (unifikált) kapcsoló segítségével a patch tudja, hogy a javítófájl egységes környezeti sorokat tartalmaz.  Más szóval, a -u kapcsolót használtuk a diff-nél, tehát a -u opciót használjuk a patch-nél.</p>
<div style=

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

Ha minden jól megy, a kimenet egyetlen sora jelzi, hogy a javítás javítja a fájlt.

Biztonsági másolat készítése az eredeti fájlról

A -b (backup) kapcsolóval utasíthatjuk a patch-et, hogy készítsen biztonsági másolatot a javított fájlokról, mielőtt azok megváltoznának. Az -i (input) kapcsoló megadja a foltnak a használni kívánt javítófájl nevét:

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

A fájl a korábbiak szerint van javítva, a kimenetben nincs látható különbség. Ha azonban belenéz a munkamappába, látni fogja, hogy létrejött a slang.c.orig nevű fájl. A fájlok dátum- és időbélyegzői azt mutatják, hogy a slang.c.orig az eredeti fájl, a slang.c pedig egy patch által létrehozott új fájl.

Diff használata a könyvtárakkal

A diff segítségével létrehozhatunk egy javítófájlt, amely tartalmazza a két könyvtárban lévő fájlok közötti összes különbséget. Ezután használhatjuk a javítófájlt a javítással, hogy a különbségeket egyetlen paranccsal alkalmazzuk a munkamappában lévő fájlokra.

A diff-nél használni fogjuk a korábban használt -u (egyesített környezet) kapcsolót, a -r (rekurzív) opciót, amely lehetővé teszi, hogy a diff minden alkönyvtárat megnézzen, valamint az -N (új fájl) opció.

Az -N kapcsoló megmondja a diff-nek, hogy hogyan kell kezelni a legfrissebb könyvtárban lévő olyan fájlokat, amelyek nincsenek a munkakönyvtárban. Arra kényszeríti a diff-et, hogy utasításokat tegyen a javítófájlba, így a patch olyan fájlokat hoz létre, amelyek a legújabb könyvtárban vannak, de hiányoznak a munkakönyvtárból.

A lehetőségeket összevonhatja úgy, hogy egyetlen kötőjelet (-) használjon.

Ne feledje, hogy csak a könyvtárneveket adjuk meg, nem mondjuk a diff-nek, hogy bizonyos fájlokat nézzen meg:

diff -ruN working/ latest/ > slang.patch

diff -ruN working/ latest/ > slang.patch” width=”646″ height=”77″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”  onrror=”this.onrror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”></p>
<h2 role=Bekukucskál a javítófájl belsejébe

Vessünk egy gyors pillantást a javítófájlba. Kevesebbet fogunk használni, hogy megnézzük a tartalmát.

A fájl tetején láthatók a különbségek a slang.c két verziója között.

A javítófájlban tovább görgetve azt látjuk, hogy az egy másik, structs.h nevű fájlban írja le a változásokat. Ez ellenőrzi, hogy a javítófájl határozottan tartalmazza-e a több fájl különböző verziói közötti különbségeket.

  A GitCola telepítése Linuxra

Gondold át

A fájlok nagy gyűjteményének javítása kissé nyugtalanító lehet, ezért a –dry-run opciót fogjuk használni annak ellenőrzésére, hogy minden rendben van-e, mielőtt belevágnánk és elköteleznénk magunkat a változtatások végrehajtása mellett.

A –dry-run opció arra utasítja a patch-et, hogy a fájlok tényleges módosításán kívül mindent tegyen meg. A patch elvégzi a fájlok repülés előtti összes ellenőrzését, és ha bármilyen problémába ütközik, jelenti azokat. Akárhogy is, a fájlok nem módosulnak.

Ha nem jelentenek problémát, megismételhetjük a parancsot a –dry-run opció nélkül, és magabiztosan javíthatjuk a fájljainkat.

A -d (könyvtár) kapcsoló megadja a javításnak, hogy melyik könyvtáron kell dolgozni.

Ne feledje, hogy nem használjuk az -i (input) opciót, hogy megmondjuk a javításnak, hogy melyik javításfájl tartalmazza a diff utasításait. Ehelyett átirányítjuk a javítófájlt a következőre: patch with <. wp_automatic_readability="17.5">

patch --dry-run -ruN -d working 

Out 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 working 

This 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.