Linux'ta Dosyaya Yama Nasıl Uygulanır (ve Yama Oluşturulur)

Linux patchkomutu, değişiklikleri bir dosya kümesinden başka bir dosya kümesine hızlı ve güvenli bir şekilde aktarmanıza olanak tanır. patchBasit yolu nasıl kullanacağınızı öğrenin .

Yama ve diff Komutları

Bilgisayarınızda bir metin dosyanız olduğunu hayal edin. Bu metin dosyasının değiştirilmiş bir sürümünü başka birinden alırsınız. Değiştirilen dosyadaki tüm değişiklikleri orijinal dosyanıza nasıl hızlı bir şekilde aktarırsınız? İşte burada patchve diffdevreye giriyor. patchve diffLinux'ta ve macOS gibi diğer Unix Benzeri işletim sistemlerinde bulunur.

diffKomutu bir dosyanın iki farklı versiyonunu inceler ve bunlar arasındaki farklılıkları listeler. Farklar, yama dosyası adı verilen bir dosyada saklanabilir.

patch Komutu bir yama dosyası okumak ve bir dizi talimat olarak içeriğini kullanabilirsiniz. Bu talimatları izleyerek, değiştirilen dosyadaki değişiklikler orijinal dosyaya kopyalanır.

Şimdi bu işlemin tüm metin dosyaları dizininde gerçekleştiğini hayal edin. Hepsi bir arada. Bu gücü patch.

Bazen değiştirilen dosyalar size gönderilmez. Tüm gönderdiğiniz yama dosyasıdır. Bir dosya gönderebilecekken veya kolay indirmek için bir dosya gönderebilecekken neden düzinelerce dosya gönderesiniz?

Dosyalarınızı gerçekten yamalamak için yama dosyasıyla ne yaparsınız? Neredeyse bir tekerleme olmasının yanı sıra, bu aynı zamanda iyi bir soru. Bu makalede size yol göstereceğiz.

patchKomut çoğunlukla yazılım kaynak kodu dosyaları ile çalışan insanlar tarafından kullanılır, fakat ne olursa olsun amaç, kaynak kodu veya olmasın metin dosyalarının herhangi kümesiyle aynı derecede iyi çalışır.

İLGİLİ: Linux Terminalinde İki Metin Dosyası Nasıl Karşılaştırılır

Örnek Senaryomuz

Bu senaryoda, diğer iki dizini içeren work adlı bir dizindeyiz. Birine çalışma, diğerine en son denir . Çalışma dizini bir dizi kaynak kodu dosyası içerir. En son dizin, bazıları değiştirilmiş olan bu kaynak kod dosyalarının en son sürümünü içerir.

Güvende olmak için, çalışma dizini metin dosyalarının güncel sürümünün bir kopyasıdır. Bunların tek kopyası bu değil.

Bir Dosyanın İki Versiyonu Arasındaki Farkları Bulmak

diffKomut iki dosya arasındaki farklılıkları bulur. Varsayılan eylemi, terminal penceresinde değiştirilen satırları listelemektir.

Bir dosya denir slang.c. Çalışma dizinindeki sürümü en son dizindeki sürümle karşılaştıracağız.

-u (Birleşik) seçeneği söyler diffayrıca öncesi ve değiştirilen bölümlerin her sonra gelen modifiye edilmemiş metin hatlarının bazı listelemek için. Bu satırlara bağlam çizgileri denir. patch Komutun, orijinal dosyada tam olarak nerede değişiklik yapılması gerektiğini bulmasına yardımcı olurlar  .

diffHangi dosyaların karşılaştırılacağını bilmesi için dosyaların adlarını veriyoruz . Önce orijinal dosya, ardından değiştirilen dosya listelenir. Bu, verdiğimiz komuttur diff:

diff -u çalışma / slang.c en son / slang.c

diffdosyalar arasındaki farkları gösteren bir çıktı listesi üretir. Dosyalar aynıysa, hiçbir çıktı listelenmezdi. Bu tür bir çıktıyı görmek diff, iki dosya sürümü arasında farklılıklar olduğunu ve orijinal dosyanın düzeltme eki gerektirdiğini doğrular.

Yama Filtresi Oluşturma

Bu farklılıkları bir yama dosyasında yakalamak için aşağıdaki komutu kullanın. Yukarıdakiyle aynı komuttur, çıktısı diffslang.patch adlı bir dosyaya yönlendirilir.

diff -u çalışma / slang.c en son / slang.c> slang.patch

Yama dosyasının adı keyfi. İstediğin herhangi bir şey diyebilirsin. Ona bir ".patch" uzantısı vermek iyi bir fikirdir; ancak, ne tür bir dosya olduğunu netleştirdiği gibi.

patchYama dosyası üzerinde işlem yapmak  ve çalışma / slang.c dosyasını değiştirmek için aşağıdaki komutu kullanın. -u(Birleşik) seçeneği sağlayan patch yama dosyası birleşik bağlam satırları içerdiğini biliyoruz. Başka bir deyişle, diff ile -u seçeneğini kullandık, bu yüzden -useçeneği ile kullanıyoruz patch.

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

