はじめに

こんにちは!今回はwatchコマンドについて解説します。

watchはコマンドの実行結果を定期的に表示し、その変化を監視するコマンドです。ログファイルの更新を見守ったり、システムのリソース使用状況をリアルタイムで確認したりするのに便利ですね。

topコマンドみたいに、指定したコマンドを繰り返し実行して、変化を視覚的に見せてくれる感じです。めっちゃ便利!


watchコマンドとは

watchは、指定したコマンドを定期的に実行し、その出力結果を画面に表示し続ける外部コマンドです。

デフォルトでは2秒ごとに実行結果を更新して表示します。ファイルの更新を監視したり、ディスク容量の変化をリアルタイムで見たり、ログファイルの最新の行を常に表示したりできます。

スクリーン全体がクリアされて、新しい実行結果が表示されるので、変化をすぐに見つけることができます。


基本構文

1
watch [オプション] コマンド
  • コマンド: 繰り返し実行するコマンド
  • デフォルト実行間隔: 2秒

主なオプション

オプション 説明
-n 実行間隔を秒で指定(デフォルト2秒)
-d 前回との差分をハイライト表示
-t タイトル行を非表示
-p スクリーンをクリアしない
-c 色付け出力を有効化
-e キープレスで終了(デフォルト)
-x 出力幅を指定
-y 出力高さを指定

使用例

例1: ディスク容量を監視

1
watch df -h

実行結果:

1
2
3
4
5
6
Every 2.0s: df -h                                       Fri Jan 03 12:00:00 2026

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   30G   20G  60% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sda2       100G   50G   50G  50% /home

ディスク使用量を2秒ごとに表示します。

例2: 5秒ごとにファイル一覧を表示

1
watch -n 5 'ls -la /tmp'

実行結果:

1
2
3
4
5
6
7
Every 5.0s: ls -la /tmp                                 Fri Jan 03 12:00:00 2026

total 24
drwxrwxrwt 10 root   root    4096 Jan  3 12:00 .
drwxr-xr-x 13 root   root    4096 Jan  3 08:00 ..
-rw-r--r--  1 user   user    1024 Jan  3 11:59 file1.txt
-rw-r--r--  1 user   user    2048 Jan  3 11:58 file2.txt

実行間隔を5秒に指定します。

例3: メモリ使用状況を監視(差分表示)

1
watch -d free -h

実行結果:

1
2
3
4
5
Every 2.0s: free -h                                     Fri Jan 03 12:00:00 2026

              total        used        free      shared  buff/cache   available
Mem:          7.7Gi       3.2Gi       2.5Gi       512Mi       2.0Gi       4.0Gi
Swap:         2.0Gi          0B       2.0Gi

差分部分がハイライトされます。前回との違いが一目瞭然です。

例4: ログファイルの最新行を監視

1
watch -n 1 'tail -5 /var/log/syslog'

実行結果:

1
2
3
4
5
6
7
Every 1.0s: tail -5 /var/log/syslog                    Fri Jan 03 12:00:00 2026

Jan  3 12:00:00 hostname kernel: [1234.567] Message 1
Jan  3 12:00:01 hostname kernel: [1235.000] Message 2
Jan  3 12:00:02 hostname kernel: [1235.500] Message 3
Jan  3 12:00:03 hostname systemd[1]: Service started
Jan  3 12:00:04 hostname systemd[1]: Task completed

ログファイルの最新5行を1秒ごとに表示します。

例5: プロセス情報を監視

1
watch 'ps aux | head -10'

実行結果:

1
2
3
4
5
6
Every 2.0s: ps aux | head -10                          Fri Jan 03 12:00:00 2026

USER       PID %CPU %MEM    VSZ   RSS TTY STAT START   TIME COMMAND
root         1  0.0  0.1  19808  3104 ?   Ss   08:00   0:02 /sbin/init
root         2  0.0  0.0      0     0 ?   S    08:00   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?   I    08:00   0:00 [kworker/0:0]

実行中のプロセスを監視できます。

例6: ネットワークインターフェース統計を監視

1
watch -n 1 'netstat -i'

実行結果:

1
2
3
4
5
6
Every 1.0s: netstat -i                                  Fri Jan 03 12:00:00 2026

Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0      1500  1234567      0      0      0   987654      0      0      0 BMRU
lo       65536  2345678      0      0      0  2345678      0      0      0 LRU

