كيف تراقب الملفات في نظام اللينكس

المشكلة

مراقبة الملفات تعتبر ميزة أساسية في أنظمة التشغيل ولها فوائد كثيرة مثل مراقبة حذف/اضافة/تعديل ملف او مجلد من اجل عمل تزامن له مع الخادم او في حال الرغبة بمعرفة موقع ملف الاعدادات التي يستخدمه تطبيق معين او مراقبة ملفات حساسة لمعرفة محاولات تغييرها او العبث بها … والتطبيقات ومجالات الاستخدام كثيرة

###الحل

توفر نواة اللينكس ما يسمى بـ inotify وهي اختصار لـ inode notify وهدفها تبليغ التطبيقات المهتمة بالتغيرات والأحداث التي تحصل لنظام الملفات. يمكن الوصول لها برمجيا وتوجد مكتبات تسهل استخدامها من لغات مثل البايثون.

لكن يوجد تطبيق لسطر الأوامر يمكن استخدامة مباشرة او دمجه مع برمجيات اخرى يسمى inotifywait وهو جزء من حزمة inotify-tools
بالإمكان تثبيتها من التطبيقات الرسومية أو من سطر الأوامر كالتالي:

# dnf install inotify-tools

###طريقة استخدام الأداة

لنفرض انك تريد مراقبة الملفات تحت مجلد /etc/ وما تحته من مجلدات فاكتب الأمر التالي:

$ inotifywait -rm /etc

هذا الامر سيراقب جميع الأحداث التي تحصل تحت ذلك المجلد والحرف r يجعله يراقب المجلدات الفرعية كذلك والحرف m يجعله يستمر بالمراقبة وإلا فانه سينتهي بعد أول حدث أو تغيير.

  • عند تنفيذ الأمر سيستغرق وقت قبل أن يجهز إذا كان عدد المجلدات الفرعية كبير

تستطيع كذلك تحديد نوع التغيير المطلوب مراقبته لأنه بدون تحديد سيعرض كل صغيرة وكبيرة تحصل لتلك الملفات.
وللتحديد يستخدم الحرف e يليه نوع الحدث المطلوب، فلو اردنا مراقبة عمليات الإنشاء و التعديل والحذف فقط نكتب التالي:

$ inotifywait -rme create,modify,delete /etc

مثال للمخرجات من الامر السابق:

Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
/etc/yum.repos.d/ CREATE .rpmfusion-free.repo.swp
/etc/yum.repos.d/ CREATE .rpmfusion-free.repo.swx
/etc/yum.repos.d/ DELETE .rpmfusion-free.repo.swx
/etc/yum.repos.d/ DELETE .rpmfusion-free.repo.swp
/etc/yum.repos.d/ CREATE .rpmfusion-free.repo.swp
/etc/yum.repos.d/ MODIFY .rpmfusion-free.repo.swp
/etc/yum.repos.d/ MODIFY .rpmfusion-free.repo.swp
/etc/yum.repos.d/ DELETE .rpmfusion-free.repo.swp

انواع الاحداث التي يمكن مراقبتها هي:

  • access مراقبة القراءة من الملف
  • modify مراقبة الكتابة في الملف
  • attrib مراقبة تغيير صفات الملف مثل وقت الملف والصلاحيات
  • close_write مراقبة غلق ملف فتح للكتابة حتى وان لم يكتب به شي
  • close_nowrite مراقبة غلق ملف فتح للقراءة فقط
  • close مراقبة الغلق بصرف النظر عن نوع الفتح
  • open مراقبة فتح الملفات
  • moved_to مراقبة نقل الملفات او المجلدات الى المجلد المراقب
  • moved_from مراقبة نقل الملفات او المجلدات من المجلد المراقب
  • move مراقبة نقل الملفات او المجلدات من او إلى المجلد المراقب
  • create مراقة انشاء الملفات او المجلدات
  • delete مراقبة حذف الملفات او المجلدات
  • unmount مراقبة فصل نظام الملفات الذي يحتوي على ملفات او مجلدات مراقبة

كما توجد امكانات اخرى لهذا الامر مثل استثناء مجلدات فرعية من الرقابة (كمجلد الكاش مثلا) او العمل لفتره زمنية فقط ثم الخروج اذا لم تحصل احداث او كتابة المخرجات الى ملف وتعديل صيغة الملف …الخ ولمزيد من المعلومات راجع صفحات man

جميل جداً, وكذلك هناك امر وهو tail يُستخدم لمراقبة الملفات النصية بخصوص آخر التعديلات بإمكانك المتابعة عن طريق الامر : tail -f myfile.txt