[Windows/虚拟化/OS] WSL(Windows Subsystem for Linux)技术
概述:WSL
什么是WSL?
-
WSL
代表“Windows Subsystem for Linux
”,是一种由Microsoft
开发的技术,允许在Windows
操作系统上运行Linux
发行版(如Ubuntu
、Debian
、Fedora
等)。 -
WSL
的目标是在Windows
环境中提供原生的Linux
兼容性,让开发者能够在Windows
系统上进行Linux
开发,无需创建虚拟机或者双重引导系统。
简单理解:在windows上运行linux,又不需要用到虚拟机。
WSL的细分版本及区别
WSL
提供了两个主要版本:WSL 1和WSL 2。
WSL1 vs. WSL2 (官网的对比)
-
WSL 1
:这是WSL
的初始版本,它使用轻量级的虚拟机技术,通过模拟Linux系统调用来实现Linux应用程序在Windows上的运行。尽管它提供了一定的兼容性,但由于一些性能和功能限制,如文件系统性能不佳和不能运行Docker等问题,Microsoft在后来推出了WSL 2
。 -
WSL 2
:这是WSL
的升级版本,采用了更先进的虚拟化技术,包括Hyper-V
虚拟机。WSL 2
在Windows
主机系统和Linux
发行版之间提供了更好的性能和兼容性,特别是在文件系统性能、网络性能和Docker支持**方面表现出色。
它使得在Windows上运行Linux应用程序更加无缝和高效。
WSL2
对系统有相关要求:
- 若要更新到 WSL 2,需要运行 Windows 10。
- 对于 x64 系统:版本
1903
或更高版本,内部版本为 18362.1049 或更高版本。- 对于 ARM64 系统:版本
2004
或更高版本,内部版本为 19041 或更高版本。- 如果运行的是 Windows 10 版本1903 或 1909,请在 Windows 菜单中打开“设置”,导航到“更新和安全性”,然后选择“检查更新”。 内部版本号必须是 18362.1049+ 或 18363.1049+,次要内部版本号需要高于 .1049
若要检查Windows版本及内部版本号,选择Windows徽标键+R,然后键入“
winver
”,按下Enter键即可 。
为什么使用WSL?
- 通过
WSL
,开发者可以在Windows
环境中使用Linux
的开发工具、命令行界面和应用程序,从而能够轻松地在一个系统中同时享受Windows和Linux的优势。
这对于开发人员、系统管理员和其他需要在不同操作系统之间工作的用户来说,都是一个强大的工具。
- "开发者可以直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。" ---- 官网 Slogan
注:在windows中的Linux不能使用桌面GUI,但能跑大部分的GUI程序。
基于WSL技术的应用
-
Docker Desktop
-
实际使用中我们可以下载多个Linux系统的发行版,比如Ubuntu,Debian等,可以安装的发行版:
Windows的WSL技术与Hyper-V的区别
WSL
-
WSL
(Windows Subsystem for Linux)和Hyper-V
都是Windows
操作系统中用于支持虚拟化和运行不同操作系统的技术,但它们有着不同的作用和用途。 -
WSL 作用:
1)WSL 允许在 Windows 系统上运行 Linux 发行版,如 Ubuntu、Fedora 等,提供了对 Linux 命令行工具和应用程序的支持。
2)用户可以通过 WSL 在 Windows 上访问 Linux 的文件系统、运行命令行工具,并且在 Windows 上开发和运行基于 Linux 的应用程序。 -
WSL 特点:
1)WSL 提供了与 Windows 操作系统集成良好的体验,允许在 Windows 上直接访问 Linux 的功能,如文件系统、网络等。
2)WSL 1 是一个将 Linux 系统调用翻译为 Windows 系统调用的子系统。
3)WSL 2 使用了虚拟化技术,具有更高的性能和更好的兼容性,实际运行了一个轻量级的 Linux 内核。
Hyper-V
- Hyper-V 作用
1)Hyper-V 是 Windows 上的一种虚拟化平台,允许用户在 Windows 操作系统上创建和管理虚拟机(VM),并在这些虚拟机中运行其他操作系统,如 Windows、Linux 等。
2)它提供了对虚拟机的管理、资源分配和网络配置等功能,可以满足企业级和个人用户的虚拟化需求。
控制面板-程序-程序和功能-启用或关闭 Windows 功能 - Hyper-V
Hyper-V 管理器
- Hyper-V特点:
1)Hyper-V 是一种完整的虚拟化解决方案,提供了与 Windows 操作系统集成的管理工具和功能。
2)它支持硬件辅助虚拟化技术,可以提供更高的性能和更好的隔离。
区别
-
WSL
主要用于在 Windows 上运行 Linux 应用程序和命令行工具,提供了一种更直接的方式访问 Linux 功能。 -
Hyper-V
则是一个完整的虚拟化平台,允许用户创建和管理多个虚拟机,并在其中运行各种操作系统,提供了更广泛的虚拟化功能和管理。 -
总体而言,
WSL
主要用于在 Windows 上与 Linux 进行交互,而Hyper-V
则是一个更为通用的虚拟化平台,用于在 Windows 上运行各种操作系统的虚拟机。 -
典型应用:Docker Desktop (WSL + Hyper-V,两种技术均有结合使用)
WSL 使用指南
即:怎么使用WSL?
- WSL官方文档:适用于 Linux 的 Windows 子系统文档,包括概述、安装、教程、概念、操作说明、常见问题解答、疑难解答和发行说明。
基本上所有问题都可以在左边的红色方框中搜索到。
- Microsoft WSL
安装 WSL
Step0 准备工作
- Step0.1 启用虚拟机平台功能
方式1: 以管理员权限打开
PowerShell
,执行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestar
或 执行: Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
若完成后问你是否要重新启动:则必须重启才能生效
方式2: 界面操作:
控制面板-程序-启用或关闭Windows功能-[√]虚拟机平台
- Step0.1 启用适用于 Linux 的 Windows 子系统功能
方式1: 以管理员权限打开
PowerShell
,执行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
或 执行: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
若完成后问你是否要重新启动:则必须重启才能生效
方式2: 界面操作:
控制面板-程序-启用或关闭Windows功能-[√]虚拟机平台
Step1 下载 Linux 内核更新包
-
Linux
内核更新包会安装最新版本的WSL 2 Linux
内核,以便在 Windows 操作系统映像中运行WSL
。
(若要运行 Microsoft Store 中的 WSL 并更频繁地推送更新,请使用wsl.exe --install
或wsl.exe --update
。) -
在使用
WSL2
之前,得下载Linux内核更新包,下载完成后打开运行即可
等效于执行:
wsl --update
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
Step2 将 WSL 2 设置为默认版本
- 默认启用
WSL2
版本,而不是WSL1
,需要在powershell
里输入命令:
PS C:\Windows\system32> wsl --set-default-version 2
有关与 WSL 2 的主要区别的信息,请访问 https://aka.ms/wsl2
操作成功完成。
如果您的系统中没有安装
WSL 2
内核,则会自动下载并安装(win10同样)
- 更新WSL / 如果 WSL 2 内核更新失败,您可以尝试手动更新
wsl --update
Step3 安装所选的 Linux 发行版
- 方式1:打开 Microsoft Store,并选择你偏好的 Linux 发行版,并下载
单击以下链接会打开每个分发版的 Microsoft Store 页面:
各发行版的链接,参见: https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
- Ubuntu 22.04 LTS
- openSUSE Leap 15.1
- SUSE Linux Enterprise Server 12 SP5
- SUSE Linux Enterprise Server 15 SP1
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Pengwin Enterprise
- Alpine WSL
- Raft(免费试用版)
- Alma Linux
在分发版的页面中,选择“获取”
首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。
然后,需要为新的 Linux 分发版创建用户帐户和密码。
祝贺你! 现已成功安装并设置了与 Windows 操作系统完全集成的 Linux 分发!
- 方式2:命令行下载。下载所需要的
Linux
发行版,使用命令wsl -l -o
或wsl --list --online
,查看我们可以安装的发行版
PS C:\Windows\system32> wsl --list --online
以下是可安装的有效分发的列表。
请使用“wsl --install -d <分发>”安装。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.6 openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed openSUSE Tumbleweed
PS C:\Windows\system32>
在想好我们需要的发行版后,即可在
powershell
中运行命令(比如博主下载Kali-Linux的命令为(注意大小写):
//wsl --install -d Ubuntu-24.04
wsl --install -d Kali-Linux
格式:
wsl --install -d <发行版>
Step2 配置Linux发行版
下载完成后会出现如下设置用户信息的画面:
设置过程中会让我们填写密码(在输入过程中是不可见的),填写完成后如下:
接下来就可以畅快的耍Linux啦
WSL 帮助手册(--help
)
PS C:\Windows\system32> wsl --help
版权所有(c) Microsoft Corporation。保留所有权利。
用法: wsl.exe [Argument] [Options...] [CommandLine]
运行 Linux 二进制文件的参数:
如果未提供命令行,wsl.exe 将启动默认 shell。
--exec, -e <CommandLine>
在不使用默认 Linux Shell 的情况下执行指定的命令。
--
按原样传递其余命令行。
选项:
--cd <Directory>
将指定目录设置为当前工作目录。
如果使用了 ~,则将使用 Linux 用户的主页路径。如果路径
以 / 字符开头,将被解释为绝对 Linux 路径。
否则,该值一定是绝对 Windows 路径。
--distribution, -d <Distro>
运行指定分发。
--user, -u <UserName>
以指定用户身份运行。
管理适用于 Linux 的 Windows 子系统的参数:
--help
显示用法信息。
--install [选项]
安装额外的适用于 Linux 的 Windows 子系统分发。
要获得有效分发列表,请使用“wsl --list --online”。
选项:
--distribution, -d [参数]
按名称下载并安装分发。
参数:
有效分发名称(不区分大小写)。
示例:
wsl --install -d Ubuntu
wsl --install --distribution Debian
--set-default-version <Version>
更改新分发的默认安装版本。
--shutdown
立即终止所有运行的分发及 WSL 2
轻型实用工具虚拟机。
--status
显示适用于 Linux 的 Windows 子系统的状态。
--update [Options]
如果未指定任何选项,则将 WSL 2 内核更新
为最新版本。
选项:
--rollback
恢复为 WSL 2 内核的先前版本。
--inbox
仅更新收件箱 WSL 2 内核。不要从 Microsoft Store 下载 WSL。
--web-download
从 Internet 而不是 Microsoft Store 下载最新版本的 WSL。
用于管理适用于 Linux 的 Windows 子系统中的分发的参数:
--export <Distro> <FileName>
将分发导出到 tar 文件。
对于标准输出,文件名可以是 -。
--import <Distro> <InstallLocation> <FileName> [Options]
将指定的 tar 文件作为新分发导入。
对于标准输入,文件名可以是 -。
选项:
--version <Version>
指定要用于新分发的版本。
--list, -l [Options]
列出分发。
选项:
--all
列出所有分发,包括
当前正在安装或卸载的分发。
--running
仅列出当前正在运行的分发。
--quiet, -q
仅显示分发名称。
--verbose, -v
显示所有分发的详细信息。
--online, -o
显示使用“wsl --install”进行安装的可用分发列表。
--set-default, -s <分发>
将分发设置为默认值。
--set-version <分发> <版本>
更改指定分发的版本。
--terminate, -t <分发>
终止指定的分发。
--unregister <分发>
注销分发并删除根文件系统。
PS C:\Windows\system32>
WSL 常用命令
- 检查 WSL 状态
wsl --status
eg:
PS C:\Windows\system32> wsl --status
默认版本:2
适用于 Linux 的 Windows 子系统最后更新于 2025/1/1
适用于 Linux 的 Windows 子系统内核可以使用“wsl --update”手动更新,但由于你的系统设置,无法进行自动更新。
若要接收自动内核更新,请启用 Windows 更新设置:“在更新 Windows 时接收其他 Microsoft 产品的更新”。
有关详细信息,请访问https://aka.ms/wsl2kernel。
内核版本: 5.10.16
PS C:\Windows\system32>
- 进入默认的发行版本,退出执行 exit
wsl
eg:
PS C:\Windows\system32> wsl
适用于 Linux 的 Windows 子系统没有已安装的分发版。
可以通过访问 Microsoft Store 来安装分发版:
https://aka.ms/wslstore
- 列出可用 Linux 发行版
wsl -l -o
wsl --list --online
- 列出已安装的 Linux 发行版
wsl -l -v
wsl --list --verbose
eg:
PS C:\Windows\system32> wsl --list -v
适用于 Linux 的 Windows 子系统没有已安装的分发版。
可以通过访问 Microsoft Store 来安装分发版:
https://aka.ms/wslstore
- 终止指定的发行版或阻止其运行
wsl --terminate {Linux发行版}
例:
wsl --terminate Ubuntu-18.04
- 关闭 WSL 服务 / 关闭所有WSL实例
wsl --shutdown
- 启动WSL服务
net start LxssManager # 启动WSL服务(在旧版Windows上可能需要)
# 或在较新的Windows版本上,直接重新启动计算机
- 设置默认 Linux 发行版
wsl --set-default <Distribution Name>
- 将 Linux 发行版 WSL 内核设置为 1 或 2
wsl --set-version <distribution name> <versionNumber>
- 将WSL版本设置为1或2
wsl --set-version <Distribution Name>
wsl --set-version <Distribution Name>
- 安装特定的Linux发行版
wsl --install --distribution <Distribution Name>
- 运行特定的Linux发行版
wsl --distribution <Distribution Name> --user <User Name>
- 将发行版导出到 Tar 包
wsl --export <Distribution Name> <FileName>
- 导入新发行版
wsl --import <Distribution Name> <InstallLocation> <FileName>
- 注销并卸载 Linux 发行版
wsl --unregister <DistributionName>
- 修改发行版默认用户
//方式1 未亲测
<DistributionName> config --default-user <Username>
//方式2 未亲测
wsl config --default-user //更改发行版的默认用户
卸载WSL
- 通过 Windows 功能卸载 WSL:
- 打开“控制面板” > “程序” > “启用或关闭 Windows 功能”。
- 取消勾选“适用于 Linux 的 Windows 子系统”。
- 点击“确定”并重启计算机。
这将卸载 WSL 及其所有已安装的 Linux 发行版。
但是,请注意,这不会删除 Linux 发行版的根文件系统文件(这些文件通常位于 %LOCALAPPDATA%\Packages\ 下的相应目录中),你可能需要手动删除它们。
- 手动删除 Linux 发行版:
- 如果你只想删除特定的 Linux 发行版而不是整个 WSL,你可以使用 wsl --unregister <distribution_name> 命令。
- 然后,你可以手动删除位于 %LOCALAPPDATA%\Packages\ 下的相应 Linux 发行版的文件夹,通常文件夹名包含linux。
- 重置 WSL:
如果你只是想重置 WSL 而不是完全卸载它,你可以尝试使用
wsl --set-default-version 2
(或 1,取决于你的需求)来更改默认版本,然后重新启动计算机。
但是,请注意,这不会删除任何 Linux 发行版或数据。
FAQ for WSL
Q: 参考的对象类型不支持尝试的操作
-
问题描述
-
原因分析:
- 如果
Winsock LSP DLL
被加载到其进程中,则wsl.exe
将显示此错误。
- 解决方法1
最简单的解决方案:对
wsl.exe
使用WSCSetApplicationCategory WinAPI
调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog
中为wsl.exe
创建一个条目。
这将告诉Windows
不要将LSP DLL
加载到wsl.exe
进程中
- 解决方法2:重置网络
- 执行命令:
net winsock reset
- 重启电脑
- 参考文献
Q:执行命令wsl,提示"系统找不到指定的路径。"
-
原因分析
如果出现“系统找不到指定的文件”的提示,是因为之前安装的没有卸载的原因。 -
解决方法1:使用命令卸载和安装指定发现版本
- 命令:
wsl -l -v
查看已安装的发行版本和默认版本信息- 命令:
wsl --unregister Ubuntu-18.04
卸载名为“Ubuntu-18.04”的发行版本- 使用powerShell执行安装命令:
Add-AppxPackage C:\wslApps\Ubuntu_1804.2019.522.0_x64.appx
Add-AppxPackage C:\wslApps\Ubuntu_2204.1.7.0_x64.appx
注:如果安装完后执行
wsl -l -v
提示“没有可用发行版本”,可用方法二安装
- 解决方法2:解压 *.appx 文件安装
- 将文件Ubuntu_1804.2019.522.0_x64.appx后缀改为.zip
- 解压Ubuntu_1804.2019.522.0_x64.zip文件
- 直接双击运行.\Ubuntu_1804.2019.522.0_x64\ubuntu1804.exe文件
- 首次运行需要创建用户名、密码(都填test)
- 再次执行
wsl
,可以顺利进入ubuntu系统- 执行exist可退出子系统
Y 推荐文献
- Microsoft WSL
X 参考文献
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!