watch 指令:持續監控指令輸出 文章首圖

watch 指令:持續監控指令輸出

watch 指令:持續監控指令輸出

在 Linux 系統管理與開發的日常工作中,我們經常需要觀察某個狀態的變化。例如,檢查檔案系統的使用量、監控網路連線數,或是追蹤日誌檔案的更新情況。傳統的做法是反覆手動執行指令,或是使用 tail -f 來追蹤檔案內容。然而,當我們需要同時監控多個變數,或是希望以更直觀的方式檢視指令的即時輸出時,watch 指令便是一個極其強大的工具。

watch 的核心功能在於「重複執行指令」並「全螢幕顯示結果」。它不僅能自動清除舊畫面,還能以高對比的方式呈現差異,讓系統狀態的微小變化一目了然。本文將深入解析 watch 的用法、選項以及實際應用場景。

watch 的基本語法與運作原理

watch 的語法非常簡單:

watch [選項] 指令

預設情況下,watch 會每 2 秒 執行一次指定的指令,並將標準輸出(stdout)顯示在終端機上。它會自動清除上一幀的內容,只顯示最新的结果,從而避免畫面混亂。

讓我們從最基礎的範例開始。假設我們想持續監控目前的目錄下有哪些檔案被修改過,可以使用 ls -lt(按時間排序列出檔案):

watch ls -lt

執行後,你會看到一個動態更新的清單。每兩秒,畫面就會刷新一次,顯示最新的檔案列表。若要停止監控,只需按下 Ctrl + C

關鍵選項解析:間隔、標題與差異高亮

雖然預設的 2 秒間隔適合大多數情況,但在實際操作中,我們往往需要更精細的控制。以下是三個最實用的選項:

1. 調整更新頻率 (-n--interval)

當監控的指令執行時間較長,或我們希望減少終端機的刷新頻率以降低系統負載時,可以調整間隔時間。

例如,每 5 秒監控一次系統負載:

watch -n 5 uptime

這裡的 -n 5 告訴 watch 每隔 5 秒執行一次 uptime 指令。

2. 顯示自訂標題 (-t--no-title)

預設情況下,watch 會在畫面上方顯示類似 Every 2.0s: uptime 的標題列,並包含執行時間與系統資訊。如果我們希望畫面更乾淨,或是標題內容不夠明確,可以使用 -t 來隱藏標題,或透過其他方式自訂。

若要隱藏標題列,僅顯示指令輸出:

watch -t df -h

3. 高亮顯示差異 (-d--difference)

這是 watch 最迷人的功能之一。當我們監控的數據發生變化時,-d 選項會將新舊數據之間的差異以高亮色塊標示出來。這對於追蹤動態變數(如連線數、記憶體使用量)極具幫助。

例如,監控網路連線數並高亮顯示變化:

watch -d -n 2 ss -s

當連線數增加或減少時,變動的數字或項目會被特別標記,讓你一眼就能看出哪裡發生了變化。

實際應用場景範例

場景一:監控磁碟空間使用情況

系統管理員常需關注磁碟使用率。結合 df -h(以人類可讀格式顯示)與 watch,我們可以即時掌握各分割區的使用狀態。

watch -d -n 5 df -h

這個指令每 5 秒刷新一次,並高亮顯示任何分割區使用率的變化。如果某個分割區突然寫滿,高亮效果會立即吸引你的注意。

場景二:追蹤特定程序的記憶體佔用

假設我們想監控 nginx 伺服器的記憶體使用情況,可以使用 ps 指令結合 awk 來提取特定數據:

watch -n 1 'ps aux | grep nginx | grep -v grep'

這裡我們使用了單引號將整個管道指令包起來,確保 watch 每次執行時都能重新計算。每 1 秒刷新一次,讓我們能精確觀察 nginx 進程的記憶體波動。

場景三:監控目錄內的檔案建立與刪除

對於開發者而言,監控某個目錄(如 tmpuploads)是否有新檔案產生,是一個常見需求。結合 lswatch,可以輕鬆實現:

watch -d -n 2 ls -l /tmp

當有新檔案建立或舊檔案刪除時,畫面中的差異會立即高亮顯示,方便即時響應。

常見問題與注意事項

Q1: watch 指令在 Ubuntu/Debian 上找不到嗎?

watch 通常是 procps 套件的一部分,在大多數 Linux 發行版中預設已安裝。如果提示 command not found,可以透過以下指令安裝:

sudo apt update
sudo apt install procps

Q2: 為什麼 watch 有時會顯示「Terminal too small」?

當終端機視窗太小,無法容納 watch 的輸出內容時,會顯示此錯誤。解決方法包括:

  1. 放大終端機視窗。
  2. 使用 lesshead 等指令限制輸出內容,例如:watch 'df -h | head -n 5'

Q3: 如何監控需要輸入密碼的指令?

watch 不支援互動式輸入。若指令需要密碼(如 sudo),建議先將指令包裝成腳本,或使用 sudo -S 配合密碼管道,但這通常較複雜且不建議在生產環境使用。一般建議僅監控不需要權限的指令,或提前設定好免密碼的 sudoers 規則。

小結

watch 是一個簡單卻極其強大的 Linux 指令,特別適合用於即時監控系統狀態、服務行為或檔案變化。透過 -n 調整頻率、-d 高亮差異,我們可以將枯燥的指令輸出轉化為直觀的動態視覺資訊。

下次當你需要追蹤某個變數的變化時,別忘了試試 watch。它不僅能節省反覆手動執行指令的時間,更能透過視覺化的方式,讓你更快發現系統中的異常與趨勢。掌握這個小工具,將讓你的 Linux 管理效率大幅提升。