( एसएफ पर मेरे एक जवाब से कॉपी किया गया )
hostname
आदेश DNS और से परिणाम देता है /etc/hosts
।
hostname
के समतुल्य है uname -n
और बॉक्स का वास्तविक "होस्टनाम" या "नोडेनम" है।
अन्य सभी hostname
तर्क जानकारी देखने के लिए इस नोडनाम का उपयोग करते हैं।
इसलिए आगे जाने से पहले, मुझे /etc/hosts
फ़ाइल प्रारूप की व्याख्या करनी चाहिए ।
पहला क्षेत्र काफी स्पष्ट है, इसका आईपी पता लाइन के सभी होस्टनामों को हल करना चाहिए। दूसरा क्षेत्र उस IP के लिए प्राथमिक होस्टनाम है। शेष क्षेत्र एलियासेस हैं।
इसलिए यदि आप hostname -f
इसे चलाते हैं, तो यह पहली बार आपके नाम के लिए आईपी को हल करने का प्रयास करेगा। आपके पास इस पद्धति hosts:
में कॉन्फ़िगर की गई प्रविष्टि के आधार पर /etc/nsswitch.conf
अलग-अलग होंगे।
- यदि आपने dns का उपयोग करने के लिए इसे कॉन्फ़िगर किया है, तो यह
/etc/resolv.conf
DNS से आईपी वापस मिलने तक कॉन्फ़िगर किए गए खोज डोमेन का उपयोग करेगा ।
- यदि आपने इसे फ़ाइलों का उपयोग करने के लिए कॉन्फ़िगर किया है, तो यह उस
/etc/hosts
पंक्ति को खोजने के लिए दिखेगा जहां या तो प्राथमिक होस्टनाम या उपनाम नाम आपका वर्तमान नोडनेम ( uname -n
) है, और फिर उस पंक्ति में आईपी पता वापस करें।
एक बार आईपी होने के बाद यह उस आईपी पर रिवर्स लुकअप की कोशिश करेगा। फिर से यह इसके लिए DNS का उपयोग करेगा और आपकी मेजबानों की फाइल आपके आधार पर nsswitch.conf
। आपकी होस्ट फ़ाइल का उपयोग करने के मामले में, यह प्राथमिक प्रविष्टि (जो फ़ाइल में आईपी के बाद पहला क्षेत्र है) को लौटा देगा।
hostname -a
DNS में रिवर्स लुकअप करने के बाद से केवल होस्ट फ़ाइल के साथ काम करेंगे, केवल आपको 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