Perintah diff: membandingkan file, format patch diff -u, dan opsi

Lingkungan ujiKeluarga RHELAlmaLinux 9.8akun root
Perintah Melihat · Mengedit TeksdiffLokasi/usr/bin/diff

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/work
cat config-old.conf
# app config
listen 80
server_name example.com
root /var/www/html
gzip off
log_level warn
cat config-new.conf
# app config
listen 443
server_name example.com www.example.com
root /var/www/html
log_level warn
cache on

Kedua file dibandingkan tanpa opsi.

diff config-old.conf config-new.conf
2,3c2,3
< listen 80
< server_name example.com
---
> listen 443
> server_name example.com www.example.com
5d4
< gzip off
6a6
> cache on
echo $?
1

Pada 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.

OutputArti
2,3c2,3Mengubah baris 2–3 file pertama menjadi baris 2–3 file kedua (change)
5d4Menghapus baris 5 file pertama (delete). Setelah dihapus, posisinya cocok dengan setelah baris 4 file kedua
6a6Menambahkan baris 6 file kedua setelah baris 6 file pertama (add)
< barisBaris yang ada di file pertama
> barisBaris 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.conf
echo $?
0

Jika diberi file yang tidak ada, muncul pesan galat dan kode keluarnya 2.

diff config-old.conf nosuch.conf
diff: nosuch.conf: No such file or directory
echo $?
2

Dalam 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 on

Dua 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 on

Untuk 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.patch
echo $?
1
cat /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 on

Isi 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.txt
Listen 80
ServerName example.com
DocumentRoot /var/www/html
cat case-b.txt
listen 80
ServerName  example.com

DocumentRoot /var/www/html
diff case-a.txt case-b.txt
1,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.txt
2c2,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.txt
2a3
>

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.txt
echo $?
0

Untuk 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 on

Garis 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.conf
listen 80                         |     listen 443
server_name example.com           |     server_name example.com www.ex
gzip off                          <
                                  >     cache on

Untuk 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.conf
Files config-old.conf and config-new.conf differ
diff -s config-old.conf config-copy.conf
Files config-old.conf and config-copy.conf are identical

Opsi dikumpulkan di dua tab di bawah.

OpsiSalinPenjelasan
-u, --unifiedMenampilkan dalam format terpadu yang menggabungkan hingga tiga baris sebelum dan sesudah baris yang berubah
-c, --contextFormat konteks yang menampilkan blok file pertama dan blok file kedua secara terpisah
-i, --ignore-caseMengabaikan perbedaan huruf besar-kecil
-w, --ignore-all-spaceMengabaikan semua spasi di dalam baris
-b, --ignore-space-changeMengabaikan hanya perbedaan jumlah spasi
-B, --ignore-blank-linesMengabaikan perbedaan baris kosong
-y, --side-by-sideMenampilkan dua file berdampingan di kiri dan kanan
-W, --widthNUMMenentukan lebar output berdampingan. Nilai bawaannya 130 kolom
--suppress-common-linesPada output berdampingan, membuang baris yang sama dan hanya menampilkan baris yang berbeda
-q, --briefHanya menampilkan apakah sama atau berbeda. Jika sama, tidak menampilkan apa pun
-s, --report-identical-filesMenampilkan satu baris yang menyatakan file sama ketika kedua file sama
-r, --recursiveMembandingkan juga file di dalam subfolder
OpsiSalinPenjelasan
-U, --unifiedNUMMenentukan jumlah baris sebelum dan sesudah yang ikut ditampilkan dalam format terpadu. Nilai bawaannya 3
-N, --new-fileMemperlakukan file yang tidak ada di salah satu sisi sebagai file kosong
-x, --excludePATMengecualikan file yang namanya cocok dengan pola dari perbandingan
-I, --ignore-matching-linesREMengabaikan perbedaan jika semua baris yang berubah cocok dengan regex
-Z, --ignore-trailing-spaceMengabaikan spasi di akhir baris
-E, --ignore-tab-expansionMengabaikan perbedaan yang muncul karena tab diubah menjadi spasi
-a, --textMemperlakukan semua file sebagai teks
--strip-trailing-crMembuang carriage return di akhir baris sebelum membandingkan
--colorWHENMemberi warna pada output. WHEN adalah never, always, atau auto
-v, --versionMenampilkan 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.

Simulator perintah diffdiff · akun root
[root@server work]#
Gunakan tombol ↑↓ pada keyboard untuk memanggil kembali perintah yang diketik sebelumnya.

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-v2
Only 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-v2
Only 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-v2
Only 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

cmp membandingkan dua file byte demi byte dan hanya menampilkan satu posisi pertama yang berbeda. Hasil membandingkan dua file konfigurasi di artikel dengan cmp adalah satu baris [config-old.conf config-new.conf differ: char 21, line 2]. Perintah ini dipakai untuk memeriksa apakah file terkompresi atau gambar, yang tidak bermakna jika dibandingkan per baris, sama atau tidak.

File asli dan file patch diberikan secara berurutan ke perintah patch ([patch config-old.conf config.patch]). patch mengubah file asli di tempat, jadi hasilnya ditulis ke file lain dengan -o atau patch diterapkan dulu pada salinan.

Opsi --color[=WHEN] memberi warna, dan tempat WHEN diisi never, always, atau auto. --color tanpa nilai sama dengan auto dan hanya memberi warna saat output menuju terminal, jadi --color=always digunakan agar warna tetap ada saat output diteruskan ke perintah lain seperti less.

ℹ️ 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.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Buktikan bahwa Anda manusia: 7   +   5   =