教程

WSL(适用于 Linux 的 Windows 子系统):是什么、安装与配置

更新于: · Skillaria.Top

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 1WSL 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 的工作环境,接下来的实践将在课程中展开。

常见问题

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?

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

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

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

通过视频学习本主题

课程“Linux: с нуля до уверенного администрирования”结合实践详细讲解了这一主题。

前往课程