mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1165 字
3 分钟
WSL Docs
2026-03-02

WSL Docs#

安装#

Windows 11 内置了 wsl.exe,可以在 shell 中直接调用

Terminal window
# 查看帮助信息
wsl --help
# 查看当前有效的分发列表
wsl --list --online
# 安装发行版
wsl --install -d Ubuntu-24.04

基本操作#

wsl basic commands

Terminal window
# 关机
wsl --shutdown
# 查看版本
wsl --version

wslconfig#

官方文档

默认情况下,通过 wsl 安装的是 WSL2,WSL(或者说 WSL1 已经停止维护)。.wslconfig 即为 WSL2 使用的配置文件。

.wslconfig 默认情况下不存在,需手动在 C:\Users\<UserName> 下新建一个。

WARNING

修改配置后,必须关闭 wsl 然后重启才能生效

主要配置项#

官方文档

WSL 网络#

NAT(默认)#

默认情况下,WSL 使用基于 NAT(网络地址转换)的网络体系结构。按照 官方文档 的描述,从 Windows 访问 WSL 应用,居然是访问 localhost??这太他妈迷惑了。

而从 WSL 访问 Windows,按照 WSL 的网络结构,显然可以通过 Windows 的 IP 地址访问,但也可以通过 ip route show | grep -i default | awk '{ print $3}' 获取的 IP 进行访问,而且这个 IP 和 Windows 真正的局域网 IP 并不一致。

镜像(推荐)#

TIP

官方现在有图形化界面,直接在网络模块中设置为 Mirrored 即可。

Windows 22H2 以后支持一种更加优雅的网络解决方案:“镜像网络”。启用此功能会将 WSL 更改为全新的网络体系结构,其目标是将 Windows 上的网络接口“镜像”到 wsl 中,以添加新的网络功能并提高兼容性。

开启该模式需要在 .wslconfig 中配置:

[wsl2]
networkingMode = mirrored

然后使用管理员权限在 PowerShell 窗口中运行以下命令,以 配置 Hyper-V 防火墙 设置,从而允许入站连接:

Terminal window
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

或者

Terminal window
New-NetFirewallHyperVRule -Name "MyWebServer" -DisplayName "My Web Server" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 80

WSL 存储#

TIP

尽量不要在 WSL 里去频繁跨系统读写 Windows 磁盘中的内容!速度相对而言非常慢

Windows 中的磁盘,即 C/D/... 等磁盘,在 WSL 中以挂载形式呈现,即 /mnt/c,d... 等。此外,你可以在 Windows 的文件资源管理器中看到 WSL 的存储位置。但是,这一切都是通过网络连接的,而一张千兆网卡的速度也就是 100MB/s 左右。所以你会看到,一张 pice4.0 顺序读写 7000 MB/s 的磁盘,从磁盘写入 WSL 的速度只有可怜的 100 MB/s。只能说方便的代价就是极度的性能损失。

FAQ#

应该使用 WSL 吗?#

  • 如果只是为了包管理器,scoop 足矣
  • 如果写轻量项目,Windows 也完全足够
  • 但如果有 Linux 的专属需求,例如 python 深度学习的某个包不支持 Windows,那不妨来试试 WSL,确实挺好用

代理#

使用 WSL2 时,可能会遇到报错:

wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。

在 WSL1 时代,由于 Linux 子系统和 Windows 共享了网络端口,所以访问 Windows 的代理非常简单。例如 Windows 的代理客户端监听了 8000 端口,那么只需要在 Linux 子系统中执行如下命令,就可以让当前 session 中的请求通过代理访问互联网。

export ALL_PROXY="http://127.0.0.1:8000"

但是 WSL2 基于 Hyper-V 运行,导致 Linux 子系统和 Windows 在网络上是两台各自独立的计算机,从 Linux 子系统访问 Windows 首先需要找到 Windows 的 IP。

所以解决该问题,可以在 .wslconfig 中关闭自动代理。注意,按照微软 官方文档 的最新版,autoProxy 已经不再属于实验性设置 [experimental],而是属于主要设置 [wsl2]

[wsl2]
# 在该节下新增配置
autoProxy = false

当然,你也可以按照 issue 让自动代理正常工作,而不是关闭。

nvidia 驱动与 cuda 问题#

如果 windows 主系统中已安装了 nvidia 驱动,ubuntu 中不要再额外安装了,可以直接通过 nvidia-smi 查看。

移动 WSL#

TIP

2026.03.02 更新:wsl --manage 可以直接移动发行版位置。在 --shutdown 后,直接通过 wsl --manage Ubuntu-24.04 --move "F:\wsl\ubuntu2404"

默认情况下,wsl 会安装在 C 盘。如果追求极致的稳定性,其实是不推荐移动的。但如果确实要移动,也有办法:

Terminal window
# 查看当前子系统状态
wsl -l -v
# 需要先停止子系统运行
wsl --shutdown
# 导出子系统
wsl --export Ubuntu-20.04 D:\ubuntu20-04.tar

注意,这里导出的发行版名称严格与 wsl -l -v 的结果相对应,即:

NAME STATE VERSION
* Ubuntu-20.04 Exporting 2

完成上述操作后,原有子系统仍然存在,且导出目录下会多出一个对应的归档文件。接下来需要删除原有系统:

Terminal window
wsl --unregister Ubuntu-20.04

这一步完成后,原系统占据空间将被释放。然后导入归档文件:

Terminal window
# --import 发行版 安装位置 文件名 [选项]
wsl --import Ubuntu-20.04 D:\Ubuntu-20.04-wsl D:\ubuntu20-04.tar --version 2

重新安装子系统后,默认登录用户会重置为 root,所以还需要修改默认登录用户:

Terminal window
ubuntu2004.exe config --default-user root
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

WSL Docs
https://blog.085404.xyz/posts/wsl-docs/
作者
sun2ot
发布于
2026-03-02
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00