环境:任意一台Linux服务器
步骤
1/ 修改Linux中/etc/hosts中的配置文件:
原始文件:
修改后的文件:
上面两个图打码的是真实IP地址,对本次实验没有影响。
下面修改后的配置文件中新增两行配置:
直接复制过去可以复现本实验。
127.0.0.1 test.localhost127.0.0.1 test.host
2/ 尝试使用 ping 命令去访问配置中的所有域名。
结果是test.host域名会报错:未知的名称或服务
为什么呢?其他任何一个域名都可以ping 的通
思考过程:
3/ 检查了所有拼写是正确的,检查了编码格式,文件格式为utf-8,理论上不会出现特殊字符
4/ 使用 ls -l /etc/hosts 查看了文件权限:
-rw-r--r-- 1 root root 262 3 月 11 21:12 /etc/hosts ,
权限表明可以正确读取(其实之前的步骤中可以ping通说明权限无异常....)
5/ 使用了 getent hosts test.host 发现什么都没有输出,但是运行getent hosts localhost
输出:(ping localhost正常)
::1 localhost
说明在 /etc/hosts 配置的 test.hosts 这个域名无法找到对应的IP地址,但是实际上已经配置了,因为其他都可以正常输出那么就说明 /etc/hosts
文件解析IP是没问题的那么就只有一个可能是 这个域名配置错了,排查到底哪里配置错误了,复制出来所有配置到文本上。
修改编码:最终发现问题。如下图:
6/ 这是我的思考过程,原始实验中还有更加精彩的,使用到了strace跟踪系统调用和信号,还有小伙伴使用了cat -v 来查看文件的编码。我只想到了 getent hosts localhost 这个命令,因为上面说的俩命令我不会使😅。
解释一下getent 命令,getent
是一个用于获取系统数据库数据的命令,getent hosts localhost
命令的含义是获取系统中关于主机名 localhost
的信息。getent hosts localhost 会直接查询 /etc/hosts 文件,如果找到了对应的 IP 就会输出,如果没有会输出空或者错误。
以上就是这个实验的所有内容,希望你有时间可以复现一下。