关于 WSL2 的一些知识杂记

1.WSL2 的 /etc/sudoers 文件改错后:/etc/sudoers: syntax error near line 27

我的 WSL2 安装的是 Ubuntu,在不小心 sudo vi /etc/sudoers 之后,添加了错误的内容,这时候再 sudo 就报错了:

$ sudo
/etc/sudoers: syntax error near line 30 <<<
sudo: parse error in /etc/sudoers near line 30
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

似乎陷入了一个死循环,因为你要有 root 权限才能改正 /etc/sudoers 文件,而你又无法 sudo 成 root。

在正常的 Linux 系统,这种情况可以想办法进入单用户模式。对 WSL2,我们可以利用 Windows 的 PowerShell 来做到这一点。

关掉 WSL2 的命令行窗口,用管理员身份打开 PowerShell,然后运行:

PS C:\Windows\system32> ubuntu.exe config --default-user root

然后再打开 WSL2 窗口,这时你就已经是 root 用户了。修改好 /etc/sudoer 文件后,我们再次在 PowerShell 里运行:

PS C:\Windows\system32> ubuntu.exe config --default-user tattoo

然后再打开 WSL2 窗口,就恢复成普通用户了。

转自:【CSDN】 侵删

2.sudo 不需要输入密码

sudo vi /etc/sudoers

将 %admin ALL=(ALL) ALL  修改为 %admin ALL=(ALL) NOPASSWD: ALL

意思是属于 admin 组的用户可以不需要输入密码执行 sudo

如果去除%,则仅仅表示 admin 这个用户不需要输入密码

为某个用户设置可设置为

username ALL=(ALL) NOPASSWD: ALL

此文档为系统文档,如果修改错误,将会提示 »> /etc/sudoers: syntax error near line 23 的错误,此时 sudo 命令将无法使用,自然无法使用上述命令;

此时可进入/etc 目录,用 pkexec visudo 命令,编辑此文件,然后修改。注意:^X 表示 ctrl+X

转自:【博客园】 侵删

3.服务自启动配置

由于 WSL 并没有 Linux 内核的支持,仅在用户层实现了系统调用的翻译。因此诸如 systemd、cgroup 是无法工作的。 只能使用 start-stop-daemon 或其他进程守护工具实现服务管理

编辑 vim /etc/init.wsl 文件添加如下内容

#! /bin/sh
# Filename: /etc/init.wsl
service nginx start
定位到 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 后新建一个 REG_SZ 类型的值,名称随意,数值数据填写以下内容
mshta vbscript:CreateObject("WScript.Shell").Run("wsl -d Ubuntu-20.04 -u root bash /etc/init.wsl",0,TRUE)(window.close)

以后就可以向 /etc/init.wsl 追加服务,实现开启自启动了;

转自:【知乎】 侵删