<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF139:Inotify - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF139:Inotify&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 20:58:34 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF139:Inotify&amp;diff=13524&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''''Inotify''''' Этот удоб­ный мо­дуль яд­ра сле­дит за ва­шей фай­ло­вой сис­те­мой, как яс­т­реб [[Категория:Учебники]]&lt;br /&gt;
&lt;br /&gt;
==''Inotify'': Сле­дим за сис­те­мой==&lt;br /&gt;
&lt;br /&gt;
: '''Ко­эн Верв­лое­сем''' лю­бит кон­тро­ли­ро­вать со­бы­тия в сво­ей фай­ло­вой сис­те­ме. Бла­го­да­ря ''Inotify'' он не упус­ка­ет ни еди­но­го из­ме­не­ния фай­лов.&lt;br /&gt;
&lt;br /&gt;
Есть нема­ло слу­ча­ев, когда вам нуж­но бы знать, что тво­рит­ся в неком ка­та­ло­ге. Ну­ж­да – мать изо­бре­тений, и по­следние вер­сии ди­ст­ри­бу­ти­вов Linux изо­бре­ли для этой це­ли мно­же­ст­во ин­ст­ру­мен­тов. На­при­мер, ес­ли вы от­крое­те свой ка­та­лог '''Pictures''' в ''Dolphin'' при им­пор­те фо­то­гра­фий с циф­ро­вой ка­ме­ры в ''Digikam'', но­вые фай­лы тут же ото­бра­зят­ся в окне ''Dolphin''. Ути­ли­ты ра­бо­че­го сто­ла для по­ис­ка ис­поль­зу­ют дан­ную функ­цию для пе­ре­ин­дек­си­ро­вания из­менен­ных фай­лов – что­бы еже­ми­нут­но не сканиро­вать из­менения фай­ло­вой сис­те­мы. А ес­ли та­кая функ­ция тре­бу­ет­ся, ска­жем, в ва­ших скрип­тах обо­лоч­ки? Бла­го­да­ря мо­ду­лю яд­ра Linux по имени ''Inotify'' по­лу­чить ее не слиш­ком слож­но, что мы и до­ка­жем на дан­ном уро­ке. Мы рас­смот­рим ра­бо­ту ''Inotify'' и его воз­мож­но­сти, а так­же спо­соб лег­ко до­ба­вить его на панель ин­ст­ру­мен­тов.&lt;br /&gt;
&lt;br /&gt;
===Под ка­по­том===&lt;br /&gt;
&lt;br /&gt;
''Inotify'' – ком­понент, обес­пе­чи­ваю­щий монито­ринг раз­лич­ных из­менений фай­лов в фай­ло­вых сис­те­мах; он вхо­дит в яд­ро Linux, на­чи­ная с вер­сии 2.6.13. ''Inotify'' по­зво­ля­ет сле­дить за одним или несколь­ки­ми фай­ла­ми или ка­та­ло­га­ми на пред­мет со­бы­тий из ука­зан­но­го на­бо­ра: от­кры­тие фай­ла или пап­ки; чте-ние, мо­ди­фи­ка­ция или из­менение ат­ри­бу­тов (на­при­мер, мет­ки или раз­ре­шения) от­кры­то­го фай­ла; за­кры­тие, пе­ре­ме­щение, соз­дание или уда­ление фай­ла. В таб­ли­це ниже все эти со­бы­тия пе­ре­чис­ле­ны.&lt;br /&gt;
&lt;br /&gt;
Вы мо­же­те ис­поль­зо­вать ''Inotify'' для це­ло­го ря­да за­дач: вы­явить из­менения в фай­лах и ка­та­ло­гах (на­при­мер, в фай­ле на­строй­ки или поч­то­вом ка­та­ло­ге), ав­то­ма­ти­че­­ски восста­но­вить уда­лен­ные кри­ти­че­­ски важ­ные фай­лы на­строй­ки, от­пра­вить вам по поч­те со­об­щение, когда файл за­гру­жа­ет­ся в кон­крет­ных ка­та­ло­гах на web-сер­ве­ре, и так да­лее. Без ''Inotify'' ва­ша про­грам­ма или скрипт долж­ны бу­дут про­ве­рять фай­лы пе­рио­ди­че­­ски (та­кой об­раз дей­ст­вий на­зы­ва­ет­ся «оп­рос» [polling]) – это очень мед­лен­но и тор­мо­зит ра­бо­ту всей сис­те­мы. С ''Inotify'' яд­ро уве­дом­ля­ет про­грам­му по ка­ж­до­му ука­зан­но­му со­бы­тию. ''Inotify'' да­же мо­жет смот­реть фай­лы на съем­ных но­си­те­лях, не ме­шая вам раз­мон­ти­ро­вать диск.&lt;br /&gt;
&lt;br /&gt;
От­ме­тим, что в яд­ре Linux 2.6.31, ''Inotify'' сменил­ся на ''Fsnotify'', но по­верх ''Fsnotify'' реа­ли­зо­ван при­выч­ный ин­тер­фейс ''Inotify''. Так что на прак­ти­ке боль­шой разницы нет: ин­ст­ру­мен­ты, ко­то­рые мы ис­поль­зу­ем на на­шем уро­ке, без про­блем ра­бо­та­ют на всех яд­рах, на­чи­ная с 2.6.13. Ес­ли вы строи­те соб­ст­вен­ное яд­ро, обес­печь­те его ком­пи­ля­цию с под­держ­кой ''Inotify'' ('''CONFIG_Inotify''' и '''CONFIG_INOTIFY_USER'''). Все основ­ные ди­ст­ри­бу­ти­вы Linux под­дер­жи­ва­ют ''Inotify'' из ко­роб­ки с ядром по умол­чанию. Ес­ли вы не уве­ре­ны, есть ли ''Inotify'' в ва­шем, про­верь­те это сле­дую­щей ко­ман­дой, ко­то­рая долж­на вы­дать по­ка­зан­ный здесь же ре­зуль­тат:&lt;br /&gt;
&lt;br /&gt;
 $ grep INOTIFY /boot/config-$(uname -r)&lt;br /&gt;
 CONFIG_INOTIFY=y&lt;br /&gt;
 CONFIG_INOTIFY_USER=y&lt;br /&gt;
&lt;br /&gt;
===Сле­ди­те за со­бы­тия­ми===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=Вы хо­ти­те быть в кур­се, ко­гда про­ис­хо­дит оп­ре­де­­лен­ное со­бы­тие? Ис­поль­зуй­те ко­ман­ды ''espeak, emacspeak'' или ''festival'' с ''iwatch'' или ''inoticoming''.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
По­сколь­ку ''Inotify'' на­хо­дит­ся в яд­ре, все про­грам­мы Linux мо­гут поль­зо­вать­ся его воз­мож­но­стя­ми без спе­ци­аль­ных биб­лио­тек. Раз­ра­бот­чик про­сто дол­жен упот­реб­лять пра­виль­ные сис­тем­ные вы­зо­вы. Но, понят­но, вам как конеч­но­му поль­зо­ва­те­лю вряд ли за­хо­чет­ся пи­сать про­грам­му на ''С'', что­бы по­смот­реть со­бы­тия в фай­ло­вой сис­те­ме. По­это­му бы­ст­рень­ко был сфор­ми­ро­ван на­бор из двух про­стых, но мощ­ных ин­ст­ру­мен­тов команд­ной стро­ки: ''Inotify-tools''. Боль­шин­ст­во ди­ст­ри­бу­ти­вов пред­ла­га­ют этот про­ект в фор­ме па­ке­та с тем же на­званием; или мож­но ска­чать его с сай­та http://github.com/rvoicilas/inotify-tools.&lt;br /&gt;
&lt;br /&gt;
Ин­ст­ру­мен­ты из па­ке­та ''Inotify-tools'' – ''inotifywait'' и ''inotifywatch''. Начнем со вто­ро­го: он да­ет пред­став­ление, ка­кую ин­фор­ма­цию мож­но по­лу­чить с ''Inotify''. Про­сто вве­ди­те ко­ман­ду&lt;br /&gt;
&lt;br /&gt;
 $ inotifywatch -r ~&lt;br /&gt;
&lt;br /&gt;
Он бу­дет ре­кур­сив­но со­би­рать ин­фор­ма­цию по всем со­бы­ти­ям фай­ло­вой сис­те­мы в ва­шем до­машнем ка­та­ло­ге.&lt;br /&gt;
&lt;br /&gt;
По­ка эта ко­ман­да ра­бо­та­ет, за­пусти­те ка­кую-нибудь про­грам­му – хо­тя бы ''Firefox'' – а за­тем пре­рви­те ра­бо­ту ''inotifywatch'' с по­мо­щью '''Ctrl+C'''. Тут вы­да­ст­ся таб­ли­ца с под­сче­том всех со­бы­тий, ка­саю­щих­ся фай­лов и ка­та­ло­гов в ва­шем до­машнем ка­та­ло­ге. Это про­стой спо­соб уви­деть, к ка­ким фай­лам об­ра­ща­ет­ся ''Firefox'' и час­то ли это бы­ва­ет.&lt;br /&gt;
&lt;br /&gt;
Есть и спо­соб бо­лее тон­кий: при­менить оп­цию '''-е''' для сбо­ра ин­фор­ма­ции по кон­крет­ным со­бы­ти­ям. Вот как по­лу­чить уве­дом­ление о соз­дании или уда­лении фай­ла в ва­шем до­машнем ка­та­ло­ге:&lt;br /&gt;
&lt;br /&gt;
 $ inotifywatch -e create,delete -r ~&lt;br /&gt;
&lt;br /&gt;
По умол­чанию стро­ки в таб­ли­це от­сор­ти­ро­ва­ны по убы­ванию зна­чения столб­ца '''total''', что да­ет пред­став­ление о наи­бо­лее ак­тив­ных фай­лах. Од­на­ко с по­мо­щью '''-d &amp;lt;event&amp;gt;''' мож­но от­сор­ти­ро­вать стро­ки по убы­ванию зна­чений для за­дан­но­го со­бы­тия, а '''-a &amp;lt;event&amp;gt;''' де­ла­ет то же са­мое, но по воз­рас­танию. Сор­ти­ров­ка при­менима ко всем со­бы­ти­ям, кро­ме пе­ре­ме­щения и за­кры­тия (ко­то­рые де­лят­ся на '''moved_to''' и '''moved_from''' и '''close_write''' и '''close_nowrite''').&lt;br /&gt;
&lt;br /&gt;
Вот вам еще по­лез­ные оп­ции: '''--exclude &amp;lt;pattern&amp;gt;''' и '''--excludei &amp;lt;pattern&amp;gt;''' ве­лят ''inotifywatch'' не об­ра­ба­ты­вать со­бы­тия, чьи на­звания со­от­вет­ст­ву­ют за­дан­но­му ре­гу­ляр­но­му вы­ра­жению, с уче­том ре­ги­ст­ра ('''--exclude''') – или нечув­ст­ви­тель­но к ре­ги­ст­ру ('''--excludei'''). '''-t &amp;lt;seconds&amp;gt;''' ве­лит ''inotifywatch'' по­трудиться в те­чение ука­зан­но­го пе­рио­да вре­мени, за­тем вы­вес­ти по нему ста­ти­сти­куи за­вер­шить ра­бо­ту.&lt;br /&gt;
&lt;br /&gt;
Это осо­бен­но ин­те­рес­но для неин­те­рак­тив­но­го ис­поль­зо­вания ''inotifywatch'' – на­при­мер, в сравнитель­ном тес­те.&lt;br /&gt;
&lt;br /&gt;
===В ре­жи­ме ре­аль­но­го вре­мени===&lt;br /&gt;
&lt;br /&gt;
''Inotifywatch'' – непло­хой ин­ст­ру­мент для лю­би­те­лей ста­ти­сти­ки; ну, а ес­ли вы хо­ти­те уз­на­вать о со­бы­тии в сей же мо­мент, когда оно про­ис­хо­дит? На это в ''Inotify-tools'' име­ет­ся дру­гая про­грам­ма, ''inotifywait''. Пусть вы хо­ти­те ре­кур­сив­но кон­тро­ли­ро­вать все со­бы­тия фай­ло­вой сис­те­мы в ва­шей до­машней ди­рек­то­рии. Вве­ди­те ко­ман­ду&lt;br /&gt;
&lt;br /&gt;
 $ inotifywait -mr ~&lt;br /&gt;
&lt;br /&gt;
По­сле это­го за­пусти­те ''Firefox'', по­се­ти­те па­ру сай­тов... и вы уди­ви­тесь ко­ли­че­­ст­ву фай­лов, ко­то­рые чи­тал ваш web-брау­зер.&lt;br /&gt;
&lt;br /&gt;
Бла­го­да­ря оп­ции '''-m''' (монито­ринг), вы сра­зу же по­лу­чи­те из­ве­щение о лю­бом из­менении в ва­шем до­машнем ка­та­ло­ге. Ка­ж­дая стро­ка на вы­хо­де ука­зы­ва­ет ка­та­лог, со­бы­тия и (ес­ли на­до) файл. Вы так­же мо­же­те про­ве­рить это, соз­дав, а за­тем уда­лив ка­та­ло­ги и фай­лы, на­при­мер:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir ~/testinotify&lt;br /&gt;
 $ echo TEST &amp;gt; ~/testinotify/test.txt&lt;br /&gt;
 $ touch ~/testinotify/test.txt&lt;br /&gt;
 $ rm ~/testinotify/test.txt&lt;br /&gt;
 $ rmdir ~/testinotify&lt;br /&gt;
&lt;br /&gt;
Ни­же при­во­дит­ся ре­зуль­тат ра­бо­ты ''inotifywait'' по­сле вво­да этих ко­манд:&lt;br /&gt;
&lt;br /&gt;
 $ inotifywait -mr ~&lt;br /&gt;
 Ус­та­нов­ка на­блю­де­ния. Уч­ти­те: из-за па­ра­мет­ра '''-r''' это по­тре­бу­ет вре­ме­ни!&lt;br /&gt;
 Наб­лю­де­ние ус­та­нов­ле­но.&lt;br /&gt;
 /home/koan/ CREATE,ISDIR testinotify&lt;br /&gt;
 /home/koan/ OPEN,ISDIR testinotify&lt;br /&gt;
 /home/koan/ CLOSE_NOWRITE,CLOSE,ISDIR testinotify&lt;br /&gt;
 /home/koan/testinotify/ CREATE test.txt&lt;br /&gt;
 /home/koan/testinotify/ OPEN test.txt&lt;br /&gt;
 /home/koan/testinotify/ MODIFY test.txt&lt;br /&gt;
 /home/koan/testinotify/ CLOSE_WRITE,CLOSE test.txt&lt;br /&gt;
 /home/koan/testinotify/ OPEN test.txt&lt;br /&gt;
 /home/koan/testinotify/ ATTRIB test.txt&lt;br /&gt;
 /home/koan/testinotify/ CLOSE_WRITE,CLOSE test.txt&lt;br /&gt;
 /home/koan/testinotify/ DELETE test.txt&lt;br /&gt;
 /home/koan/ DELETE,ISDIR testinotify&lt;br /&gt;
 /home/koan/testinotify/ DELETE_SELF&lt;br /&gt;
&lt;br /&gt;
По­про­буй­те вве­сти эти ко­ман­ды в од­ном окне тер­ми­на­ла, гля­дя на ре­зуль­тат ''inotifywait'' в дру­гом окне тер­ми­на­ла ря­дом с пер­вым: это весь­ма по­учи­тель­но!&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=За со­бы­тия­ми мож­но на­блю­дать и в ва­ших про­грам­мах: при­вяз­ки ''Inotify'' пре­ду­смот­ре­ны для са­мых по­пу­ляр­ных про­грамм и язы­ков про­грам­ми­ро­ва­ния, в том чис­ле ''Perl, Python'' и ''Ruby''.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Как и с ''inotifywatch'', мож­но ис­поль­зо­вать оп­цию '''-e''', что­бы по­лу­чить ре­зуль­тат толь­ко по кон­крет­ным со­бы­ти­ям, оп­цию '''-t''' для за­дания пе­рио­да ра­бо­ты в се­кун­дах, и '''--exclude''' или '''--excludei''', что­бы ис­клю­чить часть фай­лов.&lt;br /&gt;
&lt;br /&gt;
Так, все от­лич­но, но по­че­му эта ко­ман­да на­зы­ва­ет­ся ''inotifywait''? Wait [ждать] в на­звании вро­де не име­ет смыс­ла? На са­мом де­ле – по умол­чанию (а не так, как мы при­ме­ня­ли ко­ман­ду до сих пор, ес­ли толь­ко вы не ука­зы­ва­ли оп­цию '''-m'''), ''inotifywait'' дей­ст­ви­тель­но ждет ука­зан­но­го со­бы­тия в фай­ло­вой сис­те­ме и за­вер­ша­ет ра­бо­ту при пер­вом по­яв­лении со­бы­тия. Это по­лез­но, когда нуж­но, что­бы ваш скрипт ожи­дал соз­дания неко­го фай­ла, а за­тем что-нибудь де­лал.&lt;br /&gt;
&lt;br /&gt;
Те­перь вам, ве­ро­ят­но, за­хо­те­лось ис­поль­зо­вать ''inotifywait'' в соб­ст­вен­ных скрип­тах обо­лоч­ки. Но пре­ж­де чем на­чать пи­сать про­стран­ный скрипт, ко­то­рый ис­поль­зу­ет ''inotifywait'', ав­то­ма­ти­че­­ски пре­об­ра­зу­ет лю­бой файл, по­сту­паю­щий в пап­ку '''Pictures''', в миниа­тю­ру и ки­да­ет ее на web-сер­вер, да­вай­те на шаг от­сту­пим. Раз­ве неко­му бы­ло на­соз­да­вать на осно­ве ''Inotify'' скрип­тов для ба­зо­вых за­дач? Пра­виль­но: изо­бре­тать ве­ло­си­пед неза­чем. По­это­му не бу­дем на на­шем уро­ке ле­пить свои скрип­ты, но ука­жем на су­ще­ст­вую­щие ин­ст­ру­мен­ты для кон­крет­ных слу­ча­ев. Конеч­но, ес­ли ни один из них вам не под­хо­дит, или у вас ал­лер­гия на При­ду­ма­но_Не_Мной, по­че­му бы и не на­пи­сать скрип­ты са­мо­му.&lt;br /&gt;
&lt;br /&gt;
===Мгно­вен­ное из­ве­щение===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF139_82_1.jpg|300px]] По­лу­чи­те email, как толь­ко кто-то от­кро­ет ваш файл с па­ро­лем.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Од­на из про­грамм, по­стро­ен­ных на ''Inotify'' – ''iwatch'' (http://iwatch.sourceforge.net); она мо­жет сде­лать запись в сис­тем­ный жур­нал, вы­полнить ко­ман­ду или от­пра­вить вам элек­трон­ное пись­мо, как толь­ко про­изой­дет за­дан­ное со­бы­тие фай­ло­вой сис­те­мы. Это иде­аль­ный ин­ст­ру­мент для сис­тем­но­го ад­минист­ра­то­ра, ко­то­ро­му тре­бу­ет­ся про­стой спо­соб немед­лен­но­го уве­дом­ления при по­доз­ри­тель­ных со­бы­ти­ях в фай­ло­вой сис­те­ме. Так, на­при­мер, лег­ко сле­дить ре­кур­сив­но за из­менения­ми в '''/etc''':&lt;br /&gt;
&lt;br /&gt;
 $iwatch -r  /etc&lt;br /&gt;
&lt;br /&gt;
В от­ли­чие от пре­ды­ду­щих ин­ст­ру­мен­тов ''Inotify'', по умол­чанию ''iwatch'' сле­дит толь­ко за со­бы­тия­ми '''close_write, create, delete, move, delete_self''' и '''move_self''', что и ло­гич­но с точ­ки зрения на­зна­чения про­грам­мы: блю­сти це­ло­ст­ность ва­шей сис­те­мы. При же­лании ука­зать дру­гой на­бор со­бы­тий для на­блю­дения восполь­зуй­тесь оп­ци­ей '''-е'''.&lt;br /&gt;
&lt;br /&gt;
Ис­клю­чения мож­но оп­ре­де­лить с по­мо­щью '''-х''' для пол­но­го пу­ти или с '''-X''' для ре­гу­ляр­ных вы­ра­жений. А мож­но и по-дру­го­му: ес­ли вы хо­ти­те опо­ве­щения толь­ко для от­дель­ных фай­лов или ка­та­ло­гов, ис­поль­зуй­те оп­цию '''-t''' с ре­гу­ляр­ным вы­ра­жением для фильт­ра­ции кон­тро­ли­руе­мых фай­лов. Ни­же – при­мер пре­ду­пре­ждения об из­менениях в '''/etc/passwd''' и '''/etc/shadow''' (где мы опусти­ли '''-r''', по­то­му что '''/etc''' нам не на­до кон­тро­ли­ро­вать ре­кур­сив­но):&lt;br /&gt;
&lt;br /&gt;
 $ iwatch -t “passwd|shadow” /etc&lt;br /&gt;
&lt;br /&gt;
До сих пор не про­смат­ри­ва­лось ниче­го та­ко­го, че­го нель­зя сде­лать в ''inotifywait''. Но две уникаль­ные оп­ции у ''iwatch'' при­бав­ле­ны: '''-m''' для от­прав­ки уве­дом­ления по элек­трон­ной поч­те и '''-с''' для вы­полнения ко­ман­ды.&lt;br /&gt;
&lt;br /&gt;
Пер­вый из этих ар­гу­мен­тов прост. Ес­ли вы хо­ти­те по­лу­чать уве­дом­ления по элек­трон­ной поч­те, когда кто-то по­ку­ша­ет­ся на файл в '''/etc''', вы­полните сле­дую­щее:&lt;br /&gt;
&lt;br /&gt;
 $ iwatch -m your@emailaddress.com -r /etc&lt;br /&gt;
&lt;br /&gt;
Конеч­но, это сра­бо­та­ет, толь­ко ес­ли ма­ши­на, где вы ее вы­пол­няе­те, име­ет поч­то­вый сер­вер, на­стро­ен­ный для от­прав­ки поч­ты на внешние хосты. В про­тив­ном слу­чае сго­дит­ся и локаль­ный поч­то­вый ящик, на­при­мер, '''user@host''', хо­тя это ва­ри­ант, оче­вид­но, менее безо­па­сен, ес­ли вы ис­поль­зуе­те ''iwatch'' для про­вер­ки, не влез ли кто-то в ком­пь­ю­тер.&lt;br /&gt;
&lt;br /&gt;
'''-с''' – то­же ин­те­рес­ная оп­ция. Она ука­зы­ва­ет ко­ман­ду, вы­пол­няе­мую в слу­чае ука­зан­но­го со­бы­тия; мож­но так­же ис­поль­зо­вать пе­ре­мен­ные ти­па  '''%f''' для пол­но­го пу­ти к фай­лу, вы­зы­вав­ше­му со­бы­тие, '''%р''' для на­звания про­грам­мы (''iWatch'') и '''%v''' для вы­во­да вер­сии ''iwatch''. Вот при­мер:&lt;br /&gt;
&lt;br /&gt;
 $ iwatch -t “passwd|shadow” -c “logger -t ‘%p %v’ %f has been changed “ /etc&lt;br /&gt;
&lt;br /&gt;
При этом ис­поль­зу­ет­ся ко­ман­да ''logger'', ре­ги­ст­ри­рую­щая пре­ду­пре­ж­дения в жур­на­ле, когда кто-то мо­ди­фи­ци­ру­ет '''/etc/passwd''' или '''/etc/shadow'''. Вклю­чи­те свое во­об­ра­жение и по­ду­май­те, ка­кие еще ко­ман­ды вы­зы­вать в от­вет на оп­ре­де­лен­ные со­бы­тия фай­ло­вой сис­те­мы.&lt;br /&gt;
&lt;br /&gt;
Дру­гая ин­те­рес­ная осо­бен­ность ''iwatch'' – ре­жим де­мо­на: при этом (с оп­ци­ей '''-d''') ''iwatch'' вы­пол­ня­ет­ся как фо­но­вая и бе­рет кон­фи­гу­ра­цию из '''/etc/iwatch/iwatch.xml''' (или из аль­тер­на­тив­но­го фай­ла кон­фи­гу­ра­ции, ес­ли ука­зать оп­цию '''-f'''). В этом XML-фай­ле ука­жи­те спи­сок па­пок и фай­лов для монито­рин­га и ад­ре­са элек­трон­ной поч­ты для уве­дом­лений и/или ко­ман­ды для вы­полнения. Это по­лез­но, ес­ли у вас есть слож­ный ал­го­ритм для про­вер­ки:&lt;br /&gt;
на­при­мер, вы хо­ти­те, что­бы из­менения в '''/var/www''' пе­ре­да­ва­лись web-мас­те­ру, а из­менения в '''/etc''' – сис­тем­но­му ад­минист­ра­то­ру. Сайт ''Iwatch'' – по­учи­тель­ный при­мер фай­ла XML, где ''iwatch'' ис­поль­зу­ет­ся в ре­жи­ме де­мо­на.&lt;br /&gt;
&lt;br /&gt;
===''Inoticoming''===&lt;br /&gt;
&lt;br /&gt;
Еще один ин­ст­ру­мент – спе­ци­аль­но для монито­рин­га по­яв­лений фай­лов в ука­зан­ном ка­та­ло­ге – ''inoticoming''. Он при­го­дит­ся, на­при­мер, что­бы от­сле­жи­вать при­бы­тие фай­лов на FTP-сер­вер и об­ра­ба­ты­вать их по за­вер­шении за­груз­ки. Или мож­но ав­то­ма­ти­че­­ски пре­об­ра­зо­вы­вать все JPG-файлы, за­гру­жае­мые в ка­та­лог с изо­бра­жения­ми web-сер­ве­ра, в миниа­тю­ры. Ко­ман­да для этих за­дач: &lt;br /&gt;
&lt;br /&gt;
 $ inoticoming --initialsearch /var/www/images --suffix .jpg --chdir /var/www/images convert -resize 200 {} thumbnails/{} \;&lt;br /&gt;
&lt;br /&gt;
Конеч­но, сле­ду­ет по­за­бо­тить­ся о долж­ном раз­ре­шении на запись в ка­та­ло­ге '''/var/www/images/thumbnails''' для про­цес­са ''inoticoming''. С по­мо­щью гло­баль­ной оп­ции '''--initialsearch''' мы так­же велим ''inoticoming'' об­ра­ба­ты­вать все фай­лы в этом ка­та­ло­ге, но вы мо­же­те ее опустить, ес­ли вам это­го не тре­бу­ет­ся. За­тем мы оп­ре­де­ля­ем пап­ку '''/var/www/images''', где ра­бо­тать (от­ме­тим, что ''inoticoming'' не бу­дет смот­реть под­ка­та­ло­ги это­го ка­та­ло­га), и на­зна­ча­ем дей­ст­вия: брать толь­ко фай­лы с рас­ши­рением '''.jpg''' и пе­ред вы­полнением ко­ман­ды пе­рей­ти в пап­ку '''/var/www/images'''. В кон­це стро­ки оп­ре­де­ле­на ко­ман­да для вы­полнения над ка­ж­дым вхо­дя­щим фай­лом – это ин­ст­ру­мент ''convert'' из па­ке­та ''ImageMagick''.&lt;br /&gt;
&lt;br /&gt;
''Inoticoming'' ме­ня­ет пе­ре­мен­ные в скоб­ках '''{}''' на имя об­ра­ба­ты­вае­мо­го фай­ла (толь­ко имя фай­ла, без пу­ти), и ко­ман­да долж­на за­кон­чить­ся точ­кой с за­пя­той, в обо­лоч­ке эк­ранируе­мой сим­во­лом '''\'''.&lt;br /&gt;
&lt;br /&gt;
В случае та­кого за­пуска ''inoti­coming'' ра­бо­та­ет как де­мон, в фо­но­вом ре­жи­ме. Гло­баль­ная оп­ция '''--foreground''' ука­зы­ва­ет оста­вать­ся на пе­реднем плане. В man-странице пе­ре­чис­ле­ны про­чие оп­ции, на­при­мер '''--prefix''' и '''--regexp'''. ''Inoticoming'' менее ги­бок, чем ''inotifywait'', но для об­ра­бот­ки вхо­дя­щих фай­лов в од­ном ка­та­ло­ге без под­ка­та­ло­гов это удоб­ный ин­ст­ру­мент.&lt;br /&gt;
&lt;br /&gt;
===Дру­гие ин­ст­ру­мен­ты===&lt;br /&gt;
&lt;br /&gt;
Ин­ст­ру­мен­ты на ба­зе функ­ций ''Inotify'' пе­ре­чис­лен­ны­ми не ис­чер­пы­ва­ют­ся. На­при­мер, есть ''incron, Cron''-по­доб­ный де­мон, вы­пол­няю­щий дей­ст­вия не на кон­крет­ную да­ту или вре­мя, а по ин­фор­ма­ции ''Inotify'' об оп­ре­де­лен­ном со­бы­тии. Есть так­же два ин­ст­ру­мен­та для син­хрониза­ции ка­та­ло­гов с по­мо­щью ''Inotify: inosync'' и ''lsyncd''. Вме­сто ис­поль­зо­вания ''rsync'' в '''crontab''' для пе­рио­ди­че­­ской син­хрониза­ции двух ка­та­ло­гов ка­ж­дые Х ми­нут или ча­сов, эти ин­ст­ру­мен­ты де­ла­ют син­хрониза­цию немед­лен­но (и, бла­го­да­ря ''Inotify'', без оп­ро­са). Ес­ли вы ре­ши­ли соз­дать са­мо­паль­ный ''Dropbox'', один из этих ин­ст­ру­мен­тов вам по­мо­жет.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=Под FreeBSD, OpenBSD, NetBSD и Mac OS X нет ''Inotify'', но есть схо­жий ин­тер­фейс опо­ве­ще­ния о со­бы­ти­ях, ''Kqueue''.|Ширина=200px}} &lt;br /&gt;
&lt;br /&gt;
Но луч­ший при­знак по­пу­ляр­но­сти ''Inotify'' – то, что ''GNU tail'' (часть ''GNU coreutils'') под­дер­жи­ва­ет ''Inotify'' на­чи­ная с вер­сии 7.5 (с ав­гу­ста 2009 го­да) при ис­поль­зо­ва­нии оп­ции '''-f'''. До это­го вам при­хо­ди­лось ис­поль­зо­вать от­дель­ный ин­ст­ру­мент, на­зы­вае­мый ''inotail''. Вы­хо­дит, не ис­клю­че­но, что вы уже ка­кое-то вре­мя поль­зо­ва­лись ''Inotify'', не по­доз­ре­вая о том.&lt;br /&gt;
&lt;br /&gt;
===Доступ­ные со­бы­тия ''Inotify''===&lt;br /&gt;
 &lt;br /&gt;
* '''access''' От­крыт на­блю­дае­мый файл или файл в на­блю­дае­мом ка­та­ло­ге.&lt;br /&gt;
* '''modify''' Из­менен на­блю­дае­мый файл или файл в на­блю­дае­мом ка­та­ло­ге.&lt;br /&gt;
* '''attrib''' Из­менены ме­та­дан­ные на­блю­дае­мо­го фай­ла или фай­ла в на­блю­дае­мом ка­та­ло­ге. (вклю­чая мет­ки, пра­ва досту­па, рас­ши­рен­ные ат­ри­бу­ты и т. д.).&lt;br /&gt;
* '''close_write''' За­крыт на­блю­дае­мый файл или файл в на­блю­дае­мом ка­та­ло­ге, от­кры­вав­ший­ся в ре­жи­ме за­пи­си.&lt;br /&gt;
* '''close_nowrite''' За­крыт на­блю­дае­мый файл или файл в пре­де­лах на­блю­дае­мо­го ка­та­ло­га, от­кры­вав­ший­ся толь­ко для чтения.&lt;br /&gt;
* '''close''' За­крыт на­блю­дае­мый файл или файл в на­блю­дае­мом ка­та­ло­ге. За­меть­те, что сле­жение здесь реа­ли­зо­ва­но за со­бы­тия­ми '''close_write''' или '''close_nowrite''', по­это­му на вы­хо­де вы уви­ди­те не со­бы­тие '''close''', а од­но из этих двух.&lt;br /&gt;
* '''open''' От­крыт на­блю­дае­мый файл или файл в на­блю­дае­мом ка­та­ло­ге.&lt;br /&gt;
* '''moved_to''' Файл или ка­та­лог пе­ре­ме­щен в на­блю­дае­мый ка­та­лог. Со­бы­тие про­ис­хо­дит, да­же ес­ли файл пе­ре­ме­ща­ет­ся про­сто внут­ри ка­та­ло­га (т. е. пе­ре­име­но­ван).&lt;br /&gt;
* '''moved_from''' Файл или ка­та­лог пе­ре­ме­щен из на­блю­дае­мо­го ка­та­ло­га. Со­бы­тие про­ис­хо­дит, да­же ес­ли файл пе­ре­ме­ща­ет­ся про­сто внут­ри ка­та­ло­га (т. е. пе­ре­име­но­ван).&lt;br /&gt;
* '''moved''' Файл или ка­та­лог пе­ре­ме­щен из на­блю­дае­мо­го ка­та­ло­га или в него. За­меть­те, что это реа­ли­зо­ва­но с по­мо­щью '''moved_to''' и '''moved_from''', по­это­му на вы­хо­де вы уви­ди­те не со­бы­тие '''move''', а од­но из этих двух.&lt;br /&gt;
* '''create''' Соз­дан файл или ка­та­лог в на­блю­дае­мом ка­та­ло­ге.&lt;br /&gt;
* '''delete''' Уда­лен файл или ка­та­лог в на­блю­дае­мом ка­та­ло­ге.&lt;br /&gt;
* '''delete_self''' Файл или ка­та­лог уда­лен. По­сле это­го на­блю­дение с фай­ла или ка­та­лог снима­ет­ся. За­меть­те, что со­бы­тие мо­жет про­изой­ти, да­же ес­ли он яв­но не на­блю­дал­ся.&lt;br /&gt;
* '''unmount''' От­мон­ти­ро­ва­на фай­ло­вая сис­те­ма, где на­хо­дил­ся на­блю­дае­мый файл или ка­та­лог. По­сле это­го на­блю­дение с фай­ла или ка­та­лог снима­ет­ся. За­меть­те, что со­бы­тие мо­жет про­изой­ти, да­же ес­ли он яв­но не на­блю­дал­ся.&lt;br /&gt;
&lt;br /&gt;
===Про­све­ти ме­ня!===&lt;br /&gt;
&lt;br /&gt;
Ес­ли вы ис­поль­зуе­те ''inotifywatch, inotifywait'' или дру­гой ин­ст­ру­мент ''Inotify'' на боль­шом де­ре­ве ка­та­ло­гов, на­при­мер '''/''', вы ско­ро пре­вы­си­те стан­дарт­ный ли­мит на чис­ло про­смот­ров ''Inotify'', по­то­му что ''Inotify'' дол­жен соз­дать один про­смотр на под­ка­та­лог. К сча­стью, эти ин­ст­ру­мен­ты вы­да­ют под­роб­ное со­об­ще­ние об ошиб­ке, и они ска­жут вам, что де­лать: уве­личь­те от­ве­ден­ное на поль­зо­ва­те­ля чис­ло про­смот­ров ''Inotify'', ко­то­рое на­хо­дит­ся в фай­ле '''/proc/sys/fs/inotify/max_user_watches'''. Взгля­ни­те на зна­че­ние по умол­ча­нию это­го па­ра­мет­ра яд­ра и по­высь­те его, ес­ли тре­бу­ет­ся:&lt;br /&gt;
 &lt;br /&gt;
 # cat /proc/sys/fs/inotify/max_user_watches &lt;br /&gt;
 8192&lt;br /&gt;
 # echo 32768 &amp;gt; /proc/sys/fs/inotify/max_user_watches&lt;br /&gt;
 # cat /proc/sys/fs/inotify/max_user_watches&lt;br /&gt;
 32768&lt;br /&gt;
&lt;br /&gt;
Те­перь на­блю­дай­те се­бе хоть за всей фай­ло­вой сис­те­мой. Од­на­ко эта на­строй­ка не пе­ре­жи­вет пе­ре­за­груз­ки ди­ст­ри­бу­ти­ва Linux. При же­ла­нии сде­лать дан­ный па­ра­метр яд­ра по­сто­ян­ным, до­бавь­те в '''/etc/sysctl.conf''' та­кую стро­ку:&lt;br /&gt;
&lt;br /&gt;
 fs.inotify.max_user_watches = 32768&lt;br /&gt;
&lt;br /&gt;
Или, ес­ли в ва­шем ди­ст­ри­бу­ти­ве нет '''/etc/sysctl.conf''', до­бавь­те сле­дую­щую стро­ку в '''/etc/rc.local''', до стро­ки, со­дер­жа­щей '''exit 0''':&lt;br /&gt;
&lt;br /&gt;
 echo 32768 &amp;gt; /proc/sys/fs/inotify/max_user_watches&lt;/div&gt;</description>
			<pubDate>Wed, 21 Mar 2012 10:57:59 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF139:Inotify</comments>		</item>
	</channel>
</rss>