watch 指令:用法與 -n 間隔、-d 標示、輸出改變時結束
watch 指令是每 2 秒重新執行指定的指令,並把輸出重新畫滿整個終端機畫面的 Linux 指令。在 AlmaLinux 9 伺服器上一邊從另一個視窗修改檔案、一邊用 watch 監看,結果 -d 選項標示出改變的字元,-g 選項則在輸出改變後結束 watch。
以下輸出是在 AlmaLinux 9.8 伺服器(root 帳號)的工作資料夾中執行的結果,Debian 12 伺服器只確認了版本。畫面最上方標頭列的主機名稱已換成範例值 server1,時間以 UTC 輸出。
1️⃣ watch 指令用法
在 watch 後面寫上要重複執行的指令,沒有選項時會每 2 秒執行一次,並把畫面換成新的輸出。監看 date 時,畫面最上方出現標頭列,空一行後接著是 date 的輸出。
watch dateEvery 2.0s: date server1: Thu Oct 29 02:28:07 2026
Thu Oct 29 02:28:07 UTC 2026標頭列左邊是更新間隔與正在執行的指令,右邊是主機名稱與最後一次執行的時間。2 秒後再看同一個畫面,標頭列的時間和 date 的輸出都一起變了。
Every 2.0s: date server1: Thu Oct 29 02:28:09 2026
Thu Oct 29 02:28:09 UTC 2026watch 會一直執行到你自己結束為止,所以用 Ctrl+C 結束。按下 Ctrl+C 後 watch 畫面消失,提示字元回來了。接著確認的結束碼是 0。
echo $?0watch 用在重複執行只輸出一次就結束的指令。想看各程序的 CPU 與記憶體使用量如何變化,會自己重繪畫面的 top 指令比較合適。
watch 是 procps-ng 套件裡的指令。版本用 [watch -v] 確認,AlmaLinux 9.8 伺服器是 3.3.17,Debian 12 伺服器是 4.0.2。
watch -vwatch from procps-ng 3.3.17watch -vwatch from procps-ng 4.0.22️⃣ watch 間隔與標示選項
在 -n 後面寫秒數就會改變更新間隔。用 [watch -n 1 date] 執行後,標頭列左邊變成 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 2026依 man 頁面,間隔不能設得比 0.1 秒更短,比這更小的值會改成 0.1 秒。小數點用句點或逗號都能辨識。
-d 會標示與上一次更新不同的字元。用 [ls -l] 監看工作資料夾裡的 size.log 時,從另一個視窗在這個檔案加了一行。
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.log檔案大小從 7 變成 14 時,從大小欄到行尾都被標示出來。因為數字多了一位,後面的字元全都往後移了一格。下一次更新時值沒有變,標示就消失了。
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若要持續標示與第一次執行相比改變過的地方,請使用 [--differences=permanent](依 man 頁面)。
-t 會拿掉標頭列和下面的空行,只留下指令的輸出。
watch -t -n 1 dateThu Oct 29 02:28:19 UTC 20263️⃣ watch 指令結束條件與選項
-g 會在指令輸出改變時結束 watch。用在等狀態檔的內容改變後,再進行下一個工作。
watch -g -n 1 cat status.txtEvery 1.0s: cat status.txt server1: Thu Oct 29 02:29:12 2026
running從另一個視窗用下面的指令把 status.txt 的內容改成 done。
printf 'done\n' > status.txt於是 watch 結束、提示字元回來,結束碼是 0。
echo $?0-e 會在指令以非 0 的結束碼結束時停止更新畫面。用 ls 監看工作資料夾裡不存在的檔案,畫面除了 ls 的錯誤輸出,最下面一行還出現按任意鍵就會結束的提示。
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 exit標頭列的時間停在剛執行完的時刻,按一個鍵後 watch 就結束了。這次的結束碼是 8。
echo $?8man 頁面把結束碼 8 說明為包含指令因錯誤而結束之情況的值。
📌 主要選項:本文實際執行的結果
| 選項 | 作用 | 本文看到的結果 | |
|---|---|---|---|
| -n 秒 | 改變更新間隔(預設 2 秒) | 標頭列變成 Every 1.0s | |
| -d | 標示與上一次更新不同的字元 | 檔案大小 7 → 14 時從該欄標示到行尾,下一次更新時消失 | |
| -t | 關閉標頭列和下面的空行 | 只剩一行 date 輸出 | |
| -g | 輸出改變時結束 watch | running → done 後結束,結束碼 0 | |
| -e | 指令因錯誤結束時停住畫面 | 按鍵後結束,結束碼 8 | |
| -v | 輸出版本資訊 | AlmaLinux 9.8 伺服器是 watch from procps-ng 3.3.17,Debian 12 伺服器是 watch from procps-ng 4.0.2 |
📎 其他選項:依官方手冊
| 選項 | 作用 | |
|---|---|---|
| -b | 指令以非 0 的結束碼結束時發出嗶聲 | |
| -c | 解讀 ANSI 顏色與字型樣式碼,保留指令輸出的顏色 | |
| -p | 配合每個間隔執行,讓更新時間不會往後延 | |
| -x | 用 exec 代替 sh -c 執行指令,可以少用引號 | |
| -w | 長行不換到下一行,直接截斷輸出 | |
| --differences=permanent | 持續標示第一次執行後所有改變過的地方 | |
| -h | 輸出說明 |
4️⃣ watch 指令的引號與管線
watch 會用 sh -c 執行收到的指令,所以含有 管線(|) 或 $ 的指令,要把整個指令用單引號括起來。用 [ls | wc -l] 監看工作資料夾的檔案數時,標頭列連同管線顯示了整個指令。
watch -n 1 'ls | wc -l'Every 1.0s: ls | wc -l server1: Thu Oct 29 02:30:22 2026
6從另一個視窗再建立一個檔案後,下一次更新時數字從 6 變成 7。
printf 'c\n' > q3.txtEvery 1.0s: ls | wc -l server1: Thu Oct 29 02:30:24 2026
7不加引號輸入 [watch -n 1 ls | wc -l] 時,shell 會先拆開管線,watch 的整個畫面輸出都會交給 wc。所以要監看的指令有管線時,要把整個指令用引號括起來。
$ 也遵守同樣的規則。不加引號執行 [watch -n 1 echo $$] 時,目前的 shell 先把 $$ 換成數字,標頭列的指令也顯示了那個數字。
watch -n 1 echo $$Every 1.0s: echo 3755802 server1: Thu Oct 29 02:29:37 2026
3755802用單引號括起來後 $$ 會原樣傳過去,所以標頭列顯示 echo $$,每次更新都會輸出新執行的 sh 的 PID。
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
3756333用 [echo $$] 確認目前 shell 的 PID,和不加引號執行時固定住的數字相同。
echo $$3755802像磁碟使用量這種變化緩慢的值,把間隔設成幾秒來監看。 du 指令的 -s 只輸出合計,-h 以 K、M 這類單位輸出。用 [du -sh .] 監看工作資料夾時,從另一個視窗在記錄檔加了 8,001 位元組,下一次更新時 28K 變成 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 .🔲 watch 指令模擬器
在下面的模擬器執行 watch 後,可以用 [🖊 另一個視窗] 標籤修改檔案,親自確認畫面如何變化。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。