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"
: イベント情報を出力します。# ここに、ファイルへのアクセスがあった場合の処理を記述します。
: ファイルへのアクセスがあった場合に実行する処理を記述します。
スクリプトの使用方法:
- スクリプトをファイルに保存します (例:
monitor_access.sh
)。 - スクリプトを実行権限を与えます:
chmod +x monitor_access.sh
- スクリプトを実行します:
./monitor_access.sh
注意点:
inotifywait
のインストール:inotifywait
コマンドがシステムにインストールされている必要があります。 インストールされていない場合は、パッケージマネージャを使用してインストールしてください (例:sudo apt-get install inotify-tools
on Debian/Ubuntu)。- 権限: スクリプトを実行するユーザーは、監視対象のディレクトリに対する読み取り権限を持っている必要があります。
- リソース消費:
inotifywait
は、ファイルシステムのイベントを継続的に監視するため、多少のリソース (CPU、メモリ) を消費します。 - イベントの種類:
inotifywait
がサポートするイベントの種類は、システムによって異なる場合があります。man inotifywait
コマンドで詳細な情報を確認してください。 - サブディレクトリ:
-r
オプションを使用すると、指定されたディレクトリ以下のすべてのサブディレクトリも監視されます。 大規模なディレクトリ構造を監視する場合は、パフォーマンスに注意してください。
このスクリプトは、ファイルへのアクセスイベントを検出するための基本的な例です。 必要に応じて、イベントの種類や処理内容をカスタマイズしてください。