inotifywatch(1) General Commands Manual inotifywatch(1)

inotifywatch, fsnotifywatch - جمع‌آوری آمار رویدادهای دسترسی فایل‌ها با استفاده از inotify یا fanotify

inotifywatch [-hvzrPqfIFS] [-e <رویداد> ] [-t <ثانیه> ] [-a <رویداد> ] [-d <رویداد> ] <فایل> [ ... ]

fsnotifywatch [-hvzrPqfIFS] [-e <رویداد> ] [-t <ثانیه> ] [-a <رویداد> ] [-d <رویداد> ] <فایل> [ ... ]

inotifywatch به طور پیش‌فرض با استفاده از رابط inotify(7) لینوکس به رویدادهای سیستم فایل گوش می‌دهد، سپس خلاصه‌ای از شمارش رویدادهای دریافت‌شده روی هر فایل یا دایرکتوری را در خروجی چاپ می‌کند.

fsnotifywatch مشابه inotifywatch است اما به طور پیش‌فرض از رابط fanotify(7) لینوکس استفاده می‌کند. در صورت تعیین صریح، از رابط inotify(7) استفاده می‌نماید.

inotifywatch و fsnotifywatch جدولی را در خروجی استاندارد چاپ می‌کنند که شامل یک ستون برای هر نوع رویداد و یک سطر برای هر فایل یا دایرکتوری تحت‌نظر است. این جدول تعداد دفعات وقوع هر رویداد را برای هر فایل یا دایرکتوری تحت‌نظر نشان می‌دهد. خروجی را می‌توان با استفاده از گزینه‌های -a یا -d بر اساس یک رویداد خاص مرتب کرد.

برخی اطلاعات تشخیصی در خروجی خطای استاندارد چاپ خواهند شد.

نمایش اطلاعات راهنمای استفاده از دستور.
چاپ اطلاعات اضافی در خروجی خطای استاندارد در حین اجرا.
@<فایل>
هنگام پایش بازگشتی درخت دایرکتوری، فایل مشخص‌شده را از پایش مستثنی می‌کند. فایل باید با مسیر نسبی یا مطلق مشخص شود، بسته به اینکه مسیر نسبی یا مطلق برای دایرکتوری‌های تحت‌نظر داده شده باشد. اگر یک مسیر خاص به طور صریح هم مشمول و هم مستثنی شده باشد، همیشه پایش خواهد شد.

نکته: اگر نیاز به پایش دایرکتوری یا فایلی دارید که نام آن با @ شروع می‌شود، مسیر مطلق را وارد کنید.

خواندن نام فایل‌های تحت‌نظر یا مستثنی‌شده از یک فایل، هر نام فایل در یک سطر. اگر نام فایل‌ها با @ شروع شوند، طبق توضیحات بالا مستثنی می‌شوند. اگر <فایل> برابر با `-` باشد، نام فایل‌ها از ورودی استاندارد خوانده می‌شوند. از این گزینه در صورتی استفاده کنید که تعداد فایل‌های مورد نیاز برای پایش بیش از آن باشد که بتوان به عنوان آرگومان خط فرمان ارسال کرد.
چاپ سطرها و ستون‌های جدول حتی اگر تمام مقادیر صفر باشند. به طور پیش‌فرض، سطرها و ستون‌ها فقط در صورتی چاپ می‌شوند که شامل عناصر غیرصفر باشند. استفاده از این گزینه هنگام پایش همه رویدادها روی تعداد زیادی فایل می‌تواند منجر به حجم بسیار زیادی از خروجی شود!
هیچ رویدادی را برای زیرمجموعه‌ای از فایل‌ها که نام آن‌ها با عبارت باقاعده POSIX مشخص‌شده مطابقت دارد پردازش نمی‌کند (حساس به حروف کوچک و بزرگ).
هیچ رویدادی را برای زیرمجموعه‌ای از فایل‌ها که نام آن‌ها با عبارت باقاعده POSIX مشخص‌شده مطابقت دارد پردازش نمی‌کند (غیرحساس به حروف کوچک و بزرگ).
رویدادها را فقط برای زیرمجموعه‌ای از فایل‌ها پردازش می‌کند که نام آن‌ها با عبارت باقاعده POSIX مشخص‌شده مطابقت دارد (حساس به حروف کوچک و بزرگ).
رویدادها را فقط برای زیرمجموعه‌ای از فایل‌ها پردازش می‌کند که نام آن‌ها با عبارت باقاعده POSIX مشخص‌شده مطابقت دارد (غیرحساس به حروف کوچک و بزرگ).
تمام زیردایرکتوری‌های هر دایرکتوری ارائه‌شده به عنوان آرگومان را پایش می‌کند. پایش‌ها به صورت بازگشتی تا عمق نامحدود برقرار می‌شوند. پیوندهای نمادین پیمایش نمی‌شوند. اگر دایرکتوری‌های جدیدی درون دایرکتوری‌های تحت‌نظر ایجاد شوند، به طور خودکار پایش خواهند شد.

