一、WSL简介

WSL,全称Windows Subsystem for Linux,中文名为 适用于 Linux 的 Windows 子系统,WSL可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。

在WSL中可以做以下工作:

  • 在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。
  • 运行常用的命令行软件工具(例如 grep、sed、awk)或其他 ELF-64 二进制文件。
  • 运行 Bash shell 脚本和 GNU/Linux 命令行应用程序,包括:
    • 工具:vim、emacs、tmux 等。
    • 语言:NodeJS、Javascript、Python、Ruby、C/ C++、C# 与 F#、Rust、Go 等。
    • 服务:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQL。
  • 使用自己的 GNU/Linux 分发包管理器安装其他软件。
  • 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
  • 在 Windows 上调用 GNU/Linux 应用程序。

二、WSL2简介

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 内核。

三、安装WSL2

官方文档:https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

WSL2 仅在 Windows 10 18917 或更高版本中可用,如果版本太低,可以加入 Windows Insider 升级 Windows ,我们可以在 cmd 中使用 ver 来检查当前 win的版本。
📃 WSL介绍及安装 - 图1
或者使用命令 winver 查看:
📃 WSL介绍及安装 - 图2

启用适用于 Linux 的 Windows 子系统

在 powerShell 中以管理员身份运行下面命令:

  1. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

启用虚拟机功能

在 powerShell 中以管理员身份运行下面命令:

  1. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

运行完成之后,请重启电脑完成安装。

安装Linux内核更新包

下载更新包并安装:适用于 x64 计算机的 WSL2 Linux 内核更新包

设置 WSL 发行版

如果想要将默认的WSL发行版设置成 WSL2,在 powerShell 中使用下面命令

  1. wsl --set-default-version 2

如果想要设置某一个发行版为WSL2,在 powerShell 中使用下面命令,将 换成你想要设置的发行版即可,例如 Ubuntu-18.04

  1. wsl --set-version <Distro> 2

验证使用的WSL版本

  1. wsl -l -v

安装WSL2的详细步骤可以参考官方文档:WSL 2 的安装说明

四、WSL命令行工具

WSL所有支持的命令如下:

  1. C:\WINDOWS\system32>wsl --help
  2. 版权所有 (c) Microsoft Corporation。保留所有权利。
  3. 用法: wsl.exe [参数] [选项...] [命令行]
  4. 用于运行 Linux 二进制文件的参数:
  5. 如果未提供命令行,wsl.exe 将启动默认的 shell
  6. --exec, -e <命令行>
  7. 执行指定的命令而不使用默认的 Linux shell
  8. --
  9. 按原样传递剩余的命令行。
  10. 选项:
  11. --distribution, -d <分发版>
  12. 运行指定的分发。
  13. --user, -u <用户名>
  14. 以指定用户身份运行。
  15. 用于管理适用于 Linux Windows 子系统的参数:
  16. --export <分发版> <文件名>
  17. 将分发导出到 tar 文件。
  18. 对于标准输出,文件名可以是 -。
  19. --import <分发版> <安装位置> <文件名> [选项]
  20. 将指定的 tar 文件作为新分发进行导入。
  21. 对于标准输入,文件名可以是 -。
  22. 选项:
  23. --version <版本>
  24. 指定用于新分发的版本。
  25. --list, -l [选项]
  26. 列出分发。
  27. 选项:
  28. --all
  29. 列出所有分发,包括当前正在
  30. 安装或卸载的分发。
  31. --running
  32. 只列出当前正在运行的分发。
  33. --quiet, -q
  34. 只显示分发名称。
  35. --verbose, -v
  36. 显示有关所有分发的详细信息。
  37. --set-default, -s <分发版>
  38. 将分发设置为默认值。
  39. --set-default-version <版本>
  40. 更改新分发的默认安装版本。
  41. --set-version <分发版> <版本>
  42. 更改指定分发的版本。
  43. --shutdown
  44. 立即终止所有正在运行的分发和 WSL 2 轻型工具虚拟机。
  45. --terminate, -t <分发版>
  46. 终止指定的分发。
  47. --unregister <分发版>
  48. 注销分发。
  49. --help
  50. 显示用法信息。

