什么是 WSL2?
WSL2(Windows Subsystem for Linux 2)是微软在 Windows 中内置的 Linux 子系统。它不是虚拟机,也不是模拟器,而是在 Windows 内核中集成了一个真正的 Linux 内核。
与 WSL1 的转译层方案不同,WSL2 跑的是完整的 Linux 内核,拥有 100% 的系统调用兼容性。这意味着 Docker、systemd、strace 等在 WSL1 中无法运行的工具,在 WSL2 中都能正常工作。
为什么你需要 WSL2?
- 不需要双系统或虚拟机,打开终端就能用 Linux
- 与 Windows 文件系统无缝互通
- 原生支持 Docker、Node.js、Python 等开发工具链
- 启动速度快,资源占用少
- 微软官方维护,更新积极
一、安装 WSL2
1.1 系统要求
- Windows 10(版本 2004+,内部版本 19041 及以上)或 Windows 11
- 启用虚拟化功能(BIOS 中的 VT-x / AMD-V)
1.2 一键安装(推荐)
以管理员身份打开 PowerShell,执行:
wsl --install
这个命令会自动完成所有操作:启用「适用于 Linux 的 Windows 子系统」和「虚拟机平台」功能、下载 Linux 内核、安装 Ubuntu(默认发行版)。
安装完成后重启电脑。
重启后会自动弹出 Ubuntu 窗口,要求你设置用户名和密码。这个用户就是 Linux 系统的管理员用户(拥有 sudo 权限)。
1.3 安装其他发行版
查看可用的发行版:
wsl --list --online
安装指定发行版:
wsl --install -d Debian
wsl --install -d Arch
常用的发行版:Ubuntu(推荐新手)、Debian(稳定轻量)、Arch(滚动更新,适合进阶用户)。
1.4 确认 WSL 版本
wsl --version
输出类似:
WSL 版本: 2.6.3.0
内核版本: 6.6.87.2-microsoft-standard-WSL2
Windows 版本:10.0.26200.8246
确认默认使用 WSL2:
wsl --status
如果显示「默认版本: 1」,执行:
wsl --set-default-version 2
二、基础操作
2.1 启动与退出
# 启动默认发行版(进入 Linux Shell)
wsl
# 启动指定发行版
wsl -d Ubuntu-24.04
# 直接执行命令(不进入交互模式)
wsl ls -la /
wsl cat /etc/os-release
在 Linux Shell 中输入 exit 或按 Ctrl+D 退出。
2.2 多发行版管理
# 查看已安装的发行版及其状态
wsl -l -v
# 设置默认发行版
wsl --set-default Ubuntu-24.04
# 关闭指定发行版(释放内存)
wsl -t Debian
# 关闭所有发行版
wsl --shutdown
2.3 文件互访
从 Windows 访问 Linux 文件:
在资源管理器地址栏输入:
\\wsl$
或直接访问具体发行版:
\\wsl$\Ubuntu\home\feng
也可以在 Linux 中用 explorer.exe 打开:
explorer.exe .
从 Linux 访问 Windows 文件:
Windows 的 C 盘挂载在 /mnt/c/:
ls /mnt/c/Users/YA/Desktop/
2.4 性能提示:文件放在哪?
这是一个很多人忽略但非常重要的问题:
| 位置 | I/O 性能 | 说明 |
|---|---|---|
Linux 文件系统 (/home/...) | 快 | WSL2 原生 ext4,接近原生 Linux 速度 |
Windows 文件系统 (/mnt/c/...) | 慢 | 跨文件系统的 9P 协议转发,速度慢 3-5 倍 |
结论:在 WSL2 中做开发时,把项目代码放在 Linux 文件系统(/home/ 下),不要放在 /mnt/c/ 下。Git 操作、npm install 等在 Linux 文件系统上会快得多。
三、网络与代理配置
3.1 网络架构
WSL2 使用虚拟网卡(NAT 模式),和 Windows 主机不在同一个网段。Linux 通过 NAT 访问外网。
查看 Windows 宿主机 IP:
cat /etc/resolv.conf | grep nameserver
# 输出类似: nameserver 10.255.255.254
3.2 配置代理(配合 V2Ray / Clash)
如果你在 Windows 上使用了代理工具(V2Ray、Clash 等),WSL2 中的流量默认不会走代理。需要手动配置:
方法一:环境变量(适用于大部分工具)
在 ~/.bashrc 或 ~/.zshrc 中添加:
# 获取 Windows 宿主机 IP
WIN_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
export HTTP_PROXY="http://${WIN_IP}:10808"
export HTTPS_PROXY="http://${WIN_IP}:10808"
export NO_PROXY="localhost,127.0.0.1,.yaqh.com"
export http_proxy="$HTTP_PROXY"
export https_proxy="$HTTPS_PROXY"
export no_proxy="$NO_PROXY"
如果你的代理监听在 127.0.0.1(如 V2Ray 的 TUN 模式),直接用:
export HTTP_PROXY="http://127.0.0.1:10808"
export HTTPS_PROXY="http://127.0.0.1:10808"
方法二:代理工具开启 TUN 模式
V2RayN / Clash 的 TUN(虚拟网卡)模式可以接管所有网络流量,包括 WSL2 的流量。这是最省心的方案,但要注意路由规则:
- 国内域名走
direct(直连) - 国外域名走
proxy(代理) - 注意 IPv6 问题 -- 如果直连时解析到 IPv6 但 IPv6 不通,会导致连接失败
3.3 端口转发
WSL2 中的服务端口会自动转发到 Windows。比如你在 WSL2 中启动了一个 Web 服务:
python3 -m http.server 8000
在 Windows 浏览器中直接访问 http://localhost:8000 即可。这个自动转发在 WSL 2.6+ 中已经做得很好了,基本不需要手动配置。
四、进阶配置
4.1 启用 systemd
现代 Linux 发行版使用 systemd 管理服务(Docker、Nginx、Cron 等都依赖它)。WSL2 默认不启用 systemd,需要手动开启。
创建或编辑 /etc/wsl.conf:
[boot]
systemd=true
在 PowerShell 中重启 WSL:
wsl --shutdown
wsl
验证 systemd 是否启用:
systemctl list-unit-files --type=service | head
# 如果有输出,说明 systemd 已启用
启用 systemd 后,你可以像在真实 Linux 中一样使用 systemctl 管理服务:
# 启动 Docker
sudo systemctl start docker
# 设置开机自启
sudo systemctl enable docker
# 查看 Nginx 状态
systemctl status nginx
4.2 WSL 配置文件详解
/etc/wsl.conf -- Linux 侧配置:
[boot]
systemd=true
[interop]
enabled=true # 启用 Windows/Linux 互操作(如 explorer.exe)
appendWindowsPath=true # 将 Windows PATH 追加到 Linux PATH
[network]
generateResolvConf=true # 自动生成 /etc/resolv.conf
[user]
default=feng # 默认登录用户
%USERPROFILE%\.wslconfig -- Windows 侧配置(C:\Users\你的用户名.wslconfig):
[wsl2]
memory=8GB # 限制最大内存(默认占系统内存的一半)
processors=4 # 限制 CPU 核心数
swap=4GB # 交换空间大小
localhostForwarding=true # 端口转发
[experimental]
autoMemoryReclaim=gradual # 自动回收空闲内存
sparseVhd=true # 磁盘空间自动回收
4.3 运行 GUI 应用
WSL2 支持运行 Linux GUI 应用(WSLg),无需额外配置:
# 安装一个 GUI 应用试试
sudo apt install x11-apps
xeyes
# 安装 Firefox
sudo apt install firefox
firefox &
# 安装 VS Code 的 Linux 版
sudo apt install code
GUI 窗口会直接显示在 Windows 桌面上,就像原生 Windows 应用一样。
五、开发环境搭建
5.1 推荐的日常开发工具
# 更新系统
sudo apt update && sudo apt upgrade -y
# 基础工具
sudo apt install -y git curl wget vim build-essential
# Node.js(推荐用 nvm 管理版本)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install --lts
# Python(Ubuntu 24.04 自带 Python 3.12)
python3 --version
# Docker(启用 systemd 后)
sudo apt install -y docker.io
sudo usermod -aG docker $USER
# 重新登录后生效
5.2 VS Code 集成(强烈推荐)
在 WSL2 中安装 VS Code Server:
code .
第一次执行会自动下载 VS Code Server。之后 VS Code 会远程连接到 WSL2 环境,终端、文件浏览、调试全部在 Linux 中运行,体验和本地开发完全一致。
这种方式的好处:
- VS Code 运行在 Windows,但文件和终端在 Linux
- 兼得 Windows 的 GUI 体验和 Linux 的开发环境
- 扩展自动安装到 WSL2 侧
5.3 Git 配置
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.autocrlf input # 重要!Windows/Linux 换行符处理
六、常见问题排查
Q1:启动报错「参考的对象类型不支持尝试的操作」
# 以管理员身份运行
netsh winsock reset
netsh int ip reset all
# 重启电脑
Q2:DNS 解析失败,无法联网
# 手动设置 DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
# 防止 WSL 覆盖
sudo chattr +i /etc/resolv.conf
Q3:内存占用过高
WSL2 默认可以占用系统内存的 50%。在 C:\Users\你的用户名\.wslconfig 中限制:
[wsl2]
memory=4GB
修改后执行 wsl --shutdown 生效。
Q4:磁盘占用越来越大
WSL2 的虚拟磁盘文件(vhdx)只会增大不会自动缩小。清理方法:
# 先关闭 WSL
wsl --shutdown
# 压缩磁盘(在 PowerShell 中执行)
diskpart
select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu\LocalState\ext4.vhdx"
compact vdisk
exit
或者在 .wslconfig 中启用自动回收(WSL 2.0+):
[experimental]
sparseVhd=true
autoMemoryReclaim=gradual
Q5:Windows 和 Linux 文件权限不一致
跨文件系统时文件权限会出错(如 Git 提示文件被修改)。解决方法:
# 在 /etc/wsl.conf 中添加
[automount]
options="metadata,umask=22,fmask=11"
这会让 Windows 分区在 Linux 中正确显示文件权限。
Q6:代理配了但某些工具不走代理
不同工具读取代理变量的方式不同:
curl、wget:读取http_proxy/https_proxy(小写)git:git config --global http.proxy http://127.0.0.1:10808apt:需要单独配置/etc/apt/apt.conf.d/proxy.confdocker:配置~/.docker/config.json或 systemd 的环境变量
建议大小写都设置,覆盖最广。
七、备份与迁移
7.1 导出发行版
wsl --export Ubuntu D:\backup\ubuntu-backup.tar
7.2 导入发行版
wsl --import Ubuntu-Backup D:\wsl\backup D:\backup\ubuntu-backup.tar
7.3 注销(删除)发行版
# ⚠️ 这会永久删除该发行版的所有数据!
wsl --unregister Ubuntu
八、总结
WSL2 让 Windows 拥有了一个真正的 Linux 环境,对于开发者来说是极大的便利。核心建议:
- 项目代码放在 Linux 文件系统(
/home/下),不要放/mnt/c/ - 启用 systemd,让 Docker、Cron 等服务正常工作
- 配置好代理,解决国内网络问题
- 用 VS Code Remote 连接 WSL2 开发,体验最佳
- 定期清理磁盘,防止 vhdx 文件无限膨胀
掌握这些,你的 Windows 开发体验会提升一个台阶。