一、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的版本。
或者使用命令 winver 查看:
启用适用于 Linux 的 Windows 子系统
在 powerShell 中以管理员身份运行下面命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
启用虚拟机功能
在 powerShell 中以管理员身份运行下面命令:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
运行完成之后,请重启电脑完成安装。
安装Linux内核更新包
下载更新包并安装:适用于 x64 计算机的 WSL2 Linux 内核更新包
设置 WSL 发行版
如果想要将默认的WSL发行版设置成 WSL2,在 powerShell 中使用下面命令
wsl --set-default-version 2
如果想要设置某一个发行版为WSL2,在 powerShell 中使用下面命令,将 换成你想要设置的发行版即可,例如 Ubuntu-18.04
wsl --set-version <Distro> 2
验证使用的WSL版本
wsl -l -v
安装WSL2的详细步骤可以参考官方文档:WSL 2 的安装说明
四、WSL命令行工具
WSL所有支持的命令如下:
C:\WINDOWS\system32>wsl --help版权所有 (c) Microsoft Corporation。保留所有权利。用法: wsl.exe [参数] [选项...] [命令行]用于运行 Linux 二进制文件的参数:如果未提供命令行,wsl.exe 将启动默认的 shell。--exec, -e <命令行>执行指定的命令而不使用默认的 Linux shell。--按原样传递剩余的命令行。选项:--distribution, -d <分发版>运行指定的分发。--user, -u <用户名>以指定用户身份运行。用于管理适用于 Linux 的 Windows 子系统的参数:--export <分发版> <文件名>将分发导出到 tar 文件。对于标准输出,文件名可以是 -。--import <分发版> <安装位置> <文件名> [选项]将指定的 tar 文件作为新分发进行导入。对于标准输入,文件名可以是 -。选项:--version <版本>指定用于新分发的版本。--list, -l [选项]列出分发。选项:--all列出所有分发,包括当前正在安装或卸载的分发。--running只列出当前正在运行的分发。--quiet, -q只显示分发名称。--verbose, -v显示有关所有分发的详细信息。--set-default, -s <分发版>将分发设置为默认值。--set-default-version <版本>更改新分发的默认安装版本。--set-version <分发版> <版本>更改指定分发的版本。--shutdown立即终止所有正在运行的分发和 WSL 2 轻型工具虚拟机。--terminate, -t <分发版>终止指定的分发。--unregister <分发版>注销分发。--help显示用法信息。
wslconfig所有支持的命令如下:
C:\WINDOWS\system32>wslconfig在适用于 Linux 的 Windows 子系统上执行管理操作用法:/l, /list [Option]列出已注册的分发。/all - 可选择列出所有分发,包括当前正在安装或卸载的分发。/running - 只列出当前正在运行的分发。/s, /setdefault <DistributionName>将分发设置为默认值。/t, /terminate <DistributionName>终止分发。/u, /unregister <DistributionName>注销分发。
查看WSL列表
格式:
# 列出已注册分发wsl -l, --listwslconfig /l, /list# 列出所有分发,包括当前正在安装或卸载的分发wslconfig /l /allwsl -l --all# 仅列出当前正在运行的分发wslconfig /l /runningwsl -l --running# 查看列表及其WSL版本wsl -l -v
示例1:
PS C:\WINDOWS\system32> wslconfig /l适用于 Linux 的 Windows 子系统:centos (默认)ubuntu
示例2:
C:\WINDOWS\system32>wsl -l -vNAME STATE VERSION* Ubuntu Running 2docker-desktop Running 2docker-desktop-data Running 2kali-linux Stopped 2
进入指定的WSL
格式:
wsl, bash # 进入默认WSL环境wsl --distribution, -d <DistributionName> # 运行指定的分发wsl --user, -u <UserName> # 以指定用户身份运行
示例:
wslbashwsl -d ubuntuwsl -d ubuntu -u root
进入WSL后,使用 exit 命令退出WSL。
卸载指定的WSL
格式:
# 注销分发wslconfig /u, /unregister <DistributionName>wsl --unregister <DistributionName>
示例:
wslconfig /u ubuntuwsl --unregister ubuntu
将分发设置为默认值
格式:
wsl -setdefault, -s <DistributionName>wslconfig /s, /setdefault <DistributionName>
将默认版本设置为WSL2:
wsl --set-default-version 2
将指定分发设置为默认版本:
wsl -s ubuntu
将指定分发设置为WSL2:
wsl --set-version ubuntu 2
查看所有分发的版本:
$ wsl -l -vNAME STATE VERSION* ubuntu Stopped 1centos Stopped 1
如果在设置分支的时候报以下错误:
WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel
可以到下面链接下载内核更新包安装即可成功升级:更新 WSL 2 Linux 内核
五、常见问题解决方案
0x800701bc
错误详情:
Installing, this may take a few minutes...WslRegisterDistribution failed with error: 0x800701bcError: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernelPress any key to continue...
解决方案:下载内核更新包并安装
此问题可以参考官方的讨论连接:[https://github.com/microsoft/WSL/issues/5393](https://github.com/microsoft/WSL/issues/5393)
0x80370102
错误详情:
WslRegisterDistribution failed with error:0x80370102Error:0x80370102 The virtual machine could not be started because a required feature is not installed.Press any key to continue...
首先检查是否某个Windows组件没有正确开启,使用以下命令开启:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -AllEnable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatformEnable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linuxbcdedit /set hypervisorlaunchtype auto
如果设置了默认的WSL版本为2,也可能出现此问题,解决方案为先将默认版本设置为1:
wsl --set-default-version 1
然后再卸载从Windows应用商店安装的WSL发行版,重启电脑后,再重新从Windows应用商店安装此发行版,安装成功后,再切换到WSL2:
# 先切换为WSL1wsl --set-default-version 1# 卸载出问题的WSL发行版wsl --unregister Ubuntu# 重启后,重新从Windows应用商店安装# 安装完成后,将此发行版切换为WSL2wsl --set-version Ubuntu 2
