Linux'ta Dosyaya Yama Nasıl Uygulanır (ve Yama Oluşturulur)
Linux patch
komutu, 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. patch
Basit 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 patch
ve diff
devreye giriyor. patch
ve diff
Linux'ta ve macOS gibi diğer Unix Benzeri işletim sistemlerinde bulunur.
diff
Komutu 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.
patch
Komut ç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
diff
Komut 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 diff
ayrı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 .
diff
Hangi 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
diff
dosyalar 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ı diff
slang.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.
patch
Yama 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 -u
seç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 patch
kullanarak 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 diff
vardır -u
daha önce kullandık (birleşik bağlam) seçeneği, -r
marka için (yinelemeli) seçeneği diff
herhangi bir alt dizinleri ve içine bakmak -N
(yeni dosyası) seçeneği.
-N
Seç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 diff
iç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ı, diff
belirli 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-run
seçenek patch
, dosyaları gerçekten değiştirmek dışında her şeyi yapmayı söyler . patch
dosyalar ü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-run
seç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 -i
anlatmak için (giriş) seçeneğini patch
talimat içeren yama dosyası diff
. Bunun yerine, içine yama dosyası yönlendiriyoruz patch
ile <
.
patch --dry-run -ruN -d çalışma <slang.patch
Dizinin tamamında diff
yama 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-run
seç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.