使用 watch 和 tail 命令監視 Linux 上的活動
watch
和 tail
命令為持續監視 Linux 系統上的活動提供了一些有趣的選項。
也就是說,你可以通過 watch
來顯示誰已登錄,並隨著用戶登錄和註銷不斷更新,而不是僅僅提出問題並獲得答案(例如詢問 who
並獲取當前登錄用戶的列表)。
使用 tail
,你可以顯示文件的底部並在添加內容時查看內容。這種監控一般非常有用,並且比定期運行命令所需的工作更少。
使用 watch 命令
使用 watch
的最簡單示例之一是使用命令 watch who
。你會看到一個列表,其中顯示了誰登錄了,以及他們登錄的時間和登錄位置。請注意,默認設置是每兩秒更新一次顯示(左上角),日期和時間(右上角)將按該間隔自行更新。用戶列表將隨著用戶登錄和註銷而增長和縮小。
$ watch who
此命令將顯示如下所示的登錄列表:
Every 2.0s: who dragonfly: Thu Feb 27 10:52:00 2020
nemo pts/0 2020-02-27 08:07 (192.168.0.11)
shs pts/1 2020-02-27 10:58 (192.168.0.5)
你可以通過添加 -n
選項(例如 -n 10
)來修改更新間的不同秒數,以修改更新間隔,從而獲取較少的更新頻率。
$ watch -n 10 who
上述命令將以新的間隔顯示,並且顯示的時間更新頻率較低,從而使顯示時間與所選間隔保持一致。
Every 10.0s: who dragonfly: Thu Feb 27 11:05:47 2020
nemo pts/0 2020-02-27 08:07 (192.168.0.11)
shs pts/1 2020-02-27 10:58 (192.168.0.5)
如果你希望僅查看命令的輸出,而不是標題(前 2 行),則可以通過添加 -t
(無標題)選項來省略這些行。
$ watch -t who
然後,你的屏幕將顯示如下所示:
nemo pts/0 2020-02-27 08:07 (192.168.0.11)
shs pts/1 2020-02-27 10:58 (192.168.0.5)
如果每次運行監視的命令時,輸出都是相同的,則只有標題行(如果未省略)會更改。其餘顯示的信息將保持不變。
如果你希望 watch
命令在它正在監視的命令的輸出發生更新後立即退出,則可以使用 -g
(將其視為「 離開 」)選項。例如,如果你只是在等待其他人開始登錄系統,則可以選擇執行此操作。
你還可以使用 -d
( 差異 )選項突出顯示顯示輸出中的更改。突出顯示只會持續一個間隔(默認為 2 秒),但有助於引起你對更新的注意。
下面是一個更複雜的示例,該示例使用 watch
命令顯示正在偵聽連接的服務及其使用的埠。雖然輸出不太可能更改,但它會提醒你任何新服務正在啟動或關閉。
$ watch 'sudo lsof -i -P -n | grep LISTEN'
值得注意的是,正在運行的命令需要用引號擴起來,以確保不會將 watch
命令的輸出發送到 grep
命令。
使用 watch -h
命令將為你提供命令選項的列表。
$ watch -h
Usage:
watch [options] command
Options:
-b, --beep beep if command has a non-zero exit
-c, --color interpret ANSI color and style sequences
-d, --differences[=<permanent>]
highlight changes between updates
-e, --errexit exit if command has a non-zero exit
-g, --chgexit exit when output from command changes
-n, --interval <secs> seconds to wait between updates
-p, --precise attempt run command in precise intervals
-t, --no-title turn off header
-x, --exec pass command to exec instead of "sh -c"
-h, --help display this help and exit
-v, --version output version information and exit
使用 tail -f
tail -f
命令與 watch
有一些相同之處。它也會在添加文件時顯示文件的底部和其他內容。你不必一次又一次地運行 tail
命令,而是運行一個命令並獲得可重複更新顯示視圖的結果。例如,你可以使用如下命令查看系統日誌:
$ tail -f /var/log/syslog
某些文件(如 /var/log/wtmp
)不適合這種類型的處理,因為它們的格式不是普通文本文件,但是通過組合 watch
和 tail
,你可以獲得類似的結果,如下所示:
watch 'who /var/log/wtmp | tail -20'
無論有多少用戶仍處於登錄狀態,此命令都將只顯示最近的 5 次登錄。如果發生其他登錄,顯示結果將添加一行記錄並刪除頂行記錄。
Every 60.0s: who /var/log/wtmp | tail -5 dragonfly: Thu Feb 27 12:46:07 2020
shs pts/0 2020-02-27 08:07 (192.168.0.5)
nemo pts/1 2020-02-27 08:26 (192.168.0.5)
shs pts/1 2020-02-27 10:58 (192.168.0.5)
nemo pts/1 2020-02-27 11:34 (192.168.0.5)
dory pts/1 2020-02-27 12:14 (192.168.0.5)
對你有時可能想要監視的信息,無論監視進程、登錄名還是系統資源,watch
和 tail -f
命令都可以提供自動更新視圖,從而使監視任務變得更加容易。
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:Starryi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive