第一部分:WSL 核心概念
1.1 WSL 是什么?
| 项目 | 说明 |
|---|
| 全称 | Windows Subsystem for Linux |
| 本质 | 在 Windows 上原生运行 Linux 环境的技术,无需安装传统虚拟机 |
| 两大版本 | WSL 1:系统调用翻译层(轻量,跨 OS 文件访问快) WSL 2:轻量虚拟机 + 完整 Linux 内核(主流推荐,支持 Docker) |
1.2 核心术语
| 术语 | 含义 |
|---|
| 发行版 (Distro) | 每个独立的 Linux 系统实例,如 Ubuntu-24.04、Debian 等。发行版之间完全隔离,互不干扰 |
| 默认发行版 | 直接敲 wsl 命令时进入的那个发行版(列表里带 * 号) |
| 虚拟硬盘 (.vhdx) | 每个发行版的实际存储文件,包含整个 Linux 根文件系统。默认位于 C 盘 AppData\Local\Packages\...\LocalState\ 下 |
| WSL 2 | 基于 Hyper-V 的轻量虚拟机,提供完整 Linux 内核,兼容性极佳,Docker 必须运行在 WSL 2 上 |
| WSL 1 | 通过翻译 Linux 系统调用来工作,无需虚拟化。访问 Windows 文件(/mnt/c/)速度比 WSL 2 快,但部分功能受限 |
第二部分:日常使用命令速查
① 查看信息
| 命令 | 作用 |
|---|
wsl -l -v | 查看所有发行版及状态(最常用) |
wsl --status | 查看 WSL 全局状态(默认版本、内核等) |
wsl --version | 查看 WSL 组件版本 |
wsl -d <发行版> -e uname -a | 查看指定发行版的内核信息 |
② 启动与进入
| 命令 | 作用 |
|---|
wsl | 进入默认发行版 |
wsl -d <发行版名> | 进入指定发行版 |
wsl --start <发行版名> | 后台启动发行版(不进入终端) |
③ 停止与关闭
| 命令 | 作用 |
|---|
wsl -t <发行版名> | 停止指定的发行版 |
wsl --shutdown | 停止所有发行版(卡顿/配置修改后首选) |
④ 设置与管理
| 命令 | 作用 |
|---|
wsl --set-default <发行版名> | 设置默认发行版 |
wsl --set-version <发行版名> <1/2> | 切换 WSL 版本(1 或 2) |
wsl --update | 更新 WSL 内核组件 |
wsl --unregister <发行版名> | 删除/注销发行版(⚠️ 数据会丢失) |
⑤ WSL 内部互操作命令(在 WSL 终端内执行)
| 命令 | 作用 |
|---|
explorer.exe . | 在 Windows 文件资源管理器打开当前目录 |
code . | 用 VS Code 打开当前目录 |
notepad.exe 文件名 | 用 Windows 记事本编辑文件 |
wslpath "C:\Users\..." | Windows 路径 → WSL 路径 |
wslpath -w /home/用户名 | WSL 路径 → Windows 路径 |
/mnt/c/ | WSL 内访问 Windows C 盘的挂载点 |
第三部分:配置文件 .wslconfig
文件位置
C:\Users\你的用户名\.wslconfig
示例配置
[wsl2]
memory=4GB # 限制总内存
processors=2 # 限制 CPU 核心数
swap=2GB # 交换分区大小
localhostForwarding=true # 端口转发(用于 localhost 访问)
nestedVirtualization=true # 嵌套虚拟化(用于在 WSL 内运行虚拟机)
dnsTunneling=true # DNS 隧道
⚙️ 生效方法
wsl --shutdown # 关闭所有 WSL 后重新启动生效
第四部分:备份与迁移
4.1 快速迁移法:--move(推荐,WSL 2.7+ 支持)
# 0.查看版本
wsl --version
WSL 版本: 2.7.10.0
内核版本: 6.18.33.2-2
WSLg 版本: 1.0.73.2
MSRDC 版本: 1.2.6676
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows: 10.0.26100.4946
# 1. 关闭所有 WSL
wsl --shutdown
# 2. 创建目标目录
mkdir D:\WSL
# 3. 执行迁移
wsl --move Ubuntu-24.04 D:\WSL\Ubuntu-24.04
# 4. 验证
wsl -l -v
wsl -d Ubuntu-24.04
优点:一条命令完成,默认用户保留,速度快
4.2 通用迁移法:export + import(适用于所有版本)
流程图
导出 (export) → 注销 (unregister) → 导入 (import)
↓ ↓ ↓
生成 .tar 删除原系统 在新位置重建
备份文件 释放 C 盘空间 (保留数据)
完整命令
# 1. 导出备份
wsl --export Ubuntu-24.04 D:\Ubuntu-backup.tar
# 2. 注销原系统(释放 C 盘空间)
wsl --unregister Ubuntu-24.04
# 3. 创建目标目录并导入
mkdir D:\WSL\Ubuntu-24.04
wsl --import Ubuntu-24.04 D:\WSL\Ubuntu-24.04 D:\Ubuntu-backup.tar --version 2
# 4. ⚠️ 恢复默认用户(import 后默认用户是 root)
Ubuntu-24.04 config --default-user 你的用户名
# 5. 验证并清理备份文件
wsl -l -v
del D:\Ubuntu-backup.tar
4.3 两种迁移方式对比
| 对比项 | --move | export/import |
|---|
| 操作步骤 | 1 条命令 | 3 步 |
| 需要备份文件 | ❌ 不需要 | ✅ 需要 |
| 默认用户保留 | ✅ 自动保留 | ❌ 需手动恢复 |
| 速度 | 快 | 较慢 |
| 适用版本 | 新版 WSL(2.7+) | 所有版本 |
| 推荐度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
第五部分:Docker 与 WSL 的关系
5.1 Docker Desktop 的架构
text
┌────────────────────────────────────────────────────────────────┐
│ Docker Desktop │
├────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────┐ ┌─────────────────────────────┐ │
│ │ docker-desktop │ │ docker-desktop-data │ │
│ │ (Docker 引擎) │ │ (镜像/容器/卷数据) │ │
│ │ 运行 dockerd │ │ 存储所有 Docker 数据 │ │
│ └────────┬───────────┘ └──────────────┬──────────────┘ │
│ │ │ │
│ └───────────────┬───────────────┘ │
│ │ │
│ ┌─────────▼─────────┐ │
│ │ Ubuntu-24.04 │ ◄── WSL Integration │
│ │ (你的工作环境) │ 让 Ubuntu 内能 │
│ │ 敲 docker 命令 │ 调用 Docker 引擎 │
│ └───────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────┘
5.2 两个 Docker 专属发行版
| 发行版名称 | 核心作用 | 能否删除 |
|---|
docker-desktop | 运行 Docker 引擎 (dockerd),负责容器生命周期 | ❌ 绝对不能 |
docker-desktop-data | 存储所有 Docker 数据(镜像、容器、卷) | ⚠️ 删了就丢数据 |
5.3 Docker Desktop 设置:WSL Integration
作用:让指定的 WSL 发行版能直接使用 Docker 命令。
在 Docker Desktop 设置中:
- Enable integration with my default WSL distro:勾选后,默认发行版(你的
Ubuntu-24.04)可以使用 Docker
- Enable integration with additional distros:额外勾选其他发行版
工作原理:
你在 Ubuntu 终端敲的 docker ps 命令,通过网络通信发给 docker-desktop 里的 Docker 引擎执行。
5.4 Docker 相关空间占用与释放
| 存储位置 | 内容 | 释放方法 |
|---|
docker-desktop-data | 镜像、容器、卷 | docker system prune -a --volumes |
docker-desktop | 引擎本身 | 不需要动 |
Ubuntu 内的 /var/lib/docker | 如果直接用 Docker 引擎(非 Desktop) | 同上 |
5.5 常见 Docker + WSL 操作场景
| 场景 | 操作 |
|---|
| 停止 Docker(释放内存) | 右键系统托盘 Docker 图标 → Quit Docker Desktop |
| Docker 无法启动 | 执行 wsl --shutdown 后重启 Docker Desktop |
| 在 Ubuntu 里运行 Docker | 确保 WSL Integration 已开启,直接敲 docker 命令 |
| 清理 Docker 数据释放空间 | 在 Ubuntu 里执行 docker system prune -a --volumes |
| 迁移 Docker 数据到 D 盘 | 用 wsl --move docker-desktop-data D:\WSL\docker-desktop-data |
第六部分:你的当前环境状态
text
PS C:\Users\ASUS> wsl -l -v
NAME STATE VERSION
* Ubuntu-24.04 Running 2 ← 默认,日常工作环境
docker-desktop Running 2 ← Docker 引擎(不要动)
Ubuntu Stopped 2 ← 旧版,可清理
WSL 版本: 2.7.10.0 ✅ 支持 --move 命令
第七部分:常见问题速答
| 问题 | 答案 |
|---|
| WSL 默认装在哪里? | C 盘 AppData\Local\Packages\...\LocalState\ext4.vhdx |
| 能搬到其他盘吗? | 能,用 wsl --move(推荐)或 export/import |
| 删了文件 C 盘没变小? | vhdx 文件不会自动缩小,需迁移到新盘重建 |
能直接删 docker-desktop 吗? | ❌ 不能,会破坏 Docker Desktop |
| 旧 Ubuntu 能删吗? | ✅ 能,确认无数据后用 wsl --unregister Ubuntu |
| WSL 卡顿怎么办? | wsl --shutdown 重启所有发行版 |
| 怎么限制 WSL 内存? | 编辑 C:\Users\ASUS\.wslconfig,设 memory=4GB |
| 迁移后默认用户是 root? | 用 <发行版名> config --default-user 用户名 改回 |
| 如何快速打开 WSL 文件位置? | 进入 WSL 后执行 explorer.exe . |
第八部分:避坑小贴士
| 问题 | 解决方案 |
|---|
访问 /mnt/c/ 文件很慢 | 把文件复制到 WSL 内部(如 /home/)再操作 |
| 磁盘空间被 Docker 吃光 | docker system prune -a --volumes |
导入后显示 The path is already in use | 目标文件夹不能存在,删除或换一个路径 |
--move 报错 "in use" | 先执行 wsl --shutdown |
| 不同发行版之间文件怎么共享? | 通过 /mnt/ 或 Windows 资源管理器(explorer.exe .) |