Dnotify/inotifyコマンドは初めてです。ディレクトリを継続的に監視し、何らかの変更または修正があることを示すようなスクリプトの作成方法を教えてください。
Inotify自体は、たとえばからの呼び出しを介してアクセス可能なカーネルモジュールです。 Cプログラム。 http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/
Inotify-toolsと呼ばれるアプリケーションスイートがあります。
inotifywait-inotifyを使用してファイルの変更を待つ
そして
inotifywatch-inotifyを使用してファイルシステムのアクセス統計を収集する
コマンドラインから直接inotifyを使用できます。このように、ホームディレクトリ下のすべての変更を継続的に監視します(大量の出力が生成される場合があります)
inotifywait -r -m $HOME
そして、これは継続的に監視し、inotifywaitのmanファイルからコピーされたApacheログアクティビティに反応するスクリプトです。
#!/bin/sh
while inotifywait -e modify /var/log/messages; do
if tail -n1 /var/log/messages | grep httpd; then
kdialog --msgbox "Apache needs love!"
fi
done
以下は、個々のファイルの操作を確認するために使用するものです。 「-m」を指定すると、1つのイベントの後に監視と終了が発生します。タイムスタンプを取得するには、少なくとも3.13バージョンのinotify-toolsが必要ですが、それが重要でない場合(またはOSで利用できない場合や更新が難しい場合)、timefmtおよびformatオプションをスキップできます。別のシェルで「cat /etc/resolv.conf」を実行すると、次の結果が得られます。
$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf
Setting up watches.
Watches established.
12:49 /etc/resolv.conf OPEN
12:49 /etc/resolv.conf ACCESS
12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE
inotifywaitにはディレクトリを監視するオプションもあるため、マンページを確認してください。再帰的に-rを追加して、ディレクトリの子を監視します。
「->」プレフィックスを使用して表示された別のウィンドウに入力したコマンドの例を次に示します。
$ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
-> cd into directory, no info
-> ls in directory
13:15 /home/acarwile/tmpdir/ OPEN,ISDIR
13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR
-> touch newfile
13:16 /home/acarwile/tmpdir/ CREATE newfile
13:16 /home/acarwile/tmpdir/ OPEN newfile
13:16 /home/acarwile/tmpdir/ ATTRIB newfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile
-> mv newfile renamedfile
13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile
13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile
-> echo hello >renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ OPEN renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> touch renamedfile
13:17 /home/acarwile/tmpdir/ OPEN renamedfile
13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile
13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile
-> rm renamedfile
13:17 /home/acarwile/tmpdir/ DELETE renamedfile
-> cd ..; rmdir tmpdir
13:17 /home/acarwile/tmpdir/ DELETE_SELF
上記の後、私はtmpdir( "mkdir tmpdir")を作り直そうとしましたが、そこから出力は得られませんでした。新しいtmpdirは、古いtmpdirと同じディレクトリではありません。ちょうど^ Cになってitnotifywaitを停止する時間です。
https://superuser.com/a/747574/28782 で述べたように、直接の一部を使用せずにinotifywaitを使用するヘルパースクリプトを作成しました制限: inotifyexec
使用例(システムパスに実行可能ファイルとして追加した場合):
inotifyexec "echo test" -r .