
|
[バックナンバーのトップへ] [Linux システム管理のトップへ] いますぐ実践! Linux システム管理 / Vol.157 / 読者数:1310名こんばんは、うすだです。 唐突ですが、スラッシュドットに、 日本のWebブラウザのシェアに関する記事が載っていました。
IEの独占状態が崩れつつある国内Webブラウザシェア 調査した会社の発表資料を見てみますと、ブラウザのシェアだけでなく、 OS や画面サイズなどのシェアの調査結果も記載されており、 いろいろと個人的に面白いと思うところがありました。
わたしは、ここ数年はずっと XGA サイズを使ってきましたが、 公開している壁紙は、SXGA サイズも用意した方がよいかも、と思いました。 技術者なのに、一番のツボが画面サイズだったことに、われながら驚愕をしつつも、 はりきってまいりたいと思います。 今回のお題 - inotify でディレクトリを監視してみる前回は、dnotify を使って、ディレクトリの監視を行いました。
Vol.156 - dnotify でディレクトリを監視する
ファイルができたりなくなったり変更されたりすると、
即座に通知されるのは便利だなあ、というお話でした。
さて、時は流れまして、Linux カーネル 2.6.13 で、
新たに inotify という監視機構が組み込まれました。
inotify を使えば、もう少し楽に、かつ詳細な監視ができそうですね。
まずは、inotify を利用するためのツールをインストールしましょう。
幸い、Fedora や Ubuntu, Debian など、主要なディストリビューションには、
inotify-tools のパッケージが存在します。 # yum install inotify-tools (RedHat 系の場合) # apt-get install inotify-tools (Debian 系の場合)
残念ながら、わたしが普段使っている Vine や CentOS には、
パッケージが見当たりません。
inotify-tools
ただし、ソース・アーカイブには SPEC ファイルが含まれません。 これらを所定の位置に置いて、rpmbuild コマンドを実行すれば、 なんの問題もなくパッケージが作成されました。 $ mv inotify-tools-3.13.tar.gz ~/rpmbuild/SOURCES/ $ mv inotify-tools.spec ~/rpmbuild/SPECS/ $ rpmbuild -bb ~/rpmbuild/SPECS/inotify-tools.spec $ sudo rpm -i ~/rpmbuild/RPMS/i386/inotify-tools-3.13-1.i386.rpm
ただ、某レンタルサーバで使用している CentOS では、
パッケージ作成中にテストでコケてしまいました。 さて、inotify-tools パッケージをインストールしますと、 inotifywait と inotifywatch というコマンドが使えるようになります。
inotifywait は、指定したファイルやディレクトリに変化があると、
その旨出力してくれるコマンドです。 今回目標とするのは、ディレクトリを監視して、 なにか操作されたらすぐ通知してもらうことです。ですので、以降では、 inotifywait コマンドを使って、目標に近付いていきたいと思います。
早速、inotifywait コマンドを使ってみたいと思います。 まず、/tmp/test というディレクトリを作成し、 /tmp/test を指定して inotifywait コマンドを実行してみます。 $ mkdir /tmp/test $ inotifywait /tmp/test Setting up watches. Watches established. フォアグラウンドで実行中になりますので、別の端末から、 /tmp/test/a というファイルを作ってみましょう。 $ touch /tmp/test/a すると、inotifywait コマンドを実行中の端末に、以下が実行されます。 /tmp/test/ CREATE a $
ただし、一発来たところで、inotifywait が終了してしまいます。 $ inotifywait -m /tmp/test ... /tmp/test/ CREATE a /tmp/test/ OPEN a /tmp/test/ ATTRIB a /tmp/test/ CLOSE_WRITE,CLOSE a
ただ、デフォルトでは、すべての操作を対象とします。 $ inotifywait -m -e create,delete,modify,move /tmp/test 試しに、別の端末から、ファイルを削除してみましょう。 $ rm /tmp/test/a すると、以下だけが出力されます。 /tmp/test/ DELETE a また、ファイルを作成してファイル名を変更してみます。 $ touch /tmp/test/a && mv /tmp/test/a /tmp/test/b すると、以下のように出力されます。 /tmp/test/ CREATE a /tmp/test/ MOVED_FROM a /tmp/test/ MOVED_TO b
ちなみに、パーミッションや時刻情報等の属性は監視していませんので、
chmod コマンドなどで変更しても、なにも出力されません。 $ chmod 444 /tmp/test/b それから、あるディレクトリ以下すべてを対象としたい場合は、 dnotify コマンドと同様、-r オプションを指定します。 $ inotifywait -mr /tmp/test Setting up watches. Beware: since -r was given, this may take \ a while! Watches established. 他に、出力フォーマットを変更する、--format や -c というオプションもあります。 …が、ここでは割愛させていただきます。 inotifywait コマンドの使いかたがわかったところで、次に、 監視の自動化を試みたいと思います。 早速ですが、以下のスクリプトを作成してみました。
#!/bin/sh
/usr/bin/inotifywait -e create,delete,modify,move,attrib \
-mrq /etc | while read line; do
path=`echo $line | /usr/bin/awk '{print $1}'`
echo $line | /usr/bin/Mail -s "[notice] $path" $USER
done
/etc を監視し、inotifywait がなにか出力したら、
それをメールで通知するためのスクリプトです。 # chmod 700 /usr/local/sbin/inotify.sh # /usr/local/sbin/inotify.sh
すると、何か操作が行われると、メールが送られてきます。 ですので、ちょっと改良を加えてみました。
#!/bin/sh
NOTIFYPATH=/etc
TIMEOUT=5
MAILTO=root
/usr/bin/inotifywait -e modify,attrib,create,delete \
-mrq $NOTIFYPATH | while [ 1 ]; do
messages=""
while read -t $TIMEOUT line; do
messages="${messages}$line@RET@"
done
if [ -n "$messages" ]; then
echo $messages | sed 's/@RET@/\n/g' | \
/usr/bin/Mail -s "[notice] $NOTIFYPATH" $MAILTO
fi
done
TIMEOUT で指定した秒数(上記では 5秒)分をまとめて、 ひとつのメールで送るようにしてみました。 たとえば、以下を実行して、/etc/X11/foo を1秒だけ存在させてみます。 # touch /etc/X11/foo; sleep 1; rm -f /etc/X11/foo
すると、以下の内容のメールが、1通だけ送られてきます。 /etc/X11/ CREATE foo /etc/X11/ ATTRIB foo /etc/X11/ DELETE foo
これなら、実用に堪えられそうです。 以上、inotify でディレクトリを監視する方法を、ご紹介しました。 inotify や dnotify の詳細を理解したいと思われた貴兄は、 以下などを参照してください。
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/inotify.7.html 自分でプログラムを作成しなくても、機能の詳細を確認し、 ツールの中で何が行われているかを推測することは、大事なことだと思います。 あわよくば、スクリプトなどを自分で作成して、 inotify や dnotify を活用していただければと思います。(ぜひ、実践してください!) 宿題の答え前回の宿題は、 dnotify で監視していることを気づかれないよう細工してみましょう。 でした。 前回、init を使って、自動かつ繰り返し実行させましたが、ps コマンドで見ると、 dnotify で監視していることがバレバレでした。
$ ps ax | grep dnotify
13939 ? Ss 0:00 /usr/bin/dnotify -CDMRBr /etc -e \
/usr/local/sbin/dirnotify.sh {}
...
では、実行するもの全体をシェルスクリプトにしてしまえば、隠蔽できるでしょうか。
#!/bin/sh
/usr/bin/dnotify -CDMRBr /etc -e /usr/local/sbin/dirnotify.sh {}
これを、たとえば /usr/local/sbin/notify.sh という名前にして (実際はもっとわかりにくい名前すべきだと思いますが)、 # chmod 700 /usr/local/sbin/notify.sh /etc/inittab の、前回追加した行をコメントアウトし、あらためて以下を追加します。 dn:235:respawn:/usr/local/sbin/notify.sh そして、以下の手順で、init さんにお知らせします。 # kill -HUP 1 # kill <dnotifyのPID>
しかしながら、ps コマンドで確認すると、ばっちり出てきます。
$ ps ax | grep dnotify
19974 ? S 0:00 /usr/bin/dnotify -CDMRBr /etc -e \
/usr/local/sbin/dirnotify.sh {}
...
それでは、dnotify コマンドをコピーして、違う名前にしてみましょう。 # cp /usr/bin/dnotify /usr/local/sbin/yfitond # chmod 500 /usr/local/sbin/yfitond 上記のようにコピーして、先ほどの notify.sh を以下に変更します。
#!/bin/sh
/usr/local/sbin/yfitond -CDMRBr /etc -e /usr/local/sbin/dirnotify.sh {}
そして、notify.sh を kill しますと… # kill <notify.shのPID> # ps ax | grep dnotify ...
一応見えなくなりました。
$ ps axw
...
21110 ? Ss 0:00 /bin/sh /usr/local/sbin/notify.sh
21111 ? S 0:00 /usr/local/sbin/yfitond -CDMRBr /etc -e \
/usr/local/sbin/dirnotify.sh {}
...
…ああ、オプションの指定が、dnotify の風貌のままです。
しかし、うっかり宿題にしてしまった以上、これでは引き下がれません。
で、ここからは、模範解答ほど遠い内容になっております。 さて、まず、以下からパッチを得ます。(即席で作りました。) http://www.usupi.org/sysad/157_dnotify_intiki_patch.txt
このパッチを当てますと、引数を与えても与えなくても、
上記オプションがそのまま渡されるようになります。 $ cd ~/rpmbuild/BUILD/dnotify-0.18.0/src $ patch -p0 < ~/157_dnotify_intiki_patch.txt $ make コンパイルとリンクが通ったら、/usr/local/sbin/yfitond2 という名前でコピーします。 # cp dnotify /usr/local/sbin/yfitond2 # chmod 500 /usr/local/sbin/yfitond2 そして、notify.sh を以下のようにします。(さっぱりしますね!) #!/bin/sh /usr/local/sbin/yfitond2 すると、あからさまなオプションが見えなくなりました。 $ ps axw ... 21425 ? Ss 0:00 /bin/sh /usr/local/sbin/notify.sh 21426 ? S 0:00 /usr/local/sbin/yfitond2 ...
これで解決なのか、という疑問を拭いされていない気もしますが、一応、
目的地にはたどり着いたということにして、終わりにしたいと思います。 今回の宿題今回の宿題は、 実体のないファイルシステムなどを inotifywait で監視するとどうなる か、試してみましょう。 です。 たとえば、procfs や sysfs など、 特殊なファイルシステム上のファイルやディレクトリを監視するとどうなるのか、 試してみてください。 あとがき日経新聞に、「時間割引率」に関する記事が、掲載されていました。
ある価値のモノを、いま受け取るのと将来受け取るのとでは、当然、
いま受け取るほうを選ぶと思いますが、
その価値が将来どのくらい下がるのかを示す率が、時間割引率だ…と思います。
この率は、ひとによっても、対象や状況によっても変わります。 また、太ったひとは、将来のスリムな体型を維持することより、 目の前にあるデザートを食べたいことを選びがちなため、 「時間割引率が高い」と言えると思います。 こんなふうに、時間割引率の考え方は、いろんなことに当てはまります。
さて、この間、わが子に、目先の欲望にとらわれすぎちゃいけないよ、
ということを説くのに、時間割引率の話をしてみました。
そんな中、ふと思ったことがあります。 同じような過ちを繰り返したときに、 「欲望にとらわれてはいけない」という話をくどくど言うよりも、 「時間割引率」とだけ言ったほうが、言うほうも楽ですし、 言われるほうもそのヒトコトだけで済みます。 時間割引率の本来の使いかたとはかけ離れているかもしれませんが、わが家的には、 この使いかたで、しばらくいってみようと思います。
今回も、ここまで読んでいただき、誠にありがとうございました。
「いますぐ実践! Linux システム管理」の解除は、以下からできます。
バックナンバーは、こちらにほぼ全部そろっています。
「栗日記」−低予算でなにかドカンとできないか…悩んでおります。 |
▼ トップ ▼ プロフィール ▼ リンク
▼ 作ってみました
▼ せんでん
▼ 最近読んだ本 [X]
「マイクロソフトでは出会えなかった天職」 John Wood「伝える本」 山本高史 「センネン画報その2」 今日マチ子 「おとなの小論文教室」 山田ズーニー 「民間防衛」 スイス政府 「理性の限界−不可能性・不確実性・不完全性」 高橋昌一郎 「ユダの福音書を追え」 Herbert Krosney 「ヘッテルとフエーテル」 マネー・ヘッタ・チャン 「「そ・わ・か」の法則」 小林正観 「抜擢される人の人脈力」 岡島 悦子 「喜ばれる」 小林 正観 「「体を温める」と病気は必ず治る」 石原結實 「マネジメント 務め、責任、実践」 Peter F. Drucker 「心と脳の正体に迫る」 天外伺朗, 瀬名秀明 「マネジメント革命」 天外伺朗 「すごい会議」 大橋禅太郎 「ワインバーグの文章読本」 Gerald M. Weinberg 「マルチコアCPUのための並列プログラミング」 フィックスターズ 「ほんの少しの時間…忙しいあなたのための瞑想」 Christina Rodenbeck 「21世紀に生きる君たちへ」 司馬 遼太郎 「史上最強の人生戦略マニュアル」 Phillip C.McGraw 「新エディターシップ」 外山 滋比古 「キラー・プレゼンテーション」 Mark Gottlieb 「ザ・コピーライティング」 John Caples 「北欧素顔のデザイナーに出会う旅」 鈴木緑 「プログラミングErlang」 Joe Armstrong 「統計はこうしてウソをつく」 Joel Best 「「勉強しろ」と言わずに子供を勉強させる方法」 小林公夫 「プログラミングPerl<VOLUME1>」 Larry Wall, Tom Christiansen, Jon Orwant 「粘土道 完全版」 片桐 仁 「PERL HACKS」 chromatic, Damian Conway, Curtis "Ovid" Poe 「家計3表生活防衛術」 國貞 克則 「みえないかたち」 吉岡 徳仁 「VM(OSシリーズ)」 岡崎 世雄, 全先 実 「駄美術ギャラリー」 現代美術二等兵 「レイモン・サビニャック自伝」 Raymond Savignac 「ママのためのシュタイナー教育入門」 Doris Schuerer 「あなたに平和が訪れる 禅的生活のすすめ」 Thich Nhat Hanh 「アップルを創った怪物-もうひとりの創業者、ウォズニアック自伝」 Steve Wozniak 「出現する未来」 Peter Senge, C. Otto Scharmer, Joseph Jaworski, Betty Sue Flowers 「ボロボロになった覇権国家」 北野幸伯 「ザ・シークレット」 Rhonda Byrne 「実戦マーケティング思考」 佐藤 義典 「カリスマ教師の心づくり塾」 原田 隆史 「ビジュアライジング・データ - Processingによる情報視覚化手法」 Ben Fry 「道路の決着」 猪瀬直樹 「未来世療法」 Brian L. Weiss 「表情分析入門」 Paul Ekman, Wallace V. Friesen 「アイデアのつくり方」 James W. Young 「思考の整理学」 外山滋比古 「ナゲキバト」 Larry Barkdull 「21世紀の国富論」 原 丈人 「Ship It! ソフトウェアプロジェクト成功のための達人式ガイドブック」 Jared Richardson, William Gwaltney Jr. 「マイクロトレンド」 Mark J. Penn, E. Kinney Zalesne 「即戦力の人心術」 Michael Abrashoff 「組込みソフトエンジニアを極める」 酒井由夫 「私 デザイン」 石岡瑛子 「Ex-formation RESORT」 原研哉ゼミ 「シッダールタ」 Hermann Hesse 「新宿駅最後の小さなお店ベルク」 井野朋也 「入門LDAP/OpenLDAP」 デージーネット 「エイジレス革命」 Deepak Chopra 「免疫革命」 安保徹 「悪い笛-エハイク2」 吉田戦車 「ハリー・ポッターと死の秘宝」 J.K.Rowling 「賢者の書」 喜多川 泰 「セキュリティウォリア」 Cyrus Peikari, Anton Chuvakin 「CORE MEMORY」 John Alderman, Mark Richards 「新訳 星の王子さま」 サン=テグジュベリ / 倉橋 由美子 「センネン画報」 今日 マチ子 「粟津潔 デザインする言葉」 粟津潔 「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸 「Make: Volume01」 オライリー・ジャパン 「セーラが町にやってきた」 清野 由実 「手紙屋」 喜多川 泰 「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久 「人蕩し術」 無能 唱元 「子育てハッピーアドバイス2」 明橋 大二, 太田 知子 「ラッセル幸福論」 B. Russell 「それでも人生にイエスと言う」 Viktor Emil Frankl 「子育てハッピーアドバイス」 明橋 大二, 太田 知子 「考具」 加藤 昌治 「北欧デザイン<3>」 渡部 千春 「北斎の謎を解く」 諏訪 春雄 「体感美術館」 平野 暁臣 「チベット永遠の書」 Theodore Illion 「リナックスの革命」 Pekka Himanen 「人月の神話」 Frederick Phillips,Jr. Brooks 「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner 「小布施ッション<2001-2002>」 セーラ・マリ カミングス 「アンパンマン伝説」 やなせ たかし 「夢をかなえるゾウ」 水野 敬也 「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann 「北欧デザイン<2>」 渡部 千春 「北欧デザイン<1>」 渡部 千春 「ヒューマン2.0」 渡辺 千賀 「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯 「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦 「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき 「デザインのデザイン」 原 研哉 「マキアヴェッリ語録」 塩野 七生 「ハンバーガーを待つ3分間の値段」 斎藤 由多加 「星の旅人-スペイン「奥の細道」-」 黛 まどか 「食品の裏側」 安部 司 「On Lisp」 Paul Graham 「ぼくが医者をやめた理由 つづき」 永井 明 「あなたならどうする?」 Jack Nikolaschka 「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」 Mark G. Graff, Kenneth R. van Wyk 「「左利き」は天才?−利き手をめぐる脳と進化の謎」 David Wolman 「自分の中に毒を持て」 岡本 太郎 「アトピーの薬を減らす本」 田中 貴子 「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留 「X51.ORG THE ODYSSEY」 佐藤 健寿 「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子 「沖縄文化論」 岡本 太郎 「「伝説の社員」になれ!」 土井 英司 「コンピュータの構成と設計(上)」 Patterson & Hennessy 「カラスのジョンソン」 明川 哲也 「ドリルを売るには穴を売れ」 佐藤 義典 「頭がよくなる照明術」 結城 未来 「クロフォードのインタラクティブデザイン論」 Chris Crawford 「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso 「非常識のすすめ―逆発想の仏教論」 ひろさちや 「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」 デージーネット 「イノベーションの達人!」 Tom Kelly, Jonathan Littman 「クリエーター50人が語る創造の原点」 小原 啓渡 「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick 「楽しい気象観察図鑑」 武田 康男 「入門 Ajax」 高橋 登史朗 「リリカルな自画像」 岡本 太郎 「やぎの目ゴールデンベスト」 林 雄司 「初めてのPython 第2版」 Mark Lutz,David Ascher 「鼻兎」 小林 賢太郎 「なぜ、これがアートなの?」 Amelia Arenas 「芸術起業論」 村上 隆 「まほう色の瞳」 Enrique Barrios 「ラーメンズつくるひとデコ」 ラーメンズ 「R25 つきぬけた男たち」 R25編集部 「美の呪力」 岡本 太郎 「しろのあお」 上大岡 トメ 「ザ・ゴール」 Eliyahu M. Goldratt 「ハッカーと画家」 Paul Graham 「岡本太郎に乾杯」 岡本 敏子 「Fedore Core Expert」 Software Design 「誰も知らない男」 ブルース・バートン 「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト 「国家の罠」 佐藤 優 「夜回り先生」 水谷 修 「やぎの目絵日記」 林 雄司 「7つの習慣」 スティーブン・R. コヴィー 「まろ、ん?−大掴源氏物語」 小泉 吉宏 「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル 「ポストモダン・マーケティング」 スティーブン ブラウン 「機動戦士ガンダムさん」 大和田 秀樹 「小エロのひみつ - Webやぎの目研究発表」 林 雄司 「これ、誰がデザインしたの?」 渡部千春 「60分間・企業ダントツ化プロジェクト」 神田 昌典 「ガルシアへの手紙」 エルバート ハバード 「人生は素晴らしいものだ」 オグ・マンディーノ 「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン 「ワインバーグのシステム思考法」 G.M.ワインバーグ 「渋谷ではたらく社長の告白」 藤田 晋 「渋井真帆の日経新聞読みこなし隊」 渋井 真帆 「コラム息切れ」 小野 法師丸 「早朝起業」 松山 真之介 「変な人が書いた驚くほどツイてる話」 斎藤 一人 「35歳から仕事で大切にしたいこと」 村井 勉 「金融広告を読め」 吉本 佳生 「発想する会社!」 トム・ケリー,ジョナサン・リットマン 「エハイク」 吉田 戦車 「人生の旋律」 神田 昌典 「仕事の思想」 田坂 広志 「CPUの創りかた」 渡波 郁 「非常識な成功法則」 神田 昌典 …これ以前は記録してません…
▼ 気に入ってる本
| ||||||||||||||||||||||||||||||||||||||||