Lệnh watch: cách dùng, khoảng -n, tô sáng -d và thoát khi đầu ra thay đổi

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8procps-ng 3.3.17Tài khoản rootDebian 12 · procps-ng 4.0.2 tài khoản thường
Lệnh tiến trình · lập lịch tác vụwatchVị trí/usr/bin/watchKiểm tra ngày 2026-11-05
Theo dõi thay đổi trong đầu ra của lệnh

Lệnh watch là lệnh Linux chạy lại một lệnh được chỉ định mỗi 2 giây và vẽ lại đầu ra trên toàn bộ màn hình terminal. Khi dùng watch theo dõi tệp trên máy chủ AlmaLinux 9 trong lúc thay đổi tệp từ một cửa sổ khác, tùy chọn -d tô sáng các ký tự đã thay đổi và tùy chọn -g kết thúc watch sau khi đầu ra thay đổi.

Kết quả bên dưới được chạy bằng tài khoản root trong một thư mục làm việc trên máy chủ AlmaLinux 9.8; trên máy chủ Debian 12 chỉ kiểm tra phiên bản. Tên máy chủ trên dòng tiêu đề ở đầu màn hình được thay bằng giá trị ví dụ server1, và thời gian theo UTC.

1️⃣ Cách dùng lệnh watch

  • ↪️ Khoảng mặc định 2 giây và thoát bằng Ctrl+C

Viết lệnh cần chạy lại sau watch; khi không có tùy chọn, watch chạy lệnh đó mỗi 2 giây và thay màn hình bằng đầu ra mới. Khi theo dõi date, dòng tiêu đề xuất hiện ở đầu màn hình, rồi sau một dòng trống là đầu ra của date.

watch date
Every 2.0s: date                                                   server1: Thu Oct 29 02:28:07 2026

Thu Oct 29 02:28:07 UTC 2026

Bên trái dòng tiêu đề là khoảng làm mới và lệnh đang chạy, bên phải là tên máy chủ và thời điểm chạy gần nhất. Khi xem lại cùng màn hình đó sau 2 giây, thời gian trên dòng tiêu đề và đầu ra của date đều đã thay đổi.

Every 2.0s: date                                                   server1: Thu Oct 29 02:28:09 2026

Thu Oct 29 02:28:09 UTC 2026

watch chạy liên tục cho đến khi bạn tự dừng, nên hãy kết thúc bằng Ctrl+C. Khi nhấn Ctrl+C, màn hình watch biến mất và dấu nhắc quay lại. Mã thoát kiểm tra ngay sau đó là 0.

echo $?
0

watch dùng để chạy lặp lại các lệnh chỉ in một lần rồi kết thúc. Để xem mức dùng CPU và bộ nhớ của từng tiến trình thay đổi ra sao, nên dùng lệnh top, lệnh tự vẽ lại màn hình của nó.

watch nằm trong gói procps-ng. Kiểm tra phiên bản bằng [watch -v]; máy chủ AlmaLinux 9.8 là 3.3.17, máy chủ Debian 12 là 4.0.2.

watch -v
watch from procps-ng 3.3.17
watch -v
watch from procps-ng 4.0.2

2️⃣ Tùy chọn khoảng thời gian và tô sáng của watch

  • ↪️ Khoảng -n, tô sáng -d và -t để tắt dòng tiêu đề

Ghi số giây sau -n để đổi khoảng làm mới. Khi chạy [watch -n 1 date], bên trái dòng tiêu đề đổi thành Every 1.0s.

watch -n 1 date
Every 1.0s: date                                                   server1: Thu Oct 29 02:28:15 2026

Thu Oct 29 02:28:15 UTC 2026

Theo trang man, khoảng thời gian không thể ngắn hơn 0,1 giây, giá trị nhỏ hơn sẽ được đổi thành 0,1 giây. Dấu thập phân có thể là dấu chấm hoặc dấu phẩy.

-d tô sáng các ký tự khác với lần làm mới trước. Trong lúc theo dõi size.log trong thư mục làm việc bằng [ls -l], một dòng được thêm vào tệp này từ cửa sổ khác.

watch -d -n 1 ls -l size.log
Every 1.0s: ls -l size.log                                         server1: Thu Oct 29 02:28:53 2026

