因早上刷抖音时,刷到一博主介绍WSL这个东东,因已很少在本地电脑操作Linux环境,咱们来看下这个和传统的vmware workstation 、virtualbox虚拟机有啥不同,WSL如何安装和使用;另提前声明,WSL不推荐用于实际的开发测试验证,引起存在一些兼容性问题,还是VM独立环境更好。
WSL是windows subsystem for linux的简写,即它windows10 的一个子系统,是一个可在windows下运行得linux操作系统,它也有多个发行版本可供选择。官方介绍,它可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。现在已经发展到WSL 2,支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。新的体系结构WSL 2改变了 Linux 二进制文件与Windows 和计算机硬件进行交互的方式,且兼容WSL 1架构;
WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用真实的 Linux 内核(相比WSL1.0完整的Linux内核)、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。 WSL 2 是安装 Linux 发行版时的当前默认版本,它使用最新最好的虚拟化技术在轻量级实用工具虚拟机 (VM) 内运行 Linux 内核。下面是官网的一张对照表:
注意:WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。 可通过按 “Win + R”,键入 winver,查看你的内部和发现版本。 它还适用于 VMware 15.5.5+ 和 VirtualBox 6+;
传统的 VM 体验可能启动速度慢,是独立的,消耗大量资源;WSL 2 具备了有 WSL 1 的几乎全部优点: Windows 和 Linux 之间的无缝集成,启动时间短,资源占用量少,无需 VM 配置或管理。 虽然 WSL 2 中使用 了VM,但 VM 是在幕后管理和运行的,对用户依然无感,另WSL 2 中的 Linux 内核是 Microsoft 根据最新的稳定版分支构建的,且已专门针对 WSL 2 进行了调整,针对大小和性能进行了优化;因 WSL 2 包括了自己的 Linux 内核,具有完全的系统调用兼容性,不在需要像WSL 1那样需要中间层来转化;WSL 2也存在一个资源的问题,WSL 2 的内存使用量会随使用而缩放。 当进程释放内存时,这会自动返回到 Windows。 但在关闭 WSL 实例前,WSL 2 是不会将内存中缓存的页面释放回 Windows。 这就回出现一个问题,如果你有长时间运行的 WSL 会话或访问非常大量的文件,此缓存可能会耗尽你的 Windows 内存。
官网推荐开发的小伙伴们,建议尝试 VS Code 远程 WSL 扩展,以便使你不仅能够使用 Linux 命令行工具将项目文件存储在 Linux 文件系统上,而且还可以使用 Windows 上的 VS Code 在 Internet 浏览器中创作、编辑、调试或运行项目,而不会造成任何与跨 Linux 和 Windows 文件系统工作相关联的性能下降。
资源链接:Install WSL with a single command now available in Windows 10 version 2004 and higher、WSL2-Linux-Kernel库、官网文档、WSL 2内核、WSL 开发环境配置指南
1)宿主机OS版本确认,执行winver,确认你的OS版本满足: Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 ;且你的cpu开启了“虚拟化支持”;类似与vmware workstation和virtualbox的运行前检查;
2)WSL 2 安装前准备:
1、启用适用于 Linux 的 Windows 子系统:打开powershell执行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
2、启用虚拟平台支持:以管理员打开powershell执行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
或图形界面安装如下功能:“适用于Linux的Windows子系统” 和 “虚拟机平台”,如下所示
3)管理员打开CMD:
C:Windows\system32\chcp 936 //修改cmd串口显示未中文,返回如下
Acitive code page: 936
C:Windows\system32\ wsl.exe //打开默认的 Linux 发行版,如果没安装的话,可用来验证
适用于 Linux 的 Windows 子系统没有已安装的分发版。
可以通过访问 Microsoft Store 来安装分发版:
https://aka.ms/wslstore
C:Windows\system32\wsl --list --online //查看可用发行版列表,默认采用Ubuntu,可简写为:wsl -l -o
C:Windows\system32\wsl --install //安装完成后重启,重启后会开启Ubuntu vm的提示框,提示配置用户名和密码
C:Windows\system32\wsl --install -d //安装指定发行版
C:Windows\system32\wsl --set-default-version #> //将默认版本设置为 WSL 1 或 WSL 2
C:Windows\system32\wslwsl -s //或 wsl --setdefault ,更改默认安装的发行版
C:Windows\system32\wsl -l -v //列出已安装的发行版
C:Windows\system32\wsl pwd //查看当前目录路径在 WSL 中的装载位置
C:Windows\system32\wsl --status //查看当前安装版本信息
#终止指定的分发
C:Windows\system32\wsl -t
#终止所有运行的分发及 WSL 轻型工具虚拟机
C:Windows\system32\wsl --shutdown
#卸载
C:Windows\system32\wsl --unregister
#更新 WSL2 内核到最新版本
C:Windows\system32\wsl --update
# 还原到 WSL2 内核的先前版本
C:Windows\system32\wsl --update --rollback
也可从windows自带的“Microsoft Store”中搜索“ubuntu”,选择一个ubuntu发行版安装;比如ubuntu20.04,安装后就可以在我们的软件列表找到,单击后即可进入;
适用于 Linux 的 Windows 子系统只能在系统驱动器(通常是 C: 驱动器)中运行。 请确保分发版存储在系统驱动器上:打开“设置”->“系统”–>“存储”-> “更多存储设置”: 更改新内容的保存位置”
这一般是未启用“适用于 Linux 的 Windows 子系统”可选组件:打开“控制面板” -> “程序和功能” -> “打开或关闭 Windows 功能”-> 选中“适用于 Linux 的 Windows 子系统”,或使用本文开头所述的 PowerShell cmdlet。
请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异,并且很可能在 CPU 相关选项下。WSL2 要求 CPU 支持二级地址转换 (SLAT) 功能,后者已在 Intel Nehalem 处理器(Intel Core 第一代)和 AMD Opteron 中引入。 即使成功安装了虚拟机平台,旧版 CPU(例如 Intel Core 2 Duo)也无法运行 WSL2。
请确保已启用适用于 Linux 的 Windows 子系统,并且你使用的是 Windows 内部版本 18362 或更高版本。 若要启用 WSL,请在 PowerShell 提示符下以具有管理员权限的身份运行此命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux。
取消选中“压缩内容”(如果已选中“加密内容”,请一并取消选中),方法是打开 Linux 发行版的配置文件文件夹。 它应位于 Windows 文件系统上的一个文件夹中,类似于:USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited…
在此 Linux 发行版配置文件中,应存在一个 LocalState 文件夹。 右键单击此文件夹可显示选项的菜单。 选择“属性”>“高级”,然后确保未选择(未勾选)“压缩内容以节省磁盘空间”和“加密内容以保护数据”复选框。 如果系统询问是要将此应用到当前文件夹还是应用到所有子文件夹和文件,请选择“仅此文件夹”,因为你只是要清除压缩标志。 完成此操作后,wsl --set-version 命令应正常工作。
请确保已安装“适用于 Linux 的 Windows 子系统”可选组件。 此外,如果你使用的是 ARM64 设备,并从 PowerShell 运行此命令,则会收到此错误。 请改为从 PowerShell Core 或从命令提示符运行 wsl.exe。
若要安装 Linux 内核更新 MSI 包,需要 WSL,应先启用它。 如果失败,将看到以下消息:This update only applies to machines with the Windows Subsystem for Linux。
出现此消息有三个可能的原因:
1、你仍使用旧版 Windows,不支持 WSL 2。 有关版本要求和要更新的链接,请参阅步骤 #2。
2、未启用 WSL。 需要返回到步骤 #1,并确保在计算机上启用了可选的 WSL 功能。
3、启用 WSL 后,需要重新启动才能使其生效,请重新启动计算机,然后重试。
如果 %SystemRoot%\system32\lxss\tools 文件夹中缺少 Linux 内核包,会遇到此错误。 若要解决此问题,请在安装说明的步骤 #4 中安装 Linux 内核更新 MSI 包。 可能会需要从添加或删除程序卸载 MSI,然后重新安装。
如果忘记了 Linux 分发版的密码,请打开 PowerShell,并使用以下命令进入默认 WSL 分发版的根目录:wsl -u root
如果需要在非默认分发版中更新忘记的密码,请使用命令:wsl -d Debian -u root,并将 Debian 替换为目标分发版的名称。
在 PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:passwd ,其中 是 DISTRO 中帐户的用户名,而你忘记了它的密码。
系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用以下命令在 PowerShell 内关闭 WSL:exit