Kuinka lisätä korjaustiedosto tiedostoon (ja luoda korjaustiedostoja) Linuxissa

Linux- patchkomennon avulla voit siirtää muutokset tiedostosarjasta toiseen nopeasti ja turvallisesti. Opi käyttämään patchyksinkertaista tapaa.

Paikka- ja diff-komennot

Kuvittele, että tietokoneellasi on tekstitiedosto. Saat muokatun version tekstitiedostosta joltakin muulta. Kuinka siirrät kaikki muutokset nopeasti muokatusta tiedostosta alkuperäiseen tiedostoon? Siellä patchja difftule pelaamaan. patchja difflöytyy Linuxista ja muista Unix-kaltaisista käyttöjärjestelmistä, kuten macOS.

diffKomento tarkastellaan kahta eri versiota tiedostosta ja listaa eroja. Erot voidaan tallentaa tiedostoon, jota kutsutaan korjaustiedostoksi.

patch Komento voi lukea paikkatiedoston ja käyttää sisältöä kuin joukko ohjeita. Noudattamalla näitä ohjeita muokatun tiedoston muutokset toistetaan alkuperäisessä tiedostossa.

Kuvittele nyt, että prosessi tapahtuu koko tekstitiedostojen hakemistossa. Kaikki yhdellä kertaa. Se on voimaa patch.

Joskus muokattuja tiedostoja ei lähetetä sinulle. Kaikki mitä lähetät on korjaustiedosto. Miksi lähettää kymmeniä tiedostoja ympäriinsä, kun voit lähettää yhden tiedoston tai lähettää yhden tiedoston helppoa lataamista varten?

Mitä teet korjaustiedostolla tiedostojesi todella korjaamiseksi? Sen lisäksi, että se on melkein kielenkääntäjä, se on myös hyvä kysymys. Opastamme sinut läpi tässä artikkelissa.

patchKomento on useimmiten käyttävät ihmiset työskentelevät ohjelmiston lähdekoodi tiedostoja, mutta se toimii yhtä hyvin minkä tahansa joukko tekstitiedostoja mihinkään tarkoitukseen, lähdekoodia tai ei.

RELATED: Kuinka verrata kahta tekstitiedostoa Linux-terminaalissa

Esimerkkiskenaario

Tässä tilanteessa olemme hakemistossa nimeltä työ, joka sisältää kaksi muuta hakemistoa. Toista kutsutaan työskentelyksi ja toista uusimmaksi . Työhakemistossa on joukko lähdekooditiedostoja. Uusin hakemisto sisältää viimeisimmän version lähdekooditiedostoista, joista joitain on muokattu.

Turvallisuuden takaamiseksi työkansio on kopio tekstitiedostojen nykyisestä versiosta. Se ei ole ainoa kopio niistä.

Tiedoston kahden version välisten erojen löytäminen

diffKomento löytää eroja kaksi tiedostoa. Sen oletustoiminto on luetella muokatut rivit pääteikkunassa.

Yksi tiedosto kutsutaan slang.c. Vertailemme työhakemiston versiota uusimman hakemiston versioon.

-u (Yhtenäinen) valinta ohjaa diffmyös luettelo joitakin YK-muutetusta tekstistä linjat ennen ja jälkeen jokaisen muuttui osissa. Näitä viivoja kutsutaan kontekstilinjoiksi. Ne auttavat  patch komentoa paikantamaan tarkasti, mihin alkuperäiseen tiedostoon on tehtävä muutoksia.

Annamme tiedostojen nimet niin, että difftiedämme mitkä tiedostot vertaillaan. Alkuperäinen tiedosto luetellaan ensin, sitten muokattu tiedosto. Tämä on komento, jonka annamme diff:

diff -u työskentely / slang.c uusin / slang.c

difftuottaa lähtöluettelon, joka näyttää tiedostojen väliset erot. Jos tiedostot olisivat identtisiä, tuotosta ei olisi lainkaan. Tämäntyyppisen lähdön näkeminen diffvahvistaa, että näiden kahden version välillä on eroja ja että alkuperäinen tiedosto on korjattava.

Patch FIlen tekeminen

Kaappaa nämä erot korjaustiedostoon seuraavalla komennolla. Se on sama komento kuin yllä, ja ulostulo diffohjataan tiedostoon slang.patch.

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

Paikkatiedoston nimi on mielivaltainen. Voit kutsua sitä millä tahansa haluat. "Patch" -laajennuksen antaminen on hyvä idea; Kuitenkin, koska se tekee selväksi, minkä tyyppinen tiedosto se on.

Käytä  patchkorjaustiedostoa ja muokkaa working / slang.c-tiedostoa seuraavalla komennolla. -u(Yhtenäinen) vaihtoehdon avulla patch tietää, että laastari tiedosto sisältää yhtenäisen yhteydessä linjat. Toisin sanoen käytimme -u-vaihtoehtoa diff: llä, joten käytämme -uvaihtoehtoa kanssa patch.

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

Jos kaikki menee hyvin, on yksi rivi lähtöä, joka kertoo, että patchkorjaat tiedostoa.

