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文件能解决哪些问题?
-
加快域名解析
对于要经常访问的网站,在Hosts中配置域名和IP的映射关系,可以很快解析出IP,而不用请求网络上的DNS服务器。 -
屏蔽网站
将一些不友好的网站域名映射到错误的IP或自己计算机的IP,这样就不用访问了。127.0.0.1 屏蔽的网站 0.0.0.0 屏蔽的网站
-
双机互连
当两台主机只是双机互连时,这时两台主机都需要设置自己的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的对应关系。
注意:
-
在安装 Cloudera Manager 时,/etc/hostname 与 /etc/hosts 中的主机名别名必须保持一致,否则会报如下的错:
MainThread agent ERROR Heartbeating to localhost:7182 failed
ip地址 主机名 主机名别名 192.168.210.101 hadoop1.com cdh1
解决方式: 修改 hostname 与 cdh1 相同
-
/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