WSL是windows推出的可让开发人员不需要安装虚拟机(vmware,virtbox)或者设置双系统启动就可以原生支持运行GNU/Linux的系统环境,简称WSL子系统。
目前最新的版本是WSL2,在原先的基础上提高了文件系统的性能并添加了完全的的系统调用支持。WSL2使用全新体系架构使其能真正的运行一个Linux内核。
在基于最新的WSL2上,现在已经完全集成了在wsl2中的桌面体验,意味着可以在Windows上运行Linux GUI应用程序(X11和Wayland)。目前在本篇编写阶段WSL2 GUI还处于预览版阶段,故如果需要使用WSL2 GUI功能还需要加入Windows 预览体验版计划并更新Windows系统。
根据上述可知,使用WSL2我们可以安装ubuntu,arch Linux等一些流行的Linux发行版。并且由于是Windows原生支持的子系统功能,所以可以使用最少的资源和开销运行ubuntu,配合VS Code远程拓展功能,开发者用户体验大幅提升。
必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。
备注:检查Windows版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定” 。 可通过选择“开始”>“设置”>“Windows 更新”>“检查更新”来更新到最新的 Windows 版本。
以管理员权限启动PowerShell或者cmd,然后输入以下命令启用虚拟机平台:
$ Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
以管理员权限启动 PowerShell或者cmd,然后输入以下命令启用 Linux 子系统功能:
$ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
在以上每一步命令执行完之后,PowerShell 中可能会提示你重新启动计算机。按“Y”可以重新启动。
打开微软商店应用,在搜索框中输入“Linux”或者“ubuntu”然后搜索,你可以看到搜索结果中有很多的 Linux 发行版可以选择。选择一个你喜欢的 Linux 发行版本然后安装:
注意1:有可能启动ubuntu报告WslRegisterDistribution failed with error: 0x800701bc
是因为没有升级linux内核使用wsl --update
下载更新即可。
注意2:在商店安装后并没有完全完成Linux子系统安装,还需要运行一次Linux系统来完成内核下载以及用户名密码的设置:(或者在windows的搜索中直接搜索刚刚安装的ubuntu则会显示已下载的发行版,运行它)
注意必须满足先决条件
使用命令行PowerShell或者cmd查看已安装的Linux子系统:
$ wsl -l
如果提示 wsl
不是内部或外部命令,说明你没有启用“适用于 Windows 的 Linux 子系统”,请先完成"2.2章节步骤"。
使用wsl --set-version
命令可以设置一个Linux发行版的WSL版本,wsl -l
查询到的名字"Ubuntu-20.04":
$ wsl --set-version Ubuntu-20.04 2
也可以使用如下命令设置为每个安装的发行版默认WSL2启动:
$ wsl --set-default-version 2
在目前最新的WSL2支持中,可直接在WSL2的Linux系统中运行Linux GUI应用程序,主要是Windows对X11和Wayland的支持:
注意:需要使用 Windows 11 内部版本 22000或更高版本才能访问此功能。 要获取最新的预览版,请加入 Windows 预览体验计划。
根据上述描述,windows用户需要先加入Windows预览体验计划并更新系统后即可默认使用WSL2 GUI功能。在本文编写期间还是需要加入预览计划才能使用此功能,可能后面不久即可直接使用此功能而不需要加入预览计划。
可将WSL2应用固定到Windows任务栏或者启动菜单中以便快速启动wsl2。
通过使用tar文件导入导出Linux发行版,可使其在任意地方安装Linux发行版或者共享自己的Linux发行版:
查看已安装的Linux发行版
$ wsl -l --all -v
导出Linux发行版tar文件到D盘
$ wsl --export Ubuntu-20.04 d:/wsl-ubuntu-20.04.tar
注销当前Linux发行版
$ wsl --unregister Ubuntu-20.04
重新导入并安装WSL2到D盘
$ wsl --import Ubuntu-20.04 d:/wsl-ubuntu-20.04 d:/wsl-ubuntu-20.04.tar --version 2
设置默认登录用户为安装时用户名
$ ubuntu2004 config --default-user USERNAME
共享Linux发行版
此时导出的wsl-ubuntu-20.04.tar文件即可共享给任何使用wsl2的开发人员使用。在协同开发中使用更多,为每个开发者提供一致统一的开发环境。
启动wsl2后,可根据国内镜像源修改/etc/apt/sources.list
文件更新国内镜像源。
这里推荐一个清华大学的镜像源地址https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/,里面可根据安装的ubuntu版本选择对应的镜像源,如21.04,20.04 LTS,18.04 LTS。
修改/etc/apt/sources.list
后执行以下命令更新源和所有应用程序。
$ sudo apt-get update
$ sudo apt-get upgrade
Visual Studio Code 以及 Remote - WSL 扩展使你能够直接从 VS Code 使用 WSL 作为实时开发环境。 可以:
在VS Code插件中搜索remote关键字,安装Remote Development插件即可安装所有远程插件,包括:SSH,WSL,Docker。
在Linux发行版的命令行中输入code .
即可在Windows端启动VS Code并自动远程连接到WSL2中。如果首次启动VS Code还会在WSL2中安装一些必要依赖包。
注意:所有需要的文件和安装在WSL2中的插件都在~/.vscode-server
文件夹下面。
由于WSL2为Windows原生支持的子系统所以无需设置即可直接共享目录等。
ln -s /mnt/xx/share ~/share
方式可快速在Windows和wsl2中共享文件。一些关于WSL2的配置可参考https://docs.microsoft.com/zh-cn/windows/wsl/wsl-config,其中包括一些cpu核数,文件系统大小,内存大小,网络等配置,具体可根据需要查看,一般默认即可。
对于一个开发人员,Linux的使用是必不可少的,在没有WSL之前我们的开发可能是双系统启动,也可能是使用虚拟机vmware,virtbox等安装一个Linux发行版。但由于双系统的不便捷性,虚拟机的性能和稳定性问题,导致开发环境的使用不便。在有了WSL2和VS Code的远程拓展支持后,一切Linux的开发都变得更加简单了,我们可以直接在Windows中使用到各种Linux发行版,并且由于Windows的支持,性能和稳定性方面可以得到最好的保证,配合VS Code的远程拓展功能,即可在VS Code中连接到Linux发行版中的项目文件目录里去,直接查看和编写代码,配合git插件,自带的终端等支持,大大提高开发效率。
对比Ubuntu的使用,WSL2现在也对Linux GUI应用程序进行了支持,使得WSL2的使用已经完全接近原生ubuntu体验。并且对于团队开发来说,开发环境不一致等问题也会导致团队效率的降低,而使用WSL2导出一个共享tar文件即可每个人拥有完全相同的开发环境。
微软官网:适用于 Linux 的 Windows 子系统文档
CSDN博客:win10 wsl2修改默认安装目录到其他盘
CSDN博客:如何在 Windows 10 中安装 WSL2 的 Linux 子系统