এটি আপনি যেভাবে ব্যবহার করছেন 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স্যুইচটির সাথে মিলিত হয়ে পুরো সিস্টেমটি দেখার ফলে দেখা উচিত।
তবে, একটি পর্যবেক্ষিত ডিরেক্টরিতে একটি ইভেন্ট তৈরির সূত্রপাতকারী ফাইলটির নাম পাওয়া সম্ভব , তবুও আমি অনুমান করছি যে এই তথ্যটি পুনরুদ্ধার করবে না (এটি ডিরেক্টরিটির নামের চেয়ে কিছুটা গভীরভাবে সংরক্ষিত হয়েছে)। বলা হয় এমন একটি আর একটি সরঞ্জাম সরবরাহ করে , যা বেশ ভালো আচরণ করতে পারে এবং আরও আউটপুট বিকল্প সরবরাহ করে (সহ আপনি এখানে যা খুঁজছেন তা সহ :)inotifywatchinotify-toolsinotifywaitinotify-watch%f
inotifywait -m --format "%e %f" /tmp
থেকে man পৃষ্ঠা :
--format <fmt>প্রিন্টফ-এর মতো সিনট্যাক্স ব্যবহার করে কোনও ব্যবহারকারী-নির্দিষ্ট ফর্ম্যাটে আউটপুট। [...] নিম্নলিখিত রূপান্তরগুলি সমর্থিত:
%f: যখন কোনও ডিরেক্টরি ডিরেক্টরিতে ঘটে তখন ফাইলটির নামের সাথে এটি প্রতিস্থাপন করা হবে যা ইভেন্টটি ঘটায় ।
%e: ঘটেছে ইভেন্ট (গুলি) এর সাথে প্রতিস্থাপন, কমা দ্বারা পৃথক।
এছাড়াও, -mবিকল্প (মনিটর) inotifywaitপ্রথম ইভেন্টের পরে চলতে থাকবে, যা এর আচরণের মতোই পুনরুত্পাদন করবে inotifywatch।
.bashrcউদাহরণস্বরূপ @serverfaultপরিসংখ্যানগুলিতে উপস্থিত হয় না কারণ ব্যবহারকারী তার হোম ডিরেক্টরিটি পুনরাবৃত্তভাবে পর্যবেক্ষণ করে তবেpath/.*প্রসারিত হয় এবং ফলস্বরূপpath/(সমস্ত.bashrcঅন্তর্ভুক্ত) এর অধীনে সমস্ত ফাইলের জন্য একটি ঘড়ি সেট করা হয় । ওপি দ্বারা ব্যবহৃত কমান্ডটি ফাইলের নামগুলিকে কখনই আউটপুট দেয় না কারণ ঘড়িগুলি সেট করা থাকে/tmpএবং যে কোনও সাব-ডিরেক্টরি নির্দেশিকাগুলি কেবলমাত্র/tmpএবং এর উপ-ডিরেক্টরিগুলির সাথে সম্পর্কিত (যেমন আপনি দেখতে পাবেন যে ফাইলগুলি অ্যাক্সেস / সরানো / ইত্যাদি হয়েছে তবে এটি আপনাকে জানায় না) নামগুলি নয়)।