WSL,Linux,Windows,开发环境,微软

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 系统调用翻译层。当你执行 lsgrep 时,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

这条命令会自动:

  1. 启用 WSL 和虚拟机平台功能
  2. 安装默认的 Ubuntu 发行版
  3. 配置必要的组件

完成后重启电脑即可。首次启动会要求设置 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 就变成了一个真正的”双系统开发站” —— 而且完全不需要重启。


参考链接:

文章摘自:https://www.cnblogs.com/00go/p/20560197