WSL 使用技巧
WSL 基础
WSL (Windows Subsystem for Linux) 让你在 Windows 上直接运行 Linux 环境。
安装 Ubuntu
# PowerShell 管理员模式
wsl --install -d Ubuntu
常用命令
WSL 管理
| 命令 | 说明 |
|---|---|
wsl -l -v | 列出所有发行版及版本 |
wsl --shutdown | 关闭所有 WSL 实例 |
wsl -t Ubuntu | 终止指定发行版 |
wsl --set-version Ubuntu 2 | 切换到 WSL2 |
导出/导入
# 导出(备份)
wsl --export Ubuntu D:\backup\ubuntu.tar
# 导入(迁移到其他盘)
wsl --import Ubuntu D:\WSL\Ubuntu D:\backup\ubuntu.tar
文件互通
| WSL 路径 | Windows 路径 |
|---|---|
/mnt/c/ | C:\ |
/mnt/d/ | D:\ |
| Linux 根目录 | \\wsl$\Ubuntu\ |
常用操作
# 在 WSL 中打开 Windows 目录
cd /mnt/c/Users/ePanda/Desktop
# 在 Windows 中打开 WSL 目录(资源管理器地址栏输入)
\\wsl$\Ubuntu\home\epanda
性能优化
生产级 .wslconfig 模板
在 Windows 用户根目录 %USERPROFILE%\.wslconfig 中配置资源上限、镜像网络与稀疏虚拟磁盘:
[wsl2]
memory=8GB
processors=10
swap=4GB
# 镜像网络模式(与 Windows 共享 localhost 与 IP)
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
firewall=true
guiApplications=true
# 内核参数微调(降低 Swap 倾斜度,保持缓存)
kernelCommandLine=sysctl.vm.swappiness=10 sysctl.vm.vfs_cache_pressure=50
[experimental]
autoMemoryReclaim=gradual
sparseVhd=true
避免跨文件系统操作
- 极快:WSL 内操作
/home/epanda/下的文件(ext4 原生虚拟磁盘) - 极慢:频繁读写
/mnt/c/、/mnt/d/下的 Windows 挂载盘(9P 协议性能衰减 5~10 倍)
网络与代理
现代化镜像网络(推荐)
启用 networkingMode=mirrored + autoProxy=true 后:
- WSL2 与 Windows 完全共享
localhost和局域网 IP。 - 自动继承 Windows 代理:无需手动获取
resolv.confIP,Windows 开启的科学上网代理/Clash 端口在 WSL2 中直接127.0.0.1:<端口>访问即可。
传统 NAT 模式访问 Windows 代理(备用)
若运行在传统 NAT 网络模式下:
# 获取 Windows 宿主机 IP
export HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
# 设置代理(例如代理软件在 Windows 监听 7890 且允许局域网连接)
export http_proxy="http://$HOST_IP:7890"
export https_proxy="http://$HOST_IP:7890"
常见问题
WSL2 内存占用过高
# 查看 WSL 进程
wsl --status
# 限制内存:编辑 .wslconfig
时间不同步
sudo hwclock -s
端口占用冲突
WSL2 和 Windows 共享端口时可能出现冲突,优先在 WSL 启动服务再用 localhost 访问。
虚拟磁盘只增不减?转换为稀疏磁盘 (Sparse VHDX)
WSL2 默认磁盘删除文件后宿主机不会释放空间。通过稀疏磁盘模式可实现删除文件自动回收 SSD 空间:
# 1. 安全关闭 WSL
wsl --shutdown
# 2. 转换为稀疏磁盘(自动缩容)
wsl.exe --manage Ubuntu-24.04 --set-sparse true --allow-unsafe
Windows Defender 排除 WSL 进程(极速防卡顿)
以管理员身份运行 PowerShell 排除 WSL 关键进程:
Add-MpPreference -ExclusionProcess "wsl.exe", "wslhost.exe", "vmmem.exe", "vmmemWSL.exe"