跳到主要内容

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.conf IP,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"