Linux基本コマンドTips(220):【 watch 】コマンド――コマンドを一定間隔で繰り返し実行する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、コマンドを一定間隔ごとに繰り返し実行する「watch」コマンドです。

» 2018年06月29日 05時00分 公開
[西村めぐみ@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はコマンドを一定間隔ごとに繰り返し実行する「watch」コマンドです。

watchコマンドとは?

 「watch」は、引数として指定したコマンドを一定間隔ごとに繰り返し実行するコマンドです。実行結果をフルスクリーンで表示し、[CTRL]+[C]で終了します。



watchコマンドの書式

watch [オプション] コマンド

※[ ]は省略可能な引数を示しています




watchの主なオプション

短いオプション 長いオプション 意味
-t --no-title ヘッダを表示しない
-e --errexit エラー時(実行したコマンドエラーコード0以外で終了したとき)はwatchコマンドも終了する
-b --beep エラー時にはビープ音を鳴らす
-d --differences 直前の実行結果から変化した箇所をハイライト表示する。「permanent」または「cumulative」オプションを付けると初回実行時から変化した箇所を表示する(「-d=permanent」のように指定)
-c --color ANSIによるスタイル指定を行う
-g --chgexit 実行結果が変化したらwatchコマンドを終了する
-n 秒数 --interval 秒数 実行間隔を秒数で指定する(設定できる最小値と最小間隔は0.1秒)
-p --precise 実行のタイミングを厳密にする
-x --exec 指定したコマンドを「sh -c」ではなく「exec」コマンドで実行する


コマンドを一定間隔ごとに実行する

 「watch コマンド」では、コマンドを2秒間隔ごとに繰り返し実行します。間隔を変更したい場合は「-n 秒数」のように指定します。

 watchコマンドは実行結果をフルスクリーンで表示し、実行するごとに画面全体を更新します。画面の1行目には実行間隔とコマンド名、開始時刻を表示します。この部分を表示したくない場合は「-t」オプションを指定します。

 画面1では、「watch date」として現在の時刻を表示するdateコマンド(連載第77回)を繰り返し実行しています。

コマンド実行例

watch コマンド

(コマンドを2秒間隔で繰り返し実行する)

watch -n 1 コマンド

(コマンドを1秒間隔で繰り返し実行する)

画面1 画面1 dateコマンドを繰り返し実行したところ


変化した箇所をハイライト表示する

 直前の実行結果と比較して、変化した箇所だけをハイライト表示するには、「-d」オプションを使います。「-d=permanent」とすれば、初回実行時から変化した箇所全てをハイライト表示できます。

 画面2では「watch -d date」を実行しました。秒数を表示している箇所のうち、直前の実行時と秒の内容(5)が異なるため、ハイライト表示になっています。

 watchコマンドのマニュアルでは、「-d」を使った実行例として、ディレクトリの中身の変化を監視する「watch -d ls -l」や、ユーザーjoeの所有するファイルだけを監視する「watch -d 'ls -l | fgrep joe'」を紹介しています。

コマンド実行例

watch -d コマンド

(直前の実行結果から変化した箇所をハイライト表示する)

画面2 画面2 直前の実行箇所との違いをハイライト表示したところ


コマンド指定時の引用符の効果を確かめる

 watchで指定したコマンドは「sh -c」が実行しています。このため、指定したコマンドの引数の中で環境変数やシェル変数を参照したいなど、引用符を使いたい場合は、適宜引用符を補う必要があります。watchコマンドのマニュアルでは「echo $$」を使った例に触れています。

 例えばwatchコマンド実行中に呼び出されるシェルのプロセスIDを表示したい、とします。「watch echo $$」と実行すると、事前に「$$」が展開されてしまい、現在端末で使用しているシェルのプロセスIDが「1000」だった場合、「watch echo 1000」を実行します(※1)。これでは、watchコマンドを実行したシェルのプロセスIDを繰り返し表示する(echo 1000を繰り返す)だけで、出力結果が変化しません。

 これに対し、「watch echo '$$'」を実行した場合は、「echo $$」を2秒間隔で実行します。その結果、echoコマンドを実行しているシェルのIDが刻々と変化する様子を表示できます。

※1 「$$」は実行中のシェルのプロセスIDを格納した特殊変数。




筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。

Copyright © ITmedia, Inc. All Rights Reserved.

Linux & OSS 記事ランキング

本日月間

注目のテーマ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。