「dfやfreeの結果を一定間隔で自動表示させたいが、やり方がわからない」
Linuxサーバーの運用では、ディスク容量やメモリ使用量、プロセスの状態など、刻々と変化する情報を繰り返し確認する場面が数多くあります。そのたびに手動でコマンドを打ち直していては、肝心の変化を見逃しかねません。
この記事では、
watch コマンドの基本的な使い方から、実行間隔の変更、差分ハイライト、実務でよく使う組み合わせ例、そしてトラブルシュートまでを解説します。while ループとの使い分けにも触れているので、用途に応じて最適な方法を選べるようになるはずです。RHEL 9 / Ubuntu 24.04 LTS で動作確認済みです。この記事のポイント
・watch コマンドは任意のコマンドをデフォルト2秒間隔で定期実行して結果を表示し続ける
・-n で間隔変更、-d で差分ハイライト、-g で変化検知終了に設定できる
・パイプを含むコマンドはシングルクォートで囲んで watch に渡す
・画面での目視監視は watch、ログ記録や条件分岐が必要な場合は while ループを使う
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
watchとは?コマンドを定期実行するツール
watch は、指定したコマンドを一定間隔(デフォルト2秒)で繰り返し実行し、その結果を画面に表示し続けるコマンドです。画面は毎回クリアされて最新の結果に置き換わるため、リアルタイムなモニタリングに最適です。top のようにインタラクティブなツールとは異なり、watch は任意のコマンドをそのまま定期実行できるのが強みです。df、free、ls、ps など、普段使い慣れたコマンドをそのまま監視対象にできます。# 基本書式 # watch [オプション] コマンド
watch コマンドは多くの Linux ディストリビューションで procps-ng(RHEL 系)または procps(Debian/Ubuntu 系)パッケージに含まれており、最小インストールを除けば通常は追加インストール不要です。# インストール確認(RHEL 9 / AlmaLinux 9 / Rocky Linux 9) $ rpm -q procps-ng procps-ng-3.3.17-14.el9.x86_64 # インストール確認(Ubuntu 24.04 LTS) $ dpkg -l procps | grep ^ii ii procps 2:4.0.4-4ubuntu3 amd64 /proc file system utilities
基本的な使い方
1. コマンドを2秒間隔で繰り返す
最もシンプルな使い方は、watch の後ろにコマンドを書くだけです。デフォルトで2秒ごとにコマンドが実行されます。# ディスク使用量を2秒おきに監視する $ watch df -h # 実行後の画面表示例 Every 2.0s: df -h server01: Sat Jun 7 10:00:00 2026 Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 7.7G 0 7.7G 0% /dev/shm tmpfs 3.1G 8.8M 3.1G 1% /run /dev/sda3 98G 24G 74G 25% / /dev/sda1 960M 300M 661M 32% /boot
2. 実行間隔を変更する(-n)
-n オプションで実行間隔を秒単位で指定できます。# 5秒間隔でメモリ使用量を監視する $ watch -n 5 free -h # 1秒間隔でプロセスを監視する $ watch -n 1 'ps aux | head -10' # 0.5秒間隔で監視する(小数点も指定可能) $ watch -n 0.5 date
3. 差分をハイライトする(-d)
-d(differences)オプションを付けると、前回の出力から変化した部分が反転表示されます。数値の変動を目視で追いたいときに重宝します。# 差分をハイライトしてディスク使用量を監視する $ watch -d df -h # メモリの変化をハイライト表示する $ watch -d free -m # 間隔と差分ハイライトを組み合わせる $ watch -d -n 3 df -h
4. ヘッダーを非表示にする(-t)
画面上部の「Every 2.0s:~」というヘッダー行が不要な場合は、-t で非表示にできます。# ヘッダーなしで表示する $ watch -t df -h
パイプやクォートを使うコマンドの書き方
5. パイプを含むコマンドを実行する
watch に渡すコマンドにパイプ(|)やリダイレクトが含まれる場合は、コマンド全体をシングルクォートで囲みます。# 特定プロセスの状態を監視する $ watch 'ps aux | grep httpd | grep -v grep' # 接続数をカウントする $ watch 'ss -tn state established | wc -l' # ログファイルの末尾を表示する $ watch 'tail -5 /var/log/messages' # メールキューのファイル数を監視する $ watch 'ls /var/spool/postfix/deferred | wc -l' # システムログの直近20行を5秒ごとに確認する $ watch -n 5 'journalctl -n 20 --no-pager'
watch ではなくシェルに解釈されてしまい、意図通りに動きません。パイプを使う場合は必ずクォートで囲んでください。6. 変数展開を使いたい場合
シングルクォートだとシェル変数が展開されません。変数を使いたい場合はダブルクォートを使います。# NG:シングルクォートでは変数が展開されない $ LOGFILE=/var/log/nginx/access.log $ watch 'tail -10 $LOGFILE' # $LOGFILEがそのまま文字列になる # OK:ダブルクォートで変数展開させる $ TARGET="/var/log/messages" $ watch "tail -5 $TARGET"
!、$ など)を使う場合はエスケープが必要になるため、パイプだけならシングルクォート、変数展開が必要ならダブルクォートと使い分けてください。応用・実務Tips
7. コマンドの終了コードが変わったら停止する(-g)
-g(chg-exit)オプションを使うと、コマンドの出力内容が変化した時点で watch が自動的に終了します。# 出力が変化したら終了する $ watch -g 'ls /tmp/target_dir | wc -l' # 特定ファイルが作成されたら終了する $ watch -g 'ls /var/run/app.pid 2>/dev/null' # 変化検知後に後続コマンドを実行する $ watch -g 'ls /tmp/done.flag 2>/dev/null' && echo "処理完了"
while true; do sleep 5; done で書くより、watch -g の方がすっきり書けます。8. ANSI色付きの出力を正しく表示する(-c)
監視対象のコマンドがカラー出力を含む場合、デフォルトではエスケープシーケンスがそのまま表示されて読みにくくなります。-c オプションでANSIカラーを解釈させます。# カラー出力を正しく表示する $ watch -c 'ls --color=always /var/log/' # エラーログをカラー強調して監視する $ watch -c 'grep --color=always ERROR /var/log/app.log | tail -20'
9. 実務でよく使う組み合わせ
現場のエンジニアが日常的に使うwatch の組み合わせを紹介します。# ディスク容量の変化を監視する(ログ肥大化の検知に) $ watch -d -n 10 df -h # 特定ディレクトリのサイズ推移を追跡する(rsync実行中など) $ watch -n 5 -d 'du -sh /var/backup/' # メモリ使用量を1秒ごとに監視する(メモリリーク調査に) $ watch -n 1 free -h # TCP接続数を監視する(DDoS対策の初動に) $ watch -n 2 'ss -tn state established | wc -l' # 80番ポートへの接続数に絞って監視する $ watch 'ss -nt state established dport = :80 | wc -l' # 上位プロセスをCPU使用率順に表示する $ watch -n 2 'ps aux --sort=-%cpu | head -11' # アクセスログの末尾を3秒ごとに確認する $ watch -n 3 'tail -20 /var/log/nginx/access.log' # 特定ディレクトリのファイル数を監視する(メールキューなど) $ watch 'ls /var/spool/postfix/active/ | wc -l' # ユーザーのログイン状況を監視する $ watch -d who
watch -d df -h を実行しておくと、どのパーティションが圧迫されているかが一目でわかります。メモリリーク調査では used の数値が右肩上がりに増え続けていれば、特定プロセスの詳細調査に移るサインです。whileループとの使い分け
watch と似た機能を while ループでも実現できます。どちらを使うべきかの判断基準を整理します。| 項目 | watch | whileループ |
|---|---|---|
| 用途 | 画面での対話的な監視 | スクリプトでの自動処理 |
| 画面クリア | 自動(全画面置換) | 手動でclearが必要 |
| 差分表示 | -dで標準搭載 | 自前実装が必要 |
| 結果の記録 | 画面表示のみ | ファイルに記録可能 |
| 条件分岐 | -gで終了のみ | if文で自由に制御 |
watch、結果をログに残したい・条件に応じて処理を分岐したいなら while ループが適しています。while ループの例はこちらです。# 5秒おきにディスク使用率を記録する(whileループ版) $ while true; do df -h / | tail -1 >> /tmp/disk_log.txt; sleep 5; done
「watch: command not found」が出た時の対処法
最小インストールの環境ではwatch が入っていないことがあります。procps-ng(RHEL系)または procps(Debian系)をインストールしてください。# RHEL 9 / AlmaLinux 9 / Rocky Linux 9 $ sudo dnf install procps-ng # CentOS 7 / RHEL 7 $ sudo yum install procps-ng # Ubuntu/Debian $ sudo apt install procps # インストール後の確認 $ which watch /usr/bin/watch $ watch --version watch from procps-ng 3.3.17
watch で実行するコマンド自体が見つからない場合は、watch がサブシェルで実行していることが原因の可能性があります。コマンドのフルパスを指定するか、which でパスを確認してください。# コマンドのフルパスを確認する $ which free /usr/bin/free # フルパスで指定する $ watch /usr/bin/free -h
トラブルシュート・よくある失敗パターン
パイプが機能しない(想定外の結果が出る)
パイプを含む場合はシングルクォートが必要です。まず単独でコマンドを実行して動作確認してからwatch に渡す習慣をつけると、デバッグが楽になります。# まず単独で動作確認する $ ps aux | grep nginx | grep -v grep # 問題なければ watch に渡す $ watch 'ps aux | grep nginx | grep -v grep'
シェル変数が展開されない
シングルクォートで囲むと、シェル変数は展開されません。変数を使いたい場合はダブルクォートに切り替えてください。# NG:$LOGFILE がそのまま文字列になる $ watch 'tail -10 $LOGFILE' # OK:ダブルクォートで変数を展開する $ LOGFILE=/var/log/nginx/access.log $ watch "tail -10 $LOGFILE"
-d オプションのハイライトが消える
-d オプションのハイライトは前回の出力と比較するため、2回目以降の実行から有効になります。最初の表示でハイライトが出ないのは正常な動作です。数秒待って変化が生じれば反転表示されます。カラー表示が出ない(grep --color など)
カラーエスケープシーケンスを有効にするには-c オプションが必要です。-c なしだと、ANSIエスケープコードが文字列としてそのまま画面に出てしまいます。# NG:-cなしではエスケープコードが生で表示される $ watch 'grep --color=always ERROR /var/log/app.log | tail -20' # OK:-c オプションでカラー解釈を有効にする $ watch -c 'grep --color=always ERROR /var/log/app.log | tail -20'
高頻度更新でCPU負荷が上がった
-n 0.1 のような超短間隔指定は CPU コアを大量消費することがあります。監視目的であれば -n 1 以上を推奨します。本番サーバーで使用する場合は5秒~10秒が目安です。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| コマンドを2秒おきに繰り返す | watch df -h |
| 実行間隔を変更する | watch -n 5 free -h |
| 変化した箇所をハイライトする | watch -d df -h |
| ヘッダーを非表示にする | watch -t df -h |
| パイプを含むコマンドを実行する | watch 'ps aux | grep httpd' |
| 出力が変化したら終了する | watch -g 'ls /tmp | wc -l' |
| ANSIカラーを正しく表示する | watch -c 'ls --color=always /var/log/' |
| コマンド失敗時に停止する | watch -e 'ls /var/run/app.pid' |
| 0.5秒間隔で高頻度監視する | watch -n 0.5 'cat /proc/loadavg' |
watchコマンドが使えると、次は「何を監視すべきか」という問いが生まれます
どのコマンドを監視すべきか判断するには、サーバー全体の設計を知る必要があります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:compress / uncompressコマンドでファイルを圧縮・解凍する方法|gzipとの違いやインストール手順も
- 前のページへ:curlコマンドでHTTP通信を行う方法|GET・POSTやヘッダー確認も
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます