WSL2 使用指南
WSL2 是什么
WSL 允许在 Windows 中直接运行 Linux 发行版,不需要传统虚拟机,也不需要双系统。
第一代 WSL1 目前处于被淘汰状态,务必直接使用 WSL2。
WSL2 使用轻量级虚拟机和真正的 Linux 内核,通常适合:
- 学习 Linux 命令
- 使用 Git、Python、Node.js、Docker 等开发工具
- 运行 Linux 脚本和服务
- 在 Windows 和 Linux 之间共享工作流
安装
开始前确认:
- 使用 Windows 11,或 Windows 10 版本 2004 及以上(内部版本 19041 及以上)。
- 当前 Windows 用户具有管理员权限。
- 电脑已连接网络,并预留足够的磁盘空间。
- BIOS/UEFI 中已启用 CPU 虚拟化。大多数新电脑默认已启用。
安装就是执行命令,如果你要安装的是 Ubuntu 发行版,直接在 PowerShell(管理员权限)里执行:
wsl --install
wsl --install 不只是安装“WSL 软件”,也会尝试同时安装一个 Linux 发行版(也就是我们常说的“虚拟机”)
它会依次做:
1️⃣ 安装 WSL 组件(必须),包括:
- WSL 内核
- 虚拟机平台(Hyper-V 相关)
- 网络组件
👉 相当于“虚拟机引擎” ✔
2️⃣ 设置默认版本为 WSL2
👉 以后所有 Linux 都跑在 WSL2
3️⃣ 下载并安装默认发行版
👉 这一步才是“创建虚拟机”
缺省安装的是 Ubuntu 发行版,如果你想安装其他发行版,可以先查看可用的发行版列表:
wsl --list --online
然后,比如安装 Debian:
wsl --install -d Debian
前面说的 第 3 步 下载并安装默认发行版, 经常失败或被跳过
原因包括:
- Microsoft Store 未登录 / 被禁用
- 网络问题
- 企业策略限制
- 安装过程中断
如果你发现安装完成后没有任何 Linux 发行版(用 wsl -l 查看),可以手动再安装一次发行版:
wsl --install -d Debian
启动WSL虚拟机
在 WSL2 里,“启动某个虚拟机”(其实就是启动某个 Linux 发行版)非常简单 👍
✅ 基本启动命令
wsl -d Debian
👉 含义:
-d= 指定发行版Debian= 你要启动的“虚拟机”名字
🔍 先查看有哪些“虚拟机”
wsl -l -v
例如输出:
NAME STATE VERSION
Debian Stopped 2
Ubuntu Stopped 2
这里的 Debian / Ubuntu 就是可启动的实例
比如,执行:
wsl -d Debian
会直接进入:
yourname@DESKTOP:~$
说明已经启动成功
✳️ 默认启动
如果你想直接进入默认的那个虚拟机(比如 Debian),可以直接执行:
wsl
可以 设置默认虚拟机:
wsl --set-default Debian
以后直接:
wsl
就会进入 Debian
✳️ 指定用户启动
wsl -d Debian -u root
👉 以 root 用户进入
✳️ 后台启动(不进入 shell)
wsl -d Debian --exec true
👉 用于:
- 预热 WSL
- 启动服务
✳️ 执行一条命令就退出
wsl -d Debian -- ls /
打开多个WSL终端窗口
同一个 WSL虚拟机(发行版)可以同时打开多个终端窗口,它们都连接到同一个正在运行的 WSL 实例,进程、文件系统、环境变量等都是共享的,非常方便。
可以 使用 Windows Terminal(微软官方推荐终端):
- 打开 Windows Terminal(Win + X → Windows Terminal,或直接搜索)。
- 点击顶部 下拉箭头 → 选择你的发行版(例如 Ubuntu)。
- 或者直接按
Ctrl + Shift + T新建标签页,再切换到 WSL 配置文件。
也可以直接输入命令 从 Windows PowerShell / CMD 打开新终端
# 打开默认发行版的新终端
wsl
停止虚拟机
✳️ 停止某一个
先查看当前运行中的发行版:
wsl --list --verbose
# 或简写: wsl -l -v
然后终止指定发行版(把 <名称> 换成实际名称,例如 Debian):
wsl --terminate Debian
或者
wsl -t Debian
✳️ 停止全部
如果要 停止全部 WSL 2 轻量虚拟机,释放内存、CPU、网络资源,所有发行版一次性关掉。
wsl --shutdown
执行后等待 2-3 秒,再用 wsl -l -v 检查,所有状态应该变成 Stopped。
✳️ 不推荐 虚拟机里面poweroff 关闭
在 WSL 里面执行 sudo poweroff(或 sudo shutdown now、sudo halt)并不比从 Windows 侧执行 wsl --shutdown 更好,反而在大多数情况下更麻烦、更不推荐。
-
WSL 2 不是真正的物理机
WSL 2 是一个轻量级 Hyper-V 虚拟机,Linux 内核运行在里面,但没有真正的电源管理硬件(ACPI power off 等)。
当你在 WSL 里执行sudo poweroff或sudo shutdown -h now时:- Linux 会尝试走正常的 systemd shutdown 流程(停止服务、卸载文件系统等)。
- 但最终它只能调用
reboot(RB_POWER_OFF),无法真正关掉虚拟机。 - 结果往往是:终端卡住、命令不返回、WSL 实例仍然在后台运行(vmmem 进程不消失)。
-
关闭效果不彻底
- 很多时候需要加
-f(force)才能强制关闭:sudo poweroff -f或sudo shutdown -h -f now。 - 即使加了
-f,它也只是强制终止当前发行版的进程,和wsl --terminate <名称>效果差不多,但没有 Windows 侧那么干净。
- 很多时候需要加
查看
✳️ 查看 WSL 整体版本
wsl -v
比如
WSL 版本: 2.6.3.0
内核版本: 6.6.87.2-1
WSLg 版本: 1.0.71
MSRDC 版本: 1.2.6353
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows: 10.0.26200.8037
✳️ 查看已安装的 Linux 虚拟机信息
wsl -l -v
比如:
NAME STATE VERSION
* Debian Running 2
Ubuntu Stopped 2
✳️ 查看 WSL 当前状态
wsl --status
比如
默认分发: Debian
默认版本: 2
当前计算机配置不支持 WSL1。
若要使用 WSL1,请启用“Windows Subsystem for Linux”可选组件
WSL 虚拟机的磁盘文件
✳️ 默认存储位置
WSL2 的每个 Linux 发行版(虚拟机)都有一个独立的虚拟磁盘文件,通常叫 ext4.vhdx(或类似名称)。
默认路径(C 盘):
C:\Users\你的用户名\AppData\Local\Packages\发行版包名\LocalState\ext4.vhdx
比如:
- Ubuntu:
C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx - Ubuntu 22.04 / 24.04 等版本:包名中会包含版本号(如 Ubuntu22.04LTS)
AppData 是隐藏文件夹,需要显示隐藏文件才能看到。
✳️ 注意事项
- WSL 1:没有独立的
.vhdx文件,它直接使用 Windows 文件系统。 - 如果你之前迁移过:磁盘文件可能在 D 盘、E 盘等其他位置(通过导出/导入实现)。
- Docker Desktop:如果安装了 Docker,它的 WSL 数据通常在
C:\Users\你的用户名\AppData\Local\Docker\wsl\data\ext4.vhdx或类似路径。 - 空间占用大:
.vhdx是动态扩展的,默认最大可达 1TB,但实际占用多少用多少。想释放空间可在 WSL 里用sudo apt clean等命令,或在 Windows 压缩/优化 VHDX。
WSL2 磁盘文件迁移
如果你想把 WSL 2 虚拟机磁盘文件(ext4.vhdx) 从 C 盘迁移到 D 盘,
可以使用内置 --manage --move 命令
这个方法会直接移动 .vhdx 文件并自动更新注册表,几乎不丢失数据,速度也最快。
操作步骤(在 PowerShell 以管理员身份运行):
-
先查看你的发行版名称:
wsl --list --verbose记下你要迁移的发行版名称(例如
Ubuntu、Ubuntu-22.04等)。 -
完全关闭 WSL(非常重要,避免文件被锁定):
wsl --shutdown -
执行迁移命令(把路径改成你想要的 D 盘位置):
wsl --manage <发行版名称> --move "D:\WSL\<发行版名称>"示例(假设你的发行版叫 Ubuntu):
wsl --manage Ubuntu --move "D:\WSL\Ubuntu"- WSL 会自动在 D 盘创建
D:\WSL\Ubuntu文件夹,并把ext4.vhdx移动过去。 - 如果文件夹不存在,它会自动创建。
- WSL 会自动在 D 盘创建
-
验证迁移是否成功:
wsl --list --verbose启动测试:
wsl -d Ubuntu
优点:快、简单、保留所有设置和用户数据。
注意:如果报权限错误(Access is denied),请右键 D:\WSL 文件夹 → 属性 → 安全 → 给 “Authenticated Users” 或你的用户名授予完全控制权限,然后重试。
✳️ 迁移后建议
-
更新 WSL 到最新版:
wsl --update -
如果你之前启用了镜像网络模式(mirrored),迁移后一般不受影响,但建议重启一次:
wsl --shutdown -
检查新位置的磁盘文件: 进入
D:\WSL\Ubuntu文件夹,应该能看到ext4.vhdx。 -
如果有 Docker Desktop,它的 WSL 数据也可能需要单独迁移(docker-desktop-data 发行版)。
Windows 和 WSL虚拟机 互相访问
Windows 文件浏览器查看 WSL虚拟机里的文件
如果你要在 Windows 文件浏览器(资源管理器) 中打开 WSL 虚拟机里面文件夹 :
✳️ 方法 1:直接在地址栏输入(最推荐)
- 打开 Windows 文件浏览器。
- 在顶部地址栏点击一下,使其进入编辑状态。
- 输入
\\wsl.localhost,然后按 Enter: - 你会看到所有已安装的 WSL 发行版(如 Ubuntu、Debian 等)以文件夹形式列出。
- 双击进入你的发行版(例如 Ubuntu),然后就可以浏览 Linux 中的文件夹了:
/home/你的用户名/→ 通常就是你的主目录/→ Linux 根目录
✳️ 方法 2:从 WSL 终端直接打开当前文件夹(超级方便)
WSL 可以直接调用带 .exe 的 Windows 程序。
在你的 WSL 终端(Ubuntu 等)中,进入你想查看的文件夹后,运行以下命令:
explorer.exe .
- 这会立即用 Windows 文件浏览器打开 当前所在目录。
- 示例:
cd ~/project # 进入你的项目文件夹 explorer.exe .
如果打不开:
- 执行
wsl --shutdown后重新尝试。 - 确保 WSL 是版本 2(用
wsl -l -v检查)。
WSL虚拟机里面访问 Windows 的文件
在 WSL 虚拟机里面的Linux系统, 你可以直接访问 Windows 的磁盘分区,路径通常是 /mnt/<盘符>/。
所以,如果你想访问 Windows 的 D 盘的文件,就可以:
cd /mnt/d/
ls
vim file.txt
vscode 打开WSL里面的文件夹项目
如果你要从 VS Code 打开 WSL 里面文件夹/项目
✳️ 准备
-
在 VS Code 中安装 Remote Development 扩展包(推荐)或单独安装 WSL 扩展:
- 打开 VS Code → 左侧扩展图标(Ctrl+Shift+X)
- 搜索 “Remote Development” → 安装(包含 WSL、SSH、Dev Containers)
-
确保 WSL 是版本 2(运行
wsl -l -v检查)。
✳️ 方法 1:从 WSL 终端直接打开(最简单、最推荐)
-
打开你的 WSL 终端(例如 Ubuntu)。
-
使用
cd命令进入你要打开的项目文件夹,例如:cd ~/myproject cd /home/你的用户名/project -
输入以下命令并回车:
code .
- VS Code 会自动安装 Remote - WSL 组件(第一次会稍等几秒下载)。
- 打开后,窗口左下角会显示 WSL: Ubuntu(或你的发行版名称),表示已经在 WSL 环境中运行。
- 终端、调试、扩展等都会在 WSL 内执行,性能最好。
✳️ 方法 2:从 Windows 的 VS Code 中连接 WSL
- 打开 Windows 上的 VS Code。
- 按快捷键
Ctrl + Shift + P打开命令面板。 - 输入并选择以下命令之一:
- WSL: Connect to WSL (连接到默认发行版)
- WSL: Connect to WSL using Distro (选择具体发行版,如 Ubuntu)
- 连接成功后,左下角显示 WSL: xxx。
- 然后点击 文件 → 打开文件夹(或
Ctrl + K Ctrl + O),选择 WSL 中的路径(如/home/你的用户名/myproject)。
或者直接使用:
- WSL: Reopen Folder in WSL(如果已经打开了 Windows 文件夹,想切换到 WSL 模式)
✳️ 方法 3:从 Windows 文件浏览器直接打开(结合之前的方法)
- 用前面教的方法打开
\\wsl$\Ubuntu(或\\wsl.localhost\Ubuntu)。 - 找到你的项目文件夹。
- 右键文件夹 → 通过 Code 打开(如果已安装 WSL 扩展,通常会出现该选项),或者直接拖拽文件夹到已打开的 VS Code 窗口。
- 性能最佳实践:把项目代码放在 WSL 的 Linux 文件系统中(
/home/下),不要放在/mnt/c/(Windows 盘),否则读写会变慢。 - 如果你启用了镜像网络模式(mirrored),大多数情况下不影响 VS Code,但如果出现连接问题,可以尝试
wsl --shutdown后重试。 - 想让 VS Code 默认使用某个发行版,可以在命令面板输入
WSL: Set Default Distro。 - 安装语言相关的扩展时,记得点击 Install in WSL(而不是 Install),这样扩展会安装在 WSL 环境中。
设置镜像网络
WSL “镜像网络模式”(Mirrored Networking Mode) 是 WSL 2 从 2023 年底开始引入的一种全新网络架构(推荐使用)。
WSL 2 有两种主要的网络模式:
-
默认模式(NAT):
WSL 像一台隐藏在内网的虚拟机,有自己的独立 IP(通常是 172.x.x.x)。
- WSL 可以轻松访问外网和 Windows 的 localhost。
- 但 从 Windows 访问 WSL 中的服务(如在 WSL 里跑的 Web 服务器、数据库、SSH 等),需要查询 WSL 的 IP 或手动做端口转发,非常麻烦。
- 从局域网其他设备访问 WSL 服务也很难。
-
镜像网络模式(Mirrored):
WSL 把 Windows 主机的所有网络接口“镜像” 到 Linux 里面。
结果就是 WSL 和 Windows 共享同一个网络栈、同一套 IP 地址(包括你的局域网 IP)。
端口也会自动同步。
✳️ 开启镜像模式后的主要好处
-
双向 localhost 访问超级简单:
- 在 WSL 里用
127.0.0.1或localhost直接访问 Windows 上跑的服务。 - 在 Windows 里用
127.0.0.1直接访问 WSL 上跑的服务(不再需要查 IP)。
- 在 WSL 里用
-
WSL 服务可以直接暴露到局域网:
其他电脑、手机可以直接用你 Windows 的局域网 IP + 端口访问 WSL 里的服务(例如开发时让同事访问你的测试网站)。 -
支持 IPv6(默认 NAT 模式不支持或很弱)。
-
对 VPN、代理、多播(multicast)等兼容性大幅提升。
-
Windows 的代理设置通常能自动同步到 WSL 里。
✳️ 开启镜像网络模式
-
以管理员身份打开 PowerShell 或 Windows 终端。
-
创建或编辑配置文件(如果没有就新建):
notepad $env:USERPROFILE\.wslconfig -
在文件中加入以下内容(推荐同时开启 dnsTunneling):
[wsl2] networkingMode=mirrored dnsTunneling=true # autoProxy=true # 可选,强制使用 Windows 代理 [experimental] # 可选,允许 WSL 可以使用除了 localhost 以外的 Windows IP 地址 # 这样就可以从别的设备访问 WSL里面的服务了(前提是防火墙允许) hostAddressLoopback=true -
保存后重启 WSL:
wsl --shutdown -
重新进入你的发行版,验证是否生效:
# 在 WSL 里运行 ip addr show你会发现 IP 地址和 Windows 的局域网 IP 基本一致(或非常相似)。
注意事项:
- 需要 Windows 11 22H2 或更高版本 + 较新 WSL(建议运行
wsl --update更新到最新)。 - 首次切换后建议重启电脑一次,确保完全生效。
- 某些极端网络环境(企业 VPN、全隧道模式)下可能需要额外调整防火墙:
New-NetFirewallRule -DisplayName "WSL Mirrored" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow - 目前镜像模式对单个 WSL 实例支持最好,多实例时可能有局限。