# WSL（适用于 Linux 的 Windows 子系统）：是什么、安装与配置

URL: https://skillaria.top/zh/guides/linux/wsl-windows-linux-setup

WSL（适用于 Linux 的 Windows 子系统）是 Windows 10 和 11 内置的组件，无需单独的虚拟机即可运行真正的 Linux 发行版。在以管理员身份运行的 PowerShell 中执行一条命令 wsl --install 即可安装；默认安装 WSL 2 和 Ubuntu，其中运行的是轻量虚拟机里真正的 Linux 内核。

适用于 Linux 的 Windows 子系统（WSL，Windows Subsystem for Linux）是 Windows 10 和 11 的组件，可以直接在 Windows 中运行 Linux 发行版：bash 终端、`apt`、`ssh`、`grep`、Docker 以及各种命令行工具都能使用。无需安装 VirtualBox，也无需为第二个系统划分硬盘，Ubuntu 只需几秒钟就能像普通窗口一样打开。下面介绍 WSL 1 与 WSL 2 的区别、安装步骤、文件、VS Code 和图形程序的使用方法，以及常见错误的处理。

## WSL 在 Linux 和 Windows 中是什么

简单来说，WSL 让你无需离开 Windows 就能获得完整的 Linux 开发和学习环境。你可以从命令行或 Microsoft Store 安装发行版（Ubuntu、Debian、openSUSE、Kali、AlmaLinux 等），然后像操作服务器一样使用它：用户、权限、软件包和服务一应俱全。

需要明确的是，WSL 不是 Cygwin 那样的命令模拟器，也不是一组移植过来的工具。在 WSL 2 中运行的是由微软编译的真正的 Linux 内核，因此 Linux 二进制程序无需重新编译即可运行，在 WSL 中学到的技能可以直接用在真正的服务器上。

该子系统的典型用途包括：

- 无需单独的电脑，即可学习 Linux 和命令行；
- 生产环境运行在 Linux 上时的网页开发（Python、Node.js、PHP、Go）；
- Docker Desktop——它使用 WSL 2 作为引擎；
- 通过 SSH 连接服务器、编写 bash 脚本、在熟悉的环境中使用 git。

## WSL 1 与 WSL 2 的区别

该子系统有两种架构。WSL 1 把 Linux 系统调用转换为 Windows 内核的调用，其中并没有真正的 Linux 内核。WSL 2 则在基于 Hyper-V 的轻量虚拟机中运行真正的 Linux 内核，启动只需几秒，并且能自行管理内存。

| 参数 | WSL 1 | WSL 2 |
| --- | --- | --- |

| 内核 | 无，转换系统调用 | 真正的 Linux 内核 |

| 系统调用兼容性 | 部分兼容 | 完全兼容 |

| Docker、systemd | 不支持 | 支持 |

| Linux 文件（`~/`）的速度 | 较慢 | 快 |

| Windows 文件（`/mnt/c`）的速度 | 快 | 明显较慢 |

| 是否需要虚拟化 | 不需要 | 需要 |

| 网络 | 与 Windows 共享 | 独立的虚拟网络（默认 NAT） |

在绝大多数场景下请选择 WSL 2，它也是默认版本。只有在无法开启虚拟化（例如 Windows 本身运行在虚拟机中且不支持嵌套虚拟化），或项目必须存放在 Windows 磁盘上并频繁访问时，WSL 1 才有意义。

## 如何在 Windows 10 和 11 中安装 WSL

在 Windows 11 以及 Windows 10 2004 版（内部版本 19041 及以上）中，安装只需一条命令。以管理员身份打开 PowerShell 或“终端”，然后执行：

```
wsl --install
```

该命令会启用所需的 Windows 组件，下载 WSL 2 内核并安装 Ubuntu。重启后会打开发行版窗口，请设置 Linux 用户名和密码。它们与 Windows 账户无关，这个密码以后用于 `sudo`。

```
Enter new UNIX username: alex
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
```

接下来像对待任何新服务器一样，先更新软件包：

```
sudo apt update && sudo apt upgrade -y
```

### 如何选择发行版

默认安装的是 Ubuntu，但你也可以选择其他发行版。查看可用列表：

```
wsl --list --online
```

按列表中的名称安装指定发行版：

```
wsl --install -d Debian
```

如果 WSL 已经安装，该命令只会添加新的发行版。你可以同时保留多个系统，例如用 Ubuntu 工作，用 Kali 做实验。

### 检查版本：wsl -l -v

查看已安装的发行版、它们的状态以及 WSL 版本：

```
wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
  Debian    Stopped         2
```

星号表示默认发行版，直接运行 `wsl` 时启动的就是它。可以用 `wsl --set-default Debian` 更改默认发行版。

