Perintah watch Linux: mengulang perintah dan menyoroti perubahan

watch adalah perintah yang mengeksekusi perintah yang ditentukan berulang kali pada interval reguler dan memperbarui seluruh layar terminal dengan hasilnya. Interval eksekusi default adalah 2 detik, dan Anda dapat mengubah interval dengan -n serta menyoroti bagian yang telah berubah dari hasil sebelumnya dengan -d.

Ini berguna ketika mengamati nilai yang berubah secara terus-menerus, seperti status memori, disk, proses, atau jaringan, dalam periode waktu yang singkat. Untuk keluar, biasanya Anda menggunakan q atau Ctrl+c.

Apa itu perintah watch?

watch termasuk dalam paket procps-ng. Program ini menjalankan perintah berulang kali dan menampilkan keluaran standar serta kesalahannya sebanyak satu layar, sehingga perubahan dapat diamati tanpa mengetik ulang perintah.

Bagian atas layar biasanya menunjukkan interval, perintah, host, waktu, dan status keluar. Keluaran yang lebih panjang daripada layar dapat terpotong; alat lain lebih cocok untuk mengikuti seluruh log atau keluaran panjang.

Anda dapat memeriksa perilaku default dan opsi saat ini di manual watch(1) dan sumber manual procps-ng watch.

Sintaks dan penggunaan dasar

watch [option] command [command arguments...]

Jika Anda menjalankan free -h berulang kali tanpa opsi apapun, penggunaan memori diperbarui setiap 2 detik secara default.

watch free -h

Untuk menjalankan dengan interval 1 detik, tambahkan opsi -n.

watch -n 1 free -h

Opsi watch harus ditempatkan sebelum perintah yang akan diulang. Opsi yang ditulis setelah perintah biasanya diteruskan ke perintah yang diulang, bukan ke watch.

Opsi yang sering digunakan

Opsi Fungsi Penggunaan
-n seconds Menentukan interval eksekusi Menentukan nilai waktu dalam detik seperti watch -n 1 command.
-d Sorot bagian yang berubah Menyoroti karakter yang telah berubah dibandingkan layar sebelumnya.
-d=permanent Sorotan perubahan kumulatif Terus menyorot bagian mana pun yang telah berubah setidaknya sekali sejak eksekusi pertama.
-g Keluar saat output berubah Dapat digunakan untuk menunggu sampai file atau status berubah.
-e Berhenti memperbarui saat terjadi kesalahan perintah Jika perintah yang diulang berakhir dengan status tidak nol, layar akan berhenti sejenak dan keluar setelah menekan tombol.
-b Bunyikan beep saat terjadi kesalahan perintah Jika perintah yang diulang mengembalikan status tidak nol, terminal akan membunyikan bel.
-p Coba interval mulai yang tepat Eksekusi sesuai interval yang ditentukan berdasarkan waktu mulai dari eksekusi sebelumnya.
-t Sembunyikan judul atas Sediakan sedikit ruang lebih untuk menampilkan hasil perintah.
-c Interpretasikan warna ANSI Tampilkan warna dan gaya yang didukung yang dihasilkan oleh perintah berulang.
-w Cegah pembungkusan baris untuk baris panjang Menampilkan baris yang melebihi lebar layar dengan memotongnya daripada membungkus ke baris berikutnya.
-x Jalankan tanpa melalui shell Alih-alih sh -c, jalankan program langsung tanpa menggunakan ekspansi shell dan pipa.

Opsi yang didukung dapat bervariasi tergantung pada versi procps-ng yang disertakan dalam distribusi. Anda dapat memeriksa opsi yang tersedia pada sistem Anda saat ini dengan perintah berikut.

watch --help
watch --version

Mengontrol interval dan perubahan output

Tentukan interval eksekusi dengan -n

Tentukan nilai dalam detik setelah -n atau --interval. Anda juga dapat menggunakan desimal, tetapi interval yang terlalu pendek dapat memberikan beban yang tidak perlu pada CPU, disk, jaringan, dan layanan target.

watch -n 0.5 date
watch -n 5 df -h

Jika interval tidak ditentukan, nilai default adalah 2 detik kecuali variabel WATCH_INTERVAL mengubahnya. Manual procps-ng saat ini membatasi nilai di bawah 0,1 detik dan di atas 31 hari; periksa versi terpasang karena dukungan dapat berbeda.

Sorot perubahan dengan -d

-d menyoroti bagian yang telah berubah dengan membandingkan layar saat ini dengan layar sebelumnya. Ini berguna ketika melihat statistik memori, proses, dan jaringan yang berubah dengan cepat.

watch -n 1 -d free -h

Untuk terus menampilkan semua lokasi yang berubah setelah layar pertama, gunakan -d=permanent jika versi yang terpasang mendukungnya.

watch -n 1 -d=permanent free -h

Keluar ketika terjadi perubahan dengan -g

