WSL2 使用指南

WSL2 是什么

WSL 允许在 Windows 中直接运行 Linux 发行版,不需要传统虚拟机,也不需要双系统。

第一代 WSL1 目前处于被淘汰状态,务必直接使用 WSL2。

WSL2 使用轻量级虚拟机和真正的 Linux 内核,通常适合:

安装

开始前确认:

安装就是执行命令,如果你要安装的是 Ubuntu 发行版,直接在 PowerShell(管理员权限)里执行:

wsl --install

wsl --install 不只是安装“WSL 软件”,也会尝试同时安装一个 Linux 发行版(也就是我们常说的“虚拟机”)

它会依次做:

1️⃣ 安装 WSL 组件(必须),包括:

👉 相当于“虚拟机引擎” ✔

2️⃣ 设置默认版本为 WSL2

👉 以后所有 Linux 都跑在 WSL2

3️⃣ 下载并安装默认发行版

👉 这一步才是“创建虚拟机”


缺省安装的是 Ubuntu 发行版,如果你想安装其他发行版,可以先查看可用的发行版列表:

wsl --list --online

然后,比如安装 Debian:

wsl --install -d Debian

前面说的 第 3 步 下载并安装默认发行版, 经常失败或被跳过

原因包括:

如果你发现安装完成后没有任何 Linux 发行版(用 wsl -l 查看),可以手动再安装一次发行版:

wsl --install -d Debian

启动WSL虚拟机

在 WSL2 里,“启动某个虚拟机”(其实就是启动某个 Linux 发行版)非常简单 👍

✅ 基本启动命令

wsl -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 -d Debian -- ls /

打开多个WSL终端窗口

同一个 WSL虚拟机(发行版)可以同时打开多个终端窗口,它们都连接到同一个正在运行的 WSL 实例,进程、文件系统、环境变量等都是共享的,非常方便。

可以 使用 Windows Terminal(微软官方推荐终端):

  1. 打开 Windows Terminal(Win + X → Windows Terminal,或直接搜索)。
  2. 点击顶部 下拉箭头 → 选择你的发行版(例如 Ubuntu)。
  3. 或者直接按 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 nowsudo halt并不比从 Windows 侧执行 wsl --shutdown 更好,反而在大多数情况下更麻烦、更不推荐

  1. WSL 2 不是真正的物理机
    WSL 2 是一个轻量级 Hyper-V 虚拟机,Linux 内核运行在里面,但没有真正的电源管理硬件(ACPI power off 等)。
    当你在 WSL 里执行 sudo poweroffsudo shutdown -h now 时:

    • Linux 会尝试走正常的 systemd shutdown 流程(停止服务、卸载文件系统等)。
    • 但最终它只能调用 reboot(RB_POWER_OFF)无法真正关掉虚拟机
    • 结果往往是:终端卡住、命令不返回、WSL 实例仍然在后台运行(vmmem 进程不消失)。
  2. 关闭效果不彻底

    • 很多时候需要加 -f(force)才能强制关闭:sudo poweroff -fsudo 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

比如:

AppData 是隐藏文件夹,需要显示隐藏文件才能看到。


✳️ 注意事项

WSL2 磁盘文件迁移

如果你想把 WSL 2 虚拟机磁盘文件(ext4.vhdx) 从 C 盘迁移到 D 盘, 可以使用内置 --manage --move 命令

这个方法会直接移动 .vhdx 文件并自动更新注册表,几乎不丢失数据,速度也最快。

操作步骤(在 PowerShell管理员身份运行):

  1. 先查看你的发行版名称

    wsl --list --verbose
    

    记下你要迁移的发行版名称(例如 UbuntuUbuntu-22.04 等)。

  2. 完全关闭 WSL(非常重要,避免文件被锁定):

    wsl --shutdown
    
  3. 执行迁移命令(把路径改成你想要的 D 盘位置):

    wsl --manage <发行版名称> --move "D:\WSL\<发行版名称>"
    

    示例(假设你的发行版叫 Ubuntu):

    wsl --manage Ubuntu --move "D:\WSL\Ubuntu"
    
    • WSL 会自动在 D 盘创建 D:\WSL\Ubuntu 文件夹,并把 ext4.vhdx 移动过去。
    • 如果文件夹不存在,它会自动创建。
  4. 验证迁移是否成功

    wsl --list --verbose
    

    启动测试:

    wsl -d Ubuntu
    