Her şey yolunda giderse patch, dosyaya yama uyguladığınızı söyleyen tek bir çıktı satırı vardır .

Orijinal Dosyanın Yedeğini Alma

(Yedekle) seçeneğini patchkullanarak yamalı dosyaların yedek kopyasını değiştirilmeden önce oluşturmamız için talimat verebiliriz  -b. -i(Giriş) seçeneğini kullanımına yama dosyasının adını yama anlatır:

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

Dosya, çıktıda gözle görülür bir fark olmaksızın, daha önce olduğu gibi yamalanır. Ancak, çalışma klasörüne bakarsanız, slang.c.orig adlı dosyanın oluşturulduğunu göreceksiniz. Dosyaların tarih ve saat damgaları, slang.c.orig'in orijinal dosya olduğunu ve slang.c'nin patch.

Dizinlerle diff kullanma

diffİki dizindeki dosyalar arasındaki tüm farklılıkları içeren bir yama dosyası oluşturmak için kullanabiliriz . Daha sonra bu yama dosyasını patch, bu farklılıkların çalışma klasöründeki dosyalara tek bir komutla uygulanmasını sağlamak için kullanabiliriz.

Biz kullanacağız seçenekler diffvardır -udaha önce kullandık (birleşik bağlam) seçeneği, -rmarka için (yinelemeli) seçeneği diffherhangi bir alt dizinleri ve içine bakmak -N(yeni dosyası) seçeneği.

-NSeçenek söyler diff çalışma dizinde olmayan son dizinindeki dosyaları nasıl işleneceğini. En  son dizinde bulunan ancak çalışma dizininde eksik olan dosyaları oluşturmak diffiçin yama dosyasına talimatlar koymaya zorlar patch.

Seçenekleri tek bir tire ( -) kullanmaları için bir araya toplayabilirsiniz .

Yalnızca dizin adlarını sağladığımızı, diffbelirli dosyalara bakmamızı söylemediğimizi unutmayın :

diff -ruN çalışma / en son /> slang.patch

Yama Dosyasının İçine Göz Atmak

Yama dosyasına hızlıca bir göz atalım. lessİçeriğine bakmak için kullanacağız .

Dosyanın üst kısmı, slang.c'nin iki sürümü arasındaki farkları gösterir.

Yama dosyasında aşağı doğru ilerlediğimizde, daha sonra structs.h adlı başka bir dosyadaki değişiklikleri açıkladığını görüyoruz. Bu, yama dosyasının birden çok dosyanın farklı sürümleri arasındaki farkları kesinlikle içerdiğini doğrular.

Zıplamadan önce Bak

Geniş bir dosya koleksiyonunu yamalamak biraz sinir bozucu olabilir, bu nedenle --dry-run , dalmaya başlamadan ve değişiklikleri yapmaya kendimizi adamadan önce her şeyin yolunda olup olmadığını kontrol etme seçeneğini kullanacağız .

Bu --dry-runseçenek patch, dosyaları gerçekten değiştirmek dışında her şeyi yapmayı söyler . patchdosyalar üzerinde uçuş öncesi tüm kontrollerini yapar ve herhangi bir sorunla karşılaşırsa rapor eder. Her iki durumda da hiçbir dosya değiştirilmez.

Herhangi bir sorun bildirilmezse, komutu --dry-runseçenek olmadan tekrarlayabilir ve dosyalarımıza güvenle yama uygulayabiliriz .

-d(Dizin) seçeneği anlatmak patchçalışma hangi dizin.

Biz konum unutmayın değil kullanarak -ianlatmak için (giriş) seçeneğini patchtalimat içeren yama dosyası diff. Bunun yerine, içine yama dosyası yönlendiriyoruz patchile <.

patch --dry-run -ruN -d çalışma <slang.patch

Dizinin tamamında diffyama uygulanacak iki dosya bulundu. Bu iki dosyada yapılan değişikliklerle ilgili talimatlar tarafından kontrol edilmiş patch ve herhangi bir sorun bildirilmemiştir.

Uçuş öncesi kontroller tamam; kalkışa hazırız.

Bir Dizine Yama Yapmak

Yamaları dosyalara gerçekten uygulamak için --dry-runseçenek olmadan önceki komutu kullanıyoruz .

yama -ruN -d çalışma <slang.patch

Bu sefer her çıktı satırı "kontrol" ile başlamaz, her satır "yama" ile başlar.

Ve herhangi bir sorun bildirilmedi. Kaynak kodumuzu derleyebiliriz ve yazılımın en son sürümünü kullanacağız.

Farklarınızı Giderin

Bu, kullanmanın açık ara en kolay ve en güvenli yoludur patch. Hedef dosyalarınızı bir klasöre kopyalayın ve bu klasöre yama yapın. Yama işleminin hatasız olarak tamamlanmasından memnun olduğunuzda bunları geri kopyalayın.