为什么“主机名--fqdn”在我的Ubuntu计算机上不起作用?


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 2010年

Answers:


11

你能提供的内容/etc/nsswitch.conf吗?

看起来/etc/nsswitch.conf的“主机”行值错误。它以“文件”开头吗?

否则,通过编辑/ etc / hosts并将FQDN放在主机名出现的行上来设置FQDN。假设您有一个主机名“ foo”,并找到一行:

127.0.0.1 foo

您可以这样编辑它:

127.0.0.1 foo.localdomain foo

foo.localdomain 将是您的新FQDN。


我已经按照您的要求包含了该文件的内容!谢谢回复!!:)
RadiantHex 2010年

@Rapael我更改了/ etc / hosts文件,但它开始为我提供名称解析的临时失败。任何想法为什么会发生?
Muhammad Adeel Zahid

6

编辑/ etc / hosts以添加您的FQDN

有关语法的信息,请访问此处:http : //www.faqs.org/docs/securing/chap9sec95.html

更新:再次阅读您的问题,听起来好像您的路径设置不正确,或者主机名程序出了点问题。

做“哪个主机名”

它应该以路径“ / bin / hostname”返回

如果可行,请再次尝试命令,

'/ bin /主机名--fqdn'


谢谢!!!抱歉,如果我问这个问题,但是我如何找出我的FQDN?
RadiantHex

1
很好,它代表“完全合格的域名” superuser.com是FQDN。如果您拥有一个域,则可以使用它,否则,如果您在内部网络中,就可以组成一个域。
Mudfly

1
谢谢@Mudfly!我尝试了您的指令,最后一个命令再次返回“主机名:名称或服务未知”!
RadiantHex

没有更多信息,很难知道您的问题的状况。EG:这是本地安装吗?您是通过ssh登录的吗?您是使用用户帐户还是以root登录?您可能想要访问ubuntuforums.org并搜索其他解决了类似问题的人。
Mudfly

1
在这里这是一个疯狂的飞跃,但是,Ubuntu倾向于使用sudo而不是root。shell很可能没有正确设置。要测试这很简单。首先,您可以执行'ls -al / root /'并查看是否可以看到.bashrc。其次,如果没有.bashrc,可以从skel'cp /etc/skel/.bashrc ./'复制它。即使您已经有了该文件。第三,执行“ / bin / bash”以确保您正在运行bash。最后,再次尝试使用原始命令,您应该在完全配置的bash shell中运行。
Mudfly

0

与简单的hostname命令调用不同,该调用hostname --fqdn将尝试执行更多操作,这通常会导致一些DNS查找。

以下面的(成功的)调用为例(这是从Red Hat框中进行的,但是我想对于Ubuntu来说应该是相同的):

# 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名称和IP地址)之间转换的部分。

实际上,解析程序不仅仅执行DNS(而且不仅仅是在主机名和IP地址之间转换)。它的行为部分由file配置/etc/nsswitch.conf,通常它将按以下顺序查询以下内容:

  • “主机”(在Linux上,是指/ etc / hosts)
  • (有时)nscd(名称服务缓存守护程序)
  • dns

(请注意,就上述而言,您还可以拥有一个缓存DNS服务器,例如dnsmasqd ---仍在“ dns”机制下)。

值得指出的是,诸如dighost和尊敬的nslookup之类的工具并不遵循该顺序。它们是明确的DNS查询工具。这意味着,如果您依赖它们(例如在脚本中),则可能会得到与常规客户端程序(使用系统解析器)不同的结果。因此,请在脚本中使用getent程序,尤其是在运行诸如nscd之类的缓存组件的情况下。

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

因此,这里的关键要点是:a)如果您为自己的计算机配置了一个正确的/ etc / hosts条目,并且b)您的/etc/nsswitch.conf具有通常的配置- hosts: files dns按照该顺序,那么c)甚至如果您的环境中没有正确配置DNS,则hostname --fqdn应该可以使用。

在配置良好的DNS中,您应该有一个“反向”地址(“ PTR记录”),该地址给出了服务器的“规范”名称,并且该名称也应该能够被查找(“记录”)。

短版:add --verbose; 它会指出您所缺少的。

希望能帮助您了解发生了什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.