-rw-r--r-- 1 root root 7 Oct 29 02:28 size.log
printf 'line 2\n' >> size.log

Khi kích thước tệp đổi từ 7 thành 14, toàn bộ phần từ cột kích thước đến cuối dòng được tô sáng. Con số thêm một chữ số nên mọi ký tự phía sau đều dịch đi một vị trí. Ở lần làm mới tiếp theo giá trị không đổi nên phần tô sáng biến mất.

Every 1.0s: ls -l size.log                                         server1: Thu Oct 29 02:28:54 2026

-rw-r--r-- 1 root root 14 Oct 29 02:28 size.log

Để tiếp tục tô sáng mọi chỗ đã thay đổi so với lần chạy đầu tiên, hãy dùng [--differences=permanent] (theo trang man).

-t bỏ dòng tiêu đề và dòng trống bên dưới, chỉ giữ lại đầu ra của lệnh.

watch -t -n 1 date
Thu Oct 29 02:28:19 UTC 2026

3️⃣ Điều kiện thoát và tùy chọn của lệnh watch

  • ↪️ -g khi đầu ra thay đổi và -e khi gặp lỗi

-g kết thúc watch khi đầu ra của lệnh thay đổi. Dùng khi cần chờ nội dung của một tệp trạng thái thay đổi rồi mới chuyển sang việc tiếp theo.

watch -g -n 1 cat status.txt
Every 1.0s: cat status.txt                                         server1: Thu Oct 29 02:29:12 2026

running

Từ cửa sổ khác, lệnh bên dưới đã đổi nội dung của status.txt thành done.

printf 'done\n' > status.txt

Sau đó watch kết thúc, dấu nhắc quay lại và mã thoát là 0.

echo $?
0

-e dừng làm mới màn hình khi lệnh kết thúc với mã thoát khác 0. Khi dùng ls theo dõi một tệp không có trong thư mục làm việc, đầu ra lỗi của ls xuất hiện cùng dòng thông báo ở cuối màn hình cho biết nhấn một phím để thoát.

watch -e -n 1 ls nofile.txt
Every 1.0s: ls nofile.txt                                          server1: Thu Oct 29 02:29:18 2026

ls: cannot access 'nofile.txt': No such file or directory










command exit with a non-zero status, press a key to exit

Thời gian trên dòng tiêu đề dừng ở thời điểm ngay sau khi chạy, và nhấn một phím thì watch kết thúc. Mã thoát lần này là 8.

echo $?
8

Trang man mô tả mã thoát 8 là giá trị bao gồm cả trường hợp lệnh kết thúc do lỗi.

📌 Tùy chọn chính: kết quả chạy trong bài này

Tùy chọnChức năngKết quả trong bài này
-n giâyĐổi khoảng làm mới (mặc định 2 giây)Dòng tiêu đề đổi thành Every 1.0s
-dTô sáng các ký tự khác với lần làm mới trướcKích thước 7 → 14, tô sáng từ cột đó đến cuối dòng, biến mất ở lần làm mới tiếp theo
-tTắt dòng tiêu đề và dòng trống bên dướiChỉ còn một dòng đầu ra của date
-gKết thúc watch khi đầu ra thay đổiKết thúc sau running → done, mã thoát 0
-eDừng màn hình khi lệnh kết thúc do lỗiKết thúc khi nhấn phím, mã thoát 8
-vIn thông tin phiên bảnMáy chủ AlmaLinux 9.8: watch from procps-ng 3.3.17, máy chủ Debian 12: watch from procps-ng 4.0.2

📎 Tùy chọn khác: theo tài liệu hướng dẫn chính thức

Tùy chọnChức năng
-bPhát tiếng bíp khi lệnh kết thúc với mã thoát khác 0
-cDiễn giải mã màu và kiểu chữ ANSI để giữ nguyên màu của đầu ra lệnh
-pChạy đúng theo từng khoảng để thời điểm làm mới không bị trễ dần
-xChạy lệnh bằng exec thay vì sh -c nên cần ít dấu nháy hơn
-wCắt dòng dài thay vì xuống dòng tiếp theo
--differences=permanentTiếp tục tô sáng mọi chỗ đã thay đổi kể từ lần chạy đầu tiên
-hIn trợ giúp

