科技 · 实用指南
sudo 提示“unable to resolve host”?先沿 NSS 追踪本机主机名
先证明运行时主机名和真实 NSS 查询路径,找出配置所有者,再只修一层并复验 sudo。

这条警告说明机器无法通过已配置的 hosts 数据库解析自己当前的主机名,并不自动等于互联网 DNS 故障。先保留准确名称,再沿应用实际使用的查询路径排查。
冻结准确的本机身份
记录 sudo 警告里的字面名称、hostname 输出、可用时的 hostnamectl 状态,以及它属于物理机、虚拟机、容器还是 CI runner。先不要补域名、改大小写或猜测哪个文件错误。
测试真实 hosts 数据库
对准确主机名运行 getent hosts;需要区分地址族时再用 getent ahosts。它们遵循 NSS 路径。host 或 dig 这类仅查 DNS 的工具可能绕过本地文件和 NSS 模块,结果不同并不矛盾。
读取实际来源顺序
检查 /etc/nsswitch.conf 的 hosts 行,记录 files、myhostname、resolve、dns 等模块的顺序与控制条件。然后只检查本应回答本机名的来源。files 缺项、NSS 模块缺失和纯 DNS 失败是不同分支。
找出持久配置所有者
静态 Debian 类主机要比较运行时名称、持久主机名和已验证的本地映射;云镜像、DHCP、NetworkManager、cloud-init、systemd-hostnamed、容器或编排环境要找出谁会重建名称或文件。修所有者,不修临时输出。
只修一个已证实层级
纠正一个已验证的名称不一致或模块配置。保留 localhost 与有效别名,不要为了消除警告随意追加地址或全局改名。临时容器和 CI 应修镜像、入口脚本或运行时映射,让结果在下次启动仍存在。
分开验证并闭环
重复 hostname 与 getent,再执行无副作用的 sudo 验证和原命令。只有配置所有者要求时才重启或重建,并在生命周期事件后重测。外部 DNS 另行验证,避免本机自解析与互联网可达性互相掩盖。
