WSL 技术全面详解:在 Windows 上无缝运行 Linux
摘要: WSL(Windows Subsystem for Linux)是微软为 Windows 开发者量身打造的 Linux 运行环境。无需虚拟机、无需双启动,一条命令即可在 Windows 上运行原生 Linux。2025 年 WSL 正式开源,标志着这项技术进入了新的发展阶段。本文将从 WSL 是什么、WSL 1 与 WSL 2 的区别、安装配置、核心功能特性,到最佳实践与注意事项,带你全面掌握 WSL 技术。
来源: WSL 官方文档
一、WSL 是什么?
WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows子系统)是 Windows 的一项功能,允许开发者直接在 Windows 上运行原生 GNU/Linux 环境,包括大多数命令行工具、实用程序和应用程序。
一句话定位
WSL 的目标:在 Windows 上获得完整的 Linux 开发体验,无需虚拟机或双启动。
在 WSL 出现之前,Windows 开发者如果要用 Linux 工具,通常面临几种选择:
- 虚拟机(VMware/VirtualBox) —— 资源占用大、启动慢、管理复杂
- 双启动 —— 需要重启切换系统、磁盘分区麻烦
- Cygwin/MinGW —— 兼容性差、体验不完整
WSL 打破了这个局面。它让 Linux 发行版(Ubuntu、Debian、Kali、Arch 等)作为 Windows 的”一等公民”运行,与 Windows 文件系统无缝互通。
WSL 的发展历史
- 2016 年: WSL 1 随 Windows 10 Anniversary Update 发布,通过系统调用翻译层运行 ELF 二进制文件
- 2019 年: WSL 2 发布,引入真正的 Linux 内核和轻量级虚拟机架构
- 2020 年: WSL 2 成为默认版本,支持 GPU 加速、GUI 应用运行
- 2023 年: 内存自动回收、systemd 支持等新功能加入
- 2025 年: WSL 正式开源(在 Microsoft Build 2025 大会上宣布),代码托管于 GitHub
二、WSL 1 vs WSL 2 —— 核心区别
WSL 2 不是 WSL 1 的简单升级,而是底层架构的全面重写。
对比表格
| 特性 | WSL 1 | WSL 2 |
|---|---|---|
| Linux 内核 | 系统调用翻译层 | 真正的 Linux 内核 |
| 文件系统性能 | 跨系统访问快 | Linux 文件系统内极快(比 WSL 1 快约 20 倍) |
| 系统调用兼容性 | 部分支持 | 完全支持 |
| systemd 支持 | 不支持 | 支持 |
| 与 VMware/VirtualBox 共存 | 兼容 | 需要 Hyper-V 兼容模式 |
| 资源占用 | 极低 | 轻量 VM(可自动回收内存) |
架构差异简述
WSL 1 的工作原理是在 Windows NT 内核之上实现一个 Linux 系统调用翻译层。当你执行 ls 或 grep 时,WSL 1 会将这些 Linux 系统调用实时翻译为 Windows NT 内核调用。这种方式好处是轻量、启动快、跨文件系统性能好,但缺点是无法支持所有 Linux 特性(比如 Docker 需要完整的内核功能)。
WSL 2 则采用了一个轻量级的 Hyper-V 虚拟机,在其中运行微软定制的 Linux 内核。这个 VM 对用户体验是”透明”的 —— 启动快、资源占用小、自动管理。由于运行的是真正的内核,WSL 2 拥有完整的系统调用兼容性,可以运行 Docker、systemd 等需要内核级支持的工具。
该选哪个?
- WSL 2 是当前默认版本,绝大多数场景下应该使用 WSL 2
- WSL 1 仅在以下情况考虑:需要频繁跨系统访问文件、需要与旧版 VMware 共存、或者使用的工具对 WSL 2 有已知兼容问题
查看当前版本:
wsl -l -v
切换版本:
# 切换到 WSL 2
wsl --set-version Ubuntu 2
# 切换到 WSL 1
wsl --set-version Ubuntu 1
三、安装与基础操作
3.1 一键安装(推荐)
前提条件: Windows 10 版本 2004 及以上(Build 19041+)或 Windows 11。
以管理员身份打开 PowerShell,执行:
wsl --install
这条命令会自动:
- 启用 WSL 和虚拟机平台功能
- 安装默认的 Ubuntu 发行版
- 配置必要的组件
完成后重启电脑即可。首次启动会要求设置 Linux 用户名和密码。
3.2 选择其他发行版
默认安装的是 Ubuntu,但你可以通过以下命令查看和选择其他发行版:
# 查看所有可用的发行版
wsl --list --online
# 安装指定发行版
wsl --install -d Debian
wsl --install -d kali-linux
wsl --install -d Fedora-Remix
# 通过 Microsoft Store 安装更多发行版
目前支持的发行版包括:Ubuntu、Debian、Kali Linux、Fedora Remix、openSUSE、Arch Linux、Alpine、Pengwin 等。
3.3 常用管理命令
# 列出已安装的发行版及其版本
wsl -l -v
# 启动默认发行版
wsl
# 启动指定发行版
wsl -d Ubuntu
# 设置默认发行版
wsl -s Debian
# 停止指定发行版(释放资源)
wsl --terminate Ubuntu
# 停止所有发行版
wsl --shutdown
# 设置默认 WSL 版本
wsl --set-default-version 2
# 更新 WSL 到最新版本
wsl --update
# 卸载/注销发行版
wsl --unregister Ubuntu
3.4 文件系统的互操作
WSL 最大的亮点之一是 Windows 与 Linux 文件系统的无缝互通:
# 在 WSL 中访问 Windows 文件(C 盘)
cd /mnt/c/Users/yourname
# 从 WSL 中调用 Windows 程序
notepad.exe /mnt/c/somefile.txt
# 从 Windows PowerShell 中调用 Linux 命令
wsl ls -la /home
wsl git status
重要建议: 开发项目文件应存放在 Linux 文件系统(~/ 目录下),而不是 /mnt/c/。因为 WSL 2 访问 Linux 原生文件系统的性能远高于跨系统访问。
四、WSL 核心功能特性
4.1 运行 Linux GUI 应用
WSL 2 支持直接运行 Linux 图形界面应用,窗口会无缝集成到 Windows 桌面上:
# 在 WSL 中安装并运行 GUI 应用
sudo apt update
sudo apt install gimp -y
gimp # GIMP 窗口直接出现在 Windows 桌面上
这得益于 WSLg(WSL GUI),它自动配置了 Wayland/X11 服务器,无需额外安装任何显示服务器。
4.2 GPU 加速与机器学习
WSL 2 支持直接访问宿主机 GPU,无需在 VM 中配置 GPU 直通:
# 在 WSL 中安装 CUDA 工具包后
# 可以直接使用 GPU 进行机器学习训练
nvidia-smi # 能看到 Windows 宿主机的 GPU
这意味着你可以在 WSL 中运行 TensorFlow、PyTorch 等框架,利用 Windows 的 NVIDIA GPU 进行深度学习训练。
4.3 Docker 支持
WSL 2 是 Docker Desktop for Windows 的后端引擎:
- Docker Desktop 利用 WSL 2 后端,性能远超 Hyper-V 后端
- 可以在 WSL 发行版中直接运行
docker命令 - 容器文件系统与 WSL 文件系统深度集成
- 也支持在 WSL 内直接安装 Docker Engine(不依赖 Docker Desktop)
4.4 VS Code 深度集成
Visual Studio Code 提供 WSL 远程开发扩展:
# 在 WSL 中用 VS Code 打开项目
code .
VS Code 会自动:
- 在 WSL 内启动远程服务器
- 所有终端命令在 Linux 环境中执行
- 插件运行在 WSL 端,获得原生 Linux 体验
- 文件编辑在 Windows 端,享受 Windows 的流畅 UI
4.5 systemd 支持
从 2023 年起,WSL 2 原生支持 systemd。在 .wslconfig 中启用:
# ~/.wslconfig(位于 Windows 用户目录)
[wsl2]
systemd=true
启用后,systemctl 命令可用,可以管理 systemd 服务,兼容性大幅提升。
五、注意事项与最佳实践
5.1 配置文件 .wslconfig
Windows 用户目录下可以创建 .wslconfig 文件来全局配置 WSL 2 的 VM 行为:
# C:\Users\YourName\.wslconfig
[wsl2]
# 限制内存使用(防止 WSL 吃掉所有 RAM)
memory=4GB
# 限制 CPU 核心数
processors=4
# 交换空间大小
swap=2GB
# 启用嵌套虚拟化
nestedVirtualization=true
# 启用 systemd
systemd=true
建议: 如果你的机器内存较小(如 8GB),建议设置 memory=4GB 限制,避免 WSL 自动占用过多内存。
5.2 内存管理
WSL 2 的 Linux 内核会使用大量内存来缓存文件系统。默认情况下这些缓存不会自动释放,可能导致 Windows 端内存紧张。
# 手动释放 WSL 占用的内存(会停止所有发行版)
wsl --shutdown
# 或者在 .wslconfig 中启用内存回收(WSL 新版本支持)
[wsl2]
autoMemoryReclaim=gradual
5.3 网络配置
WSL 2 拥有独立的虚拟网络,与 Windows 不在同一网段:
- WSL 2 的 IP 地址每次重启可能变化
- 从 Windows 访问 WSL 2 服务:使用
localhost(WSL 会自动端口转发) - 从局域网其他设备访问 WSL 2 服务:需要配置端口转发或使用 WSL 的实际 IP
查看 WSL IP:
# 在 WSL 内
ip addr show eth0 | grep inet
5.4 跨文件系统性能陷阱
这是 WSL 2 最常见的使用误区:
不要 把项目代码放在 Windows 文件系统(/mnt/c/)中,然后用 WSL 2 的 Linux 工具去操作它。这种跨文件系统操作的性能非常差。
正确做法: 将代码放在 WSL 的 Linux 文件系统(~/projects/),然后用 VS Code Remote – WSL 或 Windows 资源管理器(通过 \\wsl$\ 路径)来编辑。
| 场景 | 推荐 | 不推荐 |
|---|---|---|
| 在 Linux 工具中处理文件 | 文件在 ~/ |
文件在 /mnt/c/ |
| 在 Windows 工具中处理文件 | 文件在 C:\ |
文件在 \\wsl$\ |
5.5 备份与迁移
WSL 发行版可以方便地导出和导入:
# 导出为 TAR 文件(备份)
wsl --export Ubuntu D:\wsl-backup\ubuntu.tar
# 从 TAR 导入(迁移到新机器)
wsl --import Ubuntu D:\wsl-data\ D:\wsl-backup\ubuntu.tar
# 设置导入后发行版的默认用户
wsl ~ -d Ubuntu -u yourname
5.6 版本要求
- WSL 1:Windows 10 版本 1607+
- WSL 2:Windows 10 版本 1903+(Build 18362+)或 Windows 11
- 建议使用 Windows 11,可以获得最新的 WSL 功能和最佳体验
5.7 安全注意事项
- WSL 中的 Linux 环境与 Windows 共享网络栈
- WSL 中的 root 用户不等于 Windows 管理员权限
- 敏感文件建议利用 WSL 的 Linux 文件权限系统进行保护
- 生产环境不建议使用 WSL,它是为开发场景设计的
结语
WSL 是微软”拥抱开源”战略的标志性产品之一。从最初备受质疑的系统调用翻译层,到如今内置完整 Linux 内核、支持 GPU 加速、GUI 应用、systemd 的一体化开发平台,WSL 已经成长为 Windows 开发者不可或缺的工具。
2025 年 WSL 正式开源后,社区贡献将加速其迭代。如果你是一个在 Windows 上做开发的程序员(无论是写 Python、Node.js、Rust、Go 还是其他语言),WSL 几乎是你应该第一个安装的工具。
一条 wsl --install,你的 Windows 就变成了一个真正的”双系统开发站” —— 而且完全不需要重启。
参考链接:
- WSL 官方文档:https://learn.microsoft.com/windows/wsl/
- WSL 开源仓库:https://github.com/microsoft/WSL
- WSL 开源博客(2025):https://blogs.windows.com/windowsdeveloper/2025/05/19/the-windows-subsystem-for-linux-is-now-open-source/
- WSLg(GUI 支持):https://github.com/microsoft/wslg
- WSL 2 Linux 内核:https://github.com/microsoft/WSL2-Linux-Kernel
文章摘自:https://www.cnblogs.com/00go/p/20560197
