तुरंत परिवर्तन / आदि / मेजबानों पर प्रभाव क्यों पड़ता है?


18

/etc/hostsफ़ाइल में परिवर्तन तुरंत प्रभाव से लगते हैं। मैं कार्यान्वयन के बारे में उत्सुक हूं। इस सुविधा को प्राप्त करने के लिए किस जादू का उपयोग किया जाता है?

  1. उबंटू से पूछें: संशोधित करने के बाद / आदि / मेजबानों को किस सेवा को फिर से शुरू करने की आवश्यकता है?
  2. NetApp समर्थन: कैसे / etc / मेजबान फ़ाइल काम करती है

5
मेजबानों की गति पर एक नोट आम तौर पर छोटा है, शायद ही कभी कुछ KB से ऊपर। यह फ़ाइल को पढ़ने के लिए उपयोग किए गए संकलित पुस्तकालय की तुलना में सबसे अधिक संभावना है। एक नियमित रूप से उपयोग की जाने वाली फ़ाइल अक्सर मेमोरी में कैश्ड रहेगी। यहां तक ​​कि अगर फ़ाइल को हर अनुरोध के लिए पढ़ा गया था तो ऐसा करने के लिए ओवरहेड न्यूनतम होगा (यानी: बहुत तेज)।
फिलिप कपलिंग

2
संबंधित unix.stackexchange.com/questions/388875/... फिलिप की टिप्पणी करने के लिए :)
जेफ स्कालर

जवाबों:


27

जादू /etc/hostsफ़ाइल को खोल रहा है और इसे पढ़ रहा है:

strace -e trace=file wget -O /dev/null http://www.google.com http://www.facebook.com http://unix.stackexchange.com 2>&1 | grep hosts
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 5
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4

getaddrinfo(3)समारोह है, जो केवल मानक नाम को हल करने इंटरफेस, बस खुल जाएगा और पढ़ने /etc/hostsजो हर बार किसी होस्टनाम का समाधान करने कहा जाता है।

अधिक परिष्कृत अनुप्रयोग जो मानक का उपयोग नहीं कर रहे हैं getaddrinfo(3), लेकिन फिर भी किसी तरह /etc/hostsमिश्रण में जोड़ रहे हैं (उदाहरण के लिए dnsmasqDNS सर्वर) का उपयोग फाइलों में inotify(7)बदलाव की निगरानी के लिए किया जा सकता है /etc/hostsऔर इसे केवल तभी पढ़ सकते हैं जब जरूरत हो।

ब्राउज़र और ऐसे अन्य एप्लिकेशन ऐसा नहीं करेंगे। वे /etc/hostsहर बार एक होस्ट नाम को हल करने के लिए खोलेंगे और पढ़ेंगे , भले ही वे सीधे तौर पर libc के रिवाल्वर का उपयोग नहीं कर रहे हों, लेकिन अन्य तरीकों से इसके कामकाज की प्रतिकृति बना रहे हैं।


1
क्या आप अधिक विस्तार से बता सकते हैं कि स्निपेट क्या करता है? मेरी दिलचस्पी क्या है कि कैसे परिवर्तन तुरंत रनिंग कोड में प्रतिबिंबित होते हैं (ओएस सही में नेटवर्क का हिस्सा होना चाहिए?)।
रुदवाना

7
@rudwna: उनका अर्थ है: "जब भी किसी होस्टनाम को देखने की आवश्यकता होती है, तो रिज़ॉल्वर (सी लाइब्रेरी का हिस्सा) खुल रहा है / आदि / होस्ट करता है और इसे पढ़ता है। इसलिए यदि फ़ाइल सामग्री में परिवर्तन होता है, तो अगला रीड उपयोग करेगा। नई सामग्री "।
11

3
@rudwna भी, "रनिंग कोड" के बारे में, जिस कारण से आप तुरंत बदलाव देखते हैं, वह यह है कि कई मानक कार्यक्रम पते को कैश नहीं करते हैं (या उनके पास कुछ बुद्धिमान कैशिंग रणनीति है जो अपडेट / / होस्ट करने के लिए सुनता है)। वहाँ निश्चित रूप से ऐसे कार्यक्रम हैं जो तुरंत / etc / मेजबानों में परिवर्तन नहीं देखेंगे और उन्हें पुनः आरंभ करने की आवश्यकता है। यह पूरी तरह से है जिसने भी कोड लिखा है। / आदि / मेजबानों के बारे में कुछ भी जादुई नहीं है।
सेम्योनू

9

नाम समाधान, अन्य बातों के साथ, द्वारा प्रबंधित किया जाता है /etc/nsswitch.conf। यहाँ एक अंश है:

passwd:     files sss
shadow:     files sss
group:      files sss
hosts:      files dns myhostname
(...) 

ध्यान दें hostsलाइन। यह कहता है: "होस्टनाम को हल करते समय, पहले होस्टनाम /etc/hostsको देखने के लिए फ़ाइल पढ़ें , अगर नहीं मिला है तो डीएनएस क्वेरी चलाएं, यदि नहीं मिला है तो स्थानीय रूप से कॉन्फ़िगर सिस्टम होस्टनाम का प्रयास करें"।

तो यहाँ क्यों यह इतनी जल्दी है। ध्यान दें कि यह मशीन पर नेटवर्क सेवाओं पर निर्भर नहीं करता है, इसलिए पुनरारंभ या पुनः लोड करने के लिए कोई सेवा नहीं है।


1
लेकिन यह हो सकता है एक कैश्ड (जैसे कि, पार्स और मुख्य स्मृति में) फ़ाइल के संस्करण का उपयोग करें /etc/hosts। यह कैश्ड संस्करण का उपयोग क्यों नहीं कर रहा है?
पीटर मोर्टेंसन

2
@PeterMortensen क्योंकि OS पहले से ही फ़ाइल एक्सेस को कैश करता है, और यहां तक ​​कि हैंडल भी सही तरीके से लिखता है।
माइकल बोर्गवर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.