Lệnh watch: cách dùng, khoảng -n, tô sáng -d và thoát khi đầu ra thay đổi
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
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 dateEvery 2.0s: date server1: Thu Oct 29 02:28:07 2026
Thu Oct 29 02:28:07 UTC 2026Bê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 2026watch 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 $?0watch 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 -vwatch from procps-ng 3.3.17watch -vwatch from procps-ng 4.0.22️⃣ Tùy chọn khoảng thời gian và tô sáng của watch
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 dateEvery 1.0s: date server1: Thu Oct 29 02:28:15 2026
Thu Oct 29 02:28:15 UTC 2026Theo 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.logEvery 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.logprintf 'line 2\n' >> size.logKhi 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 dateThu Oct 29 02:28:19 UTC 20263️⃣ Điều kiện thoát và tùy chọn của lệnh watch
-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.txtEvery 1.0s: cat status.txt server1: Thu Oct 29 02:29:12 2026
runningTừ 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.txtSau đó 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.txtEvery 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 exitThờ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 $?8Trang 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ọn | Chức năng | Kế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 | |
| -d | Tô sáng các ký tự khác với lần làm mới trước | Kí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 | |
| -t | Tắt dòng tiêu đề và dòng trống bên dưới | Chỉ còn một dòng đầu ra của date | |
| -g | Kết thúc watch khi đầu ra thay đổi | Kết thúc sau running → done, mã thoát 0 | |
| -e | Dừng màn hình khi lệnh kết thúc do lỗi | Kết thúc khi nhấn phím, mã thoát 8 | |
| -v | In thông tin phiên bản | Má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ọn | Chức năng | |
|---|---|---|
| -b | Phát tiếng bíp khi lệnh kết thúc với mã thoát khác 0 | |
| -c | Diễn giải mã màu và kiểu chữ ANSI để giữ nguyên màu của đầu ra lệnh | |
| -p | Chạy đúng theo từng khoảng để thời điểm làm mới không bị trễ dần | |
| -x | Chạy lệnh bằng exec thay vì sh -c nên cần ít dấu nháy hơn | |
| -w | Cắt dòng dài thay vì xuống dòng tiếp theo | |
| --differences=permanent | Tiếp tục tô sáng mọi chỗ đã thay đổi kể từ lần chạy đầu tiên | |
| -h | In trợ giúp |
4️⃣ Dấu nháy và pipe trong lệnh watch
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
6Khi 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.txtEvery 1.0s: ls | wc -l server1: Thu Oct 29 02:30:24 2026
7Nế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
3755802Khi 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
3756270Every 1.0s: echo $$ server1: Thu Oct 29 02:29:41 2026
3756333PID 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 $$3755802Vớ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.logEvery 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.
🔢 FAQ & nội dung đề xuất
Trạng thái hệ thống
Lệnh uptime trong Linux (kiểm tra thời gian chạy của server&tải trung bình 1, 5, 15 phút)
Lệnh uptime cho xem trên một dòng máy chủ đã bật được bao lâu và tải trung bình 1, 5 và 15 phút.
Văn bản
Lệnh head và lệnh tail trên Linux
Lệnh head và tail in phần đầu và phần cuối của tệp. Để theo dõi phần cuối của một tệp nhật ký đang dài ra, hãy dùng [tail -f].
Ổ đĩa
Lệnh df
Lệnh df in tổng kích thước, dung lượng đã dùng và dung lượng còn trống của từng hệ thống tệp.
ℹ️ 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á.