هشدار: اگر از این گزینه هنگام پایش دایرکتوری ریشه یک درخت بزرگ استفاده کنید، ممکن است ایجاد تمام پایش‌های inotify زمان قابل‌توجهی طول بکشد و در این مدت رویدادی دریافت نخواهد شد. همچنین، از آنجا که برای هر زیردایرکتوری یک پایش inotify ایجاد می‌شود، ممکن است به حداکثر تعداد پایش‌های inotify مجاز برای هر کاربر برسید. مقدار پیش‌فرض حداکثر ۸۱۹۲ است؛ این مقدار را می‌توان با نوشتن در /proc/sys/fs/inotify/max_user_watches افزایش داد.

پیوندهای نمادین را دنبال نمی‌کند.
فقط به مدت تعداد ثانیه‌های مشخص‌شده گوش می‌دهد. در صورت عدم تعیین، inotifywatch تا زمان دریافت سیگنال وقفه (برای مثال با فشردن کلیدهای CONTROL-C در کنسول) به جمع‌آوری آمار ادامه می‌دهد.
فقط به رویداد(های) خاص گوش می‌دهد. رویدادهایی که می‌توان به آن‌ها گوش داد در بخش رویدادها (EVENTS) فهرست شده‌اند. این گزینه را می‌توان بیش از یک بار مشخص کرد. در صورت حذف، به تمام رویدادها گوش داده می‌شود.
مرتب‌سازی صعودی خروجی بر اساس تعداد رویداد مشخص‌شده. رویدادهای قابل مرتب‌سازی شامل `total` و تمامی رویدادهای فهرست‌شده در بخش رویدادها (EVENTS) به جز `move` و `close` هستند (به جای آن‌ها باید از `moved_to`، `moved_from`، `close_write` یا `close_nowrite` استفاده کنید). حالت پیش‌فرض، مرتب‌سازی نزولی بر اساس `total` است.
مرتب‌سازی نزولی خروجی بر اساس تعداد رویداد مشخص‌شده. رویدادهای قابل مرتب‌سازی شامل `total` و تمامی رویدادهای فهرست‌شده در بخش رویدادها (EVENTS) به جز `move` و `close` هستند (به جای آن‌ها باید از `moved_to`، `moved_from`، `close_write` یا `close_nowrite` استفاده کنید). حالت پیش‌فرض، مرتب‌سازی نزولی بر اساس `total` است.
پایش با استفاده از inotify (پیش‌فرض برای inotifywatch).
پایش با استفاده از fanotify (پیش‌فرض برای fsnotifywatch). پشتیبانی fanotify برای گزارش رویدادها با اطلاعات سازگار با inotify در هسته نسخه ۵.۹ اضافه شد. با هسته‌های قدیمی‌تر این دستور با خطا مواجه خواهد شد. از هسته نسخه ۵.۱۲ به بعد، fanotify نیازمند دسترسی‌های مدیریتی است.
پایش کل سیستم فایل هر دایرکتوری ارائه‌شده به عنوان آرگومان با استفاده از fanotify.

0
برنامه با موفقیت اجرا شد.
1
خطایی در اجرای برنامه رخ داد.

رویدادهای زیر برای استفاده با گزینه -e معتبر هستند:

فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر خوانده شد.
فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر نوشته شد.
متادیتای فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر تغییر یافت. این شامل برچسب‌های زمانی، دسترسی‌های فایل، ویژگی‌های گسترش‌یافته و غیره است.
فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر، پس از باز شدن در حالت قابل نوشتن، بسته شد. این لزوماً به این معنی نیست که در فایل نوشته شده است.
فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر، پس از باز شدن در حالت فقط‌خواندنی، بسته شد.
فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر، صرف‌نظر از نحوه باز شدن آن، بسته شد. توجه داشته باشید که این در واقع صرفاً با گوش دادن به هر دو رویداد close_write و close_nowrite پیاده‌سازی شده است، بنابراین تمام رویدادهای بستن دریافتی به عنوان یکی از این دو در خروجی چاپ می‌شوند، نه CLOSE.
فایلی تحت‌نظر یا فایلی درون دایرکتوری تحت‌نظر باز شد.
یک فایل یا دایرکتوری به درون دایرکتوری تحت‌نظر منتقل شد. این رویداد حتی در صورتی که فایل از همان دایرکتوری و به همان دایرکتوری جابه‌جا شود رخ می‌دهد.
یک فایل یا دایرکتوری از دایرکتوری تحت‌نظر منتقل شد. این رویداد حتی در صورتی که فایل از همان دایرکتوری و به همان دایرکتوری جابه‌جا شود رخ می‌دهد.
یک فایل یا دایرکتوری از یا به یک دایرکتوری تحت‌نظر منتقل شد. توجه داشته باشید که این در واقع صرفاً با گوش دادن به هر دو رویداد moved_to و moved_from پیاده‌سازی شده است، بنابراین تمام رویدادهای انتقال دریافتی به عنوان یکی از این دو یا هر دوی آن‌ها در خروجی چاپ می‌شوند، نه MOVE.
یک فایل یا دایرکتوری تحت‌نظر جابه‌جا شد. پس از این رویداد، فایل یا دایرکتوری دیگر تحت پایش نخواهد بود.
یک فایل یا دایرکتوری درون یک دایرکتوری تحت‌نظر ایجاد شد.
یک فایل یا دایرکتوری درون یک دایرکتوری تحت‌نظر حذف شد.
یک فایل یا دایرکتوری تحت‌نظر حذف شد. پس از این رویداد، فایل یا دایرکتوری دیگر تحت پایش نخواهد بود. توجه داشته باشید که این رویداد می‌تواند حتی در صورت عدم گوش دادن صریح به آن رخ دهد.
سیستم فایلی که فایل یا دایرکتوری تحت‌نظر روی آن قرار دارد، از حالت سوار (Unmount) خارج شد. پس از این رویداد، فایل یا دایرکتوری دیگر تحت پایش نخواهد بود. توجه داشته باشید که این رویداد می‌تواند حتی در صورت عدم گوش دادن صریح به آن رخ دهد.

پایش دایرکتوری `~/.beagle' به مدت ۶۰ ثانیه:

% inotifywatch -v -e access -e modify -t 60 -r ~/.beagle
Establishing watches...
Setting up watch(es) on /home/rohan/.beagle
OK, /home/rohan/.beagle is now being watched.
Total of 302 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 60 seconds.
total  access  modify  filename
1436   1074    362     /home/rohan/.beagle/Indexes/FileSystemIndex/PrimaryIndex/
1323   1053    270     /home/rohan/.beagle/Indexes/FileSystemIndex/SecondaryIndex/
303    116     187     /home/rohan/.beagle/Indexes/KMailIndex/PrimaryIndex/
261    74      187     /home/rohan/.beagle/TextCache/
206    0       206     /home/rohan/.beagle/Log/
42     0       42      /home/rohan/.beagle/Indexes/FileSystemIndex/Locks/
18     6       12      /home/rohan/.beagle/Indexes/FileSystemIndex/
12     0       12      /home/rohan/.beagle/Indexes/KMailIndex/Locks/
3      0       3       /home/rohan/.beagle/TextCache/54/
3      0       3       /home/rohan/.beagle/TextCache/bc/
3      0       3       /home/rohan/.beagle/TextCache/20/
3      0       3       /home/rohan/.beagle/TextCache/62/
2      2       0       /home/rohan/.beagle/Indexes/KMailIndex/SecondaryIndex/

هنگام استفاده از inotifywatch، تضمینی وجود ندارد که نام فایل چاپ‌شده در خروجی پس از یک جابه‌جایی به‌روز باشد، زیرا این inode است که پایش می‌شود. علاوه بر این، در مواردی که فایل با چندین نام در سیستم فایل شناخته می‌شود، تضمینی نیست که هیچ‌یک از عملیات‌های مشاهده‌شده روی همان نام فایلی انجام شده باشند که به inotifywatch دستور پایش آن داده شده بود.

شرایط رقابتی در کد پایش بازگشتی دایرکتوری وجود دارد که در صورت وقوع رویدادها در یک دایرکتوری بلافاصله پس از ایجاد آن دایرکتوری، می‌تواند منجر به از دست رفتن رویدادها شود. این مشکل احتمالاً غیرقابل رفع است.

فرض بر این است که صف رویدادهای inotify هرگز سرریز نخواهد کرد.

inotifywatch توسط Rohan McGovern آغاز شد و در حال حاضر توسط Eric Curtin و Radu Voicilas نگهداری می‌شود. نشانی https://www.openhub.net/p/inotify-tools/contributors/summary فهرست کامل‌تری از مشارکت‌کنندگان را ارائه می‌دهد.

inotifywatch بخشی از inotify-tools است. وب‌سایت inotify-tools در نشانی زیر قرار دارد: https://github.com/inotify-tools/inotify-tools/wiki

inotifywait(1), inotify(7)

2025-09-23 inotifywatch 4.23.9.0