2015-02-27 5 views
5

तो मैं सेटअप संपादन, जो काम किया जब तक मैं विम इस्तेमाल किया फ़ाइल को संपादित करने, तो मैं भी नाम बदलता है और कृतियों के लिए निर्देशिका को देखने के लिए किया था के लिए एक कॉन्फ़िग फ़ाइल देखने के लिए कुछ कोड के साथ एक फ़ाइल को देखने के लिए। तब मैंने पाया कि मार्ग पदानुक्रम में उच्च नामों को नहीं पकड़ लिया। तब मैंने सिम्लिंक में देखा ... गाहाह!उपयोग INotify कई सिमलिंक

पहले सेटअप एक बना उदाहरण एक मुश्किल सिमलिंक परिदृश्यों (कई की) दिखा:

mkdir config1 
touch config1/config 
ln -s config1 machine1 

mkdir config2 
touch config2/config 
ln -s config2 machine2 

ln -s machine1 active 

अब, सक्रिय/config कि मैं देखना चाहते हैं की तरह एक फ़ाइल नाम को देखते हुए, मैं देख सकते हैं कि एक inotify पाने के लिए के लिए वर्णक देखें:

config1/ -> watch active/ follow symlinks (watches inode for config1) 
active/ -> watch active/ dont follow symlinks (watches inode for active symlink 
active/config -> watch active/config (watches inode for config1/config) 

मैं मशीन 1 सिम्लिंक पर घड़ी कैसे जोड़ूं? क्या मुझे प्रत्येक सिमलिंक जोड़ने के लिए रास्ते में प्रत्येक के लिए मैन्युअल रूप से चलने के लिए कुछ रास्ता खोजने की ज़रूरत है? कैसे?

mkdir config3 
touch config3/config 
ln -s -f -n config3 machine1 

और inotify चेतावनी दी है कि सक्रिय/config रीडायरेक्ट किया गया है:

उद्देश्य अनुमति है। फिलहाल ऐसा लगता है कि मुझे इसके लिए एक घड़ी जोड़नी होगी:

- target file inode 
- every directory inode leading to the file (to detect moves/renames of directories) 
- every symlink inode involved in reaching any of the above 

केवल एक फ़ाइल देखने का एक आसान तरीका होना चाहिए? क्या मैंने पथ से भटक लिया है या यह वास्तव में रास्ता है?

+0

आप "एक फ़ाइल" नहीं देख रहे हैं - आप अपना पूरा पथ देख रहे हैं, फ़ाइल शामिल है। वह, प्लस 'inotify' रिकर्सिव नहीं है, पहले 2 अंक शामिल हैं। सिम्लिंक का अस्तित्व आपके अंतिम बिंदु को जरूरी बनाता है। – tucuxi

+0

हां, मुझे समझ में आता है कि ब्याज की फाइल तक पहुंचने में शामिल सभी इनोड देखने के लिए इनोटिफ़ाई सेट अप की जानी चाहिए, लेकिन मुझे अस्पष्ट नहीं है कि उपयोग का मामला क्या है * मुझे * जो कुछ मैंने वर्णित किया है उसे करने की आवश्यकता नहीं है? यह जटिल है (मैंने '..' और सिम्लिंक का भी उल्लेख नहीं किया है), स्क्रू करना आसान है (संदर्भ गिनती गुणा निर्देशिका और सिम्लिंक गुणा), बहुत सी दौड़ की स्थिति है (कोई सिमलिंक देख रहा है जबकि कोई इसे बदल रहा है?), और हर कोई ऐसा लगता है कि इसकी आवश्यकता है। लेकिन एक पुस्तकालय नहीं है जो ऐसा करता है? हुह। – Speed8ump

+0

इसकी सभी कमियों के साथ, इनोटिफ़ाई अभी भी इसे बदलने की तुलना में बहुत बेहतर है (उदाहरण के लिए, http://lwn.net/Articles/604686/)। पुस्तकालयों की कमी के कारण, आपने उल्लेख नहीं किया कि आप उनकी तलाश में थे; libinotiftytools आपके कार्यों को थोड़ा सा सरल बना सकता है (यह आपके लिए सिस्को करता है), लेकिन मुझे कुछ भी नहीं मिल रहा है जो आपके सटीक उपयोग-मामले को कवर करता है। – tucuxi

उत्तर

3

मेरा जवाब है एक सीधे "हाँ, आप इसे सही कर रहे हैं"।

ध्यान से inotify syscall manpage पढ़ने के बाद, मुझे पूर्ण पथ में किसी भी और सभी परिवर्तनों का पता लगाने के लिए पथ (से-सिम्लिंक) पथ-टू-ए-फ़ाइल के प्रत्येक चरण को देखने के लिए कोई रास्ता नहीं दिख रहा है।

ऐसा लगता है कि यह inotify काम करता है: यह केवल विशिष्ट फ़ाइलों या फ़ोल्डरों को देखता है, और यह स्वयं पर रिकर्सन नहीं करता है। वह, साथ ही सिम्लिंक का स्पष्ट रूप से पालन करने के लिए, पत्र में आपकी 3-चरणीय योजना से मेल खाता है।

मैनपेज से चयनित उद्धरण:

निम्नलिखित आगे बिट्स नकाब में निर्दिष्ट किया जा सकता है जब (2) inotify_add_watch बुला:

(लिनक्स 2.6.15 के बाद से) IN_DONT_FOLLOW पथ नाम भिन्नता नहीं अगर यह एक प्रतीकात्मक लिंक है।

[...]

सीमाएं और

Inotify निर्देशिका की निगरानी चेतावनियां पुनरावर्ती नहीं है: एक निर्देशिका के अंतर्गत उपनिर्देशिका नजर रखने के लिए, अतिरिक्त घड़ियों बनाया जाना चाहिए। यह बड़ी निर्देशिका पेड़ के लिए एक महत्वपूर्ण राशि समय ले सकता है।

प्रश्न:: IN_ONLYDIR और IN_DONT_FOLLOW झंडे के बारे में क्या [...]

यह FAQ भी समर्थन सिमलिंक फिर से अपनी रणनीति के लिए उधार देता है? IN_ONLYDIR यह सुनिश्चित करता है कि ईवेंट केवल निर्देशिका पर ही हो। यदि आप किसी फ़ाइल पर ऐसी घड़ी बनाते हैं तो यह ईवेंट को उत्सर्जित नहीं करेगा। IN_DONT_FOLLOW प्रतीकात्मक लिंक का पालन करने से मना कर दिया जाता है (इन लोगों की निगरानी की जाएगी और वे जिन फ़ाइलों को इंगित करते हैं) नहीं।

संबंधित मुद्दे