#26 指定ディレクトリ以下のファイル変更を監視 : inotifywait

 [公開]
icon incmplt - Info Circus が 2025/08/18 6:46 に投稿

Linux で指定したディレクトリ以下の iノードを監視し、ファイルへのアクセスがあったかを検出するスクリプトを作成するには、inotifywait コマンドを使用するのが最も効率的です。 inotifywait は、ファイルシステムのイベントを監視し、指定されたディレクトリ内のファイルの変更を検出できます。

以下に、inotifywait を使用してファイルへのアクセスを監視するスクリプトの例を示します。

#!/bin/bash

# 監視対象ディレクトリ
DIRECTORY="/path/to/directory"

# イベントの種類 (ACCESS, MODIFY, CREATE, DELETE など)
EVENTS="access"  # アクセスイベントのみを監視

# ログファイル (オプション)
LOG_FILE="/tmp/access_log.txt"

## 監視を開始
inotifywait -m -r "$DIRECTORY" -e "$EVENTS" --format "%w%f %e" | while read event; do
  # イベントが発生した場合の処理

  if [ "$LOG_FILE" != "" ]; then
    echo "$(date) - $event" >> "$LOG_FILE"
  else
    echo "アクセスイベント: $event"
  fi

  # ここに、ファイルへのアクセスがあった場合の処理を記述します。
  # 例: ファイルのバックアップ、ログ記録など

done

スクリプトの説明:

  • #!/bin/bash: スクリプトのインタプリタを指定します。
  • DIRECTORY="/path/to/directory": 監視対象のディレクトリを指定します。 /path/to/directory を実際のディレクトリパスに置き換えてください。
  • EVENTS="access": 監視するイベントの種類を指定します。 access はファイルへのアクセス (読み取り) イベントを監視します。 他のイベントの種類としては、modify (ファイル内容の変更)、create (新規ファイルの作成)、delete (ファイルの削除) などがあります。
  • LOG_FILE="/tmp/access_log.txt": ログファイルを指定します。 ログファイルが空の場合は、ログはコンソールに出力されます。
  • inotifywait -m -r "$DIRECTORY" -e "$EVENTS" --format "%w%f %e": inotifywait コマンドを実行します。
    • -m: 継続的に監視モードで実行します。
    • -r: 指定されたディレクトリ以下のサブディレクトリも再帰的に監視します。
    • "$DIRECTORY": 監視対象のディレクトリを指定します。
    • -e "$EVENTS": 監視するイベントの種類を指定します。
    • --format "%w%f %e": イベントの出力をフォーマットします。
      • %w: 監視対象ディレクトリからの相対パス (監視対象ディレクトリから見たパス)。
      • %f: ファイル名。
      • %e: イベントの種類 (ACCESS, MODIFY など)。
  • while read event; do ... done: inotifywait コマンドの出力を一行ずつ読み込み、ループ処理を行います。
  • if [ "$LOG_FILE" != "" ]; then ... else ... fi: ログファイルが指定されている場合は、イベント情報をログファイルに追記します。 そうでない場合は、コンソールに出力します。
  • echo "$(date) - $event": イベント情報を出力します。
  • # ここに、ファイルへのアクセスがあった場合の処理を記述します。: ファイルへのアクセスがあった場合に実行する処理を記述します。

スクリプトの使用方法:

  1. スクリプトをファイルに保存します (例: monitor_access.sh)。
  2. スクリプトを実行権限を与えます: chmod +x monitor_access.sh
  3. スクリプトを実行します: ./monitor_access.sh

注意点:

  • inotifywait のインストール: inotifywait コマンドがシステムにインストールされている必要があります。 インストールされていない場合は、パッケージマネージャを使用してインストールしてください (例: sudo apt-get install inotify-tools on Debian/Ubuntu)。
  • 権限: スクリプトを実行するユーザーは、監視対象のディレクトリに対する読み取り権限を持っている必要があります。
  • リソース消費: inotifywait は、ファイルシステムのイベントを継続的に監視するため、多少のリソース (CPU、メモリ) を消費します。
  • イベントの種類: inotifywait がサポートするイベントの種類は、システムによって異なる場合があります。 man inotifywait コマンドで詳細な情報を確認してください。
  • サブディレクトリ: -r オプションを使用すると、指定されたディレクトリ以下のすべてのサブディレクトリも監視されます。 大規模なディレクトリ構造を監視する場合は、パフォーマンスに注意してください。

このスクリプトは、ファイルへのアクセスイベントを検出するための基本的な例です。 必要に応じて、イベントの種類や処理内容をカスタマイズしてください。

 添付ファイル     - [0]


 コメント追加