一、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, --list
wslconfig /l, /list
# 列出所有分发,包括当前正在安装或卸载的分发
wslconfig /l /all
wsl -l --all
# 仅列出当前正在运行的分发
wslconfig /l /running
wsl -l --running
# 查看列表及其WSL版本
wsl -l -v
示例1:
PS C:\WINDOWS\system32> wslconfig /l
适用于 Linux 的 Windows 子系统:
centos (默认)
ubuntu
示例2:
C:\WINDOWS\system32>wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Running 2
docker-desktop-data Running 2
kali-linux Stopped 2
进入指定的WSL
格式:
wsl, bash # 进入默认WSL环境
wsl --distribution, -d <DistributionName> # 运行指定的分发
wsl --user, -u <UserName> # 以指定用户身份运行
示例:
wsl
bash
wsl -d ubuntu
wsl -d ubuntu -u root
进入WSL后,使用 exit
命令退出WSL。
卸载指定的WSL
格式:
# 注销分发
wslconfig /u, /unregister <DistributionName>
wsl --unregister <DistributionName>
示例:
wslconfig /u ubuntu
wsl --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 -v
NAME STATE VERSION
* ubuntu Stopped 1
centos Stopped 1
如果在设置分支的时候报以下错误:
WSL 2 需要更新其内核组件。有关信息,请访问 https://aka.ms/wsl2kernel
可以到下面链接下载内核更新包安装即可成功升级:更新 WSL 2 Linux 内核
五、常见问题解决方案
0x800701bc
错误详情:
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
Press any key to continue...
解决方案:下载内核更新包并安装
此问题可以参考官方的讨论连接:[https://github.com/microsoft/WSL/issues/5393](https://github.com/microsoft/WSL/issues/5393)
0x80370102
错误详情:
WslRegisterDistribution failed with error:0x80370102
Error: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 -All
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
bcdedit /set hypervisorlaunchtype auto
如果设置了默认的WSL版本为2,也可能出现此问题,解决方案为先将默认版本设置为1:
wsl --set-default-version 1
然后再卸载从Windows应用商店安装的WSL发行版,重启电脑后,再重新从Windows应用商店安装此发行版,安装成功后,再切换到WSL2:
# 先切换为WSL1
wsl --set-default-version 1
# 卸载出问题的WSL发行版
wsl --unregister Ubuntu
# 重启后,重新从Windows应用商店安装
# 安装完成后,将此发行版切换为WSL2
wsl --set-version Ubuntu 2