WSL
WSL 基础
WSL 概述
WSL:全称为 Windows Subsystem for Linux,这是微软官方开发的适用于 Linux 的 Windows 子系统,可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境,且不会产生传统虚拟机或双启动设置开销。 WSL2:具有 WSL1 的优点,但使用实际的 Linux 内核,因而性能更好。
WSL 有什么优势:
- VMware 等虚拟机软件资源消耗大、启动慢、运行效率低。
- WSL 几乎能运行完整的操作系统,资源消耗小、启动快、切换快
WSL 命令
基本命令
如果你打开了 PowerShell 窗口,并希望进入默认的 WSL Linux 发行版:
1
wsl
退出会带你回到 PowerShell。如果要运行特定的发行版:
1
wsl -d <发行名称>
要启动 Debian,命令将是
1
wsl -d debian
可以提到用于管理 WSL 的更有用的工具之一,帮助电话:
1
wsl --help
WSL 版本控制
- 要查看为每个已安装的 Linux 发行版分配了哪个 WSL 版本:
1
wsl --list --verbose 或 wsl -l -v
结果将显示哪个版本是默认的 wsl 发行版。如果只想知道安装了哪个发行版,请取消选中详细选项。
- 如果你想更进一步,并指定默认情况下将使用哪些已安装的发行版:
1
2
3
4
wsl --set-default 或 wsl -s
# 设置 WSL 2 为默认版本:
wsl --set-default-version 2
- 例如,如果要安装 Ubuntu 作为默认发行版:
1
wsl -s ubuntu
- 如果你已升级到 WSL2,并希望将其设置为默认值:
1
wsl --set-default-version 2
- 结果,将来的任何 Linux 安装都将使用 WSL2,但不会安装已经安装的 WSL 的第一个版本,此转换必须手动完成。更改链接到发行版的 WSL 版本:
1
wsl --set -version <发行名称>
- 例如,要将 Debian 更改为 WSL 2:
1
wsl --set -version Debian 2
如何用 WSL2 安装 Linux 发行版
检查是否支持安装?
WSL 需要电脑支持 Hyper-V 虚拟化,如何查看? 打开终端,cmd 或者 PowerShell 都可以,输入如下命令:
1
systeminfo
开启 Windows 的 WSL 支持
方式 1:图形化
首先在 Win11 开始菜单搜索 “Windows 功能 “,打开 启动或关闭 Windows 功能
,勾选 Linux 子系统以及虚拟机平台 2 个选项。注意需要按照提示,重启电脑。
控制面板→程序→启动或关闭 Windows 功能:
方式 2:命令
- 以 管理员身份 打开 PowerShell 或 命令提示符 (CMD)。
- 执行以下命令来启用 WSL 功能:
1
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- 执行以下命令来启用虚拟机平台功能(WSL 2 需要):
1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- 重启电脑 以使更改生效。
安装在系统盘
- 自动安装到系统盘中
1
wsl --install # 此时会默认安装最新的Ubuntu发行版。
- 安装 ubuntu
1
wsl --install -d ubuntu
- 如果希望选择其他版本的 Linux 系统,可以通过如下命令查看:
1
wsl --list --online
如果要安装指定版本,可以采用如下命令:
1
wsl --install -d <发行版名称>
注意,上述步骤中,可能遇到 0x800701bc
错误,如下:
1
2
3
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
这时需要下载 wsl 升级包并安装:https://wslstorestorage.blob.core.windows.net
双击安装后,再重新执行上述指令就 OK 了。
此外,还可以通过如下指令,查看电脑装了哪些 Linux 系统,并进行卸载:
1
2
3
4
# 查看本机安装了哪些子系统:
wsl --list --all
# 卸载:
wsl --unregister <System_name>
安装在 D 盘
初次安装时我们可以直接选择安装在 D 盘。首先,需要将要安装的系统下载下来,这里以 Ubuntu20.04
为例,打开终端,输入如下指令:
1
2
3
4
5
6
7
8
9
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing
Rename-Item .\Ubuntu20.04.appx Ubuntu.zip
Expand-Archive .\Ubuntu.zip -Verbose
cd .\Ubuntu\
.\ubuntu2004.exe
根据要求设置用户名和密码即可。
后续如何打开和关闭系统呢:
1
2
3
4
5
# 打开
cd D:\linux\Ubuntu
.\ubuntu2004.exe
# 关闭
wsl --shutdown
wsl 迁出 C 盘
因为 wsl 默认将 Linux 安装在系统盘 C 盘,后续所有 Linux 系统上安装的软件和数据都会在 C 盘,你会发现你的 C 盘很快就爆了。所有非常有必要将它迁移到其他盘上:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1) 停止正在运行的wsl
wsl --shutdown
cd D:/
mkdir wsl
cd wsl
# 2)将需要迁移的Linux,进行导出
wsl --export Ubuntu D:/wsl/export.tar
# 3)导出完成之后,将原有的Linux卸载
wsl --unregister Ubuntu
# 4) 然后将导出的文件放到需要保存的地方,进行导入
wsl --import Ubuntu D:\wsl\ D:\wsl\export.tar --version 2
wsl 导入语法:
1
# 语法: wsl --import <新发行版名称> <安装位置> <导入文件路径>
<新发行版名称>
: 通常使用和原来一样的名字,如Ubuntu
。<安装位置>
: 这是 WSL 虚拟硬盘 (ext4.vhdx
) 实际存放的地方,我们指定为D:\wsl\
。<导入文件路径>
: 指向我们之前导出的export.tar
文件。
完成后,再次运行 wsl -l -v
,你会看到 Ubuntu 又回来了,并且它的文件系统现在完全位于 D 盘
登陆 Linux 安装软件
如何查看 IP 地址
报错
wsl: Unknown key ‘automount.crossDistro’ in /etc/wsl.conf:3
问题: 安装了 docker desktop 的 windows 系统,在开机后提示上述警告,EventView 里面会有让如下警告 启动 wsl,报错 wsl: Unknown key 'automount.crossDistro' in /etc/wsl.conf:3
in /etc/wsl.conf:3
中的:3 是文件 /etc/wsl.conf
第 3 行的意思,也有可能是别的数字,主要看 crossDistro
配置在第几行,因人而异
原因分析: automount.crossDistro
是一个出现在某些 WSL(Windows Subsystem for Linux)配置文件中的参数,目的是尝试让不同 Linux 发行版之间共享挂载的 Windows 驱动器。不过,它并不是官方支持的配置项。 在 /etc/wsl.conf
文件中,常见的 [automount]
配置段如下:
1
2
3
4
5
6
7
8
9
[automount]
root = /mnt/host
options = "metadata"
# 有些用户尝试添加 crossDistro = true 来实现跨发行版共享挂载路径,例如:
[automount]
root = /mnt/host
crossDistro = true
options = "metadata"
但根据 Microsoft 官方文档,crossDistro 并不是一个被支持的键,因此在某些版本中会报错:Unknown key ‘ automount.crossDistro
‘。这意味着该配置项并不会被识别或生效,可能是某些社区教程或早期测试版本中提到的非正式用法。
解决: 进入 Docker Desktop 的 WSL 环境: 打开 PowerShell 或 CMD,输入:
1
2
wsl -d docker-desktop
# 如果你看到提示 “This distro is not intended to be used directly”,可以忽略,它仍然允许你进入。
查找配置文件: 进入后,尝试查看 /etc/wsl.conf
是否存在:
1
cat /etc/wsl.conf
编辑配置文件(如果存在):
1
2
vi /etc/wsl.conf
# 如果你看到 crossDistro = true,可以将其注释掉或删除。
保存并退出,然后在 Windows 中执行:
1
wsl --shutdown