🎯 この記事で学べること
- 1watchコマンドの基本的な使い方をマスターできます
- 2コマンドの実行間隔を自由に設定できるようになります
- 3変更部分のハイライト表示機能が活用できます
- 4システム監視やログ監視に応用できます
- 5cronとの使い分けが理解できます
読了時間: 約10分
watchコマンドとは
watchコマンドは、指定したコマンドを定期的に実行し、その出力を画面に表示し続ける便利なツールですね。
システムの状態やファイルの変化をリアルタイムで監視したい時、手動で何度もコマンドを実行するのは大変ですよね。watchコマンドを使えば、自動で定期的にコマンドを実行して、結果を更新してくれます。デフォルトでは2秒ごとに更新されますよ!
基本的な使い方
基本構文
まずは、watchコマンドの基本的な使い方から見ていきましょう。とてもシンプルですよ:
# 基本的な使い方
watch command
# 日時を2秒ごとに表示
watch date
# ディレクトリの内容を監視
watch ls -la
# プロセスの状態を監視
watch 'ps aux | grep nginx'
💡 ポイント: パイプを含むコマンドはクォートで囲む必要があります。終了する時はCtrl+C
を押しましょう!
実行間隔の指定
デフォルトの2秒間隔を変更したい場合は、-n
オプションを使います:
# 1秒ごとに実行(-n オプション)
watch -n 1 date
# 5秒ごとに実行
watch -n 5 df -h
# 0.5秒ごとに実行(小数も指定可能)
watch -n 0.5 'ls -la | wc -l'
# 10秒ごとにメモリ使用状況を確認
watch -n 10 free -h
🎯 使い分けのコツ:
- 変化が速いものは短い間隔(0.5~1秒)
- システム負荷が高いコマンドは長い間隔(5~10秒)
便利なオプション
変更部分のハイライト(-d)
watchコマンドの便利な機能の一つが、変更部分のハイライト表示です。-d
オプションを使うと、前回の出力との差分が目立つように表示されます:
# 前回との差分をハイライト表示
watch -d ls -la
# ファイルサイズの変化を監視
watch -d 'du -sh *'
# ネットワーク接続の変化を監視
watch -d 'netstat -an | grep ESTABLISHED'
# プロセス数の変化を確認
watch -d 'ps aux | wc -l'
🔍 便利な使い方: ファイルの追加・削除やプロセスの起動・終了など、変化を見逃したくない時に特に便利です!
ヘッダーの非表示(-t)
# タイトル(ヘッダー)を非表示
watch -t date
# クリーンな出力
watch -t -n 1 'echo "CPU Usage:"; top -bn1 | head -5'
# 全画面表示に適した形式
watch -t 'cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable"'
実践的な使用例
システムモニタリング
システム管理では、リアルタイムでの監視が重要です。watchコマンドを使った実用的な例を見ていきましょう:
# CPU使用率の監視
watch -n 1 'top -bn1 | head -10'
# メモリ使用状況の監視
watch -n 2 'free -h'
# ディスク使用量の監視
watch -n 5 'df -h'
# ロードアベレージの監視
watch -n 1 'uptime'
# 総合的なシステム状態
watch -n 2 'echo "=== SYSTEM STATUS ==="; uptime; echo; free -h; echo; df -h /'
📋 実務でのポイント: システムに問題が発生した時、これらのコマンドでリアルタイム監視をすると、原因特定が素早くできますよ!
プロセス管理
# 特定プロセスの監視
watch -n 1 'ps aux | grep apache2 | grep -v grep'
# プロセス数のカウント
watch -n 2 'echo "Apache processes: $(pgrep -c apache2)"'
# メモリ使用量TOP10
watch -n 3 'ps aux --sort=-%mem | head -11'
# CPU使用量TOP10
watch -n 2 'ps aux --sort=-%cpu | head -11'
ネットワーク監視
# ネットワーク接続の監視
watch -n 1 'netstat -an | grep -c ESTABLISHED'
# 特定ポートの監視
watch -n 2 'lsof -i :80'
# ネットワークインターフェースの状態
watch -n 1 'ip -s link show'
# アクティブな接続の詳細
watch -n 2 'ss -tunap | grep ESTAB'
ファイルとディレクトリの監視
ファイルの変更監視
# ファイルサイズの監視
watch -n 1 'ls -lh /var/log/syslog'
# ログファイルの行数監視
watch -n 2 'wc -l /var/log/*.log'
# 最新のログエントリ
watch -n 1 'tail -5 /var/log/syslog'
# ディレクトリ内のファイル数
watch -n 2 'find /tmp -type f | wc -l'
ビルドプロセスの監視
# コンパイル状況の監視
watch -n 1 'ls -la *.o | wc -l'
# テスト実行状況
watch -n 2 'grep -c "PASS\|FAIL" test_results.log'
# ビルドディレクトリのサイズ
watch -n 5 'du -sh build/'
高度な使用方法
複雑なコマンドの実行
# パイプを含むコマンド(クォートが重要)
watch 'ps aux | grep python | wc -l'
# 複数コマンドの実行
watch 'date; echo "---"; df -h'
# 条件付き出力
watch 'if [ $(date +%S) -gt 30 ]; then echo "後半"; else echo "前半"; fi'
# シェル関数の利用
watch 'bash -c "function status() { echo Load: $(uptime | cut -d, -f4-); }; status"'
カラー出力の保持
# カラー出力を有効化(--color オプション)
watch --color 'ls --color=always -la'
# grepのカラー出力
watch --color 'grep --color=always "error" /var/log/syslog | tail -10'
# 複数のカラーコマンド
watch --color 'echo -e "\033[32mGreen\033[0m \033[31mRed\033[0m"'
エラー処理
# コマンドの終了ステータスを確認(-e オプション)
watch -e 'ping -c 1 google.com > /dev/null && echo "OK" || echo "NG"'
# エラー時に停止(-g オプション)
watch -g 'test -f /tmp/stop_watch && echo "File found!"'
# タイムアウトの設定
timeout 60 watch -n 1 'date'
実用的なスクリプト例
システムダッシュボード
#!/bin/bash
# システム状態ダッシュボード
watch -t -n 1 '
echo "=== System Dashboard - $(date) ==="
echo
echo "CPU Load: $(uptime | cut -d":" -f5)"
echo
echo "Memory Usage:"
free -h | grep -E "^Mem|^Swap"
echo
echo "Disk Usage:"
df -h | grep -E "^Filesystem|/$"
echo
echo "Top Processes:"
ps aux --sort=-%cpu | head -6
'
ログ監視スクリプト
#!/bin/bash
# エラーログ監視
LOG_FILE="/var/log/app.log"
watch -d -n 2 "
echo '=== Error Log Monitor ==='
echo
echo 'Last 5 errors:'
grep ERROR $LOG_FILE | tail -5
echo
echo 'Error count: $(grep -c ERROR $LOG_FILE)'
echo 'Warning count: $(grep -c WARN $LOG_FILE)'
"
デプロイメント監視
#!/bin/bash
# デプロイ状況の監視
watch -n 1 '
echo "Deployment Status"
echo "================"
echo
echo "Running containers:"
docker ps --format "table {{.Names}}\t{{.Status}}" | head -10
echo
echo "Latest logs:"
docker logs --tail 5 app-container 2>&1
'
🎮 理解度チェック
Q1: watchコマンドで実行間隔を指定するオプションは?
Q2: 前回の出力との差分をハイライト表示するオプションは?
Q3: watchコマンドのデフォルトの更新間隔は?
cronとの使い分け
watchとcronはどちらも定期実行を行いますが、用途が異なります。適切に使い分けましょう:
watchが適している場合
# リアルタイム監視が必要
watch -n 1 'tail -n 20 /var/log/syslog'
# 一時的な監視
watch -n 2 'ps aux | grep deployment'
# インタラクティブな確認
watch -d 'ls -la /tmp/'
cronが適している場合
# 定期的なバックアップ
# crontab -e
0 2 * * * /backup/script.sh
# ログローテーション
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf
# 定期レポート生成
0 9 * * 1 /reports/weekly_report.sh
💡 使い分けのポイント:
- watch: 人が画面を見ながらリアルタイム監視
- cron: バックグラウンドでの自動実行
トラブルシューティング
よくある問題と解決方法
# 画面がちらつく場合
# ターミナルサイズを調整
watch -n 1 'resize; your_command'
# 特殊文字が表示されない
# エスケープシーケンスを有効化
watch --color 'echo -e "\033[1mBold text\033[0m"'
# コマンドが見つからない
# フルパスを指定
watch -n 1 '/usr/bin/custom_command'
# 出力が切れる
# 画面サイズに合わせて調整
watch -n 1 'your_command | head -20'
パフォーマンスの考慮
# CPU負荷の高いコマンドは間隔を長く
watch -n 10 'find / -name "*.log" 2>/dev/null'
# 出力が多い場合は必要な部分だけ
watch -n 2 'ps aux | head -20'
# ネットワークを使うコマンドは控えめに
watch -n 30 'curl -s http://example.com/status'
ベストプラクティス
効果的な使い方
- 適切な間隔の設定: システムに負荷をかけない範囲で
- 出力の整形: 見やすい形式に加工
- 差分の活用: -dオプションで変化を把握
- エラー処理: -eや-gオプションで異常を検知
セキュリティの考慮
# パスワードを含むコマンドは避ける
# 悪い例
watch 'mysql -u root -ppassword -e "SHOW STATUS"'
# 良い例(設定ファイルを使用)
watch 'mysql --defaults-file=~/.my.cnf -e "SHOW STATUS"'
# ログファイルは適切な権限で
watch -n 5 'sudo tail -n 20 /var/log/secure'
📝 まとめ
今回はwatch
コマンドについて学びました!
watchコマンドは、シンプルながらシステム管理や開発作業において非常に強力なツールでしたね。覚えておきたいポイントをまとめます:
- デフォルトは2秒ごとにコマンドを実行
- -nオプションで実行間隔を変更できる
- -dオプションで変更部分をハイライト表示
- パイプを含むコマンドはクォートで囲む
- Ctrl+Cで終了
- リアルタイム監視にはwatch、バックグラウンド実行にはcron
watchコマンドを使いこなせば、システム監視、ログ確認、プロセス管理、ファイル監視など、様々なタスクが効率的に行えるようになります。
次はtopコマンドで、より詳細なシステム監視方法を学んでみましょう!