4️⃣ Dấu nháy và pipe trong lệnh watch

  • ↪️ Bọc trong dấu nháy đơn và theo dõi dung lượng đĩa

watch chạy lệnh nhận được bằng sh -c, nên lệnh có chứa pipe(|) hoặc $ phải được bọc toàn bộ trong dấu nháy đơn. Khi theo dõi số tệp trong thư mục làm việc bằng [ls | wc -l], dòng tiêu đề hiện toàn bộ lệnh, kể cả pipe.

watch -n 1 'ls | wc -l'
Every 1.0s: ls | wc -l                                             server1: Thu Oct 29 02:30:22 2026

6

Khi tạo thêm một tệp từ cửa sổ khác, ở lần làm mới tiếp theo con số đổi từ 6 thành 7.

printf 'c\n' > q3.txt
Every 1.0s: ls | wc -l                                             server1: Thu Oct 29 02:30:24 2026

7

Nếu gõ [watch -n 1 ls | wc -l] mà không có dấu nháy, shell sẽ tách pipe trước, nên toàn bộ đầu ra trên màn hình của watch được chuyển sang wc. Vì vậy khi lệnh cần theo dõi có pipe, hãy bọc toàn bộ lệnh trong dấu nháy.

$ cũng theo quy tắc đó. Khi chạy [watch -n 1 echo $$] mà không có dấu nháy, shell hiện tại đổi $$ thành một con số trước, và con số đó cũng hiện trong lệnh trên dòng tiêu đề.

watch -n 1 echo $$
Every 1.0s: echo 3755802                                           server1: Thu Oct 29 02:29:37 2026

3755802

Khi bọc trong dấu nháy đơn, $$ được truyền nguyên vẹn, nên dòng tiêu đề hiện echo $$ và mỗi lần làm mới in ra PID của sh vừa được chạy mới.

watch -n 1 'echo $$'
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:40 2026

3756270
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:41 2026

3756333

PID của shell hiện tại kiểm tra bằng [echo $$] trùng với con số đã bị cố định khi chạy không có dấu nháy.

echo $$
3755802

Với các giá trị thay đổi chậm như dung lượng đĩa, hãy theo dõi với khoảng vài giây. Lệnh du: -s chỉ in tổng, -h in kích thước theo đơn vị như K, M. Trong lúc theo dõi thư mục làm việc bằng [du -sh .], khi thêm 8.001 byte vào một tệp nhật ký từ cửa sổ khác, ở lần làm mới tiếp theo 28K đổi thành 36K.

watch -n 2 du -sh .
Every 2.0s: du -sh .                                               server1: Thu Oct 29 02:30:34 2026

28K     .
printf '000d\n' 0 >> grow.log
Every 2.0s: du -sh .                                               server1: Thu Oct 29 02:30:36 2026

36K     .

🔲 Trình mô phỏng lệnh watch

Trong trình mô phỏng bên dưới, hãy chạy watch rồi dùng các chip [🖊 Cửa sổ khác] để đổi tệp và tự xem màn hình thay đổi thế nào.

Trình mô phỏng lệnh watchprocps-ng 3.3.17
[root@server work]#
Chỉ chạy trong trình duyệt của bạn. Trên màn hình watch, đổi tệp bằng các chip [Cửa sổ khác] và kết thúc bằng Ctrl+C.

🔢 FAQ & nội dung đề xuất

Theo trang man, nếu đặt số giây vào biến môi trường WATCH_INTERVAL, giá trị đó sẽ được dùng làm khoảng thời gian khi không ghi -n. Giá trị này theo cùng quy tắc với -n nên không thể ngắn hơn 0,1 giây.

Theo trang man, watch xóa các ký tự điều khiển trong đầu ra rồi mới vẽ. Để thấy màu khi theo dõi một lệnh in ra có màu, hãy thêm -c như [watch -c].

Theo trang man, khi chạy mặc định, phần lẻ của giây trong thời điểm làm mới tăng lên một chút sau mỗi lần làm mới. Thêm -p thì watch chạy đúng theo từng khoảng, nên phần đó giữ gần như không đổi.

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 2   +   5   =