मेरे Ubuntu कंप्यूटर पर "hostname --fqdn" काम क्यों नहीं करता है?


10

मैं Ubuntu 10.04 LTS का उपयोग कर रहा हूं, और जब मैं कमांड टाइप करता hostname --fqdnहूं, तो मुझे संदेश मिलता है hostname: Name or service not known:।

इस वजह से, मैं globalसफलतापूर्वक स्थापित नहीं कर सकता , और जब मैं कोशिश करता हूं तो निम्न त्रुटि मिलती है:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

मेरा /etc/nsswitch.confनीचे है।

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

क्या किसी के पास इसका कोई मतलब है और मैं इसे कैसे ठीक कर सकता हूं?


1
आप एक FQDN क्यों चाहते हैं? अगर आपको पूछना है, तो आप शायद एक नहीं चाहते या एक या दोनों का उपयोग नहीं कर सकते।
msw

जवाबों:


11

आप की सामग्री प्रदान कर सकते हैं /etc/nsswitch.conf?

ऐसा लगता है कि /etc/nsswitch.conf में "होस्ट" लाइन के लिए एक खराब मान है। क्या यह "फाइलों" से शुरू होता है?

अन्यथा FQDN को एडिट / etc / होस्ट्स द्वारा सेट किया जाता है और FQDN को उस लाइन पर रखा जाता है जहाँ होस्टनाम दिखाई देता है। मान लीजिए कि आपके पास एक होस्टनाम "फू" है, और आप एक लाइन पाते हैं:

127.0.0.1 foo

आप इसे इस तरह संपादित करेंगे:

127.0.0.1 foo.localdomain foo

foo.localdomain आपका नया FQDN होगा।


जैसा आपने पूछा मैंने उस फ़ाइल की सामग्री को शामिल किया है! उत्तर के लिए धन्यवाद!! :)
रेडिएंटहैक्स

@Rapel मैंने / etc / मेजबानों की फ़ाइल को बदल दिया लेकिन इसने मुझे नाम समाधान में अस्थायी विफलता देनी शुरू कर दी। किसी भी विचार क्यों हो रहा है?
मुहम्मद अदिल जाहिद

6

अपने FQDN को जोड़ने के लिए / etc / मेजबान को संपादित करें

यहाँ स्थित सिंटैक्स पर जानकारी: http://www.faqs.org/docs/securing/chap9sec95.html

अद्यतन: अपने प्रश्न पर फिर से पढ़ना लगभग ऐसा लगता है जैसे आपके पास या तो आपका रास्ता सही नहीं है, या होस्टनाम प्रोग्राम में कुछ गड़बड़ है।

'जो होस्टनाम' करें

इसे पथ '' / बिन / होस्टनाम '' के साथ लौटना चाहिए

अगर वह काम फिर से कमांड की तरह काम करता है,

'/ बिन / होस्टनाम --fqdn'


धन्यवाद!!! क्षमा करें यदि मैं यह पूछता हूं, लेकिन मुझे अपना FQDN कैसे पता चलेगा?
रेडिएंटहैक्स

1
अच्छी तरह से यह 'पूरी तरह से योग्य डोमेन नाम' के लिए खड़ा है superuser.com एक FQDN है। यदि आप एक डोमेन के मालिक हैं, तो आप इसका उपयोग कर सकते हैं, अन्यथा यदि आप आंतरिक नेटवर्क पर हैं तो आप कुछ बना सकते हैं।
मुदफ्फूल

1
धन्यवाद @Mudfly! मैंने आपके निर्देशों की कोशिश की, अंतिम आदेश "होस्टनाम: नाम या सेवा ज्ञात नहीं" फिर से लौटाता है!
रेडिएंटहैक्स

अधिक जानकारी के बिना अपनी समस्या की स्थितियों को जानना कठिन है। ईजी: क्या यह एक स्थानीय इंस्टॉल है, क्या आप ssh पर लॉग इन हैं, क्या आप उपयोगकर्ता खाते का उपयोग कर रहे हैं या रूट में लॉग इन हैं? आप ubuntuforums.org पर जाना चाहते हैं और ऐसे ही अन्य मुद्दों की खोज कर सकते हैं।
मुदफ्फूल

1
यह यहाँ एक जंगली छलांग ले रहा है, लेकिन उबंटू जड़ के उपयोग पर sudo का उपयोग करने का पक्षधर है। यह काफी संभव है कि शेल सही तरीके से सेटअप न हो। यह परीक्षण करने के लिए बहुत सरल है। सबसे पहले आप 'ls -al / root /' कर सकते हैं और देख सकते हैं कि क्या आप .bashrc दूसरा देख सकते हैं यदि आपके पास .bashrc नहीं है तो इसे skel 'cp /etc/skel/.bashrc// से कॉपी कर सकते हैं। भले ही आपके पास फ़ाइल पहले से हो। यह सुनिश्चित करने के लिए कि आप बैश चला रहे हैं, तीसरा 'बिन / बैश' करें। अंत में अपने मूल कमांड को फिर से आज़माएं, आपको पूरी तरह से कॉन्फ़िगर बैश शेल में चलना चाहिए।
मुदफ्फूल