wslconfig所有支持的命令如下:

  1. C:\WINDOWS\system32>wslconfig
  2. 在适用于 Linux Windows 子系统上执行管理操作
  3. 用法:
  4. /l, /list [Option]
  5. 列出已注册的分发。
  6. /all - 可选择列出所有分发,包括当前正在
  7. 安装或卸载的分发。
  8. /running - 只列出当前正在运行的分发。
  9. /s, /setdefault <DistributionName>
  10. 将分发设置为默认值。
  11. /t, /terminate <DistributionName>
  12. 终止分发。
  13. /u, /unregister <DistributionName>
  14. 注销分发。

查看WSL列表

格式:

  1. # 列出已注册分发
  2. wsl -l, --list
  3. wslconfig /l, /list
  4. # 列出所有分发,包括当前正在安装或卸载的分发
  5. wslconfig /l /all
  6. wsl -l --all
  7. # 仅列出当前正在运行的分发
  8. wslconfig /l /running
  9. wsl -l --running
  10. # 查看列表及其WSL版本
  11. wsl -l -v

示例1:

  1. PS C:\WINDOWS\system32> wslconfig /l
  2. 适用于 Linux Windows 子系统:
  3. centos (默认)
  4. ubuntu

示例2:

  1. C:\WINDOWS\system32>wsl -l -v
  2. NAME STATE VERSION
  3. * Ubuntu Running 2
  4. docker-desktop Running 2
  5. docker-desktop-data Running 2
  6. kali-linux Stopped 2

进入指定的WSL

格式:

  1. wsl, bash # 进入默认WSL环境
  2. wsl --distribution, -d <DistributionName> # 运行指定的分发
  3. wsl --user, -u <UserName> # 以指定用户身份运行

示例:

  1. wsl
  2. bash
  3. wsl -d ubuntu
  4. wsl -d ubuntu -u root

进入WSL后,使用 exit 命令退出WSL。

卸载指定的WSL

格式:

  1. # 注销分发
  2. wslconfig /u, /unregister <DistributionName>
  3. wsl --unregister <DistributionName>

示例:

  1. wslconfig /u ubuntu
  2. wsl --unregister ubuntu

将分发设置为默认值

格式:

  1. wsl -setdefault, -s <DistributionName>
  2. wslconfig /s, /setdefault <DistributionName>

将默认版本设置为WSL2:

  1. wsl --set-default-version 2

将指定分发设置为默认版本:

  1. wsl -s ubuntu

将指定分发设置为WSL2:

  1. wsl --set-version ubuntu 2

查看所有分发的版本:

  1. $ wsl -l -v
  2. NAME STATE VERSION
  3. * ubuntu Stopped 1
  4. centos Stopped 1

如果在设置分支的时候报以下错误:

  1. WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel

可以到下面链接下载内核更新包安装即可成功升级:更新 WSL 2 Linux 内核

五、常见问题解决方案

0x800701bc

错误详情:

  1. Installing, this may take a few minutes...
  2. WslRegisterDistribution failed with error: 0x800701bc
  3. Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
  4. Press any key to continue...

解决方案:下载内核更新包并安装

此问题可以参考官方的讨论连接:[https://github.com/microsoft/WSL/issues/5393](https://github.com/microsoft/WSL/issues/5393)

0x80370102

错误详情:

  1. WslRegisterDistribution failed with error:0x80370102
  2. Error:0x80370102 The virtual machine could not be started because a required feature is not installed.
  3. Press any key to continue...

首先检查是否某个Windows组件没有正确开启,使用以下命令开启:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
  2. Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
  3. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  4. bcdedit /set hypervisorlaunchtype auto

如果设置了默认的WSL版本为2,也可能出现此问题,解决方案为先将默认版本设置为1:

  1. wsl --set-default-version 1

然后再卸载从Windows应用商店安装的WSL发行版,重启电脑后,再重新从Windows应用商店安装此发行版,安装成功后,再切换到WSL2:

  1. # 先切换为WSL1
  2. wsl --set-default-version 1
  3. # 卸载出问题的WSL发行版
  4. wsl --unregister Ubuntu
  5. # 重启后,重新从Windows应用商店安装
  6. # 安装完成后,将此发行版切换为WSL2
  7. wsl --set-version Ubuntu 2