适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。
您可以:
WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。
这一新的体系结构改变了这些 Linux 二进制文件与Windows 和计算机硬件进行交互的方式,但仍然提供与 WSL 1(当前广泛可用的版本)中相同的用户体验。
单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。 每个分发版可随时升级或降级,并且你可以并行运行 WSL 1 和 WSL 2 分发版。 WSL 2 使用全新的体系结构,该体系结构受益于运行真正的 Linux 内核。
SL 2 是 WSL 中体系结构的新版本,它更改了 Linux 分发版与 Windows 进行交互的方式。 WSL 2 的主要目标是提高文件系统性能并增加完全的系统调用兼容性。 每个 Linux 分发版都可以作为 WSL 1 或 WSL 2 运行,并可随时在它们之间进行切换。 WSL 2 是对基础体系结构的一次重大改造,它使用虚拟化技术和 Linux 内核来实现其新功能。
只有 Windows 10 版本 2004 的内部版本 19041 或更高版本中才提供 WSL 2。
适用于 Linux 的 Windows 子系统更新到新版本的主要目标是,提高文件系统性能并支持完全的系统调用兼容性。
WSL 2 使用最新、最强大的虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 但是,WSL 2 不是传统的 VM 体验。 了解有关 WSL 2 体系结构的详细信息。
功能 | WSL 1 | WSL 2 |
---|---|---|
Windows 和 Linux 之间的集成 | ✅ | ✅ |
启动时间短 | ✅ | ✅ |
占用的资源量少 | ✅ | ✅ |
托管 VM | ❌ | ✅ |
完整的 Linux 内核 | ❌ | ✅ |
完全的系统调用兼容性 | ❌ | ✅ |
可以与当前版本的 VM Ware 和 VirtualBox 一起运行 | ✅ | ❌ |
跨 OS 文件系统的性能 | ✅ | ❌ |
已在使用 WSL 1 并且想要升级到 WSL 2? 请按照说明更新到 WSL 2!
只有 Windows 10 版本 2004 的内部版本 19041 或更高版本中才提供 WSL 2。 通过按 Windows 徽标键 + R,检查你的 Windows 版本,然后键入 winver,选择“确定”。 (或者在 Windows 命令提示符下输入 ver 命令)。 你可能需要更新到最新的 Windows 版本。 对于低于 19041 的版本,WSL 根本不受支持。
备注:WSL 2 可与以前版本的 VM Ware 和 VirtualBox 6.x 配合使用。
为了进行优化以实现最快的性能速度,请确保将项目文件存储在 Linux 文件系统(而非 Windows 文件系统)中。
例如,在存储 WSL 项目文件时:
通过 WSL 分发版(如 Ubuntu)使用的项目文件必须位于 Linux 根文件系统中,才能利用更快的文件系统访问速度。
可以使用 Windows 应用和工具(如文件资源管理器)访问 Linux 根文件系统。 尝试打开 Linux 分发版(如 Ubuntu),通过输入以下命令确保你位于 Linux 主目录中:cd ~。 然后通过输入 explorer.exe .(不要忘记尾部的句点),在文件资源管理器中打开 Linux 文件系统。
我们建议使用 WSL 2,因为它提供更快的性能和100% 的系统调用兼容性。 但是,在某些特定情况下,你可能会更倾向于使用 WSL 1。 在以下情况下,请考虑使用 WSL 1:
备注:请考虑尝试 VS Code 远程 WSL 扩展,以便使你不仅能够使用 Linux 命令行工具将项目文件存储在 Linux
文件系统上,而且还可以使用 Windows 上的 VS Code 在 Internet
浏览器中创作、编辑、调试或运行项目,而不会造成任何与跨 Linux 和 Windows 文件系统工作相关联的性能下降。
了解详细信息。
传统的 VM 体验可能启动速度慢,是独立的,消耗大量资源,需要你花费时间进行管理。 WSL 2 没有这些属性。
WSL 2 有 WSL 1 的优点,包括 Windows 和 Linux 之间的无缝集成,启动时间短,资源占用量少,并且无需 VM 配置或管理。 虽然 WSL 2 确实使用 VM,但 VM 是在幕后管理和运行的,因此你将具有与 WSL 1 相同的用户体验。
WSL 2 中的 Linux 内核是 Microsoft 根据最新的稳定版分支(基于 kernel.org 上提供的源代码)构建的。此内核已专门针对 WSL 2 进行了调整,针对大小和性能进行了优化,以便在 Windows 上提供良好的 Linux 体验。 内核将由 Windows 更新提供服务,这意味着你将获得最新的安全修补程序和内核改进功能,而无需自行管理它。
WSL 2 Linux 内核是开源的。 如果你想要了解详细信息,请查看由构建该内核的团队撰写的博客文章随 Windows 一起提供 Linux 内核。
在使用 WSL 2 的情况下,文件密集型操作(如 git 克隆、npm 安装、apt 更新、apt 升级等)的速度都明显更快。
实际的速度提升将取决于你运行的应用以及它与文件系统的交互方式。 在对压缩的 tarball 进行解包时,WSL 2 的初始版本的运行速度比 WSL 1 快达 20 倍,在各种项目上使用 git 克隆、npm 安装和 cmake 时,大约快 2-5 倍。
Linux 二进制文件使用系统调用来执行访问文件、请求内存、创建进程等功能。 虽然 WSL 1 使用的是由 WSL 团队构建的转换层,但 WSL 2 包括了自己的 Linux 内核,具有完全的系统调用兼容性。 优点包括:
WSL 2 在实际 Linux 内核上使用轻量级实用工具 VM,内存占用量很小。 该实用工具将在启动时分配虚拟地址支持的内存。 它已经过配置,在启动时使用的内存占比小于 WSL 1 所需的内存占比。
如果要在 Linux 分发版中构建网络应用(例如,在 NodeJS 或 SQL server 上运行的应用),可以使用 localhost 从 Windows 应用(如 Edge 或 Chrome Internet 浏览器)访问它(就像往常一样)。
但是,如果运行的是较旧版本的 Windows(版本 18945 或更低版本),则需要获取 Linux 主机 VM 的 IP 地址(或更新到最新的 Windows 版本)。
若要查找为 Linux 分发版提供支持的虚拟机的 IP 地址,请执行以下操作:
下图显示了一个示例,该示例使用 Edge 浏览器连接到 Node.js 服务器。
如果要从 Linux 分发版(即 Ubuntu)访问 Windows 上运行的网络应用(例如,在 NodeJS 或 SQL 服务器上运行的应用),则需要使用主机的 IP 地址。 虽然这不是一种常见方案,但你可以执行以下步骤来使其可行。
cat /etc/resolv.conf
。nameserver
。下图显示了一个示例,该示例说明如何通过 curl 连接到在 Windows 中运行的 Node.js 服务器。
当使用远程 IP 地址连接到应用程序时,它们将被视为来自局域网 (LAN) 的连接。 这意味着你需要确保你的应用程序可以接受 LAN 连接。
例如,你可能需要将应用程序绑定到 0.0.0.0
而非 127.0.0.1
。 以使用 Flask 的 Python 应用为例,可以通过以下命令执行此操作:app.run(host='0.0.0.0')
。 进行这些更改时请注意安全性,因为这将允许来自你的 LAN 的连接。
当使用 WSL 1 分发版时,如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。
这不是 WSL 2 中的默认情况。 WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器。 目前,若要启用此工作流,你需要执行与常规虚拟机相同的步骤。 (我们正在寻找改善此体验的方法。)
WSL2 分发版目前无法访问纯 IPv6 地址。 我们正在致力于添加此功能。
WSL 2 使用虚拟硬件磁盘 (VHD) 来存储 Linux 文件。 如果达到其最大大小,则可能需要对其进行扩展。
WSL 2 VHD 使用 ext4 文件系统。 此 VHD 会自动调整大小以满足你的存储需求,并且其最大大小为 256GB。 如果你的分发版大小增长到大于 256GB,则会显示错误,指出磁盘空间不足。 可以通过扩展 VHD 大小来纠正此错误。
若要将最大 VHD 大小扩展到超过 256GB,请执行以下操作:
使用 PowerShell(其中,“distro”是分发版名称)输入以下命令:
Get-AppxPackage -Name "*
fullpath
,这将是你的 pathToVHD
:备注:通常情况下,不要使用 Windows 工具或编辑器来修改、移动或访问 AppData 文件夹中与 WSL 相关的文件。这样做可能会导致 Linux 分发版损坏。
必须先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发版。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
若要仅安装 WSL 1,现在应重启计算机并继续安装所选的 Linux 分发版,否则请等待重启并继续更新到 WSL 2。 阅读有关比较 WSL 2 和 WSL 1 的详细信息。
若要更新到 WSL 2,必须满足以下条件:
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重新启动计算机,以完成 WSL 安装并更新到 WSL 2。
安装新的 Linux 分发版时,请在 Powershell 中运行以下命令,以将 WSL 2 设置为默认版本:
wsl --set-default-version 2
备注:从 WSL 1 更新到 WSL 2 可能需要几分钟才能完成,具体取决于目标分发版的大小。
2. 单击以下链接会打开每个分发版的 Microsoft Store 页面:
首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。
然后,需要为新的 Linux 分发版创建用户帐户和密码。
可以打开 PowerShell 命令行并输入以下命令(仅在 Windows 内部版本 19041 或更高版本中可用),来检查分配给每个已安装的 Linux 分发版的 WSL 版本:wsl -l -v
wsl --list --verbose
若要将分发版设置为受某一 WSL 版本支持,请运行:
wsl --set-version <distribution name> <versionNumber>
请确保将
替换为你的分发版的实际名称,并将
替换为数字“1”或“2”。 可以随时更改回 WSL 1,方法是运行与上面相同的命令,但将“2”替换为“1”。
此外,如果要使 WSL 2 成为你的默认体系结构,可以通过此命令执行该操作:
wsl --set-default-version 2
这会将安装的任何新分发版的版本设置为 WSL 2。
下面是相关的错误和建议的修复措施。 有关其他常见错误及其解决方法,请参阅 WSL 故障排除页。
Invalid command line option: wsl --set-version Ubuntu 2
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
。wsl.exe
。适用于 Linux 的 Windows 子系统可供在 Windows Server 2019(版本 1709)和更高版本上安装。 本指南将指导你完成在计算机上启用 WSL 的步骤。
必须启用“适用于 Linux 的 Windows 子系统”可选功能并重启,然后才能在 Windows 上运行 Linux 发行版。
以管理员身份打开 PowerShell 并运行:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
如果你正在寻求 100% 的系统调用兼容性和更快的 IO 性能,请阅读下文以安装 WSL 2!
只有 Windows 10 版本 2004 的内部版本 19041 或更高版本中才提供 WSL 2。
如果要继续安装 WSL 1,请在系统提示时重新启动计算机,并访问此处此处安装
确保安装了“虚拟机平台”可选组件。 可以通过在 PowerShell 中运行以下命令来执行该操作:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
按照这些说明下载你最喜爱的 Linux 发行版。
下载 Linux 分发版后,若要提取其内容并进行手动安装,请执行以下步骤:
Rename-Item .\Ubuntu.appx .\Ubuntu.zip
Expand-Archive .\Ubuntu.zip .\Ubuntu
.exe
(例如,ubuntu.exe
)。注意:安装失败并出现错误 0x8007007e:如果收到此错误,则表明系统不支持 WSL。 请确保运行的是 Windows 版本 16215或更高版本。 检查内部版本。 另外,请进行检查以确认 WSL 已启用,并且在启用此功能后重新启动了计算机。
C:\Users\Administrator\Ubuntu
):$userenv = [System.Environment]::GetEnvironmentVariable("Path", "User")
[System.Environment]::SetEnvironmentVariable("PATH", $userenv + ";C:\Users\Administrator\Ubuntu", "User")
现在,可以通过键入
从任何路径启动你的分发版。 例如: ubuntu.exe
。
安装了分发版后,必须先初始化新的分发版实例,然后才能使用它。
启用 WSL 并从 Microsoft Store 中安装 Linux 分发版后,在打开新安装的 Linux 分发版时将会要求你完成的第一步是创建帐户,包括用户名和密码。
大多数分发版随附了一个空的的包目录或最简单的包目录。 我们强烈建议定期更新包目录并使用分发版的首选包管理器升级已安装的包。 对于 Debian/Ubuntu,请使用 apt:
sudo apt update && sudo apt upgrade
Windows 不会自动更新或升级 Linux 分发版。 大多数 Linux 用户往往倾向于自行控制此任务。
若要更改密码,请打开 Linux 分发版(例如 Ubuntu)并输入以下命令:passwd
系统会要求你输入当前密码,然后要求输入新密码,之后再确认新密码。
如果忘记了 Linux 分发版的密码:
wsl -u root
如果需要在非默认分发版中更新忘记的密码,请使用命令:
wsl -d Debian -u root
,并将Debian
替换为目标分发版的名称。
在 PowerShell 内的根级别打开 WSL 分发版后,可以使用此命令更新密码:passwd
系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用以下命令在 PowerShell 内关闭 WSL:exit
备注:如果运行的是早期版本的 Windows 操作系统,例如 1703(创意者更新)或 1709 (Fall Creators Update),请参阅此用户帐户更新文档的存档版本。