命令行生存指南:監視命令輸出
作為一個工程師,我們經常與命令行打交道,但除了工作用的命令,你是否嘗試過讓命令來替代你生活中方方面面?
為了讓更多的愛好者可以用命令行作為自己的有效工具,Linux 中國特別邀請了三位作者,撰寫了《命令行生存指南》,希望可以通過這個系列的文章,讓你換一個視角,來看待命令行的存在。如果你想體驗一下不一樣的命令行,那就不妨來看看今天的《命令行生存指南》。
本次的內容為試讀內容,也歡迎你針對今天的內容提出自己的意見和建議。
操作概述
有時候需要不斷的執行某個命令並追蹤其輸出產生的變化情況。一種常見的方法是通過寫一段死循環的 shell 腳本來實現,不過 Linux 本身已經提供了一個工具來幫你定期執行指定的程序並將結果全屏輸出,本節將會介紹該工具。
概念和術語
在 shell 上執行一個命令行時通常會自動打開三個標準文件,即標準輸入文件(stdin
),通常對應終端的鍵盤;標準輸出文件(stdout
)和標準錯誤輸出文件(stderr
),這兩個文件都對應終端的屏幕。進程將從標準輸入文件中得到輸入數據,將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。
操作實戰
場景一:使用 watch 定期執行命令並監視輸出
難度 | ★ |
---|---|
演示用發行版 | Ubuntu |
涉及命令 | watch |
watch 的基本用法
watch
的使用方法很簡單,只需要:
watch 命令
就行了,這樣 watch
命令會每隔兩秒執行一次 命令
,並全屏輸出執行結果。
下圖是執行 watch date
的一個界面:
Every 2.0s: date orangepipc2: Sat Oct 3 09:55:14 2020
Sat 03 Oct 2020 09:55:14 AM CST
圖中第一行中的 Every 2.0s:
表示 watch
每隔 2 秒執行一次命令。後面的 date
為要執行的命令。再後面的 orangepipc2:
是執行命令的主機名,Sat Oct 3 09:55:14 2020
為執行命令的時間。
從第三行開始就是命令執行的輸出結果。
指定重複執行命令的間隔時間
通過 -n 間隔
你也可以設置重複執行命令的間隔時間,比如我可以調整為每 5 秒中執行一次 date
命令
watch -n 5 date
發現輸出中的變化
如果只是單純的重複執行命令的話,那麼可以很容易地通過 shell 循環來實現,然而 watch
的能力不僅如此而已。
通過 -d
選項,watch
還能高亮顯示兩次輸出中不同的部分,這個功能相當實用:
watch -d -n 10 date
除了高亮顯示輸出中改變的部分外,你也可以設置讓 watch
發現結果有改變時退出循環執行,方法是使用 -g/--chgexit
選項。例如我們可以通過下面命令來發現 USB 變動情況。
watch -g 'dmesg |grep -i usb |tail'
檢測命令執行的返回值
默認情況下,watch
並不會關心命令的執行結果是否成功,但你可以設置讓 watch
檢測命令的返回值,當命令運行返回非 0 時發出蜂鳴(-b
/--beep
)或者直接退出(-e
/--errexit
)。
watch -e wrong_commands
小練習
- 嘗試使用
watch
監控工程目錄,並結合其他工具實現自動編譯。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive