watch コマンドの高度な機能
このステップでは、watch
コマンドのいくつかの高度な機能について学びます。これらの機能を使うと、監視タスクをより効率的に行うことができます。
まず、コマンドと現在時刻を表示するヘッダーを非表示にする -t
オプションを見てみましょう。
watch -n 3 -t date
ヘッダーが非表示になり、コマンドの出力のみがクリーンに表示されることがわかります。これは、出力の表示スペースを最大化したい場合に便利です。
Ctrl+C
を押して終了します。
次に、-g
または --chgexit
オプションを使った watch
の使い方を見てみましょう。このオプションを使うと、コマンドの出力が変化したときに watch
が終了します。
touch ~/project/test_change.txt
watch -g -n 1 "ls -l ~/project/test_change.txt"
このコマンドが実行されている間に、新しいターミナルを開き、ファイルを変更します。
echo "hello" > ~/project/test_change.txt
最初のターミナルの watch
コマンドは、ファイルの変更を検出すると自動的に終了するはずです。
もっと実用的な例を作ってみましょう。時折エラーが発生するログファイルをシミュレートするスクリプトを作成します。
nano ~/project/simulate_logs.sh
nano エディタで、以下の内容を入力します。
#!/bin/bash
LOG_FILE=~/project/application.log
## Initialize log file
echo "Starting log simulation" > $LOG_FILE
## Generate simulated log entries
for i in {1..10}; do
echo "[$(date)] - INFO: Normal operation $i" >> $LOG_FILE
sleep 1
## Occasionally generate an error
if ((i % 3 == 0)); then
echo "[$(date)] - ERROR: Something went wrong!" >> $LOG_FILE
fi
done
echo "Log simulation complete" >> $LOG_FILE
nano を保存して終了し (Ctrl+O
、Enter、Ctrl+X
)、スクリプトを実行可能にします。
chmod +x ~/project/simulate_logs.sh
では、watch
と grep
を使って、ログファイル内のエラーメッセージを監視しましょう。
watch -n 1 "grep ERROR ~/project/application.log || echo 'No errors found'"
別のターミナルで、ログシミュレーションスクリプトを実行します。
~/project/simulate_logs.sh
最初のターミナルで、ログファイルにエラーメッセージが表示される様子を見てみましょう。これは、watch
を使ってログをリアルタイムで監視する実用的な例です。
Ctrl+C
を押して watch コマンドを終了します。
最後に、watch
をバックグラウンドで実行し、その出力をファイルにリダイレクトする方法を見てみましょう。
watch -n 5 date > ~/project/date_output.txt 2>&1 &
このコマンドは、watch
コマンドをバックグラウンドで実行し、日付を 5 秒ごとに更新して出力をファイルに保存します。ファイルの内容を確認することができます。
cat ~/project/date_output.txt
バックグラウンドで実行されている watch プロセスを停止するには、その PID を見つけて終了させます。
ps aux | grep "watch -n 5 date"
kill <PID> ## Replace <PID> with the actual process ID number
これらの例は、様々な監視タスクに対する watch
コマンドの汎用性を示しています。