内容が更新された、ファイルが転送された、消されたなどディレクトリを監視したい場合があります。そのような場合に便利なのがwatchコマンドです。watchコマンドはディレクトリ内容を監視するコマンドではなく、指定されたコマンドを定期的に実行します。lsなどと組み合わせて利用することで簡易的にディレクトリを監視できます。
なお、watchコマンドはmacOSには入っていません。Apple Watchというハードウェアはあるのにソフトウェアのコマンドとしてwatchは用意されていません。とは言え、watchコマンドがなくても検索するとシェルスクリプトで似たような機能を実現することもできます。検索するといくつか出てくるので、それらを利用するのも良いでしょう。

今回watchコマンドを実行するのはRaspberry Pi OS上です(一部Windows/macOSもあります)。Linux系であれば動作するので好みの環境・ディストリビューションで実行してください。今回は作業用のディレクトリなどは特にありません。ただし、監視対象とするディレクトリ等にはアクセス権があるというのが前提条件です。

現在のディレクトリを監視

 それでは現在のディレクトリを監視してみましょう。ここではデスクトップ上にあるsampleディレクトリにしてみます。現時点ではsampleディレクトリの内容は図のようになっていて何もファイル・ディレクトリ(フォルダ)はありません。

現在のディレクトリを監視するには以下のように入力します。

watch ls

コマンドを入力すると2秒毎にlsコマンドが実行されます。lsコマンドは現在のディレクトリ内容を表示するので、watchコマンドと組み合わせることでディレクトリの監視ができるということになります。
それでは、この監視中の状態のままsampleディレクトリに何かファイルを移動させてみましょう。デスクトップ上にあるファイルを1つ移動させます。

この状態でwatchとlsコマンドを実行しているターミナル(ウィンドウ)を確認してみましょう。移動したファイル名が表示されています。

watch lsとしているのでファイルの詳細情報は表示されません。ファイルの詳細情報も表示する場合はwatch ls -lのようにオプションを指定します。なお、現在実行しているwatchを停止するにはコントロールキーを押したままCキーを押します。

停止したのを確認したら以下のように入力します。

watch ls -l

今度はファイルの詳細情報もリアルタイムに表示されています。
なお、場合によってはシングルクオートでコマンドとオプションを囲まないと期待通りの結果にならない場合があります。

監視時間の間隔を調整する

 watchコマンドはデフォルトでは2秒間隔で与えられたコマンドを実行します。この間隔はオプションで指定することができます。
実行間隔を指定するにはnオプションを使います。-nの後に秒数を指定します。0.5など1秒よりも短い間隔にすることもできます。
以下のように指定すると5秒毎にディレクトリの内容が更新されます。

watch -n 5 ls -l

変更部分をハイライトする

 watchコマンドで監視していると、どこが変更されたか示してくれると便利だなと思うかもしれません。そんな時に便利なのがdオプションです。-dをつけると変更部分がハイライトされます。lsでは変更箇所がわかりにくいので仮想メモリやCPU、ディスクI/Oの統計情報を表示するvmstatコマンドで監視してみましょう。

watch -d vmstat

 ちなみにvmstatはwatchを使わなくても定期的に状態を表示することができます。vmstatの後に秒数を指定するだけです。以下のようにすると2秒ごとに情報が表示されていきます。

vmstat 2

 ちなみにmacOSの場合はvmstatではなくvm_statを使います。

vm_stat

 2秒間隔で表示する場合はvmstatと同様にコマンドの後に秒数を指定します。以下のようにすると2秒ごとに情報が表示されていきます。

vm_stat 2

プロセスを監視する

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら