为什么我无法/etc/hosts
通过 WSL 在 Ubuntu 中修改我的文件?但如果我尝试以管理员身份运行记事本并将文件命名为c:\Windows\System32\drivers\etc\hosts
,我就可以修改该/etc/host
文件。
由于我是在 Windows 机器上运行 WSL 的,这是 WSL 的限制吗?
答案1
好吧,我个人不会称之为 WSL 的“限制”——实际上更像是一个有意为之的功能。如果你/etc/hosts
在 Ubuntu 中检查,你应该看到前几行是:
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
是的,WSL 在其/init
处理过程中会自动生成此文件。它将三个不同的来源组合到自动生成的文件中(至少在最新的 WSL 版本中):
“正常”的 Linux
/etc/hosts
条目如:- 条目
localhost
127.0.0.1
- 基于主机名的条目
127.0.1.1
(通常由安装程序在典型的 Linux 系统中插入,至少Debian)。 - 典型有用的 IPv6 网络条目
- 条目
Windows 主机文件,因为假定您希望访问相同的主机名,无论是在 PowerShell、Ubuntu、CMD 等中。
如上所述,如果您愿意,您可以轻松禁用此自动生成功能并完全控制您自己的文件。只需:
sudo -e /etc/wsl.conf
附注:用于sudo update-alternatives --config editor
设置使用的默认编辑器sudo -e
并添加:
[network]
generateHosts = false
然后退出 Ubuntu。
从 PowerShell:
wsl -l -v
# Confirm the distribution name is "Ubuntu" and adjust the following command if needed
wsl --terminate Ubuntu
重新启动 Ubuntu 后,您仍然会看到自动生成的文件(因为它在您终止时就在那里),但如果您现在编辑它,更改将会保留。