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
リナ: 「Every 2.0s」って、2 秒ごとって意味ですね。その下にいつもの
ls -l の結果が出てます!ライニー先輩: そう。2 秒たつたびに中身が最新の状態に更新される。ファイルが追加されたり、サイズが変わったりすると、その場で反映されるんだ。
画面上部の見出しは「実行間隔・実行中のコマンド・ホスト名・現在時刻」を表す。コマンドが今も生きて動いていることの確認にもなる。
3. 実行間隔を変えるには?(-n オプション)
結論:
-n 秒数(または--interval)で間隔を指定する。例watch -n 5 コマンドは 5 秒ごと。最小は 0.1 秒。
リナ: 2 秒だとちょっと速い気がします。もっとゆっくりにできますか?
ライニー先輩:
-n で秒数を指定できるよ。5 秒ごとにしたいならこう。watch -n 5 ls -l
リナ: 逆に、もっと速く見たいときは?
ライニー先輩: 小数も使えるんだ。
-n 0.5 で 0.5 秒ごと。最小は 0.1 秒まで。ただし間隔を短くしすぎると CPU に負担がかかるから、必要な速さで十分だよ。watch -n 0.5 ls -l
-n 1 のように間隔を短くすると、その分コマンドが頻繁に実行される。重いコマンド(大きなディレクトリの集計など)を短間隔で回すと負荷が高くなるので注意。
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で出力が変化した瞬間に終了できる。
リナ: 上の「Every 2.0s…」の見出し、消せたりしますか?
ライニー先輩:
-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 は「新しい行が出るたびに下に流す」。目的で使い分けよう。