我在公司的云服务上运行 Ubuntu 14.04(我的实例具有弹性 IP)。我想通过命令行查看我正在运行的实例的 IP 地址,但它不起作用。
root@ubuntu14-graphite:~# hostname
ubuntu14-graphite
root@ubuntu14-graphite:~# hostname -i
hostname: Name or service not known
我不明白为什么。
我尝试 ping 到 ubuntu14-graphite 但它说:
unknown host ubuntu14-graphite.
这是否意味着我的主机根本不存在?
我有另一台服务器(不是云实例,而是物理服务器)。在此服务器中我安装了 CentOS 6.7。我检查了主机名的 IP,它可以工作,尽管/etc/hosts
.
这是输出cat /etc/hosts
:
127.0.0.1 localhost
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
答案1
这意味着“系统”(我在广义、一般、模糊的意义上使用该术语)不知道该名称ubuntu14-graphite
对应于您的主机及其 IP 地址。 (事实上这是你的主人的姓名不足以实现这一点。)这几乎肯定意味着您的文件ubuntu14-graphite
中没有†行,并且它不在您的命名服务(例如 DNS 或 NIS)中。因此,修复它的方法是将(及其 IP 地址)添加到您的.如果您使用的是更复杂的(分布式)命名系统,例如 DNS 或 NIS(或者可能是 ActiveDirectory?),最终的解决方案是将您的主机添加到该服务中。 _____________ † ...我从您的主机文件帖子中看到情况确实如此。/etc/hosts
ubuntu14-graphite
/etc/hosts
对于应该将哪个 IP 地址与主机名关联的问题存在一些争论。每个人都同意它应该是一个对您的主机“有效”的地址;即,类似的命令应该成功。有些人建议使用环回地址。环回地址始终采用 127 形式ping A.B.C.D
.BCD;常见值为 127.0.0.1 和 127.0.1.1。其他人建议使用 LAN 地址,可能看起来像 192.168。光盘(但它几乎可以是任何东西) - 但您不应该将动态分配的地址放入您的主机文件中(并且,如果您将 DHCP 与 DNS 结合使用,则动态分配的地址应自动输入到您的 DNS 记录中)。使用ifconfig
和等命令hostname -I
查看正在使用的地址。
答案2
检查机器 IP 地址的实际方法是使用命令ifconfig
。
请注意,根据实际的云设置,服务器实例可能不知道公共 IP,而只知道 VLAN IP。有关详细信息,您需要参阅提供商的文档。
答案3
将myhostname
条目添加到hosts
中的服务中/etc/nsswitch.conf
。
换句话说,更改以下行/etc/nsswitch.conf
:
hosts: files dns
对此:
hosts: files dns myhostname
通常主机名是使用/etc/hosts
文件和 dns 解析的,系统的主机名也可以通过告诉名称服务交换机来解析(正如此配置更改所做的那样)。
这可以解释为什么您没有看到/etc/hosts
系统上可以解析本地主机名的文件的任何特殊内容。
有关该旗帜的更多信息myhostname
是这里。
答案4
转到 etc/hosts.save 检查您的主机名。然后编辑/etc/hosts
以在其中写入您的主机名和 中的主机名hosts.save
。还要检查 IP 地址。例子:
127.0.0.1 ubuntu
127.0.1.1 ubuntu.ubuntu-domain ubuntu