watch コマンド入門 - コマンドを定期実行して変化を監視する
この記事でわかること
watchで 同じコマンドを一定間隔で繰り返し実行 できるようになる-n(間隔)と-d(差分強調)という よく使う 2 つのオプション が分かる- パイプやリダイレクトを使うときの クォート文字列を引用符(' や ")で囲むこと。スペースなどを含む値をひとまとまりとして扱える。の落とし穴 を避けられる
- 監視を 正しく終了する方法(Ctrl + C)が分かる
結論(先に要点)
watch コマンド→ 2 秒ごとに繰り返し実行して画面を更新- 間隔を変えるなら
watch -n 5 コマンド(5 秒ごと) - 変わった部分を光らせたいなら
watch -d コマンド - パイプ
|を使うときはwatch 'ls | wc -l'のように クォートで囲む
前提(対象環境)
- OS:Linux(Ubuntu / Debian / RHEL 系など)
watchはprocps-ngパッケージに含まれ、多くのディストリで標準インストール済み- macOS には標準では入っていない(必要なら
brew install watch)
1. watch コマンドとは?
結論:
watchは指定したコマンドを一定間隔(既定 2 秒)で繰り返し実行し、最新の出力を画面に上書き表示するツール。変化の監視に使う。
ls -l を打ってるんですけど…これ面倒すぎませんか?watch の出番だね。watch は同じコマンドを自動で繰り返し実行して、画面を更新し続けてくれるんだ。手で連打しなくてよくなるよ。watch を付けるだけ。まずは一番シンプルな形から見ていこう。2. 基本の使い方 - watch でコマンドを繰り返す
結論:
watch コマンドと書くだけ。既定では 2 秒ごとに実行され、画面上部に間隔・実行コマンド・時刻が表示される。
ls -l で試してみます。watch ls -l
Every 2.0s: ls -l host: Fri Jun 5 19:30:00 2026
ls -l の結果が出てます!画面上部の見出しは「実行間隔・実行中のコマンド・ホスト名・現在時刻」を表す。コマンドが今も生きて動いていることの確認にもなる。
3. 実行間隔を変えるには?(-n オプション)
結論:
-n 秒数(または--interval)で間隔を指定する。例watch -n 5 コマンドは 5 秒ごと。最小は 0.1 秒。
-n で秒数を指定できるよ。5 秒ごとにしたいならこう。watch -n 5 ls -l
-n 0.5 で 0.5 秒ごと。最小は 0.1 秒まで。ただし間隔を短くしすぎると CPU に負担がかかるから、必要な速さで十分だよ。watch -n 0.5 ls -l
-n 1 のように間隔を短くすると、その分コマンドが頻繁に実行される。重いコマンド(大きなディレクトリファイルをまとめて整理する入れ物。Windows や macOS の「フォルダ」と同じもの。の集計など)を短間隔で回すと負荷が高くなるので注意。
4. 変化した部分を目立たせるには?(-d オプション)
結論:
-d(--differences)で前回からの変化部分がハイライトされる。-d=permanentで最初からの累積変化を保持表示する。
-d。前回の表示から変わった部分を反転表示で目立たせてくれるよ。watch -d ls -l
-d=permanent を使うと、一度変化した箇所をずっと強調したままにできる。「いつの間にか変わっていた場所」を後から把握したいときに便利だよ。watch -d=permanent ls -l
5. パイプやリダイレクトを使うときの注意(クォート)
結論:
|や>を含めたいときは全体をクォートで囲む。囲まないとシェル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。が先に解釈し、watchの出力にパイプがかかってしまう。
watch ls | wc -l と打ったら、変な動きになりました…watch ls の出力を wc -l に渡す」と解釈してしまうんだ。watch に ls | wc -l 全体を渡したいときは、こう書く。watch 'ls | wc -l'
ls | wc -l がまとめて watch に渡されるんですね。> やワイルドカード * など、シェルが特別扱いする記号を含むときも同じ。迷ったら「watch に渡すコマンド全体をシングルクォートで囲む」と覚えておくといいよ。覚え方: パイプや記号を使うなら watch 'コマンド全体'。クォートし忘れが watch のトラブルで一番多い。
6. ヘッダーを消す・色を活かす・変化で止める
結論:
-tで上部見出しを消す、-cで色付き出力を再現、-gで出力が変化した瞬間に終了できる。
-t(--no-title)で消せるよ。出力だけをすっきり見たいときに使う。watch -t ls -l
ls --color みたいに色を付けたコマンドだと、色が消えちゃうんですけど…-c(--color)を付けると、コマンドが出力した色(ANSI カラー)をそのまま表示してくれる。watch -c ls --color=always
-g(--chgexit)。出力が前回と変わった瞬間に watch を終了するんだ。「何かが変化したら知りたい」というときに使える。watch -g ls -l
主なオプションまとめ
| オプション | 意味 |
|---|---|
-n 秒 |
実行間隔を指定(既定 2 秒、最小 0.1 秒) |
-d |
前回からの変化をハイライト |
-d=permanent |
最初からの累積変化を保持表示 |
-t |
上部の見出しを消す |
-c |
コマンドの色(ANSI)を再現 |
-g |
出力が変化したら終了 |
-x |
sh -c を経由せず直接実行(引数の解釈に注意) |
7. watch を終了するには?
結論:
watchは止めるまで動き続ける。Ctrl + Cを押すと監視を終了して通常のプロンプトコマンドの入力を待っている状態を示す記号(例 $ や #)。に戻る。
Ctrl + C(コントロールキーを押しながら C)だよ。これで watch が終了して、いつものプロンプトに戻る。watch は自分で止めるまで延々と繰り返すからね。確認が終わったら Ctrl + C で止める、と覚えておけば大丈夫。8. よくある使いどころ
結論: ディスク容量・プロセス・ログ件数・ネットワーク接続など「時間とともに変わる数字」を目で追いたい場面で活躍する。
# ディスク使用量の変化を監視 watch df -h # 特定プロセスの数を監視(パイプはクォート) watch 'ps aux | grep nginx' # ログの行数が増えていくのを監視 watch 'wc -l /var/log/syslog' # ネットワーク接続数の変化を 5 秒ごとに監視 watch -n 5 'ss -tan | wc -l'
tail -f のほうが向いている。watch は「画面全体を定期的に撮り直す」、tail -f は「新しい行が出るたびに下に流す」。目的で使い分けよう。