/etc/hostsफ़ाइल में परिवर्तन तुरंत प्रभाव से लगते हैं। मैं कार्यान्वयन के बारे में उत्सुक हूं। इस सुविधा को प्राप्त करने के लिए किस जादू का उपयोग किया जाता है?
/etc/hostsफ़ाइल में परिवर्तन तुरंत प्रभाव से लगते हैं। मैं कार्यान्वयन के बारे में उत्सुक हूं। इस सुविधा को प्राप्त करने के लिए किस जादू का उपयोग किया जाता है?
जवाबों:
जादू /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 के रिवाल्वर का उपयोग नहीं कर रहे हों, लेकिन अन्य तरीकों से इसके कामकाज की प्रतिकृति बना रहे हैं।
नाम समाधान, अन्य बातों के साथ, द्वारा प्रबंधित किया जाता है /etc/nsswitch.conf। यहाँ एक अंश है:
passwd: files sss
shadow: files sss
group: files sss
hosts: files dns myhostname
(...)
ध्यान दें hostsलाइन। यह कहता है: "होस्टनाम को हल करते समय, पहले होस्टनाम /etc/hostsको देखने के लिए फ़ाइल पढ़ें , अगर नहीं मिला है तो डीएनएस क्वेरी चलाएं, यदि नहीं मिला है तो स्थानीय रूप से कॉन्फ़िगर सिस्टम होस्टनाम का प्रयास करें"।
तो यहाँ क्यों यह इतनी जल्दी है। ध्यान दें कि यह मशीन पर नेटवर्क सेवाओं पर निर्भर नहीं करता है, इसलिए पुनरारंभ या पुनः लोड करने के लिए कोई सेवा नहीं है।
/etc/hosts। यह कैश्ड संस्करण का उपयोग क्यों नहीं कर रहा है?