[Windows/虚拟化/OS] WSL(Windows Subsystem for Linux)技术

概述:WSL

什么是WSL?

  • WSL代表“Windows Subsystem for Linux”,是一种由Microsoft开发的技术,允许在Windows操作系统上运行Linux发行版(如UbuntuDebianFedora等)。

  • WSL的目标是在Windows环境中提供原生的Linux兼容性,让开发者能够在Windows系统上进行Linux开发,无需创建虚拟机或者双重引导系统

简单理解:在windows上运行linux,又不需要用到虚拟机。

WSL的细分版本及区别

  • WSL提供了两个主要版本:WSL 1和WSL 2。

WSL1 vs. WSL2 (官网的对比)

  1. WSL 1:这是WSL初始版本,它使用轻量级的虚拟机技术,通过模拟Linux系统调用来实现Linux应用程序在Windows上的运行。尽管它提供了一定的兼容性,但由于一些性能和功能限制,如文件系统性能不佳和不能运行Docker等问题,Microsoft在后来推出了WSL 2

  2. WSL 2:这是WSL升级版本,采用了更先进的虚拟化技术,包括Hyper-V虚拟机WSL 2Windows主机系统和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 --installwsl.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 -owsl --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 参考文献

posted @ 2025-01-02 00:47  千千寰宇  阅读(39)  评论(0编辑  收藏  举报