使用 WSL 编辑 /etc/hosts 与以管理员身份使用记事本编辑 /etc/hosts

使用 WSL 编辑 /etc/hosts 与以管理员身份使用记事本编辑 /etc/hosts

为什么我无法/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条目如:

    • 条目localhost127.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 后,您仍然会看到自动生成的文件(因为它在您终止时就在那里),但如果您现在编辑它,更改将会保留。

相关内容