-g atau --chgexit menghentikan watch saat keluaran yang terlihat berubah. Untuk contoh ini, buat atau pilih file yang sudah ada di /tmp/result.txt; perubahan waktu modifikasinya menghasilkan nilai epoch berbeda dan menghentikan pengamatan.

watch -g -n 1 'stat -c %Y /tmp/result.txt'

Jika output hanya berubah di area yang terpotong oleh jangkauan layar, perubahan mungkin tidak terdeteksi. Untuk otomatisasi di mana deteksi perubahan sangat penting, lebih aman menggunakan status keluar dari perintah target atau alat pemantauan khusus daripada membandingkan output layar.

Mengapa tanda kutip diperlukan saat menggunakan pipa dan sintaks shell

Secara default, watch menjalankan perintah yang diberikan melalui sh -c. Jika Anda ingin menggunakan pipa, pengalihan, titik koma, variabel, dan wildcard sebagai bagian dari perintah yang diulang, lebih jelas membungkus seluruh perintah dalam tanda kutip tunggal.

Perintah sederhana diteruskan sebagaimana adanya

Perintah tanpa pipa atau pengalihan dapat ditulis langsung seperti ini.

watch -n 2 ls -lh /var/log

Bungkus seluruh perintah untuk pipa dan variabel

Dalam contoh berikut, tanda kutip tunggal mencegah shell saat ini memproses pipa terlebih dahulu dan meneruskan seluruh perintah ke shell yang akan mengeksekusinya berulang kali.

watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'

Pengalihan atau beberapa perintah dibungkus dengan cara yang sama.

watch -n 5 'date; df -h / /var'

Opsi -x menjalankan program secara langsung tanpa melalui shell. Ini dapat sedikit mengurangi biaya eksekusi dan menyederhanakan penerusan argumen, tetapi fitur shell seperti pipa, pengalihan, ekspansi variabel, dan wildcard tidak dapat digunakan.

watch -x -n 2 ls -lh /var/log

Aturan tanda kutip dijelaskan dalam manual Bash di Debian; ingat bahwa shell yang dipakai watch secara default adalah sh.

Contoh yang sering digunakan dalam praktik

Item yang Perlu Diperiksa Deskripsi
Memori Memperbarui hasil free -h setiap detik dan menyoroti bagian yang berubah.
Ruang Disk Memeriksa penggunaan sistem file root dan /var setiap 5 detik.
Proses yang Menggunakan CPU Mengurutkan hasil ps berdasarkan penggunaan CPU dan menampilkan entri teratas.
Ringkasan Socket Memeriksa status keseluruhan socket jaringan berulang kali dengan ss -s.
Ukuran File Amati perubahan ukuran file yang diunduh atau dikompresi dengan stat.
Status Layanan Jalankan systemctl status berulang kali dengan --no-pager.

Penggunaan memori

watch -n 1 -d free -h

Penggunaan disk

watch -n 5 'df -h / /var'

Proses dengan penggunaan CPU tinggi

watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'

Pada procps ps, %cpu adalah rata-rata selama masa hidup proses, bukan pengukuran sesaat per interval. Gunakan top untuk pengamatan interaktif penggunaan CPU.

Ringkasan soket jaringan

watch -n 1 ss -s

Ukuran file dan waktu modifikasi

Siapkan file archive.tar di direktori saat ini atau ganti dengan jalur file yang ada. Ukuran dalam byte dan waktu modifikasinya akan ditampilkan ulang.

watch -n 1 'stat -c "%s bytes  %y" archive.tar'

Status layanan

Contoh ini memerlukan sistem dengan systemd dan unit nginx; ganti dengan unit yang tersedia pada sistem Anda.

watch -n 2 'systemctl --no-pager --full status nginx'

Perintah yang dapat menghasilkan output panjang, seperti status layanan, mungkin hanya ditampilkan sebagian tergantung ukuran terminal. Jika tujuannya adalah pemantauan log secara berkelanjutan, perintah yang cocok untuk fungsi itu, seperti journalctl -f -u nginx, lebih tepat.

Interval eksekusi yang tepat dan perintah yang berjalan lama

Dalam perilaku default, setelah eksekusi perintah tunggal selesai, sistem akan menunggu interval yang ditentukan sebelum memulai eksekusi berikutnya. Menggunakan -p atau --precise mencoba menyelaraskan waktu mulai berikutnya berdasarkan kapan perintah sebelumnya dimulai.

watch -p -n 10 'date; curl -fsS https://example.com/health'

Alamat example.com/health hanya ilustrasi, bukan endpoint kesehatan yang dijamin tersedia. Ganti dengan endpoint yang Anda kelola dan boleh diperiksa berulang kali.

