WSL 的安装、报错解决、使用技巧
需要Windows10或以上系统版本。如果你的操作系统是Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11,并且你从来没有安装过WSL,你可以使用命令行简单的安装安装 WSL,使用管理员权限打开power shell运行 wsl --install
命令完成安装, 详细教程。
控制面板\程序\启用或关闭Windows功能
勾选这两个选项,点确定,之后重启计算机。
注:有的教程让打开这个,因为特别耗费资源试了一下,不用打开。
下载并运行 Linux内核更新包
下载适用于 x64 计算机的 WSL2 Linux 内核更新最新包:(Intel处理器|ARM64)。可以在`设置\系统\系统信息\设备规格中查看是Intel还是ARM处理器。
双击运行上一步中下载的更新包。
3.在PowerShall中输入命令wsl --set-default-version 2
设置WSL2为默认版本。
1.打开 Microsoft Store,并选择你喜欢的 Linux 分发版,我下载的是ubantu。
2.打开在开始界面或其他地方点击运行 ubantu ,可能会出现错误或其他问题,我们在下面解决。
如果上文第一步或第二步没有彻底完成,会有报错
Installing, this may take a few minutes…
WslRegisterDistributionfailed with error: 0x800701bc Error: 0x800701bc WSL 2 ???
https://aka.ms/wsl2kernel
Press any key to continue…
解决办法,仔细查看第一步第二步有没有遗漏的地方,全部完成后可能需要重启计算机。
重新打开Linux后,使用ifconfig命令发现无法使用
根据提示,使用命令安装网络工具:
sudo apt install net-tools
无法使用systemctl 命令
在发现无法使用systemctl命令后,出现如下报错:
root@**:c# systemctl status firewalld.service
System has not been booted with systemd as init system (PID 1). Can’t operate.
Failed to connect to bus: Host is down
以为是如上面的ifconfig命令一样没有安装,所以仿照上面的安装命令后出现如下报错:
root@**:c# sudo apt install systemctl
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
init : PreDepends: systemd-sysv but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
查阅相关资料后发现,可能是Windows Subsystem of Linux不使用 systemd 而是使用 SysVinit 应用来管理服务。输入下面命令后如果显示 init 或者 sysv ,就说明 这个Linux 系统使用SysVinit 来管理service。
ps -p 1 -o comm=
解决方法是使用 SysVinit应用的命令代替 systemd 应用的命令:
Systemd command
Sysvinit command
systemctl start service_name
service service_name start
systemctl stop service_name
service service_name stop
systemctl restart service_name
service service_name restart
systemctl status service_name
service service_name status
systemctl enable service_name
chkconfig service_name on
systemctl disable service_name
chkconfig service_name off
root@:c# ps -p 1 -o comm=
init
root@:c# service firewalld status
firewalld: unrecognized service
在进入Linux系统后无法使用cd 命令跳转到C盘,报错
root@:# wsl -l -v
-bash: cd: c: No such file or directory
查阅相关资料后发现,WSL的C盘挂载在/mnt
目录下,需要在盘符前加上 /mnt
才能正常使用。
root@:# cd /mnt/c
root@**:c#
三、使用技巧
查看WSL的版本状态:在PowerShell下输入命令 wsl -l -v
Linux子系统的根目录位置:C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
————————————————