0

साधारण hostnameकमांड मंगलाचरण के विपरीत , आह्वान hostname --fqdnकुछ और चीजें करने का प्रयास करेगा, जिसके परिणामस्वरूप अक्सर कुछ DNS लुकअप हो जाएंगे।

उदाहरण के लिए निम्नलिखित (सफल) मंगलाचरण लें (यह एक Red Hat बॉक्स से है, लेकिन मुझे लगता है कि यह उबंटू के लिए समान होना चाहिए):

# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com

बहुत मददगार --verboseविकल्प पर ध्यान दें ।

संक्षेप में, एक साधारण के अलावा कुछ भी hostnameसंभवतः आपकी अपेक्षा से अधिक कर रहा है। यहाँ एक और उदाहरण है:

# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3

और इसे बंद करने के लिए:

# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com

ध्यान दें कि एक सिस्टम का होस्टनाम (जैसा कि gethostname द्वारा लौटाया गया है) मुझे एक अयोग्य होस्टनाम दे सकता है, जैसे कि 'myserver'। यही कारण है कि जिस प्रोग्राम को आप इंस्टॉल करना चाहते हैं, वह hostname --fqdnइसके बजाय उपयोग कर रहा है ।

त्रुटि संदेश रिसॉल्वर फ़ंक्शंस hostname: Name or service not knownसे आता है : ये सिस्टम लाइब्रेरी के भाग हैं जो नाम और पते (आमतौर पर DNS नाम और आईपी पते) के बीच अनुवाद करते हैं।

वास्तव में, रिज़ॉल्वर केवल DNS से ​​अधिक (और केवल होस्टनाम और आईपी पते के बीच अनुवाद करने से अधिक) करता है; इसका व्यवहार फ़ाइल द्वारा भाग में कॉन्फ़िगर किया गया है /etc/nsswitch.conf, और आमतौर पर यह इस क्रम में, आमतौर पर निम्नलिखित से परामर्श करेगा:

  • 'होस्ट' (लिनक्स पर, साधन / आदि / होस्ट)
  • (कभी-कभी) nscd (नाम-सेवा कैशिंग डेमॉन)
  • 'DNS'

(ध्यान दें, आपके पास कैशिंग DNS सर्वर भी हो सकता है जैसे कि dnsmasqd --- उपरोक्त बिंदु के लिए, जो अभी भी 'dns' तंत्र के अंतर्गत है)।

यह इंगित करने योग्य है कि खुदाई , मेजबान और आदरणीय nslookup जैसे उपकरण इस आदेश का पालन नहीं करते हैं; वे स्पष्ट रूप से DNS क्वेरी उपकरण हैं। इसका मतलब यह है कि यदि आप उन पर भरोसा करते हैं (उदाहरण के लिए एक स्क्रिप्ट में) तो आप नियमित क्लाइंट प्रोग्राम (जो सिस्टम रिज़ॉल्वर का उपयोग करते हैं) की तुलना में एक अलग परिणाम प्राप्त कर सकते हैं। इस कारण से, स्क्रिप्ट में प्राप्त कार्यक्रम का उपयोग करें , खासकर यदि आपके पास एक कोचिंग घटक है जैसे कि nscd चल रहा है।

# getent hosts myserver.example.com
10.1.2.3    myserver.example.com

तो यहां मुख्य कुंजी यह है कि a) यदि आपके पास / etc / मेजबान अच्छी तरह से अपनी मशीन के लिए एक प्रविष्टि के साथ कॉन्फ़िगर किए गए हैं, और b) आपके /etc/nsswitch.conf का सामान्य कॉन्फ़िगरेशन है - hosts: files dnsउस क्रम में, तब भी c) यदि आपके पास अपने वातावरण में डीएनएस अच्छी तरह से कॉन्फ़िगर नहीं है, तो hostname --fqdnकाम करना चाहिए।

एक अच्छी तरह से कॉन्फ़िगर किए गए DNS में, आपसे एक 'रिवर्स' एड्रेस (एक "PTR रिकॉर्ड") होने की उम्मीद की जाएगी, जो आपके सर्वर का 'कैनोनिकल' नाम देता है, और उस नाम को भी देखा जाना चाहिए (ए) एक रिकॉर्ड "आईपीवी 4 के लिए)।

लघु संस्करण: जोड़ें --verbose; यह आपको इंगित करेगा कि आपको क्या कमी है।

आशा है कि आपको यह समझने में मदद मिलेगी कि क्या चल रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.