首页 WSL2 命令与互操作速查
2.6.3 2025-12-12 microsoft/WSL
打开 Zread CodeWiki
340px

快速定位 >>>

WSL2 适合两类动作:一类是管理发行版和运行时,另一类是在 Windows 与 Linux 之间直接混用命令、路径和环境。
  • 最短路径:先看“起手工作流”,再按“命令速查”或“互操作 recipes”抄命令
  • wsl <command> wsl -d <Distro> <command> wsl -e <command>
  • wsl --status wsl --update wsl --shutdown
  • --export --import --unregister

起手工作流 >>>

新机器或新环境里,先确认状态、发行版和默认版本,再决定是直接运行命令,还是进入交互式 shell。
# 首次安装 WSL
wsl --install

# 查看当前 WSL 状态与默认版本
wsl --status

# 查看发行版及其运行状态
wsl -l -v

# 更新 WSL 运行时
wsl --update

# 进入默认发行版的交互式 shell
wsl

场景映射

  • wsl --install
  • wsl --status
  • wsl -l -v
  • wsl --update
  • wsl:直接

运行发行版与执行命令 >>>

这组命令解决“在哪个发行版里,以什么方式,执行哪条 Linux 命令”。

最常用命令链

# 在默认发行版中执行一条命令,执行完返回 Windows
wsl uname -a

# 指定发行版执行
wsl -d Ubuntu uname -a

# 指定用户执行
wsl -d Ubuntu -u root id

# 直接执行程序,不经默认 shell 二次解析
wsl -e sh -lc "uname -a"

# 指定起始目录
wsl --cd ~
wsl --cd /mnt/c/Users/you/project

参数速查

参数作用适用场景
wsl <command>在默认发行版执行单条命令PowerShell/CMD 里顺手跑 Linux 工具
wsl -d <Distro> <command>指定发行版执行多发行版并存
wsl -u <User>指定 Linux 用户需要 root 或特定用户环境
wsl -e <command>直接执行程序避免 shell 解析差异
wsl --cd <Directory>指定 WSL 启动目录切换目录后再执行
wsl --把后续内容传给默认 shell参数里有 - 或复杂拼接时

快速判断

  • wsl <command>
  • wsl -e:改用
  • -d:显式加
  • --cd:显式加

发行版生命周期管理 >>>

这组命令用于切换 WSL1/WSL2、设置默认发行版、停止实例、清理发行版。
# 设置默认发行版
wsl --set-default Ubuntu

# 把某个发行版切换到 WSL2
wsl --set-version Ubuntu 2

# 停止某个发行版
wsl --terminate Ubuntu

# 关闭整个 WSL 虚拟机
wsl --shutdown

# 注销发行版(会删除该发行版的数据)
wsl --unregister Ubuntu

什么时候用哪条

  • wsl --set-version <Distro> 2
  • wsl --shutdown
  • wsl --terminate <Distro>
  • wsl --unregister <Distro>

备份、迁移与磁盘 >>>

这组命令处理导出/导入发行版和附加磁盘,适合迁移、备份和隔离数据盘。
# 导出发行版
wsl --export Ubuntu D:\\backup\\ubuntu.tar

# 导入发行版到新位置
wsl --import Ubuntu-Dev D:\\wsl\\ubuntu-dev D:\\backup\\ubuntu.tar --version 2

# 原地导入已有 VHDX
wsl --import-in-place Ubuntu-Data D:\\wsl\\ubuntu-data.vhdx

# 挂载物理磁盘或 VHD
wsl --mount \\\\.\\PHYSICALDRIVE3

注意点

  • --export --import
  • --import --version 2
  • --unregister --export
  • --mount

Windows 与 Linux 互操作 Recipes >>>

WSL 的强项不是“开一个 Linux”,而是让 Windows 和 Linux 的命令、文件系统与工具链互相借力。

Windows 里跑 Linux 命令

# 直接从当前 Windows 目录调用 Linux 命令
wsl ls -la

# 访问 Windows 路径时改成 /mnt/<drive> 形式
wsl ls -la /mnt/c/Users

Windows 访问 Linux 文件

# 资源管理器地址栏可直接输入
\\wsl$

# 指定某个发行版
\\wsl$\Ubuntu\home\you\project

Linux 访问 Windows 文件和 Windows 程序

# 访问 Windows 文件
cd /mnt/c/Users/you/project

# 从 WSL 打开资源管理器
explorer.exe .

# 从 WSL 调用 VS Code
code .

经验规则

  • \\wsl$ /mnt/c
  • /mnt/c/...
  • .exe explorer.exe

PATH 与环境变量 >>>

非交互式执行、shell 启动文件和 Windows/WSL 变量传递,是最容易把人绕晕的一段;这里给最小可用规则,不硬讲 shell 教科书。

先记住结论

  • wsl <command>
  • 命令找不到时,先区分是 PATH 问题、shell 初始化问题,还是命令压根没装
  • WSLENV

定位 PATH 问题

# 查看 WSL 中的 PATH
wsl printenv PATH

# 通过交互式 bash 查看 PATH
wsl bash -ic 'printenv PATH'

# 查看命令到底在哪
wsl bash -ic 'command -v node'

常见解决方式

# 方式 1:需要交互式 shell 初始化时,用 bash -ic
wsl bash -ic 'node -v'

# 方式 2:直接使用绝对路径
wsl /usr/bin/env

# 方式 3:把自定义 PATH 放进你实际使用的 shell 启动文件

环境变量传递

# 查看 WSLENV
wsl printenv WSLENV

# 传一个普通变量给 WSL 使用
setx DEMO_HOME C:\demo
setx WSLENV DEMO_HOME/p
  • WSLENV
  • 不要把“Windows 环境变量自动都能在 WSL 里看到”当成规则,默认只把你确认过的变量当成可用

高频排障 >>>

WSL 出问题时,先缩小范围:是发行版、运行时、路径互操作,还是环境差异。

我应该先查什么

现象先执行什么常见原因
wsl 启动异常wsl --statusWSL 组件状态异常
发行版不对 / 默认不对wsl -l -v默认发行版或版本设置不对
单个发行版卡死wsl --terminate <Distro>实例挂起
整体网络或挂载异常wsl --shutdown需要重启整套 WSL 虚拟机
命令找不到wsl bash -ic 'command -v <cmd>'PATH 或 shell 初始化差异
数据迁移前不放心wsl --export <Distro> <File>先做备份

收尾速记

  • wsl --set-version <Distro> 2
  • wsl --set-default <Distro>
  • wsl --status
  • wsl -l -v
  • wsl --shutdown