はじめに#
こんにちは!今回はwatchコマンドについて解説します。
watchはコマンドの実行結果を定期的に表示し、その変化を監視するコマンドです。ログファイルの更新を見守ったり、システムのリソース使用状況をリアルタイムで確認したりするのに便利ですね。
topコマンドみたいに、指定したコマンドを繰り返し実行して、変化を視覚的に見せてくれる感じです。めっちゃ便利!
watchコマンドとは#
watchは、指定したコマンドを定期的に実行し、その出力結果を画面に表示し続ける外部コマンドです。
デフォルトでは2秒ごとに実行結果を更新して表示します。ファイルの更新を監視したり、ディスク容量の変化をリアルタイムで見たり、ログファイルの最新の行を常に表示したりできます。
スクリーン全体がクリアされて、新しい実行結果が表示されるので、変化をすぐに見つけることができます。
基本構文#
コマンド: 繰り返し実行するコマンド
- デフォルト実行間隔: 2秒
主なオプション#
| オプション |
説明 |
-n |
実行間隔を秒で指定(デフォルト2秒) |
-d |
前回との差分をハイライト表示 |
-t |
タイトル行を非表示 |
-p |
スクリーンをクリアしない |
-c |
色付け出力を有効化 |
-e |
キープレスで終了(デフォルト) |
-x |
出力幅を指定 |
-y |
出力高さを指定 |
使用例#
例1: ディスク容量を監視#
実行結果:
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
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
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の実行を終了するには、以下のキーを押します:
差分表示で変化を追跡#
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'
システム監視やログファイルの追跡に便利なコマンド。リアルタイムで変化を見守りたい時には欠かせませんよ!