Logo CHIP.co.id

Posts Tagged ‘PRAKTEK – Diff dan Patch’

PRAKTEK – Diff dan Patch

by CHIP Team | March 20th, 2007 | Categories: Comparison Test

Mencari perbedaan antara dua konfigurasi kernel.
Misalnya, Anda sudah menyimpan dua file setting konfigurasi kernel, masing-masing dinamakan conf1 dan conf2. Karena sudah lama men-setting kernel, Anda lupa perubahan apa saja yang dilakukan saat meng-update setting yang tersimpan pada conf1 menjadi conf2.

Daripada harus melihat manualnya satu per satu, ada cara yang lebih efisien seperti berikut ini.

Pertama, buang semua baris yang berawalan karakter “#”. Tanda “#” menyatakan bahwa opsi kernel yang bersangkutan tidak dipakai:

$ grep -v ^# conf1 > conf1-clean
$ grep -v ^# conf2 > conf2-clean

Urutkan isi file conf1-clean dan conf2-clean berdasar abjad sekaligus buang baris kosong yang berlebihan seperti berikut ini.

$ sort conf1-clean | cat -s > conf1.sorted
$ sort conf2-clean | cat -s > conf2.sorted

Sekarang, lakukan perbandingan antara dua file hasil filter kita dengan perintah:

$ diff -u conf1.sorted conf2.sorted | less

Baris berawalan “-” berarti opsi kernel tersebut dihilangkan pada file conf2. Sebaliknya jika berawalan tanda “+”, berarti opsi kernel ditambahkan pada file conf2.

Patching kernel.
Mula-mula, dapatkan dahulu informasi isi patch kernel, misalnya dengan perintah head berikut ini.

$ head patch-2.6.11
— a/CREDITS  2005-03-01 23:39:08 -08:00
+++  b/CREDITS  2005-03-01 23:39:08 -08:00

Jadi, dapat disimpulkan bahwa patch ini dibuat dengan melakukan diff antar dua direktori ( “a” dan “b”) secara recursive. Masalahnya sekarang, bagaimana jika patch ini diterapkan pada direktori yang namanya berbeda? Solusinya mudah, gunakan feature strip untuk membuang sebagian nama direktori. Argumen opsi -p adalah banyaknya jumlah slash (”/”) yang akan dibuang. Sebagai contoh, jika saat ini Anda sudah berada pada direktori tempat Anda mengekstrak kernel, maka Anda harus membuang string “b/”. Jumlah slash yang dibuang berarti hanya satu. Perlu diperhatkan agar selalu memakai patch yang sesuai dengan versi kernel yang Anda miliki.

Berbekal pengetahuan ini, tahapan untuk melakukan patching kernel adalah berikut ini.

Pindah ke direktori tempat Anda mengekstrak source kernel (misal diasumsikan di /usr/src/linux-2.6.10)

$ cd /usr/src/linux-2.6.10

Lakukan patching dengan menambahkan opsi -p. Di sini, sekaligus ditunjukkan cara lain menggunakan utility patch.

$ patch -p1 < patch-2.6.11



Comments Off | Permalink

PRAKTEK – Diff dan Patch

by CHIP Team | March 20th, 2007 | Categories: Comparison Test

B Menggunakan Patch

Setelah mengetahui perubahan apa saja yang terjadi antara dua file atau file-file dalam dua direktori, Anda dapat menyimpan output diff dan menerapkan perubahannya pada suatu file.

Agar lebih mudah dipahami, perhatikan kembali contoh sebelumnya. Gunakan perintah diff untuk file satu.txt dan dua.txt lalu simpan hasilnya menjadi dalam suatu file. Perintahnya seperti di bawah ini.

$ diff -u satu.txt dua.txt > test.patch

Nama test.patch hanyalah contoh, Anda bebas memilih nama lainnya. Untuk selanjutnya, file hasil perintah diff akan disebut file patch. Sedangkan operasi modifikasi file berdasar file patch akan disebut patching.

Sekarang Anda ingin agar file satu.txt di-patch agar sama seperti dua.txt. Selain dengan cara manual (mengetik sendiri dengan teks editor), tool patch bisa dipakai membantu Anda, seperti contoh berikut ini.

