Linux 主机名(hostname) 与 /etc/hosts文件

1. 主机名 vs 域名

1.1 什么是域名?

无论在局域网还是internet上,每台主机都有一个IP地址,是为了区分此台主机和彼台主机,也就是说IP地址就是主机的门牌号。但IP地址不方便记忆,所以又有了域名。域名只是在公网(internet)中存在,每个域名都对应一个IP地址,但一个IP地址可有对应多个域名。

1.2 什么是主机名?

在一个局域网中,每台机器都有一个主机名,用于主机与主机之间的便于区分,就可以为每台机器设置主机名,以便于以容易记忆的方法来相互访问。比如我们在局域网中可以根据每台机器的功用来为其命名。

1.3 域名(Domain)和主机名(hostname)的区别

  • 主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应ip;
  • 域名通常在互联网上使用,但是优先级低于hosts文件中内容,但如果本机不想使用internet上的域名解析,可以更改/etc/hosts文件,加入自己的域名解析。

2. /etc/hosts – 主机名(域名)和IP配置文件

2.1 hosts文件是什么?

hosts是系统文件,配置了IP地址和域名(或者主机名、主机别名)的映射关系。

2.2 hosts文件有什么用?

建立双方计算机系统通信的依据,作为域名和ip地址解析的凭证,同时也存储了映射关系。

2.3 hosts文件什么情况下会被用到?

当访问一个网址时,系统会先在hosts文件中寻找,查看是否有需要的域名和IP的映射关系,如果存在就通过IP地址寻找服务器;如果没有,则会访问DNS服务器,获得域名对应的IP地址,然后再去寻找服务器。
优先级:dns缓存 > hosts > dns服务

2.4 hosts文件的存放位置?

  • 在Linux系统中,hosts文件的位置为:/etc/hosts
  • 在 Windows 系统中,hosts文件的位置为:C:\Windows\System32\drivers\etc\hosts

2.5 hosts文件能解决哪些问题?

  1. 加快域名解析
    对于要经常访问的网站,在Hosts中配置域名和IP的映射关系,可以很快解析出IP,而不用请求网络上的DNS服务器。

  2. 屏蔽网站
    将一些不友好的网站域名映射到错误的IP或自己计算机的IP,这样就不用访问了。

    127.0.0.1 屏蔽的网站
    0.0.0.0 屏蔽的网站
    
  3. 双机互连
    当两台主机只是双机互连时,这时两台主机都需要设置自己的ip,同时在对方的hosts文件里加入自己的ip和主机名。

2.6 hosts文件的格式

IP地址 主机名或域名 [主机的别名] [主机的别名]....

IP地址 域名
IP地址 规范的主机名 [主机的别名] [主机的别名]....

作用:将主机名域名解析到IP。

注:

  • 条目的字段由任意数量的空格或制表符分隔。
  • 从“#”字符开始直到行尾的文本都是注释,会被忽略。
  • 主机名只能包含字母数字字符、减号(“-”)、和点(“.”)。它们必须以字母字符开头,以字母数字字符结尾。
  • 可选别名提供名称更改、替代拼写、更短的主机名或通用主机名(例如,localhost)。

Linux查看hosts文件说明

man hosts
  • 示例1:配置IP地址和域名的映射
    例如,如果您想将域名 www.example.com 映射到 IP 地址 192.168.0.1,您可以将以下行添加到您的 /etc/host 文件

    192.168.0.1 www.example.com
    

    添加此行后,您的计算机将在您尝试访问它时将 www.example.com 解析为 192.168.0.1

  • 示例2:配置IP地址和主机名的映射
    比如我们有三台主机,每台做不同的事,一台做MAIL服务器,一台做FTP服务器,一台做SMB服务器,所以我们就可以这样来设计主机名:

    127.0.0.1 localhost.localdomain localhost
    192.168.1.2 ftp.localdomain ftp
    192.168.1.3 mail.localdomain mail
    192.168.1.4 smb.localdomin smb
    

    把这上面这个配置文件的内容分别写入每台机器的/etc/hosts内容中,这样这三台局域网的机器就可以通过hostname来访问了。

2.7 hostname 跟 /etc/hosts 下配置有关系吗?

很多人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。

hosts文件的作用相当如DNS,提供IP地址到hostname的对应。早期的互联网计算机少,单机hosts文件里足够存放所有联网计算机。不过随着互联网的发展,这就远远不够了。于是就出现了分布式的DNS系统。由DNS服务器来提供类似的IP地址到域名的对应。Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。

/etc/hosts与设置hostname是没直接关系的,仅仅当你要用新的hostname来访问这台主机的时候才会用到/etc/hosts文件。两者没有必然的联系。

2.8 /etc/hostname 与 /etc/hosts 的区别

/etc/hostname 存放主机名,/etc/hosts 存放域名与ip的对应关系。


注意:

  1. 在安装 Cloudera Manager 时,/etc/hostname 与 /etc/hosts 中的主机名别名必须保持一致,否则会报如下的错:

    MainThread agent ERROR Heartbeating to localhost:7182 failed

    ip地址           主机名        主机名别名
    192.168.210.101  hadoop1.com  cdh1
    

    解决方式: 修改 hostname 与 cdh1 相同

  2. /etc/hosts中或者hostname中主机名称不能存在"_"字符

3. 查看主机名

查看主机名有多种方法:

其一,打开一个终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后

[root@localhost ~]#
  • root:当前登录的用户名,使用 su 命令改变
  • ~ :当前所在目录
  • #:#代表超级用户;$代表普通用户

其二,在终端窗口中输入命令:

hostname

uname -n

hostnamectl

在这里插入图片描述

4. 修改主机名

4.1 临时更改主机名

  • hostname new-hostname
    这条命令不会更改/etc/hostname文件中的静态主机名(static hostname),它更改的只是临时主机名(transient hostname)。所以 重启计算机后会回到旧的主机名。

    静态主机名保存在/etc/hostname文件中。

  • sysctl kernel.hostname=new-hostname
    hostname的值来自内核参数/proc/sys/kernel/hostname,如果通过命令sysctl kernel.hostname=Test修改了内核参数,那么hostname就变为Test了。

  • echo new-hostname > /proc/sys/kernel/hostname
    hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,但是它的值是Linux启动时从rc.sysinit读取的,而/etc/rc.d/rc.sysinit中HOSTNAME的取值来自于/etc/sysconfig/network下的HOSTNAME。

4.2 永久修改主机名

步骤1:修改配置文件,使得下次重启的时候,使用新的主机名。

  • 方式1:修改 /etc/hostname 文件
    将当前的主机名删除,然后输入一个新的主机名,再保存文件。现在使用hostname或hostnamectl命令就会发现主机名已经更改了。如果现在打开一个新的终端窗口也会发现主机名的更改。这种更改主机名的方法是持久性的,也就是说重启电脑后你会看到新的主机名。

  • 方式2:hostnamectl命令(el7)
    hostnamectl set-hostname <new-hostname>
    这条命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名。

  • 方式3:修改 /etc/sysconfig/network 文件

    HOSTNAME=new-hostname
    NETWORKING=yes
    

步骤2:更新/etc/hosts文件
在更改主机名后我们需要更新/etc/hosts域名解析文件,使得本机的应用程序能够解析新的主机名。

如果你不更新/etc/hosts文件,那么有的程序,如sudo,不知道如何解析新的主机名。

编辑文件: /etc/hosts
修改: xxx.xxx.xxx.xxx new-hostname.domainname new-hostname

参考资料

Linux操作系统主机名(hostname)简说
linux下/etc/hosts 和hostname文件的区别
ubuntu永久修改主机名
linux修改hostname
3种方法更改Linux系统的主机名(hostname)
深入理解Linux修改hostname

### 如何在Linux中配置主机名 对于希望更改其Linux系统主机名的用户来说,有多种方式可以实现这一目标。一种临时的方法是在命令行界面使用`hostnamectl set-hostname new_hostname`命令来改变当前会话中的主机名称[^1]。 为了使新的主机名永久生效,在某些Linux发行版上还需要更新特定文件。例如,在Ubuntu和其他基于Debian的操作系统里,可以通过编辑`/etc/hostname`文件并替换其中的内容为期望的新主机名达到目的。不过需要注意的是,并不是所有的Linux版本都采用相同的机制处理这个问题——一些较新版本可能不再需要手动修改此文件就能让变更持久化[^2]。 另外一个重要方面涉及到 `/etc/hosts` 文件的调整。该文件主要用于定义本机上的静态IP到主机名映射关系,这对于内部网络环境下的计算机识别非常重要。当一台设备尝试连接另一台位于同一私有网络内的服务器时,它可能会先查阅自身的`/etc/hosts`文件寻找对应的记录而不是立即求助外部DNS服务[^4]。 #### 修改/etc/hosts文件的具体操作如下: 打开终端窗口后,利用文本编辑器(比如vim)进入`/etc/hosts`: ```bash sudo vim /etc/hosts ``` 接着可以在文件末尾添加一行或多行条目,格式通常遵循这样的模式:“<ip_address> <hostname> [<alias>]”。这里给出的例子展示了如何将三个不同节点加入到同一个子网内以便它们能够互相通过各自的主机名进行通信[^5]: ```plaintext 192.168.88.100 node1.example.com node1 192.168.88.101 node2.example.com node2 192.168.88.102 node3.example.com node3 ``` 完成上述改动之后保存退出即可。此时如果一切正常的话,这些机器之间应该已经能够在不借助任何额外配置的情况下仅凭对方的主机名建立联系了[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值