优点:快、简单、保留所有设置和用户数据。
注意:如果报权限错误(Access is denied),请右键 D:\WSL 文件夹 → 属性 → 安全 → 给 “Authenticated Users” 或你的用户名授予完全控制权限,然后重试。


✳️ 迁移后建议

Windows 和 WSL虚拟机 互相访问

Windows 文件浏览器查看 WSL虚拟机里的文件

如果你要在 Windows 文件浏览器(资源管理器) 中打开 WSL 虚拟机里面文件夹

✳️ 方法 1:直接在地址栏输入(最推荐)

  1. 打开 Windows 文件浏览器
  2. 在顶部地址栏点击一下,使其进入编辑状态。
  3. 输入\\wsl.localhost,然后按 Enter
  4. 你会看到所有已安装的 WSL 发行版(如 Ubuntu、Debian 等)以文件夹形式列出。
  5. 双击进入你的发行版(例如 Ubuntu),然后就可以浏览 Linux 中的文件夹了:
    • /home/你的用户名/ → 通常就是你的主目录
    • / → Linux 根目录

✳️ 方法 2:从 WSL 终端直接打开当前文件夹(超级方便)

WSL 可以直接调用带 .exe 的 Windows 程序。

在你的 WSL 终端(Ubuntu 等)中,进入你想查看的文件夹后,运行以下命令:

explorer.exe .

如果打不开:

WSL虚拟机里面访问 Windows 的文件

在 WSL 虚拟机里面的Linux系统, 你可以直接访问 Windows 的磁盘分区,路径通常是 /mnt/<盘符>/

所以,如果你想访问 Windows 的 D 盘的文件,就可以:

cd /mnt/d/
ls
vim file.txt

vscode 打开WSL里面的文件夹项目

如果你要从 VS Code 打开 WSL 里面文件夹/项目


✳️ 准备


✳️ 方法 1:从 WSL 终端直接打开(最简单、最推荐)

  1. 打开你的 WSL 终端(例如 Ubuntu)。

  2. 使用 cd 命令进入你要打开的项目文件夹,例如:

    cd ~/myproject
    cd /home/你的用户名/project
    
  3. 输入以下命令并回车:

    code .
    

✳️ 方法 2:从 Windows 的 VS Code 中连接 WSL

  1. 打开 Windows 上的 VS Code。
  2. 按快捷键 Ctrl + Shift + P 打开命令面板。
  3. 输入并选择以下命令之一:
    • WSL: Connect to WSL (连接到默认发行版)
    • WSL: Connect to WSL using Distro (选择具体发行版,如 Ubuntu)
  4. 连接成功后,左下角显示 WSL: xxx
  5. 然后点击 文件 → 打开文件夹(或 Ctrl + K Ctrl + O),选择 WSL 中的路径(如 /home/你的用户名/myproject)。

或者直接使用:


✳️ 方法 3:从 Windows 文件浏览器直接打开(结合之前的方法)

  1. 用前面教的方法打开 \\wsl$\Ubuntu(或 \\wsl.localhost\Ubuntu)。
  2. 找到你的项目文件夹。
  3. 右键文件夹 → 通过 Code 打开(如果已安装 WSL 扩展,通常会出现该选项),或者直接拖拽文件夹到已打开的 VS Code 窗口。

设置镜像网络

WSL “镜像网络模式”(Mirrored Networking Mode) 是 WSL 2 从 2023 年底开始引入的一种全新网络架构(推荐使用)。

WSL 2 有两种主要的网络模式:


✳️ 开启镜像模式后的主要好处


✳️ 开启镜像网络模式

  1. 管理员身份打开 PowerShell 或 Windows 终端。

  2. 创建或编辑配置文件(如果没有就新建):

    notepad $env:USERPROFILE\.wslconfig
    
  3. 在文件中加入以下内容(推荐同时开启 dnsTunneling):

    [wsl2]
    networkingMode=mirrored
    dnsTunneling=true
    # autoProxy=true # 可选,强制使用 Windows 代理
    
    [experimental]
    # 可选,允许 WSL 可以使用除了 localhost 以外的 Windows IP 地址
    # 这样就可以从别的设备访问 WSL里面的服务了(前提是防火墙允许)
    hostAddressLoopback=true 
    
  4. 保存后重启 WSL:

    wsl --shutdown
    
  5. 重新进入你的发行版,验证是否生效:

    # 在 WSL 里运行
    ip addr show
    

    你会发现 IP 地址和 Windows 的局域网 IP 基本一致(或非常相似)。

注意事项: