我删除了 hosts 文件中的所有内容

我删除了 hosts 文件中的所有内容

所以我是 WSL 和 Ubuntu 22.04 的新手。

我看到有人在提示符下输入用户名和主机名(username@hostname...)。所以我尝试做同样的事情,但最终删除了文件中的所有内容hosts。我尝试:

sudo nano /etc/hosts

在里面我看到了类似的东西:

127.1.1.0 localhost
127.1.1.0 hostname.something # I changed this one
# and some additional lines

在我删除它并按Ctrl+X退出后,整个 hosts 文件夹就完全空了。

所以我说:“好吧,不要惊慌。也许只需重新启动一切?”

sudo reboot

...并且出现了这些错误:

system has not been booted with systemd as init system (pid 1). can't operate. 
failed to connect to bus: host is down, fail to talk to init daemon

因此我决定尝试重新安装,但仍然遇到同样的问题。

我不知道如何重置它,以便 hosts 文件完全恢复正常。我怎样才能让 hosts 中的所有内容恢复到原来的状态,因为现在它只是一个空文件。

答案1

您似乎有两个不同的问题,也许还有另外两个隐含的问题:

  • 如何恢复您的/etc/hosts文件。
  • 如何在 WSL 上重启 Ubuntu。
  • 如何更改主机名。
  • 如何更改提示(如果我正确理解了你的问题)

在 WSL 上重启 Ubuntu

首先,需要注意的是,WSL 下的 Ubuntu 在许多方面与虚拟机或物理机上的 Ubuntu 的行为截然不同。其中一个方面是不使用 Systemd。这就是为什么您在尝试使用该reboot命令(该命令映射到 Ubuntu 中的 Systemd 命令)时会收到该特定错误消息的原因。

另一个区别是它没有“电源”、“开/关”、“重启”等概念。它不是虚拟机,而是在 WSL2 虚拟机中运行的命名空间/容器(我们无法访问)。

一般来说,如果你退出 shell 并等待几秒钟,WSL 就会检测到 Ubuntu 中没有运行任何程序(如果是这种情况)并自动关闭它。你可以在 PowerShell 中使用以下命令进行检查:

wsl -l -v

如果显示为“跑步”,然后你可以手动停止它(也可以从 PowerShell 中):

wsl --terminate <distro>

... 是<distro>出现在wsl -l -v(可能“Ubuntu-22.04”为你)。

在某些情况下,您需要停止整个 WSL2 VM。可以通过以下方式完成:

wsl --shutdown

当然,这不仅会停止 WSL VM,还会停止其中所有正在运行的实例(以及 WSL1 实例)。

再生/etc/hosts

只需重新启动(从“已停止”状态重新启动 Ubuntu)。正如 @Steeldriver 在评论中提到的,该文件是在 WSL 启动时自动创建的。唯一的例外应该是如果您已通过/etc/wsl.conf设置手动禁用该功能,这在您的情况下似乎不太可能。

更改主机名

我的建议——不要。WSL 会自动根据你的 Windows 计算机名称在 WSL 中创建主机名。如果你真的想更改它,请在 Windows 中更改计算机名称(然后重新启动 Windows)。

将其更改为其他内容(很可能)会导致将来其他内容无法正常工作。当您遇到问题时,您会忘记这可能是由主机名差异引起的。

更改 bash 提示符

改变迅速的本身,而不是主机名。您可以在提示中输入任何内容 - 它不必是计算出的username@hostname对。

尝试类似(警告,我不是一位“酷提示”设计师):

LIGHTRED="\[\033[1;31m\]"
RED="\[\033[0;31m\]"
WHITE="\[\033[0;37m\]"
PS1="${RED}rivas@${WHITE}my${LIGHTRED}W${WHITE}S${LIGHTRED}L${RESET}> "

然后你可以把它放进你的~/.bashrc(但不要删除它!

相关内容