### 如何把 WSL 1 切换为 WSL 2

设置新安装发行版所用的版本：

```
wsl --set-default-version 2
```

已安装的发行版需要单独转换（数据会保留，但过程可能需要几分钟）：

```
wsl --set-version Ubuntu 2
```

反向转换使用 `wsl --set-version Ubuntu 1`。

### 常用的 WSL 管理命令

| 命令 | 作用 |
| --- | --- |

| `wsl` | 打开默认发行版 |

| `wsl -d Debian` | 打开指定发行版 |

| `wsl --shutdown` | 停止所有发行版和 WSL 2 虚拟机 |

| `wsl --terminate Ubuntu` | 停止单个发行版 |

| `wsl --update` | 更新 WSL 和内核 |

| `wsl --status` | 默认版本和总体状态 |

| `wsl --export Ubuntu ubuntu.tar` | 将发行版备份为归档文件 |

| `wsl --import Ubuntu2 D:\wsl\u2 ubuntu.tar` | 恢复或克隆发行版 |

| `wsl --unregister Ubuntu` | 删除发行版及其全部数据 |

使用 `--unregister` 要格外小心：发行版内的文件会被直接删除，无法从回收站恢复。执行前请先用 `--export` 做备份。

## 在 Linux 与 Windows 之间共享文件

Windows 的磁盘会自动挂载到 WSL 的 `/mnt` 目录下：C: 盘对应 `/mnt/c`，D: 盘对应 `/mnt/d`。

```
cd /mnt/c/Users/alex/Downloads
ls -l
cp report.csv ~/projects/
```

反过来，在资源管理器中可以通过网络路径 `\\wsl$\Ubuntu` 访问 Linux 文件（在 Windows 11 中也可以使用 `\\wsl.localhost\Ubuntu`），在侧边栏的“Linux”部分也能找到它们。若要快速在资源管理器中打开当前 Linux 目录，可执行：

```
explorer.exe .
```

在 WSL 中可以运行 Windows 程序（`notepad.exe`、`code`），在 PowerShell 中可以通过前缀运行 Linux 命令：`wsl ls -la`。在两个系统之间转换路径可以使用 `wslpath` 工具：

```
wslpath 'C:\Users\alex'
/mnt/c/Users/alex
```

关于 WSL 2 的性能，最重要的原则是：项目应存放在 Linux 文件系统（`~/projects`）中，而不是 `/mnt/c` 中。访问 Windows 磁盘要经过网络协议，因此在大型项目上执行 `git status` 或 `npm install` 会慢很多倍。

## VS Code 与 WSL

Visual Studio Code 可以像使用远程机器一样使用 WSL：界面仍在 Windows 中，而终端、扩展、解释器和调试器都在 Linux 中运行。这需要安装微软的 WSL 扩展。然后在发行版的终端中进入项目目录并执行：

```
cd ~/projects/site
code .
```

首次启动时，VS Code 会自动在 Linux 中安装服务端组件。左下角会显示“WSL: Ubuntu”指示，说明你在内置终端中运行的所有内容都在 Linux 中执行。Python、ESLint 等扩展需要“在 WSL 中”安装，VS Code 会弹出按钮提示你操作。

## WSL 中的图形程序（WSLg）

在 Windows 11 以及较新版本的 Windows 10 上，WSL 自带 WSLg，无需配置 X 服务器即可运行图形化 Linux 程序。像平常一样安装程序，其窗口会出现在 Windows 窗口旁边，快捷方式则出现在“开始”菜单中。

```
sudo apt install gedit -y
gedit ~/.bashrc &
```

WSLg 支持 X11 和 Wayland、声音以及剪贴板。不过，若想使用完整的 Linux 桌面，它并不能替代：WSL 适合运行单个应用，而不是完整的 GNOME 或 KDE 桌面。

## systemd 与 WSL 2 的资源配置

较新版本的 WSL 2 支持 systemd：在新安装的 Ubuntu 中默认已启用。如果没有启用，请在发行版内的 `/etc/wsl.conf` 文件中添加：

```
[boot]
systemd=true
```

然后在 PowerShell 中重启子系统：`wsl --shutdown`。之后 `systemctl` 以及 nginx、PostgreSQL 等服务即可正常使用。

可以在 Windows 一侧的 `%UserProfile%\.wslconfig` 文件中限制 WSL 2 虚拟机的内存和处理器数量：

```
[wsl2]
memory=4GB
processors=2
```

执行 `wsl --shutdown` 后设置生效。

## 安装 WSL 时的常见错误

### 错误 0x80370102

