質問: コマンド(またはシェルスクリプト)を頻繁に(数秒ごとに)繰り返したい場合があります。 (同じコマンドを手動で入力し続ける代わりに) n 秒ごとに unix コマンドを実行するより良い方法はありますか?
答え: watch コマンドを使用すると、コマンドを実行し、その出力を数秒ごとに表示できます。これは、メモリ使用量、ディスク使用量などを監視する際に非常に役立ちます。
watch コマンドを使用して任意の Unix コマンドを実行できます。 Watch コマンドは、CTRL+C で終了するか、プロセスを強制終了するまで実行されます。
例 1:watch ls を使用してファイルの作成を監視する
バックグラウンド プロセスによってファイルが作成されることが予想される場合、またはログ ファイルのサイズが大きくなり続けることが予想される場合、ls コマンドを複数回実行することになる可能性があります。代わりに、以下に示すように、2 秒ごとに ls コマンドを実行する watch コマンドを使用できます。
$ watch ls Every 2.0s: ls Thu Apr 15 16:11:58 2010 flash-plugin-10.0.45.2-release.i386.rpm install_flash_player_10_linux.deb
watch コマンド出力の最初の行には、次のヘッダー情報が含まれています:
- 2.0 秒ごと :時間間隔。つまり、ls は 2 秒ごとに実行されます。
- ls :2 秒ごとに実行される Unix コマンド。
- Thu Apr 15 16:11:58 2010 :現在の日時。
残りの行は、watch が実行しているコマンドの出力です。この例では、ls コマンドの出力を表示しています。
例 2:使用済みメモリと空きメモリの詳細を表示する (違いを強調表示)
-d オプションは、連続する更新の違いを強調します。
$ watch -d free -om Every 2.0s: free -om Thu Apr 15 16:11:59 2010 total used free shared buffers cached Mem: 992 878
114
0 135 379
Swap: 4095 8 4087
システムでメモリ出力が変化しない場合は、date コマンドで -d オプションを試して、その動作を確認してください。
$ watch -d date
注意 :トップ コマンド出力の変更を強調表示できることをご存知ですか?
例 3:使用可能なディスク容量を表示する (10 秒ごとに繰り返す)
デフォルトでは、watch コマンドは 2 秒間隔を使用しますが、-n オプションを使用して変更できます。次の例では、df -h コマンドを 10 秒ごとに実行します。
$ watch -n 10 df -h Every 10.0s: df -h Thu Apr 15 16:12:26 2010 Filesystem Size Used Avail Use% Mounted on /dev/sda7 30G 8.6G 20G 31% / tmpfs 497M 964K 496M 1% /dev/shm /dev/sda6 194M 22M 163M 12% /boot
例 4:出力でウォッチ ヘッダーを非表示にする
以下に示すように、オプション -t を使用して、watch コマンド出力の 1 行目を非表示にすることができます。
$ watch -t ls flash-plugin-10.0.45.2-release.i386.rpm install_flash_player_10_linux.deb