watchコマンド: 使い方と-n間隔、-d強調、出力が変わったら終了

テスト環境RHEL系AlmaLinux 9.8procps-ng 3.3.17rootアカウントDebian 12 · procps-ng 4.0.2 一般ユーザー
プロセス・ジョブ予約コマンドwatch場所/usr/bin/watch2026-11-05 確認
コマンド出力の変化を確認するコマンド

watchコマンドは、指定したコマンドを2秒ごとに実行し直し、その出力をターミナル画面全体に描き直すLinuxコマンドです。AlmaLinux 9サーバーで別のウィンドウからファイルを変えながらwatchで見たところ、-dオプションは変わった文字を強調し、-gオプションは出力が変わった後にwatchを終了しました。

以下の出力はAlmaLinux 9.8サーバー(rootアカウント)の作業フォルダーで実行した結果で、Debian 12サーバーではバージョンだけを確認しました。画面最上部のヘッダー行のホスト名は例の値server1に変え、時刻はUTCで出力しました。

1️⃣ watchコマンドの使い方

  • ↪️ 既定の2秒間隔とCtrl+Cでの終了

watchの後ろに繰り返し実行するコマンドを書くと、オプションがない場合は2秒ごとにそのコマンドを実行して画面を新しい出力に置き換えます。dateを見ると画面の最上部にヘッダー行が表示され、1行空けてdateの出力が続きました。

watch date
Every 2.0s: date                                                   server1: Thu Oct 29 02:28:07 2026

Thu Oct 29 02:28:07 UTC 2026

ヘッダー行の左側は更新間隔と実行中のコマンド、右側はホスト名と最後に実行した時刻です。2秒後に同じ画面をもう一度確認すると、ヘッダー行の時刻とdateの出力がそろって変わっていました。

Every 2.0s: date                                                   server1: Thu Oct 29 02:28:09 2026

Thu Oct 29 02:28:09 UTC 2026

watchは自分で終了するまで実行し続けるため、Ctrl+Cで終了します。Ctrl+Cを押すとwatchの画面が消え、プロンプトが戻りました。続けて確認した終了コードは0でした。

echo $?
0

watchは、一度出力して終わるコマンドを繰り返し実行するときに使います。プロセスごとにCPUとメモリの使用量が変わる様子を見るなら、画面を自分で描き直す top コマンドが向いています。

watchはprocps-ngパッケージに含まれるコマンドです。バージョンは[watch -v]で確認でき、AlmaLinux 9.8サーバーは3.3.17、Debian 12サーバーは4.0.2でした。

watch -v
watch from procps-ng 3.3.17
watch -v
watch from procps-ng 4.0.2

2️⃣ watchの間隔と強調オプション

  • ↪️ -n間隔、-d強調、-tでヘッダー行を消す

-nの後ろに秒数を書くと更新間隔が変わります。[watch -n 1 date]で実行すると、ヘッダー行の左側がEvery 1.0sに変わりました。

watch -n 1 date
Every 1.0s: date                                                   server1: Thu Oct 29 02:28:15 2026

Thu Oct 29 02:28:15 UTC 2026

manページによると、間隔は0.1秒より短くできず、それより小さい値は0.1秒になります。小数点はピリオドとカンマのどちらも認識します。

-dは直前の更新と違う文字を強調します。作業フォルダーのsize.logを[ls -l]で見ている間に、別のウィンドウからこのファイルに1行追加しました。

watch -d -n 1 ls -l size.log
Every 1.0s: ls -l size.log                                         server1: Thu Oct 29 02:28:53 2026

-rw-r--r-- 1 root root 7 Oct 29 02:28 size.log
printf 'line 2\n' >> size.log

ファイルサイズが7から14に変わると、サイズの欄から行末までが強調されました。数字が1桁増えて、その後ろの文字がすべて1文字ずつずれたためです。次の更新では値が同じだったので強調が消えました。

Every 1.0s: ls -l size.log                                         server1: Thu Oct 29 02:28:54 2026

-rw-r--r-- 1 root root 14 Oct 29 02:28 size.log

最初の実行と比べて変わった箇所を強調し続けるには[--differences=permanent]を使います(manページ基準)。

-tはヘッダー行とその下の空行をなくし、コマンドの出力だけを残します。

watch -t -n 1 date
Thu Oct 29 02:28:19 UTC 2026

3️⃣ watchコマンドの終了条件とオプション

  • ↪️ -gの出力変化と-eのエラー

-gはコマンドの出力が変わるとwatchを終了します。状態ファイルの内容が変わるのを待ってから次の作業に進むときに使います。

watch -g -n 1 cat status.txt
Every 1.0s: cat status.txt                                         server1: Thu Oct 29 02:29:12 2026

running

別のウィンドウから、下のコマンドでstatus.txtの内容をdoneに変えました。

printf 'done\n' > status.txt

するとwatchが終了してプロンプトが戻り、終了コードは0でした。

echo $?
0

-eはコマンドが0以外の終了コードで終わると画面の更新を止めます。作業フォルダーにないファイルをlsで見ると、lsのエラー出力とともに、画面の最下行にキーを押すと終了するという案内が表示されました。

watch -e -n 1 ls nofile.txt
Every 1.0s: ls nofile.txt                                          server1: Thu Oct 29 02:29:18 2026

ls: cannot access 'nofile.txt': No such file or directory










command exit with a non-zero status, press a key to exit

ヘッダー行の時刻は実行直後の時刻で止まっていて、キーを1つ押すとwatchが終了しました。このときの終了コードは8でした。

echo $?
8

manページは終了コード8を、コマンドがエラーで終わった場合を含む値として説明しています。

📌 主なオプション: この記事で実行した結果

オプション作業この記事で確認した結果
-n 秒更新間隔を変える(既定は2秒)ヘッダー行がEvery 1.0sに変わった
-d直前の更新と違う文字を強調ファイルサイズ7 → 14でその欄から行末まで強調、次の更新で消えた
-tヘッダー行とその下の空行を消すdateの出力1行だけが残った
-g出力が変わるとwatchを終了running → doneの後に終了、終了コード0
-eコマンドがエラーで終わると画面を止めるキーを押すと終了、終了コード8
-vバージョン情報を出力AlmaLinux 9.8サーバーはwatch from procps-ng 3.3.17、Debian 12サーバーはwatch from procps-ng 4.0.2

📎 その他のオプション: 公式マニュアルより

オプション作業
-bコマンドが0以外の終了コードで終わるとビープ音を鳴らす
-cANSIの色と文字スタイルのコードを解釈し、コマンド出力の色をそのまま出力
-p間隔ごとに実行するよう合わせ、更新時刻が後ろにずれないようにする
-xコマンドをsh -cの代わりにexecで実行し、引用符を減らせる
-w長い行を次の行に折り返さず切って出力
--differences=permanent最初の実行以降に変わった箇所をすべて強調し続ける
-hヘルプを出力

4️⃣ watchコマンドの引用符とパイプ

  • ↪️ シングルクォートで囲む方法とディスク使用量の監視

watchは受け取ったコマンドをsh -cで実行するため、 パイプ(|)や$を含むコマンドは、コマンド全体をシングルクォートで囲みます。作業フォルダーのファイル数を[ls | wc -l]で見ると、ヘッダー行にパイプまで含めたコマンド全体が表示されました。

watch -n 1 'ls | wc -l'
Every 1.0s: ls | wc -l                                             server1: Thu Oct 29 02:30:22 2026

6

別のウィンドウでファイルを1つ作ると、次の更新で数字が6から7に変わりました。

printf 'c\n' > q3.txt
Every 1.0s: ls | wc -l                                             server1: Thu Oct 29 02:30:24 2026

7

引用符なしで[watch -n 1 ls | wc -l]と入力すると、シェルが先にパイプを分けるため、watchの画面出力全体がwcに渡ります。そのため、監視するコマンドにパイプがあるときはコマンド全体を引用符で囲みます。

$も同じルールに従います。引用符なしで[watch -n 1 echo $$]を実行すると、今のシェルが先に$$を数字に置き換え、ヘッダー行のコマンドにもその数字が表示されました。

watch -n 1 echo $$
Every 1.0s: echo 3755802                                           server1: Thu Oct 29 02:29:37 2026

3755802

シングルクォートで囲むと$$がそのまま渡るため、ヘッダー行にはecho $$が表示され、更新のたびに新しく実行したshのPIDが出力されました。

watch -n 1 'echo $$'
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:40 2026

3756270
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:41 2026

3756333

今のシェルのPIDを[echo $$]で確認すると、引用符なしで実行したときに固定されていた数字と同じでした。

echo $$
3755802

ディスク使用量のようにゆっくり変わる値は、間隔を数秒にして監視します。 duコマンドの-sは合計だけを、-hはK・Mのような単位で出力します。作業フォルダーを[du -sh .]で見ている間に別のウィンドウからログファイルに8,001バイト追加すると、次の更新で28Kが36Kに変わりました。

watch -n 2 du -sh .
Every 2.0s: du -sh .                                               server1: Thu Oct 29 02:30:34 2026

28K     .
printf '000d\n' 0 >> grow.log
Every 2.0s: du -sh .                                               server1: Thu Oct 29 02:30:36 2026

36K     .

🔲 watchコマンドシミュレーター

下のシミュレーターでwatchを実行したあと、[🖊 別のウィンドウ]チップでファイルを変えながら、画面がどう変わるかを直接確かめられます。

watchコマンドシミュレーターprocps-ng 3.3.17
[root@server work]#
ブラウザーの中だけで動作します。watch画面では「別のウィンドウ」チップでファイルを変えてみて、Ctrl+Cで終了します。

🔢 FAQ & おすすめコンテンツ

manページによると、環境変数WATCH_INTERVALに秒数を入れておくと、-nを書かなかったときにその値を間隔として使います。値のルールは-nと同じで、0.1秒より短くはできません。

manページによると、watchは出力に含まれる制御文字を取り除いてから描画します。色付きで出力するコマンドを監視するときに色まで見るには、[watch -c]のように-cを付けます。

manページによると、既定の実行では更新のたびに時刻の秒未満の部分が少しずつ増えます。-pを付けると間隔ごとに実行するよう合わせるため、その部分がほぼ同じ値に保たれます。

ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

人間であることを証明してください: 3   +   3   =