এটি আপনি যেভাবে ব্যবহার করছেন inotifywatch
এবং যেভাবে সরঞ্জামটি নিজে কাজ করে তার কারণে এটি ঘটে । যখন আপনি চালাতে inotifywatch -r /tmp
, আপনি দেখা শুরু /tmp
এবং সমস্ত ফাইল যে ইতিমধ্যে এটা। আপনি যখন কোনও ফাইল ভিতরে তৈরি /tmp
করেন, ডিরেক্টরি মেটাডেটা নতুন ফাইলের ইনোড নম্বর ধারণ করার জন্য আপডেট করা হয়, যার অর্থ পরিবর্তনটি ঘটেছিল /tmp
, না /tmp/test-1
। অতিরিক্ত হিসাবে, যেহেতু শুরু /tmp/test-1
করার সময় সেখানে ছিল না inotifywatch
, inotify
এটির জন্য কোনও ঘড়ি নেই । এর অর্থ হ'ল ঘড়ি রাখার পরে তৈরি হওয়া কোনও ফাইলের মধ্যে ঘটে যাওয়া কোনও ঘটনা সনাক্ত করা যাবে না । আপনি নিজে যদি এটি দেখতে পান তবে আপনি এটি আরও ভাল বুঝতে পারবেন:
$ inotifywatch -rv /tmp &
Total of n watches.
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
আপনি যদি ট্রেসিং প্রক্রিয়াটি সক্ষম করে থাকেনinotify_add_watch(2)
তবে শেষ কমান্ড আপনাকে সেট করা ঘড়ির সংখ্যা দেবে inotifywatch
। এই সংখ্যাটি inotifywatch
নিজের দ্বারা প্রদত্ত হিসাবে একই হওয়া উচিত । এখন, ভিতরে একটি ফাইল তৈরি করুন /tmp
এবং আবার যাচাই করুন:
$ inotifywatch -rv /tmp &
Total of n watches.
$ touch /tmp/test1.txt
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
সংখ্যাটি বাড়েনি, যার অর্থ নতুন ফাইলটি দেখা হয়নি। মনে রাখবেন পরিবর্তে ডিরেক্টরি তৈরি করলে আচরণটি আলাদা হয়:
$ inotifywatch -rv /tmp &
Total of n watches.
$ mkdir /tmp/test1
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n + 1
এটি -r
স্যুইচটির আচরণের কারণে হয় :
-r
, --recursive
: [...] যদি দেখা ডিরেক্টরিগুলির মধ্যে নতুন ডিরেক্টরি তৈরি করা হয় তবে সেগুলি স্বয়ংক্রিয়ভাবে দেখা হবে।
সম্পাদনা: আপনার দুটি উদাহরণের মধ্যে আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি তবে প্রথম ক্ষেত্রে , ঘড়িগুলি সঠিকভাবে স্থাপন করা হয়েছে কারণ ব্যবহারকারী কল inotifywatch
করে ~/*
(যা প্রসারিত, ডন_ক্রিসটির মন্তব্য দেখুন এখানে )। হোম ডিরেক্টরি এছাড়াও দেখা হয় কারণ ~/.*
রয়েছে ~/.
। তাত্ত্বিকভাবে, এটিতেও এটি থাকা উচিত ~/..
, যা -r
স্যুইচটির সাথে মিলিত হয়ে পুরো সিস্টেমটি দেখার ফলে দেখা উচিত।
তবে, একটি পর্যবেক্ষিত ডিরেক্টরিতে একটি ইভেন্ট তৈরির সূত্রপাতকারী ফাইলটির নাম পাওয়া সম্ভব , তবুও আমি অনুমান করছি যে এই তথ্যটি পুনরুদ্ধার করবে না (এটি ডিরেক্টরিটির নামের চেয়ে কিছুটা গভীরভাবে সংরক্ষিত হয়েছে)। বলা হয় এমন একটি আর একটি সরঞ্জাম সরবরাহ করে , যা বেশ ভালো আচরণ করতে পারে এবং আরও আউটপুট বিকল্প সরবরাহ করে (সহ আপনি এখানে যা খুঁজছেন তা সহ :)inotifywatch
inotify-tools
inotifywait
inotify-watch
%f
inotifywait -m --format "%e %f" /tmp
থেকে man পৃষ্ঠা :
--format <fmt>
প্রিন্টফ-এর মতো সিনট্যাক্স ব্যবহার করে কোনও ব্যবহারকারী-নির্দিষ্ট ফর্ম্যাটে আউটপুট। [...] নিম্নলিখিত রূপান্তরগুলি সমর্থিত:
%f
: যখন কোনও ডিরেক্টরি ডিরেক্টরিতে ঘটে তখন ফাইলটির নামের সাথে এটি প্রতিস্থাপন করা হবে যা ইভেন্টটি ঘটায় ।
%e
: ঘটেছে ইভেন্ট (গুলি) এর সাথে প্রতিস্থাপন, কমা দ্বারা পৃথক।
এছাড়াও, -m
বিকল্প (মনিটর) inotifywait
প্রথম ইভেন্টের পরে চলতে থাকবে, যা এর আচরণের মতোই পুনরুত্পাদন করবে inotifywatch
।
.bashrc
উদাহরণস্বরূপ @serverfault
পরিসংখ্যানগুলিতে উপস্থিত হয় না কারণ ব্যবহারকারী তার হোম ডিরেক্টরিটি পুনরাবৃত্তভাবে পর্যবেক্ষণ করে তবেpath/.*
প্রসারিত হয় এবং ফলস্বরূপpath/
(সমস্ত.bashrc
অন্তর্ভুক্ত) এর অধীনে সমস্ত ফাইলের জন্য একটি ঘড়ি সেট করা হয় । ওপি দ্বারা ব্যবহৃত কমান্ডটি ফাইলের নামগুলিকে কখনই আউটপুট দেয় না কারণ ঘড়িগুলি সেট করা থাকে/tmp
এবং যে কোনও সাব-ডিরেক্টরি নির্দেশিকাগুলি কেবলমাত্র/tmp
এবং এর উপ-ডিরেক্টরিগুলির সাথে সম্পর্কিত (যেমন আপনি দেখতে পাবেন যে ফাইলগুলি অ্যাক্সেস / সরানো / ইত্যাদি হয়েছে তবে এটি আপনাকে জানায় না) নামগুলি নয়)।