$ patch -b satu.txt -i ./test.patch

Berikut ini penjelasan detailnya.

-b : memerintahkan patch untuk membuat file backup. File backup-nya bernama sama dengan file yang akan dimodifikasi, tetapi diberi tambahan extension .rej.

satu.txt adalah file yang akan di-patch. Perlu diperhatikan, satu.txt bukanlah argumen untuk opsi -b. Apabila Anda membuang parameter ini, maka program patch akan melihat ke dalam file patch untuk mengetahui nama file yang harus dimodifikasi.

-i : Opsi ini memberitahu program patch, file patch mana yang akan dipakai.
Salah satu contoh praktis manfaat utility patch seperti teknik patching kernel   akan dijelaskan pada bagian terakhir penerapan diff dan patch.

C Penerapan diff dan patch

Setelah memahami cara kerja diff dan patch, berikut ini adalah beberapa penerapannya pada pekerjaan sehari-hari.

62--
Lebih mudah dengan KWrite: Apabila Anda ‘lelah’ melihat file patch, gunakan editor seperti KWrite agar file patch dapat di-highlight pada baris yang mengalami penambahan dan pengurangan.
 
Membandingkan isi direktori
Anda tentu masih ingat bahwa diff akan melaporkan adanya file atau subdirektori yang hanya ditemukan di salah satu direktori pembanding. Fakta ini bisa Anda gunakan untuk membandingan isi direktori. Jadi, bila Anda ingin membandingkan isi /direktori1 dan /direktori2, cukup ketik:

$ diff /direktori1 /direktori2 | grep ^Only

Grep memudahkan kita berkonsentrasi pada daftar perbedaan filenya saja (perhatikan bahwa status perbedaan file selalu dimulai dengan kata “Only”).


Comments Off | Permalink

PRAKTEK – Diff dan Patch

by CHIP Team | March 20th, 2007 | Categories: Comparison Test

Hal yang tidak jauh berbeda juga dijumpai pada spasi. Misalnya, Anda memiliki file bernama empat.txt dan lima.txt. Masing-masing file dapat dibuat dengan perintah berikut ini.

$ echo “ada aja” > ./empat.txt
$ echo “ada    aja” > ./lima.txt

Untuk melaporkan perbedaan di antara keduanya, gunakan perintah berikut ini.

$ diff -B -u empat.txt lima.txt
-ada aja
+ada    aja

Opsi -b dapat ditambahkan pada perintah diff untuk mengabaikan perbedaan jumlah spasi yang ada dalam file. Perintahnya dapat dibuat seperti berikut ini.

$ diff -b -u empat.txt lima.txt

Membandingkan isi direktori
Diff juga dapat digunakan untuk membandingkan isi direktori. Perlu diketahui, secara default, perbandingan dengan diff dilakukan antara file yang bernama sama dan dalam kedalaman direktori yang sama.

Untuk lebih memperjelas aturan ini, buatlah dua buah direktori baru bernama ‘part1’ dan ‘part2’. Anda dapat membuatnya di dalam direktori mana pun, misalnya ‘/tmp’. Selanjutnya, copy file satu.txt dan dua.txt ke direktori-direktori  tersebut. Urutan perintahnya adalah:

$ mkdir /tmp/part1 ; mkdir /tmp/part2
$ cp -a satu.txt /tmp/part1/
$ cp -a dua.txt /tmp/part2/

Untuk membandingkan isi direktori part1 dan part2, ketik perintah berikut ini.

$ diff /tmp/part1/ /tmp/part2/
Only in /tmp/part2/: dua.txt
Only in /tmp/part1/: satu.txt

Karena nama file-nya berbeda, diff melaporkan bahwa tiap file hanya ditemukan di salah satu direktori sehingga perbandingan isi file tidak dilakukan. Sekarang, cobalah mengganti nama file dua.txt di dalam direktori part2 menjadi satu.txt dan ulangi perintah diff di atas. Amati outputnya!

Apabila di dalam direktori yang Anda bandingkan masih ada subdirektori lainnya (bisa 2 atau lebih), Anda tentunya ingin agar diff dapat memeriksanya secara recursive. Opsi -r dapat dipakai untuk menginstruksikan diff agar bekerja secara rekursif. Untuk itu, ketik perintah berikut ini.

$  diff -r /tmp/part1/ /tmp/part2/

Agar perbandingan berjalan lancar, pastikan semua subdirektori memiliki nama dan kedalaman direktori yang sama. Selanjutnya, perhatikan struktur direktori gambar berikut ini (Ket: akhiran “/” berarti nama direktori):

/tmp ——– part1/— satu.txt
       |                |
       |                +— boo/
       +——- part2/—  satu.txt
                |
                +— geez/

Lakukan perbandingan isi direktori dengan perintah berikut ini.

$ diff -r -u /tmp/part1/ /tmp/part2/
Only in /tmp/part2/: boo
Only in /tmp/part1/: geez

Anda dapat mengubah asumsi bahwa nama file yang dibandingkan harus selalu sama. Dengan opsi -N, jika file dengan nama yang sama tidak ditemukan pada salah satu direktori, maka direktori tersebut akan dianggap memiliki file dengan nama yang sama hanya isinya kosong. Jelasnya, simak ilustrasi di bawah ini.

/tmp ————– part1/———- satu.txt
    |           
    +——- part2/———– satu.txt
           |+——— dua.txt


Comments Off | Permalink

PRAKTEK – Diff dan Patch

by CHIP Team | March 20th, 2007 | Categories: Comparison Test

Membandingkan file berdasarkan perbedaan huruf besar dan kecil
Dalam membandingkan file teks, kadang perbedaan antara huruf kapital (besar) dan kecil juga diperhatikan. Perintah diff secara default juga memeriksa perbedaan tersebut. Untuk membuktikannya, buatlah sebuah file teks yang isinya sama seperti file satu.txt tetapi dengan menggunakan huruf besar.  Tanpa harus memakai editor teks, jalankan perintah seperi berikut ini.

$ cat satu.txt | tr a-z A-Z > ./tiga.txt

Perintah di atas otomatis menyalin isi file satu.txt ke dalam file tiga.txt dengan terlebih dahulu menjadikan huruf di dalamnya menjadi huruf besar.  Cobalah membandingkan isi file satu.txt dengan tiga.txt, seperti di bawah ini.

$ diff -u satu.txt tiga.txt
-satu
-dua
-tiga
-empat
-lima
+SATU
+DUA
+TIGA
+EMPAT
+LIMA

Terlihat, diff melaporkan perubahan pada setiap barisnya seperti ditunjukkan pada 5 baris pertama yang dihapus (tanda -) dan 5 baris baru yang disisipkan (tanda +).

Apabila Anda ingin diff mengabaikan perbedaan huruf besar/kecil, gunakan opsi  -i seperti berikut ini.

$ diff -i -u satu.txt tiga.txt

Contoh perintah di atas tidak akan menampilkan output karena diff melihat isi file-nya sama persis.

Membandingkan file berdasarkan perbedaan jumlah baris dan spasi
Perintah diff dapat juga dipakai untuk melihat jumlah baris kosong atau spasi dalam dua file teks. Misalnya, membandingkan file teks yang isinya:

satu
dua

dengan file teks yang isinya:

satu

dua

Untuk mulai membandingkannya, buat sebuah file lain (tiga.txt) yang isinya mirip file satu.txt, tetapi di antara setiap barisnya disisipkan satu baris kosong. Tanpa harus memakai editor teks, gunakan perintah di bawah ini untuk membuatnya.

$ cat satu.txt | perl -e ‘while (<>) {$_ =~
 s/\n/\n\n/;print $_}’ > ./tiga.txt

61--

Program GUI untuk membandingkan file: Butuh visualisasi modifikasi file? Gunakan saja Kompare. Load file patch yang sudah dibuat atau perintahkan Kompare untuk menjalankan diff.

Lihat perbedaannya dengan perintah diff:

$ diff -u satu.txt tiga.txt
 satu
+
 dua
+
 tiga
+
 empat
+
 lima
