コマンドを繰り返し実行することが必要になる場合もある。例えば、Linuxサーバ上で奇妙な挙動に気づいて、サーバ上のメモリ使用かI/Oのいずれかに原因があるかもしれないと疑っている場合や、ディレクトリ内で実行される変更を監視したい場合などだ。watchと呼ばれる便利なコマンドを利用すれば、かなり簡単にそうした状況に対処できる。
watchコマンドはほぼ全てのLinuxディストリビューションに標準でインストールされており、手軽に利用できる非常に便利なツールである。本記事では、watchについて解説する。ぜひ読者のLinux管理タスクに役立ててほしい。
watchの機能
watchコマンドは一定間隔でのプログラムの実行を可能にし、コマンドの出力を特定の間隔で表示する。watchは、tailコマンドを使ってログファイルを確認するプロセスに似ていると考えてほしい。唯一異なるのは、出力がファイルではなく別のコマンドからもたらされることだ。そのため、コマンドの出力が時間の経過と共に変わっていくのを確認できる。初期状態だと、プログラムが2秒おきに実行される。したがって、dateコマンドの出力が2秒おきに変わるのを確認したければ、以下のコマンドを実行するといい。
watch date
watchコマンドは2秒おきにdateコマンドを実行し、出力をターミナルウィンドウに表示する(図A)。

図A:watchでdateコマンドを実行。
この画面から出るには、キーボードの「Ctrl」+「c」を押す。
watchを活用する
もちろん、watchでdateコマンドを実行してもあまり役に立たない(どうしてもターミナルに時計が欲しいのなら話は別だが)。このコマンドを有効に活用しよう。例えば、マシン上のメモリに関連する問題に気づいたとしよう。この場合、freeコマンド(システムの使用メモリと空きメモリの量を表示する)をwatchと組み合わせると、メモリの現在の状況を把握できる。これを行うには、以下のコマンドを実行する。
watch free
freeコマンドは2秒おきに実行され、出力をターミナルに表示するので、ユーザーがこのコマンドを繰り返し実行する必要はない(図B)。

図B:watchでfreeを実行。
基本的なwatchコマンドを実行することに関しては(特にfreeのようなプログラムと一緒に使うと)、1つ問題がある。実行前と実行後で何が変わったのか分かりにくい場合があることだ。幸い、-dオプションを使えば、それを分かりやすくすることができる。watch -d freeを実行すれば、freeコマンドが実行されるたびに、出力の変更箇所が強調表示されるようになる(図C)。

図C:出力の視認性が大幅に向上した。
これで、出力の変更箇所を示す強調表示部分に注目するだけでよくなった。初回実行時からの全ての変更箇所を強調表示させたい場合は、以下のように=cumulativeオプションを追加するといい。
watch -d=cumulative free
-d=cumulativeオプションを使えば、強調表示部分の追跡がさらに容易になる。
だが、プログラムを2秒おきに実行する必要がない場合は、どうすればいいのだろうか。-nオプションを使えば、アプリケーションを実行する間隔を(秒単位で)定義することができる。例えば、freeコマンドを5秒おきに実行したい場合は、以下のコマンドを実行するといい。
watch -d -n 5 free
watchの有効な使い方の1つは、ファイルの変更を監視することだ。例えば、特に重要なディレクトリ(クライアントのデータ用のディレクトリなど)があり、そこに含まれるファイルやサブディレクトリに異変が起きている疑いがあるとしよう。この場合は、以下のコマンドを実行する(DIRECTORYの部分は、監視対象のディレクトリに置き換える)。
watch -d=cumulative ls -l /DIRECTORY
このコマンドは、そのディレクトリの中身を2秒おきにリスト表示し、変更箇所を強調表示する。(変更されるべきでない)許可設定が変更されていたら、何かが起きている可能性がある。この機能は非常に便利だ。
シンプルだが効果的なツール
watchコマンドは画期的な機能というほどではないが、Linuxサーバのトラブルシューティングや管理に効果的なツールであることは確かだ。watchの機能についてさらに詳しく知りたい人は、man watchコマンドを実行して、マニュアルページを熟読してほしい。

提供:Jack Wallen
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。