ネットワークインターフェースの統計情報をリアルタイムで確認できます。

例7: ユーザーログイン状況を監視

1
watch 'who'

実行結果:

1
2
3
4
5
Every 2.0s: who                                         Fri Jan 03 12:00:00 2026

user1    tty1         2026-01-03 08:00
user2    pts/0        2026-01-03 10:30 (192.168.1.100)
admin    pts/1        2026-01-03 11:45 (10.0.0.50)

現在ログインしているユーザーを監視します。

例8: ファイルサイズの変化を監視

1
watch -d 'ls -lh /var/log/apache2/access.log'

実行結果:

1
2
3
Every 2.0s: ls -lh /var/log/apache2/access.log        Fri Jan 03 12:00:00 2026

-rw-r--r-- 1 root root 125M Jan  3 12:00 /var/log/apache2/access.log

ファイルサイズの増加を視覚的に追跡できます。

例9: 実行結果をクリアしないで表示

1
watch -p 'echo "$(date): Process check" && ps aux | wc -l'

実行結果:

1
2
3
4
5
6
7
Every 2.0s: echo "$(date): Process check" && ps aux | wc -l
Fri Jan 03 12:00:00 2026: Process check
145
Fri Jan 03 12:00:02 2026: Process check
145
Fri Jan 03 12:00:04 2026: Process check
146

前の出力が消えずに積み重なります。

例10:複数コマンドを組み合わせて監視

1
watch 'echo "=== Disk Usage ===" && df -h / && echo "=== Free Memory ===" && free -h | head -2'

実行結果:

1
2
3
4
5
6
7
8
Every 2.0s: echo "=== Disk Usage ===" && df -h / && echo "=== Free Memory ===" && free -h | head -2
Fri Jan 03 12:00:00 2026

=== Disk Usage ===
Filesystem     Size Used Avail Use% Mounted on
/dev/sda1       50G  30G   20G  60% /
=== Free Memory ===
              total        used        free

複雑なコマンドも監視できます。


Tips・注意点

シェル機能を使う場合はシングルクォートで囲む

1
2
3
4
5
# 正しい
watch 'ls -la | grep txt'

# 間違い(パイプが展開されない)
watch ls -la | grep txt

複雑なコマンドを実行する場合は、必ずシェルコマンドをシングルクォートで囲みます。

終了方法

watchの実行を終了するには、以下のキーを押します:

  • q: 終了
  • Ctrl+C: 強制終了

差分表示で変化を追跡

1
watch -d 'curl -s https://example.com | wc -l'

-dオプションで、前回との差分が色付けされます。大きなログファイルの監視に便利。

高い頻度での実行は避ける

1
2
# やめた方がいい
watch -n 0.1 'some command'

実行間隔を短くしすぎると、システムに負荷がかかります。通常は1秒以上の間隔がいいでしょう。


実践的な使い方

ファイルダウンロード進捗の監視

1
watch -d 'ls -lh ~/Downloads | tail -5'

ダウンロードファイルのサイズ変化をリアルタイムで確認できます。

ビルド進行状況の監視

1
watch -n 1 'ls -lR build/ | tail -10'

ビルドプロセス中に、生成されるファイルを監視します。

ログファイルの更新を監視

1
watch -d 'tail -20 /var/log/application.log | tail -n 20'

アプリケーションのログをリアルタイムで追跡できます。

データベースの接続数を監視

1
watch 'mysql -e "SHOW PROCESSLIST;" | wc -l'

データベースへの接続数の変化を見守ります。

ディスク I/O の監視

1
watch -n 1 'iostat -x 1 1 | tail -5'

ディスクI/Oの統計情報をリアルタイムで表示します。


まとめ

watchコマンドのポイント:

  • コマンド実行結果を定期的に更新して表示
  • デフォルト実行間隔は2秒(-nで変更可能)
  • -d: 差分をハイライト表示
  • -n: 実行間隔を指定
  • -p: 画面をクリアしない
  • 複雑なコマンドはシングルクォートで囲む
  • よく使う組み合わせ: watch -d 'df -h', watch -n 1 'tail -f logfile'

システム監視やログファイルの追跡に便利なコマンド。リアルタイムで変化を見守りたい時には欠かせませんよ!