Alkuperäisen FIlen varmuuskopiointi

Voimme kehottaa patchtekemään varmuuskopion korjaustiedostoista ennen niiden muuttamista käyttämällä  -b(varmuuskopio) -vaihtoehtoa. -i(Input) Ilmoittaa paikata nimi paikkatiedoston käyttää:

 korjaustiedosto -u -b toimiva.slang.c -i slangi.laastari 

Tiedosto on korjattu kuten aiemmin, eikä siinä ole näkyvää eroa tulostuksessa. Jos kuitenkin tarkastelet työkansiota, näet, että tiedosto nimeltä slang.c.orig on luotu. Tiedostojen päivämäärä- ja aikaleimat osoittavat, että slang.c.orig on alkuperäinen tiedosto ja slang.c on uusi tiedosto, jonka on luonut patch.

Diff: n käyttäminen hakemistojen kanssa

Voimme diffluoda korjaustiedoston, joka sisältää kaikki tiedostojen erot kahdessa hakemistossa. Sitten voimme käyttää tätä korjaustiedostoa, patchjotta näitä eroja sovellettaisiin työkansiossa oleviin tiedostoihin yhdellä komennolla.

Vaihtoehdot, joita aiomme käyttää, diffovat -u(yhtenäinen konteksti) -vaihtoehto, jota olemme aiemmin käyttäneet, -r(rekursiivinen) -vaihtoehto diffalihakemistojen tarkastelemiseksi ja -N(uusi tiedosto) -vaihtoehto.

-NVaihtoehto kertoo diff , miten käsitellä tiedostoja uusimman hakemiston, jotka eivät ole työhakemistoon. Se pakottaa diffasettamaan ohjeet korjaustiedostoon siten, että patch luodaan tiedostot, jotka ovat viimeisimmässä hakemistossa, mutta puuttuvat työhakemistosta.

Voit niputtaa vaihtoehdot yhteen niin, että ne käyttävät yhtä väliviivaa ( -).

Huomaa, että annamme vain hakemistojen nimet, emme käske diffkatsomaan tiettyjä tiedostoja:

diff -ruN working / latest /> slang.patch

Kurkistaminen korjaustiedoston sisälle

Katsotaanpa nopeasti korjaustiedosto. Katsomme lesssen sisältöä.

Tiedoston yläosassa on eroja slang.c: n kahden version välillä.

Selaamalla alaspäin korjaustiedoston läpi näemme, että se kuvaa sitten muutokset toiseen tiedostoon nimeltä structs.h. Tämä varmistaa, että korjaustiedosto sisältää varmasti eroja useiden tiedostojen eri versioiden välillä.

Katso ennen kuin hyppäät

Suuren tiedostokokoelman korjaaminen voi olla hieman ärsyttävää, joten aiomme käyttää --dry-run vaihtoehtoa tarkistaaksemme, että kaikki on hyvin, ennen kuin ryhdymme syöksymään ja sitoutumme muutoksiin.

--dry-runValinta ohjaa patchtehdä kaiken paitsi oikeastaan tiedostojen muokkaamisessa. patchsuorittaa kaikki lentoa edeltävät tarkastuksensa tiedostoihin ja jos ilmenee ongelmia, se ilmoittaa niistä. Kummassakin tapauksessa tiedostoja ei ole muokattu.

Jos ongelmista ei ilmoiteta, voimme toistaa komennon ilman --dry-runvaihtoehtoa ja korjata tiedostomme luottavaisin mielin.

-d(Hakemisto) mahdollisuus kertoa patchmihin hakemistoon työskennellä.

Huomaa, että emme ole käyttämällä -i(input) mahdollisuus kertoa patchjohon laastari tiedosto sisältää ohjeita diff. Sen sijaan olemme suuntaamalla laastari tiedosto patchkanssa <.

patch --dry-run -ruN -d working <slang.patch

Löysi koko hakemistosta diffkaksi korjattavaa tiedostoa. Näiden kahden tiedoston muutoksia koskevat ohjeet on tarkistettu patch , eikä ongelmista ole ilmoitettu.

Lentoa edeltävät tarkastukset ovat kunnossa; olemme valmiita lentoonlähtöön.

Hakemiston korjaaminen

Jos haluat käyttää korjaustiedostoja aidosti tiedostoissa, käytämme edellistä komentoa ilman --dry-runvaihtoehtoa.

korjaustiedosto -ruN -d toimi <slang.patch

Tällä kertaa kukin tulostusrivi ei ala "tarkistuksella", jokainen rivi alkaa "korjauksella".

Eikä ongelmia ilmoiteta. Voimme koota lähdekoodimme, ja käytämme ohjelmiston uusinta versiota.

Selvitä erot

Tämä on ylivoimaisesti helpoin ja turvallisin tapa käyttää patch. Kopioi kohdetiedostot kansioon ja korjaa kyseinen kansio. Kopioi ne takaisin, kun olet tyytyväinen siihen, että korjaustyö on valmis virheettömästi.