从 Windows 修复 WSL2 Ubuntu 系统文件

从 Windows 修复 WSL2 Ubuntu 系统文件

我关注这些步骤在我的 WSL2 Ubuntu 20.04 发行版中设置 SystemD,但在重新启动之前没有像我应该做的那样进行验证。现在,当我尝试启动时(以我的普通用户或身份root),它挂起并显示:

/usr/sbin/enter-systemd-namespace:第 10 行:/usr/sbin/daemonize:没有此文件或目录

我如何才能还原/etc/bash.bashrc更改以恢复?我尝试\\wsl$\\<distro>\...使用记事本通过 Windows 中的路径进行编辑,但没有权限(即使以管理员身份运行)。

答案1

我看到你已经恢复了,这是一个很好的解决方案。将来,还要考虑:

wsl -u root -e bash --noprofile --norc

这应该会让您进入 shell,而不会运行有问题的启动脚本。sh如果需要,您也可以使用。

此外,大多数 Systemd 脚本或 WSL 指令都非常复杂,因为它们试图“完成所有事情”。要制作一个可以运行但功能有限的“快速而粗糙”的 Systemd,您可以从以下方法开始:

sudo -b unshare --pid --fork --mount-proc /lib/systemd/systemd --system-unit=multi-user.target

ps -ef等待Systemd 启动几秒钟以“稳定下来”,然后:

sudo -E nsenter --all --wd="$PWD" -t $(pgrep -xo systemd) runuser -P -l $USER -c "exec $SHELL"

这应该会让你进入 WSL2/Ubuntu 中可用的 Systemd 环境。主要限制是你无法在该会话中运行 Windows 可执行文件。但这对于 Kubernetes 教程来说不是必需的。

一旦运行该程序,您就可以构建“完整的 Systemd”脚本。

答案2

新的/令人反感的行是 中的第 4 行/etc/bash.bashrc

我可以通过以下方式从 Windows 命令提示符中删除它:

wsl -u root --exec sed -i 4d /etc/bash.bashrc

然后我就能重新登录到我的 shell 并解决问题。

相关内容