+

Walaupun bagian sebelah kanan dari tanda “+” tidak tampak adanya karakter, sebenarnya terdapat baris kosong. Isi file-nya secara ‘umum’ sebenarnya sama. Pertanyaannya hanyalah apakah Anda memperhitungkan perbedaan baris kosongnya? Jika tidak, gunakan opsi -B seperti di bawah ini.

$ diff -B -u satu.txt tiga.txt


Comments Off | Permalink

PRAKTEK – Diff dan Patch

by CHIP Team | March 20th, 2007 | Categories: Comparison Test

A Menggunakan diff

Untuk lebih memahami cara kerja diff, simak contoh berikut ini.  Misalkan Anda mempunyai sebuah file teks bernama satu.txt yang isinya:

satu
dua
tiga
empat
lima

Adapun file teks yang kedua bernama dua.txt berisi:

satu
dua
tiga
tiga setengah
empat
lima

Gunakan diff untuk mencari perbedaan di antara keduanya dengan perintah berikut ini.

$ diff satu.txt dua.txt
3a4
> tiga setengah

Berikut ini penjelasan dari output-nya.
3a4 : Ada penambahan baris di bawah baris ke-3. Baris baru ini terdapat pada baris ke-4 dari file dua.txt.

tanda “>” berarti frase “tiga setengah” ini disisipkan ke dalam file dua.txt.

Sekarang bandingkan sebaliknya (file ke-2 dengan file ke-1) seperti berikut ini.

$ diff dua.txt satu.txt
4d3
< tiga setengah

Penjelasannya adalah:
4d3 : Baris ke-4 file dua.txt dihapus.
Tanda “<” mempertegas bahwa frase “tiga setengah” dihapus dari file dua.txt

Kesimpulan awalnya, output perintah diff bergantung pada file yang menjadi parameter pertama dan kedua. Perbandingan apa yang Anda butuhkan, sepenuhnya tergantung pada perintah yang Anda berikan.

 

60--


Comments Off | Permalink

PRAKTEK – Diff dan Patch

by CHIP Team | March 20th, 2007 | Categories: Comparison Test

59---aufm-linux

Secara psikologis, Anda pasti setuju bahwa kemampuan otak manusia ada batasnya. Memeriksa dua atau tiga baris, mungkin masih bisa dikerjakan tanpa  ada kesalahan atau masalah. Akan tetapi, bagaimana bila jumlah barisnya 1000? Mungkin banyak yang tidak sanggup. Apalagi, jika ada tenggat waktu. Misalnya, 1000 baris dalam waktu 1 menit! Hampir dapat dipastikan bahwa itu merupakan hal yang mustahil dilakukan orang.

Masalahnya, mungkin saja ada orang atau bahkan Anda sendiri yang harus mengerjakan berbagai tugas tersebut dalam rutinitas kerjanya. Untungnya, utility patch dan diff bisa dipakai untuk lebih mempermudah tugas tersebut. Sebelum menggunakan kedua utility ini, pastikan dahulu paket diffutils dan patch sudah di-install. Biasanya, keduanya ter-install secara otomatis saat Anda meng-install distribusi Linux. Apabila Anda mengetik perintah dan mendapatkan pesan kesalahan berikut ini.

$ diff -v
bash: diff: command not found

Dapat dipastikan program diff belum di-install pada sistem.

Anda dapat meng-install-nya dengan bantuan tool packet management bawaan distro Anda. Misalnya, untuk distro berbasis RPM, Anda ketik perintah berikut ini.

# rpm -Uvh patch-2.5.4-16.i386.rpm
# rpm -Uvh diffutils-2.8.1-6.i386.rpm

Seperti biasa, prompt bertanda ”$” menunjukkan perintah dilakukan sebagai user biasa dan prompt “#” berarti perintah dilakukan sebagai root. Berbagai langkah dan perintah dalam artikel ini dapat pula diterapkan pada distro Linux lainnya.

Pembahasan akan dimulai dengan diff untuk mencari perbedaan teks. Berikutnya baru dijelaskan mengenai perintah lainnya yaitu patch.


Comments Off | Permalink