Jika waktu eksekusi perintah yang diulang lebih lama daripada interval yang ditentukan, watch tidak akan menjalankan beberapa instance secara bersamaan tetapi akan menunggu perintah saat ini selesai. Untuk tugas batch yang membutuhkan siklus tepat dan eksekusi yang dijamin, menggunakan timer systemd atau penjadwal tugas lebih cocok daripada watch.

Mengontrol dengan keyboard

Tombol Tindakan
q Keluar dari watch. Perintah anak yang sedang berjalan mungkin tidak berhenti segera.
Ctrl+c Mengirim sinyal interrupt untuk keluar dari watch dan tugas yang sedang berjalan.
Space Meminta eksekusi perintah tanpa menunggu waktu terjadwal berikutnya. Jika sudah berjalan, itu memulai eksekusi berikutnya segera setelah selesai tanpa penundaan.

Tindakan tombol mungkin berbeda tergantung versi procps-ng, jadi pertama-tama periksa man watch sistem saat ini.

Tindakan pencegahan saat menggunakan watch

  • Sebaiknya gunakan untuk perintah pemeriksaan hanya-baca: Mengulangi perintah yang mengubah status, seperti hapus, pembayaran, pembuatan pengguna, atau restart layanan, dapat menyebabkan hasil yang tidak diinginkan.
  • Hindari interval yang sangat singkat: Menjalankan kueri basis data, permintaan API jarak jauh, atau pencarian direktori besar dalam interval yang sangat singkat dapat membebani sistem atau layanan eksternal.
  • Periksa jangkauan yang terlihat di layar: -g dan -d terpengaruh oleh keluaran yang ditampilkan di terminal, sehingga perubahan di area yang terpotong mungkin tidak terdeteksi.
  • Hindari perintah interaktif: Program yang menunggu input pengguna, seperti prompt kata sandi, editor, atau pager, tidak cocok untuk dijalankan berulang kali.
  • Membedakan status keluar: Status keberhasilan dari watch dasar tidak selalu berarti perintah yang dijalankan berulang berhasil. Jika Anda perlu menanggapi kesalahan perintah, periksa opsi seperti -e di versi saat ini.

Ketika alat lain lebih cocok daripada watch

Tujuan Alat yang cocok
Melacak log yang ditambahkan ke file tail -f atau tail -F
Melacak log layanan systemd journalctl -f -u service_name
Memeriksa penggunaan sumber daya proses top atau htop
Tugas berulang terjadwal timer systemd atau cron
Pengumpulan metrik jangka panjang dan peringatan Sistem Pemantauan Khusus

watch cocok untuk seseorang yang mengamati perubahan jangka pendek di terminal. Jika Anda memerlukan pencatatan, notifikasi, dan analisis jangka panjang, Anda harus memilih alat yang sesuai untuk tujuan tersebut.

Pertanyaan umum

Dikatakan bahwa perintah watch tidak ada

watch biasanya termasuk dalam paket procps atau procps-ng. Paket ini mungkin tidak tersedia di lingkungan instalasi minimal, jadi Anda perlu menginstal paket tersebut menggunakan manajer paket dari distribusi yang Anda gunakan saat ini. Periksa dokumentasi distribusi untuk mengetahui nama paket dan perintah instalasi.

Alias atau fungsi shell tidak dijalankan di dalam watch.

Alias dan fungsi hanya dapat didefinisikan di shell interaktif saat ini, dan mungkin tidak dapat diteruskan ke lingkungan sh -c yang dipanggil oleh watch secara default. Untuk tugas yang berulang, lebih mudah dan dapat diprediksi menggunakan program yang sebenarnya, perintah eksplisit, atau skrip shell terpisah.

Warna perintah tidak ditampilkan

Aktifkan interpretasi warna ANSI dengan watch -c, dan atur perintah yang diulang untuk mengeluarkan kode warna juga di lingkungan non-interaktif. Tergantung pada programnya, opsi terpisah seperti --color=always mungkin diperlukan.

Mengapa perintah yang menyertakan pipa harus dimasukkan dalam tanda kutip?

Tanpa tanda kutip, shell saat ini mungkin memproses pipa terlebih dahulu, sehingga seluruh output dari watch diteruskan ke perintah lain. Menyertakan seluruh pipeline dalam tanda kutip tunggal memungkinkan watch meneruskannya sebagai satu string perintah ke shell yang akan mengeksekusinya berulang kali.

Ringkasan

watch adalah alat pengamatan sederhana yang menampilkan hasil dari sebuah perintah secara berulang dengan interval default 2 detik. Anda dapat mengubah interval dengan -n, menyoroti perubahan dengan -d, dan keluar saat output berubah dengan -g.

Perintah yang mencakup pipe dan pengalihan harus sepenuhnya ditempatkan dalam tanda kutip tunggal, dan beban serta efek samping dari eksekusi berulang pada sistem harus diperiksa. Anda dapat menemukan tujuan dari perintah lain berdasarkan tugasnya dalam daftar perintah Linux menurut tugas.