Cara membandingkan file menggunakan diff

Cara membandingkan file menggunakan diff

Utilitas yang berbeda adalah, dalam sebagian besar kasus, dipasang secara default di setiap distribusi Linux di luar sana. Program ini digunakan untuk menghitung dan menampilkan perbedaan antara konten dua file. Ini terutama digunakan saat bekerja dengan kode sumber dua membandingkan versi yang sama dari dua file dan menyoroti perbedaan di antara mereka. Pada artikel ini kita akan mempelajari berbagai mode di mana diff dapat bekerja dan cara membuat file diff yang nantinya dapat diterapkan sebagai tambalan dengan utilitas patch.

Dalam tutorial ini Anda akan belajar:

  • Cara menggunakan diff
  • Cara Menampilkan Output Diff pada Dua Kolom Saat Menggunakan Diff Dalam Mode Normal
  • Cara membaca output diff dalam mode normal, konteks dan terpadu
  • Cara membuat file diff dan menerapkannya sebagai tambalan dengan utilitas patch
Cara membandingkan file menggunakan diff

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Independen
Perangkat lunak diff, tambalan
Lainnya Tidak ada
Konvensi # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa

Utilitas yang berbeda

Itu diff Utilitas membandingkan file baris demi baris; Sintaksnya sangat sederhana:

$ Diff [opsi] File 

Yang harus kami lakukan adalah memohon program yang diikuti oleh jalur file yang ingin kami bandingkan. Sebelum kita dapat melihat beberapa contoh penggunaan, kita perlu belajar membaca output dari utilitas, dan apa arti simbol yang digunakan dalam output yang dihasilkan olehnya. Kita dapat meringkasnya di tabel berikut:

Simbol Arti
A "Penambahan" diperlukan agar konten kedua file tersebut cocok
C Tindakan "Ubah" diperlukan agar konten kedua file tersebut cocok
D Tindakan "menghapus" diperlukan agar konten kedua file tersebut cocok
< Menunjukkan baris dari file pertama
> Menunjukkan baris dari file kedua


Kita sekarang dapat melihat beberapa contoh penggunaan diff dasar. Misalkan kita memiliki dua file, dipanggil lotr0.txt Dan lotr1.txt. Konten file pertama adalah sebagai berikut:

Tiga cincin untuk raja-raja elf di bawah langit, tujuh untuk pengabdi kerdil di aula batu mereka, sembilan untuk manusia fana ditakdirkan untuk mati, satu untuk penguasa gelap di atas takhta gelapnya di tanah mordor di mana bayangan berbaring. Satu cincin untuk menguasai mereka semua, satu cincin untuk menemukan mereka, satu cincin untuk membawa mereka semua, dan dalam kegelapan mengikat mereka, di tanah Mordor di mana bayangan berada di ujung # 

Anda pasti mengenali puisi "cincin" dari buku "Lord of the Rings". Sekarang anggaplah file kedua, lotr1.txt, Berisi baris berikut sebagai gantinya:

# Puisi Cincin dalam Pidato Hitam Mordor Tiga Cincin untuk Raja Elven Di Bawah Langit, Tujuh Untuk Kurcaci Kurcaci di Aula Batu Mereka, Sembilan Untuk Orang-Orang Mana Ditak Yang Tak Mati, Satu Untuk Tuan Gelap Di Tahta Gelapnya Gelapnya Di tanah Mordor tempat bayang -bayang berada. Ash Nazg Durbatulûk, Ash Nazg Gimbatul, Ash Nazg Thrakatulûk, Agh Burzum-Ishi Krimpatul, di Tanah Mordor tempat bayang-bayangnya berada 

Konten kedua file tersebut sangat mirip, tetapi tidak identik. Mari Jalankan diff utilitas pada mereka, dan lihat output apa yang dihasilkannya:

$ diff lotr0.txt lotr1.txt 0a1> # puisi cincin dalam pidato hitam Mordor 6,7c7,8 < One Ring to rule them all, One Ring to find them,  Ash nazg durbatulûk, ash nazg gimbatul, > Ash Nazg Thrakatulûk, Agh Burzum-Ishi Krimpatul, 9d9 < # end 

Pada baris pertama output, kita bisa membaca 0a1; Apa artinya ini? Dalam hal ini kami diberi tahu bahwa untuk file pertama yang mencocokkan konten yang kedua, di awal (baris 0), baris baru harus "ditambahkan" (A), yang sesuai dengan baris pertama (1) dari file kedua. Apa baris ini? Yang dilaporkan setelah > Simbol pada baris kedua output:

> # Puisi Cincin dalam Pidato Hitam Mordor 

Ini masuk akal: garis tidak ada di file pertama, jadi harus ditambahkan untuk konten kedua file yang cocok.

Ayo lanjutkan. Kita bisa melihat notasi berikut 6,7c7,8: ini berarti garis itu 6 ke 7 di file pertama (6,7) harus diubah agar sesuai dengan garis 7 ke 8 (7,8) int file kedua. Bagaimana seharusnya mereka diubah? Baris dari file pertama, yang dapat kita bedakan karena didahului oleh < simbol, adalah:

< One Ring to rule them all, One Ring to find them, < One Ring to bring them all, and in the darkness bind them, 

Mereka harus diubah ke baris berikut dari file kedua, yang dapat terlihat karena didahului oleh > Simbol dalam output Diff:

> Ash Nazg Durbatulûk, Ash Nazg Gimbatul,> Ash Nazg Thrakatulûk, Agh Burzum-Ishi Krimpatul, 

Baris -garis dari file pertama, dan baris dari yang kedua, dalam output, dipisahkan oleh tiga tanda hubung: (---).

Akhirnya, kami memiliki 9d9 Notasi: Ini berarti bahwa agar konten kedua file tersebut cocok, baris 9 Di file pertama (# end) harus dihapus untuk mencocokkan baris 9 dari file kedua.

Menampilkan output berdampingan

Dalam contoh -contoh di atas kita dapat melihat bahwa output yang dihasilkan oleh utilitas diff terorganisir "secara vertikal". Jika kami lebih suka, kami dapat membuatnya sehingga diformat dan ditampilkan menggunakan dua kolom. Yang harus kita lakukan adalah menggunakan -y opsi (pendek
untuk --bersebelahan):

$ diff -y lotr0.txt lotr1.txt> # puisi cincin dalam pidato hitam Mordor tiga cincin untuk raja elf di bawah langit, tiga cincin untuk raja elf di bawah langit, tujuh untuk kerdil di aula batu mereka, tujuh untuk kurcaci -lords di aula batu mereka, sembilan untuk manusia fana ditakdirkan untuk mati, sembilan untuk orang -orang fana ditakdirkan untuk mati, satu untuk Tuhan yang gelap di atas takhta yang gelap untuk Tuhan yang gelap di atas takhta gelapnya di tanah Mordor di mana bayangan -bayang -bayang berbohong. Di tanah Mordor tempat bayang -bayang berada. Satu cincin untuk menguasai mereka semua, satu cincin untuk menemukannya, | Ash Nazg Durbatulûk, Ash Nazg Gimbatul, satu cincin untuk membawa semuanya, dan dalam kegelapan mengikat mereka, | Ash Nazg Thrakatulûk, Agh Burzum-ishi Krimpatul, di tanah Mordor di mana bayangan terletak di tanah Mordor di mana bayangannya berada di ujung # < 

Konten file pertama ditampilkan di kolom kiri, dan yang kedua, di sebelah kanan. Kita dapat dengan mudah melihat perbedaan di antara mereka: garis apa yang hanya ada di salah satu dari keduanya, dan garis apa yang berbeda. Itu -y Opsi hanya dapat digunakan saat bekerja dengan diff dalam mode "normal", yang merupakan default. Mode lain ada: Kami membicarakannya di bagian selanjutnya.

Mode normal, konteks dan terpadu

Secara default utilitas diff berfungsi normal mode, dan menghasilkan output yang mirip dengan yang kami lihat dalam contoh sebelumnya. Namun, ada dua mode lain yang dapat kita gunakan: konteks Dan bersatu mode. Mari lihat
pada mereka.

Mode konteks

Mode konteks dapat digunakan dengan memohon program dengan -C opsi, (pendek untuk --konteks). Dalam kasus kami itu akan menghasilkan output berikut:

$ diff -c lotr0.txt lotr1.txt *** lotr0.TXT 2021-03-13 16:10:25.248286081 +0100 --- lotr1.TXT 2021-03-13 15:30:54.060911632 +0100 *************** *** 1,9 **** Tiga cincin untuk raja elf di bawah langit, tujuh untuk kerdil-lord di aula batu mereka , Sembilan untuk orang fana ditakdirkan untuk mati, satu untuk Tuhan yang gelap di atas takhta gelapnya di tanah Mordor di mana bayang -bayang berbaring. ! Satu cincin untuk menguasai mereka semua, satu cincin untuk menemukannya, ! Satu cincin untuk membawa mereka semua, dan dalam kegelapan mengikat mereka, di tanah Mordor di mana bayangan berbaring- # end --- 1,9 ---- + # puisi cincin dalam pidato hitam mordor tiga cincin untuk Raja Elven di bawah langit, tujuh untuk Kurcaci-Lord di aula batu mereka, sembilan untuk orang-orang fana ditakdirkan untuk mati, satu untuk Tuan Gelap di Tahta Gelap di Tanah Mordor di mana bayang-bayang berbaring. ! Ash Nazg Durbatulûk, Ash Nazg Gimbatul, ! Ash Nazg Thrakatulûk, Agh Burzum-Ishi Krimpatul, di Tanah Mordor di mana bayangannya berada 


Mari kita lihat hasil ini. Pertama -tama kita dapat melihat bahwa kedua file tersebut dirujuk dengan menggunakan simbol yang berbeda: *** untuk yang pertama, dan --- untuk yang kedua.

Dua baris pertama memberikan informasi tentang kedua file tersebut. Kita bisa melihat:

  • Nama file
  • Waktu modifikasi file dengan TimeZone (+0100 dalam kasus ini)

Dua baris pertama dipisahkan dari sisa output dengan 15 tanda bintang (***************).

Apa yang kita lihat segera setelah pemisah, adalah notasi yang menentukan apa rentang baris file pertama yang dilaporkan dalam output, dalam kasus ini baris 1 hingga 9 (1,9). Setelah notasi ini, garis itu sendiri dilaporkan. Hal yang sama terjadi untuk file kedua. Kita dapat melihat bahwa garis -garis tertentu didahului oleh beberapa simbol; Mari kita lihat apa artinya:

Simbol Arti
! Baris yang diawali dengan simbol ini dalam file pertama perlu diubah ke baris yang didahului olehnya di file kedua, agar konten dari dua file cocok
- Baris yang didahului oleh simbol ini dalam file pertama, harus dihapus agar konten dari kedua file tersebut cocok
+ Baris -baris dalam file kedua yang didahului oleh simbol ini harus ditambahkan ke file pertama untuk konten kedua file yang cocok

Mode terpadu

Untuk menggunakan diff utilitas dalam mode "Unified", kita harus memohon dengan menggunakan -u opsi, yang merupakan bentuk pendek dari --bersatu. Begitulah cara output diff dalam mode terpadu akan terlihat dalam kasus ini:

$ diff -u lotr0.txt lotr1.txt --- lotr0.TXT 2021-03-13 16:10:25.248286081 +0100 +++ lotr1.TXT 2021-03-13 15:30:54.060911632 +0100 @@ -1,9 +1,9 @@ +# Puisi Cincin dalam Pidato Hitam Mordor Tiga Cincin Untuk King Elven Di Bawah Langit, Tujuh Untuk Kurcaci Kurcaci di Aula Batu mereka, Sembilan karena manusia fana ditakdirkan untuk mati, satu untuk Tuhan yang gelap di takhta gelapnya di tanah Mordor di mana bayang -bayang berbaring. -Satu cincin untuk menguasai mereka semua, satu cincin untuk menemukan mereka, -satu cincin untuk membawa mereka semua, dan dalam kegelapan mengikat mereka, +ash nazg durbatulûk, ash nazg gimbatul, +ash nazg thrakatulûk, agh burzum -ishi krimpatul, di dalam Land of Mordor di mana bayang -bayang berada -# end 

Dua baris pertama yang dihasilkan ketika diff dipanggil dengan -u opsi, sama dengan mode "konteks", dan menampilkan informasi tentang dua file. Satu -satunya perbedaan besar di sini adalah bahwa output tidak dipisahkan tergantung pada file yang dimilikinya: semua baris "disatukan".

Membuat file diff dan menerapkannya sebagai tambalan

Misalkan kami ingin menerapkan perubahan yang diperlukan pada konten file pertama yang kami gunakan dalam contoh sebelumnya, lotr0.txt, sehingga diperbarui agar sesuai dengan konten file kedua, lotr1.txt; Bagaimana kita akan melanjutkan? Untuk mencapai tujuan kami, kami dapat menggunakan tambalan utilitas dan menerapkan a file diff ke yang asli. A file diff Berisi output dari diff, jadi untuk membuat satu, yang harus kita lakukan adalah mengarahkan kembali output dari utilitas:

$ diff -u lotr0.txt lotr1.txt> lotr.tambalan 


Setelah kami memiliki file diff kami, kami dapat menerapkan perubahan yang diperlukan pada file asli menggunakan utilitas patch:

$ patch -b lotr0.txt lotr.tambalan 

Kami memohon tambalan menggunakan -B Opsi: Ini tidak wajib tetapi berguna karena dibuat sehingga cadangan file asli dibuat sebelum tambalan diterapkan (dalam hal ini akan dinamai lotr0.txt.Orig). Argumen kita
yang disediakan adalah:

  • Nama file asli tempat tambalan harus diterapkan
  • Nama file yang berisi tambalan.

Setelah tambalan diterapkan lotr0.txt file harus identik dengan lotr1.txt. Kita dapat memverifikasi dengan menggunakan diff lagi, yang kali ini tidak akan menghasilkan output:

$ diff lotr0.txt lotr1.txt 

Kesimpulan

Dalam tutorial ini kita belajar cara menggunakan diff untuk menghitung perbedaan antara dua file. Kami melihat mode apa di mana diff dapat digunakan dan apa arti simbol yang digunakan dalam output diff. Akhirnya kami melihat cara membuat file diff, dan cara menerapkannya sebagai tambalan menggunakan utilitas patch.

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Menguasai loop skrip bash
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Tutorial debugging GDB untuk pemula
  • Cara membangun kembali paket menggunakan sistem build arch linux
  • Loop bersarang dalam skrip bash
  • Cara memasang gambar iso di linux
  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux