.TH inotifywait 1 "2025-09-23" "inotifywait 4.23.9.0" .SH "نام (NAME)" inotifywait, fsnotifywait \- انتظار برای تغییرات فایل‌ها با استفاده از inotify یا fanotify .SH "خلاصه دستور (SYNOPSIS)" .B inotifywait .RB [ \-hcmrPqIFS ] .RB [ \-e ] .RB [ \-t ] .RB [ \-\-format ] .RB [ \-\-timefmt ] [ ... ] .B fsnotifywait .RB [ \-hcmrPqIFS ] .RB [ \-e ] .RB [ \-t ] .RB [ \-\-format ] .RB [ \-\-timefmt ] [ ... ] .SH "توضیحات (DESCRIPTION)" دستور .B inotifywait به‌طور پیش‌فرض با استفاده کارآمد از رابط .BR inotify (7) لینوکس، منتظر تغییرات در فایل‌ها می‌ماند. این ابزار برای انتظار جهت تغییر فایل‌ها در اسکریپت‌های شل مناسب است. این ابزار می‌تواند به محض وقوع یک رویداد خارج شود، یا به‌طور پیوسته اجرا شده و رویدادها را هنگام وقوع در خروجی نمایش دهد. دستور .B fsnotifywait مشابه .B inotifywait است اما به‌طور پیش‌فرض از رابط .BR fanotify (7) لینوکس استفاده می‌کند. در صورت تعیین صریح، از رابط .BR inotify (7) استفاده خواهد کرد. .SH "خروجی (OUTPUT)" دستورهای .B inotifywait و .B fsnotifywait اطلاعات عیب‌یابی را روی خطای استاندارد و اطلاعات رویداد را روی خروجی استاندارد چاپ می‌کنند. خروجی رویداد قابل پیکربندی است، اما به‌طور پیش‌فرض از خطوطی با قالب زیر تشکیل شده است: .B watched_filename EVENT_NAMES event_filename .TP .B watched_filename نام فایلی است که رویداد روی آن رخ داده است. اگر فایل یک دایرکتوری باشد، یک ممیز (اسلش) انتهایی در خروجی درج می‌شود. .TP .B EVENT_NAMES نام رویدادهای inotify رخ‌داده هستند که با کاما از یکدیگر جدا شده‌اند. .TP .B event_filename تنها زمانی در خروجی نمایش داده می‌شود که رویداد روی یک دایرکتوری رخ داده باشد؛ در این حالت، نام فایلی در داخل دایرکتوری که باعث این رویداد شده است در خروجی درج می‌گردد. به‌طور پیش‌فرض، نویسه‌های خاص درون نام فایل‌ها به هیچ وجه گریز داده نمی‌شوند (escape نمی‌شوند). این مسئله می‌تواند تجزیه خروجی inotifywait را در اسکریپت‌های awk یا موارد مشابه دشوار کند. گزینه‌های .B \-\-csv و .B \-\-format در این موارد مفید خواهند بود. .SH "گزینه‌ها (OPTIONS)" .TP .B \-h, \-\-help نمایش اطلاعات راهنمای استفاده از دستور. .TP .B @ هنگام پایش بازگشتی یک درخت دایرکتوری، فایل مشخص‌شده را از نظارت مستثنی می‌کند. این فایل باید با مسیر نسبی یا مطلق، متناسب با نحوه مشخص‌شدن دایرکتوری‌های تحت نظارت (نسبی یا مطلق)، تعیین گردد. اگر یک مسیر خاص صراحتاً هم مشمول و هم مستثنی شده باشد، همواره تحت نظارت باقی خواهد ماند. .B نکته: اگر می‌خواهید دایرکتوری یا فایلی را پایش کنید که نام آن با @ شروع می‌شود، مسیر مطلق آن را مشخص نمایید. .TP .B \-\-fromfile خواندن نام فایل‌های تحت پایش یا موارد استثنا از یک فایل، به صورت یک نام فایل در هر خط. اگر نام فایل‌ها با @ آغاز شوند، مطابق توضیحات بالا مستثنی می‌گردند. اگر مقدار برابر با `\-' باشد، نام فایل‌ها از ورودی استاندارد خوانده می‌شوند. از این گزینه زمانی استفاده کنید که تعداد فایل‌های مورد نیاز برای پایش، بیشتر از ظرفیت پذیرش آرگومان‌های خط فرمان باشد. .TP .B \-m, \-\-monitor به جای خروج پس از دریافت یک رویداد منفرد، اجرای نامحدود خواهد داشت. رفتار پیش‌فرض این است که برنامه پس از وقوع نخستین رویداد خارج شود. .TP .B \-d, \-\-daemon مشابه \-\-monitor است، با این تفاوت که در پس‌زمینه اجرا شده و رویدادها را در فایلی که الزاماً باید توسط \-\-outfile تعیین شود ثبت می‌کند. مستلزم گزینه \-\-syslog است. .TP .B \-o, \-\-outfile ارسال رویدادها به خروجی به جای stdout. .TP .B \-s, \-\-syslog ارسال خطاها به ماژول گزارش وقایع سیستم .BR syslog (3) به جای stderr. .TP .B \-P, \-\-no\-dereference عدم دنبال کردن پیوندهای نمادین (symlinks). .TP .B \-r, \-\-recursive نظارت بر تمام زیردایرکتوری‌های مربوط به دایرکتوری‌های ارائه‌شده به عنوان آرگومان. نظارت‌ها به صورت بازگشتی و تا عمق نامحدود برقرار خواهند شد. پیوندهای نمادین پیمایش نمی‌شوند. زیردایرکتوری‌های تازه‌ساخته‌شده نیز پایش خواهند شد. .B هشدار: اگر از این گزینه هنگام پایش دایرکتوری ریشه در یک درخت پوشه‌ای بزرگ استفاده کنید، ممکن است راه‌اندازی تمام نظارت‌های inotify زمان قابل توجهی ببرد و در این فاصله هیچ رویدادی دریافت نشود. همچنین از آنجا که برای هر زیردایرکتوری یک پایش inotify برقرار می‌گردد، احتمال دارد تعداد پایش‌ها از حد مجاز کاربر فراتر رود. حداکثر پیش‌فرض 8192 است؛ این مقدار را می‌توان از طریق نوشتن در .BR /proc/sys/fs/inotify/max_user_watches افزایش داد. .TP .B \-q, \-\-quiet در صورت مشخص شدن به صورت یک‌باره، پیام‌های خروجی برنامه کاهش می‌یابد. به‌طور مشخص، اتمام برقراری تمام نظارت‌های inotify گزارش نخواهد شد. در صورت تکرار دوباره گزینه، هیچ خروجی چاپ نخواهد شد، مگر در زمان وقوع خطاهای مرگبار (fatal). .TP .B \-\-exclude عدم پردازش رویدادها برای زیرمجموعه‌ای از فایل‌ها که نام آن‌ها با عبارت باقاعده POSIX داده‌شده هم‌خوانی دارد (حساس به بزرگی و کوچکی حروف). .TP .B \-\-excludei عدم پردازش رویدادها برای زیرمجموعه‌ای از فایل‌ها که نام آن‌ها با عبارت باقاعده POSIX داده‌شده هم‌خوانی دارد (غیرحساس به بزرگی و کوچکی حروف). .TP .B \-\-include پردازش رویدادها فقط برای زیرمجموعه‌ای از فایل‌ها که نام آن‌ها با عبارت باقاعده POSIX داده‌شده مطابقت دارد (حساس به بزرگی و کوچکی حروف). در صورت استفاده همراه با \-\-recursive، رویدادها برای فایل‌های منطبق در داخل دایرکتوری‌های تازه ایجادشده نیز تولید خواهند شد، حتی اگر نام خود دایرکتوری‌ها با الگو مطابقت نداشته باشد. .TP .B \-\-includei پردازش رویدادها فقط برای زیرمجموعه‌ای از فایل‌ها که نام آن‌ها با عبارت باقاعده POSIX داده‌شده مطابقت دارد (غیرحساس به بزرگی و کوچکی حروف). .TP .B \-t , \-\-timeout خروج از برنامه در صورتی که در طول ثانیه رویداد مناسبی رخ ندهد. چنانچه مقدار صفر باشد (حالت پیش‌فرض)، به صورت نامحدود در انتظار رویداد می‌ماند. .TP .B \-e , \-\-event شنود تنها برای رویداد(های) خاص. رویدادهای قابل شنود در بخش .B EVENTS فهرست شده‌اند. این گزینه می‌تواند بیش از یک‌بار مشخص شود. در صورت عدم درج، تمام رویدادها شنود می‌شوند. .TP .B \-c, \-\-csv خروجی در قالب CSV (مقادیر جداشده با کاما). این گزینه هنگامی مفید است که نام فایل‌ها شامل فاصله (space) باشد، زیرا در این وضعیت شکستن خروجی صرفاً با نویسه فاصله امن نیست..TP .B \-\-timefmt تنظیم یک رشته قالب زمان قابل قبول برای .BR strftime (3) جهت استفاده در تبدیل `%T' در گزینه \-\-format. .TP .B \-\-no-newline عدم چاپ نماد خط جدید (newline) پس از قالب مشخص‌شده توسط کاربر در گزینه \-\-format. .TP .B \-\-format خروجی در قالب مشخص‌شده توسط کاربر، با استفاده از ساختار شبیه به printf. طول رشته‌های رویداد خروجی به حدود ۴۰۰۰ نویسه محدود است و تا این اندازه کوتاه خواهند شد. تبدیل‌های زیر پشتیبانی می‌شوند: .TP %w با نام فایل تحت نظارتی که رویداد روی آن رخ داده است جایگزین می‌شود. هنگامی که رویدادی درون یک دایرکتوری تحت نظارت رخ دهد یا هنگام نظارت با fanotify، با نام دایرکتوری که رویداد در آن رخ داده است جایگزین خواهد شد. .TP %f هنگامی که رویدادی درون یک دایرکتوری تحت نظارت رخ دهد یا هنگام نظارت با fanotify، با نام فایلی که موجب رخداد این رویداد شده است جایگزین می‌شود. در غیر این صورت، با یک رشته خالی جایگزین خواهد شد. .TP %e با رویداد(های) رخ‌داده، جدا شده با کاما، جایگزین می‌شود. .TP %Xe با رویداد(های) رخ‌داده، جدا شده با هر نویسه‌ای که به جای `X' قرار گرفته باشد، جایگزین می‌شود. .TP %T با زمان کنونی در قالب تعیین‌شده توسط گزینه \-\-timefmt جایگزین می‌شود، که باید یک رشته قالب مناسب برای ارسال به .BR strftime (3) باشد. .TP %0 با NUL جایگزین می‌شود. .TP %n با Line Feed (خط جدید) جایگزین می‌شود. .TP .B \-I, \-\-inotify نظارت با استفاده از inotify (پیش‌فرض برای \fBinotifywait\fP). .TP .B \-F, \-\-fanotify نظارت با استفاده از fanotify (پیش‌فرض برای \fBfsnotifywait\fP). پشتیبانی fanotify از گزارش رویدادها همراه با اطلاعات سازگار با inotify در هسته نسخه ۵.۹ اضافه شد. در هسته‌های قدیمی‌تر این دستور با شکست مواجه می‌شود. از هسته نسخه ۵.۱۲، استفاده از fanotify نیازمند دسترسی‌های مدیر سیستم است. .TP .B \-S, \-\-filesystem نظارت بر کل فایل‌سیستم هر یک از دایرکتوری‌های ارائه‌شده به عنوان آرگومان با استفاده از fanotify. .SH "وضعیت خروج (EXIT STATUS)" .TP .B 0 برنامه با موفقیت اجرا شد و رویدادی که شنود می‌شد رخ داد. .TP .B 1 خطایی در اجرای برنامه رخ داد، یا رویدادی رخ داد که شنود نمی‌شد. مورد دوم معمولاً زمانی رخ می‌دهد که اتفاقی بیفتد که دیده‌بانی inotify را اجباراً حذف کند، مانند حذف فایلی که تحت نظارت است یا پیاده شدن (unmount) فایل‌سیستمی که حاوی فایل تحت نظارت است. .TP .B 2 از گزینه .B \-t استفاده شد و هیچ رویدادی در بازه زمانی تعیین‌شده رخ نداد..SH "رویدادها (EVENTS)" رویدادهای زیر برای استفاده با گزینهٔ .B \-e معتبر هستند: .TP .B access یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر خوانده شد. .TP .B modify در یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر نوشته شد. .TP .B attrib متادیتای یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر تغییر یافت. این مورد شامل برچسب‌های زمانی، مجوزهای فایل، ویژگی‌های توسعه‌یافته و غیره است. .TP .B close_write یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر، پس از باز شدن در حالت قابل نوشتن، بسته شد. این لزوماً به این معنا نیست که در فایل نوشته شده است. .TP .B close_nowrite یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر، پس از باز شدن در حالت فقط‌خواندنی، بسته شد. .TP .B close یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر، صرف‌نظر از نحوهٔ باز شدن آن، بسته شد. توجه داشته باشید که این در واقع صرفاً با شنود هر دوی .B close_write و .B close_nowrite پیاده‌سازی شده است؛ از این‌رو تمام رویدادهای بسته‌شدن دریافتی به‌صورت یکی از این دو در خروجی نمایش داده می‌شوند، نه .B CLOSE. .TP .B open یک فایل تحت‌نظر یا فایلی درون یک دایرکتوری تحت‌نظر باز شد. .TP .B moved_to یک فایل یا دایرکتوری به درون یک دایرکتوری تحت‌نظر منتقل شد. این رویداد حتی در صورتی که فایل صرفاً از و به همان دایرکتوری منتقل شود نیز رخ می‌دهد. .TP .B moved_from یک فایل یا دایرکتوری از یک دایرکتوری تحت‌نظر منتقل شد. این رویداد حتی در صورتی که فایل صرفاً از و به همان دایرکتوری منتقل شود نیز رخ می‌دهد. .TP .B move یک فایل یا دایرکتوری از یا به یک دایرکتوری تحت‌نظر منتقل شد. توجه داشته باشید که این در واقع صرفاً با شنود هر دوی .B moved_to و .B moved_from پیاده‌سازی شده است؛ از این‌رو تمام رویدادهای جابه‌جایی دریافتی به‌صورت یکی از این دو یا هر دو در خروجی نمایش داده می‌شوند، نه .B MOVE. .TP .B move_self یک فایل یا دایرکتوری تحت‌نظر جابه‌جا شد. پس از این رویداد، فایل یا دایرکتوری دیگر تحت‌نظر نخواهد بود. .TP .B create یک فایل یا دایرکتوری درون یک دایرکتوری تحت‌نظر ایجاد شد. .TP .B delete یک فایل یا دایرکتوری درون یک دایرکتوری تحت‌نظر حذف شد. .TP .B delete_self یک فایل یا دایرکتوری تحت‌نظر حذف شد. پس از این رویداد، فایل یا دایرکتوری دیگر تحت‌نظر نخواهد بود. توجه داشته باشید که این رویداد حتی در صورتی که صراحتاً برای آن شنود نشده باشد نیز می‌تواند رخ دهد. .TP .B unmount سیستم‌فایلی که فایل یا دایرکتوری تحت‌نظر روی آن قرار دارد، پیاده (unmount) شد. پس از این رویداد، فایل یا دایرکتوری دیگر تحت‌نظر نخواهد بود. توجه داشته باشید که این رویداد حتی در صورتی که صراحتاً برای آن شنود نشده باشد نیز می‌تواند رخ دهد..SH "مثال‌ها (EXAMPLES)" .SS "مثال ۱" اجرای inotifywait در خط فرمان برای انتظار جهت دسترسی به هر فایلی در دایرکتوری `test`. پس از اجرای inotifywait، دستور `cat test/foo` در یک کنسول جداگانه اجرا می‌شود. .nf % inotifywait test Setting up watches. Watches established. test/ ACCESS foo .fi .SS "مثال ۲" یک اسکریپت شل کوتاه برای انتظار کارآمد جهت رویداد پیام‌های لاگ مرتبط با httpd و انجام اقدام مناسب. .nf #!/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 .fi .SS "مثال ۳" یک قالب خروجی سفارشی برای پایش `~/test` استفاده شده است. در همین حال، در کنسول دیگری دستور `touch ~/test/badfile; touch ~/test/goodfile; rm ~/test/badfile` اجرا می‌شود. .nf % inotifywait -m -r --format '%:e %f' ~/test Setting up watches. Beware: since -r was given, this may take a while! Watches established. CREATE badfile OPEN badfile ATTRIB badfile CLOSE_WRITE:CLOSE badfile CREATE goodfile OPEN goodfile ATTRIB goodfile CLOSE_WRITE:CLOSE goodfile DELETE badfile .fi .SS "مثال ۴" اعمال مجوزهای فایل در دایرکتوری `~/test` .nf inotifywait -qmr -e 'moved_to,create' --format '%w%f%0' --no-newline ~/test |\\ while IFS= read -r -d '' file do chmod -v a+rX "$file" done .fi .SH "هشدارها (CAVEATS)" هنگام استفاده از inotifywait، تضمینی وجود ندارد که نام فایل خروجی پس از جابه‌جایی به‌روز باشد، زیرا در واقع inode پایش می‌شود. علاوه بر این، در مواردی که فایل با چندین نام در سیستم‌فایل شناخته می‌شود، تضمینی نیست که هیچ‌یک از عملیات‌های مشاهده‌شده روی نام فایلی انجام شده باشند که به inotifywait دستور پایش آن داده شده بود. .SH "گزارش باگ‌ها (BUGS)" در کد پایش بازگشتی دایرکتوری شرایط رقابتی (race conditions) وجود دارد که در صورت وقوع رویدادها در یک دایرکتوری بلافاصله پس از ایجاد آن، می‌تواند باعث از دست رفتن رویدادها شود. این مشکل احتمالاً قابل رفع نیست. فرض بر این است که صف رویدادهای inotify هرگز سرریز نخواهد کرد. .SH "نویسندگان (AUTHORS)" توسعهٔ inotifywait توسط Rohan McGovern آغاز شد و در حال حاضر توسط Eric Curtin و Radu Voicilas نگهداری می‌شود. نشانی https://www.openhub.net/p/inotify-tools/contributors/summary فهرست کامل‌تری از مشارکت‌کنندگان را ارائه می‌دهد. ابزار inotifywait بخشی از inotify-tools است. وبگاه inotify-tools در نشانی زیر قرار دارد: .I https://github.com/inotify-tools/inotify-tools/wiki.SH "همچنین ببینید (SEE ALSO)" .BR inotifywatch (1), .BR strftime (3), .BR inotify (7)