Perintah diff: membandingkan file, format patch diff -u, dan opsi
Perintah diff adalah perintah Linux yang membandingkan dua file baris demi baris dan hanya menampilkan baris yang berbeda. Saat file lama dan file baru yang meniru konfigurasi server web dibandingkan dengan diff, tiga tempat yang berubah terlihat pada tiga baris 2,3c2,3, 5d4, dan 6a6, dan pada file patch yang disimpan dengan opsi -u perubahan yang sama tersusun dengan tanda minus dan plus.
Nama dan isi file pada output di bawah serta folder kerja /root/work adalah nilai contoh. Semua file yang dibandingkan adalah file kecil yang dibuat untuk pengujian.
1️⃣ Cara dasar memakai perintah diff dan membaca output
Bentuk dasar perintahnya adalah diff, opsi, file pertama, lalu file kedua. Perintah ini menampilkan, beserta nomor baris, baris mana yang harus diubah, dihapus, atau ditambahkan agar file pertama sama dengan file kedua.
Dua file yang dipakai untuk perbandingan adalah file enam baris yang meniru konfigurasi server web.
cd /root/workcat config-old.conf# app config
listen 80
server_name example.com
root /var/www/html
gzip off
log_level warncat config-new.conf# app config
listen 443
server_name example.com www.example.com
root /var/www/html
log_level warn
cache onKedua file dibandingkan tanpa opsi.
diff config-old.conf config-new.conf2,3c2,3
< listen 80
< server_name example.com
---
> listen 443
> server_name example.com www.example.com
5d4
< gzip off
6a6
> cache onecho $?1Pada output, baris posisi dan baris isi muncul bergantian. Huruf di tengah baris posisi adalah c untuk ubah, d untuk hapus, dan a untuk tambah; angka di kiri huruf adalah nomor baris file pertama dan di kanan nomor baris file kedua. Jika ada perbedaan, kode keluarnya 1.
| Output | Arti |
|---|---|
| 2,3c2,3 | Mengubah baris 2–3 file pertama menjadi baris 2–3 file kedua (change) |
| 5d4 | Menghapus baris 5 file pertama (delete). Setelah dihapus, posisinya cocok dengan setelah baris 4 file kedua |
| 6a6 | Menambahkan baris 6 file kedua setelah baris 6 file pertama (add) |
| < baris | Baris yang ada di file pertama |
| > baris | Baris yang ada di file kedua |
| --- | Batas antara sisi file pertama dan sisi file kedua pada baris yang diubah (c) |
Jika file dengan isi yang sama dibandingkan, tidak ada yang ditampilkan dan perintah selesai dengan kode keluar 0.
diff config-old.conf config-copy.confecho $?0Jika diberi file yang tidak ada, muncul pesan galat dan kode keluarnya 2.
diff config-old.conf nosuch.confdiff: nosuch.conf: No such file or directoryecho $?2Dalam skrip, tiga nilai ini dipakai untuk membedakan sama, berbeda, dan galat.
2️⃣ Format terpadu diff -u dan file patch
Output bawaan hanya memuat baris yang berubah, sehingga pada file konfigurasi dengan ratusan baris sulit menemukan baris itu berada di dekat pengaturan yang mana. Dengan -u, output memakai format terpadu (unified) yang menggabungkan hingga tiga baris sebelum dan sesudah baris yang berubah.
diff -u config-old.conf config-new.conf--- config-old.conf 2026-10-29 02:24:50.840228932 +0000
+++ config-new.conf 2026-10-29 02:24:50.840228932 +0000
@@ -1,6 +1,6 @@
# app config
-listen 80
-server_name example.com
+listen 443
+server_name example.com www.example.com
root /var/www/html
-gzip off
log_level warn
+cache onDua baris kepala (---, +++) memuat nama dan waktu modifikasi kedua file, dan baris @@ -1,6 +1,6 @@ adalah blok (hunk) yang menggabungkan 6 baris mulai baris 1 file pertama dengan 6 baris mulai baris 1 file kedua. Pada baris di bawahnya, awalan - berarti baris yang dihapus dari file pertama, + baris yang ditambahkan ke file kedua, dan spasi baris yang sama di kedua file.
-c adalah format konteks (context). Blok file pertama dan blok file kedua ditampilkan terpisah, dengan tanda seru di depan baris yang berubah, tanda minus pada baris yang dihapus, dan tanda plus pada baris yang ditambahkan.
diff -c config-old.conf config-new.conf*** config-old.conf Thu Oct 29 02:24:50 2026
--- config-new.conf Thu Oct 29 02:24:50 2026
***************
*** 1,6 ****
# app config
! listen 80
! server_name example.com
root /var/www/html
- gzip off
log_level warn
--- 1,6 ----
# app config
! listen 443
! server_name example.com www.example.com
root /var/www/html
log_level warn
+ cache onUntuk perubahan yang sama, -c menjadi lebih panjang daripada -u karena baris yang tidak berubah muncul satu kali di tiap blok.
Jika output -u disimpan ke file, file itu langsung menjadi file patch. Walaupun output dikirim ke file, kode keluar diff tetap 1.
diff -u config-old.conf config-new.conf > /root/work/config.patchecho $?1cat /root/work/config.patch--- config-old.conf 2026-10-29 02:24:50.840228932 +0000
+++ config-new.conf 2026-10-29 02:24:50.840228932 +0000
@@ -1,6 +1,6 @@
# app config
-listen 80
-server_name example.com
+listen 443
+server_name example.com www.example.com
root /var/www/html
-gzip off
log_level warn
+cache onIsi file yang disimpan sama dengan hasil -u yang ditampilkan di layar. Jika file ini diberikan ke perintah patch, file pertama bisa diubah menjadi berisi sama dengan file kedua.
3️⃣ Opsi diff serta mengabaikan spasi dan huruf besar-kecil
Saat pengaturan disalin dengan tangan, muncul baris yang isinya sama tetapi berbeda hanya pada huruf besar-kecil atau spasi. Pada pasangan file contoh kedua, huruf besar L di baris pertama diubah menjadi huruf kecil, satu spasi di baris kedua diubah menjadi dua, dan satu baris kosong ditambahkan.
cat case-a.txtListen 80
ServerName example.com
DocumentRoot /var/www/htmlcat case-b.txtlisten 80
ServerName example.com
DocumentRoot /var/www/htmldiff case-a.txt case-b.txt1,2c1,3
< Listen 80
< ServerName example.com
---
> listen 80
> ServerName example.com
>Jika dibandingkan tanpa opsi, baris 1–2 yang artinya sama pun muncul sebagai baris yang berubah. Jika huruf besar-kecil diabaikan dengan -i, baris Listen hilang dan hanya baris 2 file pertama yang tersisa.
diff -i case-a.txt case-b.txt2c2,3
< ServerName example.com
---
> ServerName example.com
>Jika -w ditambahkan, semua spasi di dalam baris diabaikan sehingga baris ServerName juga menjadi baris yang sama, dan hanya satu baris kosong yang ditambahkan di baris 3 yang tersisa. Memakai -b, yang hanya mengabaikan jumlah spasi, sebagai pengganti -w memberi hasil yang sama pada file ini.
diff -i -w case-a.txt case-b.txt2a3
>Jika -B juga ditambahkan, perbedaan baris kosong ikut diabaikan, sehingga perintah selesai tanpa output dengan kode keluar 0.
diff -i -w -B case-a.txt case-b.txtecho $?0Untuk melihat dua file berdampingan di kiri dan kanan, digunakan -y. Lebar bawaannya 130 kolom, sehingga dikecilkan dengan -W 70.
diff -y -W 70 config-old.conf config-new.conf# app config # app config
listen 80 | listen 443
server_name example.com | server_name example.com www.ex
root /var/www/html root /var/www/html
gzip off <
log_level warn log_level warn
> cache onGaris tegak (|) di tengah menandai baris yang berubah, < baris yang hanya ada di file pertama, dan > baris yang hanya ada di file kedua. Jika lebar dipersempit, baris yang panjang terpotong. Baris server_name di sisi kanan hanya tampil sampai www.ex.
Jika --suppress-common-lines ditambahkan, baris yang sama dibuang dan hanya baris yang berbeda yang tersisa.
diff -y --suppress-common-lines -W 70 config-old.conf config-new.conflisten 80 | listen 443
server_name example.com | server_name example.com www.ex
gzip off <
> cache onUntuk memeriksa hanya apakah file sama atau berbeda, bukan isi perbedaannya, digunakan -q. Saat file sama, -q tidak menampilkan apa pun, jadi -s digunakan untuk mendapat satu baris yang menyatakan file itu sama.
diff -q config-old.conf config-new.confFiles config-old.conf and config-new.conf differdiff -s config-old.conf config-copy.confFiles config-old.conf and config-copy.conf are identicalOpsi dikumpulkan di dua tab di bawah.
| Opsi | Salin | Penjelasan |
|---|---|---|
| -u, --unified | Menampilkan dalam format terpadu yang menggabungkan hingga tiga baris sebelum dan sesudah baris yang berubah | |
| -c, --context | Format konteks yang menampilkan blok file pertama dan blok file kedua secara terpisah | |
| -i, --ignore-case | Mengabaikan perbedaan huruf besar-kecil | |
| -w, --ignore-all-space | Mengabaikan semua spasi di dalam baris | |
| -b, --ignore-space-change | Mengabaikan hanya perbedaan jumlah spasi | |
| -B, --ignore-blank-lines | Mengabaikan perbedaan baris kosong | |
| -y, --side-by-side | Menampilkan dua file berdampingan di kiri dan kanan | |
| -W, --widthNUM | Menentukan lebar output berdampingan. Nilai bawaannya 130 kolom | |
| --suppress-common-lines | Pada output berdampingan, membuang baris yang sama dan hanya menampilkan baris yang berbeda | |
| -q, --brief | Hanya menampilkan apakah sama atau berbeda. Jika sama, tidak menampilkan apa pun | |
| -s, --report-identical-files | Menampilkan satu baris yang menyatakan file sama ketika kedua file sama | |
| -r, --recursive | Membandingkan juga file di dalam subfolder |
| Opsi | Salin | Penjelasan |
|---|---|---|
| -U, --unifiedNUM | Menentukan jumlah baris sebelum dan sesudah yang ikut ditampilkan dalam format terpadu. Nilai bawaannya 3 | |
| -N, --new-file | Memperlakukan file yang tidak ada di salah satu sisi sebagai file kosong | |
| -x, --excludePAT | Mengecualikan file yang namanya cocok dengan pola dari perbandingan | |
| -I, --ignore-matching-linesRE | Mengabaikan perbedaan jika semua baris yang berubah cocok dengan regex | |
| -Z, --ignore-trailing-space | Mengabaikan spasi di akhir baris | |
| -E, --ignore-tab-expansion | Mengabaikan perbedaan yang muncul karena tab diubah menjadi spasi | |
| -a, --text | Memperlakukan semua file sebagai teks | |
| --strip-trailing-cr | Membuang carriage return di akhir baris sebelum membandingkan | |
| --colorWHEN | Memberi warna pada output. WHEN adalah never, always, atau auto | |
| -v, --version | Menampilkan informasi versi |
🔲 Simulator perintah diff
Di simulator di bawah, diff bisa diketik langsung dengan file contoh dari artikel. File patch bisa disimpan dengan -u, perbandingan bisa dilakukan dengan -i -w -B dan -rq, dan jika satu baris ditambahkan ke config-new.conf lalu dibandingkan lagi, hasil yang berubah akan muncul.
4️⃣ Membandingkan folder dengan diff -r
Untuk membandingkan banyak file sekaligus, misalnya sebelum dan sesudah file situs di-deploy, nama folder ditulis sebagai pengganti file. Folder contoh site-v1 dan site-v2 sama-sama berisi index.html dan folder css, sedangkan about.html dan contact.html hanya ada di salah satu sisi.
diff site-v1 site-v2Only in site-v1: about.html
Only in site-v2: contact.html
Common subdirectories: site-v1/css and site-v2/css
diff site-v1/index.html site-v2/index.html
2,3c2,3
< <p>Version 1</p>
< <a href="about.html">About</a>
---
> <p>Version 2</p>
> <a href="contact.html">Contact</a>Jika folder dibandingkan tanpa opsi, file yang hanya ada di satu sisi muncul sebagai baris [Only in] dan subfolder hanya sebagai baris [Common subdirectories], sedangkan file di dalam subfolder tidak dibandingkan. Untuk index.html, yang ada dengan nama sama di kedua folder, perbedaannya ditampilkan di bawah baris [diff site-v1/index.html site-v2/index.html]. Dengan -r, nilai warna yang berubah di style.css dalam folder css juga ditampilkan.
diff -r site-v1 site-v2Only in site-v1: about.html
Only in site-v2: contact.html
diff -r site-v1/css/style.css site-v2/css/style.css
2c2
< h1 { color: #222; }
---
> h1 { color: #0a58ca; }
diff -r site-v1/index.html site-v2/index.html
2,3c2,3
< <p>Version 1</p>
< <a href="about.html">About</a>
---
> <p>Version 2</p>
> <a href="contact.html">Contact</a>Untuk folder berisi banyak file, daftar file yang berubah diperiksa dulu dengan -rq, lalu hanya file yang diperlukan dibandingkan lagi dengan diff.
diff -rq site-v1 site-v2Only in site-v1: about.html
Only in site-v2: contact.html
Files site-v1/css/style.css and site-v2/css/style.css differ
Files site-v1/index.html and site-v2/index.html differ🔢 FAQ & Konten yang Direkomendasikan
Linux · Teks
Perintah grep Linux
Cara memakai grep untuk mencari dan menampilkan hanya baris yang memuat string yang diinginkan dari file teks seperti file log.
Linux · Teks
Perintah sort Linux: mengurutkan file
Opsi dan contoh sort untuk mengurutkan isi file menurut abjad, urutan naik, atau urutan turun.
Linux · Teks
Perintah uniq Linux
Cara memakai uniq untuk menyisakan satu dari baris yang berulang dan menghitung jumlah pengulangannya dengan -c.
ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.