完整提示为：“无法启动虚拟机，因为缺少必需的组件”（WslRegisterDistribution failed with error: 0x80370102）。这个错误几乎总是由同一个原因引起：WSL 2 无法启动虚拟机。请依次检查：

1. 是否在 BIOS/UEFI 中开启了硬件虚拟化：Intel VT-x（Intel Virtualization Technology）或 AMD-V（SVM Mode）。可在任务管理器的“性能”→“CPU”中查看“虚拟化：已启用”。
2. 是否启用了“虚拟机平台”组件。
3. 是否在引导程序中禁用了 hypervisor。

在以管理员身份运行的 PowerShell 中启用这些组件：

```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
bcdedit /set hypervisorlaunchtype auto
```

之后重启计算机。如果你本身在虚拟机中工作，需要在宿主机上允许嵌套虚拟化，或者改用 WSL 1。

### 其他常见问题

- **0x800701bc**：WSL 2 内核未更新，请执行 `wsl --update`。
- **执行 wsl --install 只显示帮助信息**：WSL 已经安装，请用 `wsl --install -d Ubuntu` 添加发行版。
- **使用 VPN 时 WSL 无法联网**：VPN 客户端会拦截虚拟网络的路由。在 Windows 11 上，可在 `.wslconfig` 的 `[wsl2]` 段中设置 `networkingMode=mirrored` 来解决。
- **WSL 占用大量磁盘空间**：虚拟磁盘 `ext4.vhdx` 会随数据增长，但删除文件后不会自动缩小。可以手动压缩，或使用 `--export`/`--import` 迁移发行版。
- **忘记了 Linux 密码**：在 PowerShell 中以 root 身份登录：`wsl -u root`，然后执行 `passwd alex`。

## WSL、虚拟机还是双系统

WSL 并不是在 Windows 电脑上获得 Linux 的唯一方式，具体选择取决于任务。

| 方案 | 优点 | 缺点 | 适用场景 |
| --- | --- | --- | --- |

| WSL 2 | 秒级启动，共享文件，支持 VS Code 和 Docker | 没有完整的桌面，网络和磁盘有特殊之处 | 开发、学习命令行、脚本 |

| 虚拟机（VirtualBox、Hyper-V、VMware） | 完全隔离，支持快照，可选任何发行版和桌面，独立网卡 | 较重，资源需提前分配 | 服务器演练、网络实验、启动和磁盘分区实验 |

| 双系统 | 充分利用硬件性能，原生图形和驱动 | 切换需要重启，分区操作有风险 | 以 Linux 为主系统、游戏和依赖 GPU 的任务 |

如果想从零开始学习 Linux，WSL 通常已经足够：文件、权限、进程、软件包、bash 脚本和 SSH 的工作方式与服务器上完全相同。当需要处理 WSL 中结构不同的部分时，例如引导程序、物理磁盘分区、网络接口以及宿主机上的防火墙，就需要用到虚拟机。

## 总结

适用于 Linux 的 Windows 子系统只需一条命令 `wsl --install`，就能在 Windows 中获得真正的 Linux。选择 WSL 2，用 `wsl -l -v` 检查版本，把项目放在 `~/` 而不是 `/mnt/c` 中，并通过 WSL 扩展连接 VS Code。如果安装时出现 0x80370102，请在 BIOS 中开启虚拟化，并启用“虚拟机平台”组件。这样就搭建好了学习 Linux 的工作环境，接下来的实践将在课程中展开。

## FAQ

**WSL 是免费的吗？**

是的。WSL 包含在所有版本的 Windows 10 和 11 中，包括家庭版，Linux 发行版也都是免费分发的。

**能在 WSL 中运行 Docker 吗？**

可以，但只能在 WSL 2 中。你可以安装使用 WSL 2 引擎的 Docker Desktop，也可以像在普通 Ubuntu 服务器上那样直接在发行版中安装 Docker Engine。

**WSL 发行版的文件实际存放在哪里？**

在 WSL 2 中，它们存放在 Windows 用户配置文件下的虚拟磁盘 ext4.vhdx 中。无需直接打开该文件，在资源管理器中使用 \\wsl$\ 路径即可访问。

**如何完全卸载 WSL？**

先用 wsl --unregister  删除发行版，然后在“已安装的应用”中卸载“适用于 Linux 的 Windows 子系统”，必要时再关闭对应的 Windows 组件。

**能把 WSL 迁移到其他磁盘上吗？**

可以：先执行 wsl --export Ubuntu ubuntu.tar，再执行 wsl --unregister Ubuntu，最后执行 wsl --import Ubuntu D:\wsl\ubuntu ubuntu.tar。新版本还提供了命令 wsl --manage Ubuntu --move。


---
Source: Skillaria.Top (https://skillaria.top)
