WSL Docs
安装
Windows 11 内置了 wsl.exe,可以在 shell 中直接调用
# 查看帮助信息wsl --help
# 查看当前有效的分发列表wsl --list --online
# 安装发行版wsl --install -d Ubuntu-24.04基本操作
# 关机wsl --shutdown
# 查看版本wsl --versionwslconfig
默认情况下,通过 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 防火墙 设置,从而允许入站连接:
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow或者
New-NetFirewallHyperVRule -Name "MyWebServer" -DisplayName "My Web Server" -Direction Inbound -VMCreatorId '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -Protocol TCP -LocalPorts 80WSL 存储
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
TIP2026.03.02 更新:wsl
--manage可以直接移动发行版位置。在--shutdown后,直接通过wsl --manage Ubuntu-24.04 --move "F:\wsl\ubuntu2404"
默认情况下,wsl 会安装在 C 盘。如果追求极致的稳定性,其实是不推荐移动的。但如果确实要移动,也有办法:
# 查看当前子系统状态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完成上述操作后,原有子系统仍然存在,且导出目录下会多出一个对应的归档文件。接下来需要删除原有系统:
wsl --unregister Ubuntu-20.04这一步完成后,原系统占据空间将被释放。然后导入归档文件:
# --import 发行版 安装位置 文件名 [选项]wsl --import Ubuntu-20.04 D:\Ubuntu-20.04-wsl D:\ubuntu20-04.tar --version 2重新安装子系统后,默认登录用户会重置为 root,所以还需要修改默认登录用户:
ubuntu2004.exe config --default-user root部分信息可能已经过时









