( एसएफ पर मेरे एक जवाब से कॉपी किया गया )
hostnameआदेश DNS और से परिणाम देता है /etc/hosts।
hostnameके समतुल्य है uname -nऔर बॉक्स का वास्तविक "होस्टनाम" या "नोडेनम" है।
अन्य सभी hostnameतर्क जानकारी देखने के लिए इस नोडनाम का उपयोग करते हैं।
इसलिए आगे जाने से पहले, मुझे /etc/hostsफ़ाइल प्रारूप की व्याख्या करनी चाहिए ।
पहला क्षेत्र काफी स्पष्ट है, इसका आईपी पता लाइन के सभी होस्टनामों को हल करना चाहिए। दूसरा क्षेत्र उस IP के लिए प्राथमिक होस्टनाम है। शेष क्षेत्र एलियासेस हैं।
इसलिए यदि आप hostname -fइसे चलाते हैं, तो यह पहली बार आपके नाम के लिए आईपी को हल करने का प्रयास करेगा। आपके पास इस पद्धति hosts:में कॉन्फ़िगर की गई प्रविष्टि के आधार पर /etc/nsswitch.confअलग-अलग होंगे।
- यदि आपने dns का उपयोग करने के लिए इसे कॉन्फ़िगर किया है, तो यह
/etc/resolv.confDNS से आईपी वापस मिलने तक कॉन्फ़िगर किए गए खोज डोमेन का उपयोग करेगा ।
- यदि आपने इसे फ़ाइलों का उपयोग करने के लिए कॉन्फ़िगर किया है, तो यह उस
/etc/hostsपंक्ति को खोजने के लिए दिखेगा जहां या तो प्राथमिक होस्टनाम या उपनाम नाम आपका वर्तमान नोडनेम ( uname -n) है, और फिर उस पंक्ति में आईपी पता वापस करें।
एक बार आईपी होने के बाद यह उस आईपी पर रिवर्स लुकअप की कोशिश करेगा। फिर से यह इसके लिए DNS का उपयोग करेगा और आपकी मेजबानों की फाइल आपके आधार पर nsswitch.conf। आपकी होस्ट फ़ाइल का उपयोग करने के मामले में, यह प्राथमिक प्रविष्टि (जो फ़ाइल में आईपी के बाद पहला क्षेत्र है) को लौटा देगा।
hostname -aDNS में रिवर्स लुकअप करने के बाद से केवल होस्ट फ़ाइल के साथ काम करेंगे, केवल आपको 1 परिणाम देता है। मेजबानों की फाइल के साथ यह मेल खाने वाली लाइन (जो पहली प्रविष्टि के बाद सब कुछ है, प्राथमिक होस्टनाम) में वापस आ जाता है।
तो संक्षेप में, आपके मुद्दे का संभावित कारण यह है कि आपके पास कोई प्रविष्टि नहीं /etc/hostsहै जिसमें आपका होस्टनाम ( uname -n) है।
उदाहरण
यदि आपका नाम 'फोब्बर' है, और आपके पास /etc/hostsइस तरह से एक प्रविष्टि है :
127.0.0.1 foobar.example.com foobar localhost.localdomain localhost
तब आपको निम्नलिखित कमांड परिणाम मिलेंगे:
# hostname
foobar
# uname -n
foobar
# hostname -f
foobar.example.com
# hostname -a
foobar localhost.localdomain localhost