Perintah diff di linux digunakan untuk membandingkan isi dari dua file baris demi baris dan jika ditemukan perbedaan maka juga akan mencantumkan perbedaan beserta nomor barisnya. Perintah Diff juga dapat digunakan untuk membandingkan isi dari dua direktori.
Perintah Diff memainkan peran penting dalam skrip shell di mana kita ingin menjalankan perintah berdasarkan perbedaan dua file.
sintaks perintah diff
$ diff
Output dari perintah diff dapat dalam format berikut:
- Normal (bawaan)
- Konteks
- Bersatu
Simbol berbeda dari keluaran perintah diff:
- a -> ini menunjukkan bahwa sesuatu telah ditambahkan
- c -> ini menunjukkan bahwa beberapa teks telah diubah
- d -> ini menunjukkan beberapa teks telah dihapus
Secara default, perintah diff menampilkan output dalam format normal, artinya jika isi dari dua file identik maka tidak akan menghasilkan output apapun tetapi kita akan mendapatkan prompt.
Dalam posting ini, kita akan membahas perintah diff dengan contoh praktis.
1) Bandingkan dua file dengan perintah diff
Mari kita asumsikan kita memiliki dua file aachen.txt dan sydney.txt dan berikut adalah isi dari file-file tersebut,
[[email protected] ~]# cat aachen.txt Linux Rocks in the open source world, followings are the linux distributions: CentOS Red Hat Ubuntu Debian Linux Mint OpenSUSE Fedora [[email protected] ~]# cat sydney.txt Linux Rocks in the open source world, followings are the linux distributions: CentOS Red Hat Ubuntu Debian Linux Mint OpenSUSE Fedora [[email protected] ~]#
Mari kita bandingkan isi dari file-file ini menggunakan perintah diff,
[[email protected] ~]# diff aachen.txt sydney.txt [[email protected] ~]#
Output di atas menegaskan bahwa kedua file itu identik. Mari kita buat beberapa perubahan di aachen.txt, tulis ulang open source sebagai “open-source”.
Sekarang jalankan kembali perintah diff,
[[email protected] ~]# diff aachen.txt sydney.txt
Keluaran,
Pada keluaran, 1c1 menunjukkan bahwa baris pertama dari file pertama perlu diubah untuk membuat kedua file identik.
Mari kita putar kembali perubahan di atas dan tambahkan baris baru “Arch Linux ” di sydeny.txt di akhir file dan jalankan kembali perintah diff,
Output dari perintah diff “7a8 ” menunjukkan bahwa setelah baris ke-7 di file pertama, kita perlu menambahkan baris lain untuk mencocokkan baris ke-8 dari file kedua.
Mari kita hapus “Arch Linux” dan “Fedora” dari sydney.txt lalu coba bandingkan file-file ini,
Output dari perintah diff “7d6 ” menunjukkan bahwa kita perlu menghapus baris ke-7 pada file pertama untuk menyinkronkan dengan file kedua pada baris nomor 6.
2) Keluaran perintah Diff dalam format konteks (-c)
Gunakan opsi '-c' dalam perintah diff untuk menghasilkan output perintah diff dalam format konteks. Contoh ditunjukkan di bawah ini,
[[email protected] ~]# diff -c aachen.txt sydney.txt
Dua baris pertama mewakili nama file beserta tanggal dan waktu modifikasinya dan tiga simbol asterisk (“*** “) menunjukkan file pertama dan tiga simbol tanda hubung (“— “) menunjukkan file kedua.
Hanya tanda hubung tunggal "-" yang menunjukkan bahwa baris perlu dihapus dan simbol plus "+" menunjukkan bahwa baris perlu ditambahkan dalam file. Jika ada baris yang tidak memerlukan perubahan apa pun maka diawali dengan dua spasi.
3) Keluaran perintah Diff dalam format terpadu (-u)
Gunakan opsi '-u' pada perintah diff jika Anda ingin menghasilkan output dalam format terpadu, contoh diilustrasikan di bawah ini,
[[email protected] ~]# diff -u aachen.txt sydney.txt
Output di atas agak mirip dengan format konteks tetapi format terpadu menampilkan output secara ringkas, di sini dua baris pertama menunjukkan nama file beserta tanggal dan waktu modifikasinya..
Tiga tanda hubung (“—“) mewakili file pertama dan tiga simbol plus (“+++”) mewakili file kedua, setelah dua tanda @ “-1,7” menunjukkan baris dari file pertama dan “+1,7” mewakili baris berkisar dari file ke-2. Plus, simbol (+Core OS) menunjukkan bahwa baris ini perlu ditambahkan di file pertama dan simbol tanda hubung (-Fedora) menunjukkan bahwa baris ini perlu dihapus dari file pertama agar identik dengan file kedua.
4) Abaikan peka huruf besar/kecil saat membandingkan file (-i)
Secara default, perintah diff peka huruf besar/kecil dan jika Anda ingin mengabaikan peka huruf besar/kecil dalam perintah diff maka gunakan opsi ‘-i‘, contoh ditunjukkan di bawah ini,
Mari kita asumsikan kita memiliki konten dua file berikut
Jalankan perintah diff tanpa opsi apa pun,
[[email protected] ~]# diff aachen.txt sydney.txt 5,6c5,6 < Ubuntu debian < Linux mint --- > Ubuntu Debian > Linux Mint [[email protected] ~]#
Sekarang jalankan perintah diff dengan opsi -i,
[[email protected] ~]# diff -i aachen.txt sydney.txt [[email protected] ~]#
Seperti yang dapat kita lihat pada output di atas, perintah diff telah mengabaikan fitur case sensitive ketika kita menggunakan opsi -i.
5) File laporan identik dengan perintah diff (-s)
Ada beberapa situasi di mana kita membandingkan file menggunakan perintah diff dan jika kontennya identik maka kita ingin menampilkan pesan bahwa file tersebut identik, ini dapat dilakukan dengan melewatkan opsi '-s' pada perintah diff,
[[email protected] ~]# cat filex.txt DevOPs Engineer Cloud Stack Engineer Linux System Admin Monitoring Team [[email protected] ~]# cat filey.txt DevOPs Engineer Cloud Stack Engineer Linux System Admin Monitoring Team [[email protected] ~]# diff -s filex.txt filey.txt Files filex.txt and filey.txt are identical [[email protected] ~]#
6) Abaikan spasi saat membandingkan file dengan diff (-b)
Mari kita asumsikan kita memiliki dua file filea.txt dan fileb.txt di mana spasi putih tidak konsisten, jadi jika kita menggunakan perintah diff tanpa opsi apa pun, itu akan menunjukkan perbedaan spasi putih meskipun isinya identik, jadi dalam kasus seperti itu kita dapat mengabaikan spasi putih yang tidak konsisten dalam perintah diff dengan menggunakan opsi -b , contoh ditunjukkan di bawah ini,
[[email protected] ~]# cat filea.txt Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. [[email protected] ~]# cat fileb.txt Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. [[email protected] ~]#
Bandingkan file tanpa opsi apa pun dengan perintah diff,
[[email protected] ~]# diff filea.txt fileb.txt 1c1 < Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. --- > Hi, LinuxTechi is a Linux based blog. It contains linux HowTo's and Tips & Tricks. [[email protected] ~]#
Sekarang gunakan opsi -b pada perintah diff di atas
[[email protected] ~]# diff -b filea.txt fileb.txt [[email protected] ~]#
Jika Anda ingin mengabaikan semua spasi putih selama perbandingan menggunakan perintah diff, gunakan “-w ” pilihan
[[email protected] ~]# diff -w filea.txt fileb.txt
7) Abaikan Spasi putih di akhir baris selama perbandingan (-Z)
Jika Anda ingin Mengabaikan ruang percobaan di akhir baris selama perbandingan, gunakan “-Z ” pilihan
[[email protected] ~]# diff -Z filea.txt fileb.txt
Gunakan “-B ” dalam perintah diff untuk mengabaikan semua baris kosong selama perbandingan,
[[email protected] ~]# diff -B filea.txt fileb.txt
8) Bandingkan dua direktori
Mari kita asumsikan kita memiliki dua direktori dengan nama lab01 dan lab02, ini memiliki file dan sub-direktori berikut
[[email protected] ~]# ls -l lab01/ total 0 -rw-r--r--. 1 root root 0 Feb 1 17:49 filea.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 fileb.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filec.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filed.txt drwxr-xr-x. 2 root root 23 Feb 1 17:50 sitea [[email protected] ~]# ls -l lab02/ total 0 -rw-r--r--. 1 root root 0 Feb 1 17:49 filea.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 fileb.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filec.txt -rw-r--r--. 1 root root 0 Feb 1 17:49 filed.txt drwxr-xr-x. 2 root root 23 Feb 1 17:50 sitea [[email protected] ~]#
Mari kita bandingkan kedua direktori ini menggunakan perintah diff di bawah ini,
[[email protected] ~]# diff -qr lab01/ lab02/ [[email protected] ~]#
Dimana:
- -q -> itu menginstruksikan perintah diff untuk melaporkan hanya ketika file berbeda
- -r -> itu menginstruksikan perintah diff untuk mencari perbedaan dalam sub-direktori secara rekursif
Saat kami mendapatkan output kosong, itu berarti kedua direktori itu identik. Mari kita hapus filed.txt dari lab02 lalu coba bandingkan,
[[email protected] ~]# cd lab02/ [[email protected] lab02]# rm -f filed.txt [[email protected] lab02]# cd [[email protected] ~]# diff -qr lab01/ lab02/ Only in lab01/: filed.txt [[email protected] ~]#
Output di atas mengatakan bahwa filed.txt hanya ada di direktori lab01
9) Mengarahkan output perintah diff ke file
Output perintah Diff dapat diarahkan ke file dengan menggunakan simbol ">". Ini menjadi sangat berguna dalam skrip shell di mana kita ingin melakukan tugas hanya jika output dari perintah diff mengandung perbedaan.
[[email protected] ~]# diff aachen.txt sydney.txt 9,10d8 < SLES < Puppy Linux [[email protected] ~]# diff aachen.txt sydney.txt > diff.txt [[email protected] ~]# cat diff.txt 9,10d8 < SLES < Puppy Linux [[email protected] ~]#
Contoh tambahan
Bandingkan dua file di terminal berdampingan
Ketika kita menggunakan opsi '-y' saat membandingkan dua file menggunakan perintah diff maka itu menunjukkan kedua file di terminal secara berdampingan.
[[email protected] ~]# diff -y /etc/fstab /tmp/fstab
keluaran
Output di atas dengan jelas menunjukkan perbedaan dua file.
Itu saja dari artikel ini, saya harap sekarang Anda memiliki pemahaman yang lebih baik tentang perintah diff dengan melalui contoh di atas. Jangan ragu untuk memberikan masukan dan komentar Anda.
Baca Juga :16 Contoh Perintah Echo di Linux
Baca Juga : 8 Contoh Perintah Kepala di Linux