适用于 Window 的 Linux 子系统(WSL)的指南

内容纲要

什么是 WSL

WSL (Windows Subsystem for Linux) 让开发人员可以直接在 Windows 上运行 Linux 环境,包括命令行工具和应用程序,而无需传统虚拟机或双引导设置的开销。

WSL 特别帮助 Web 开发人员和那些使用 Bash 和 Linux 优先工具 (如 Ruby、Python) 的开发人员在 Windows 上使用他们的工具链,并确保开发和生产环境之间的一致性。

WSL 1、WSL 2 和 WSL 1.0

WSL 历史上有两个大版本为 WSL 1 和 WSL 2,WSL 2 相比 WSL 1 是在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。

WSL 1 在形式上更像是 Windows 的子系统但却缺乏完整的 Linux 内核和完全的系统调用兼容性,不过 WSL 2 也不是尽善尽美,WSL 2 的跨 OS 文件系统的性能就没有 WSL 1 好

如果你对 WSL 的版本比较感兴趣可以查看微软官网的 比较 WSL 版本

那么 WSL 1.0 是什么,WSL 1.0 实际上是 WSL 2 的正式版,从这个命名可以看出大概率之后 WSL 1 会停止支持的 (尽管目前你仍旧可以随意切换),现在在较新的 Windows 10 和 Windows 11 默认安装使用的就是 WSL 2 了,并且如 Docker Desktop 也会建议使用 WSL 2 最为后端而不是 Hyper-V (因为前者性能比后者更好),所以个人建议就直接开始使用 WSL 2 吧

部署

安装

使用 WSL 建议使用尽可能新的 Windows 版本,如 Windows 10 2004 版本及更高版本 (内部版本 19041 及更高版本) 或 Windows 11,否则相关命令也会有所不同。

另外,在开始前建议安装并使用 Windows Terminal

目前微软提供了几个 Linux 发行版可供选择:

wsl --list --online
以下是可安装的有效分发的列表。
使用‘wsl.exe --install <Distro>'安装。

NAME                                   FRIENDLY NAME
Ubuntu                                 Ubuntu
Debian                                 Debian GNU/Linux
kali-linux                             Kali Linux Rolling
Ubuntu-18.04                           Ubuntu 18.04 LTS
Ubuntu-20.04                           Ubuntu 20.04 LTS
Ubuntu-22.04                           Ubuntu 22.04 LTS
OracleLinux_8_5                        Oracle Linux 8.5
OracleLinux_7_9                        Oracle Linux 7.9
SUSE-Linux-Enterprise-Server-15-SP4    SUSE Linux Enterprise Server 15 SP4
openSUSE-Leap-15.4                     openSUSE Leap 15.4
openSUSE-Tumbleweed                    openSUSE Tumbleweed

继续通过命令安装 WSL:

# 默认仅使用 --install 将安装 Ubuntu
wsl --install

# 或指定一个发行版,如 Debian
wsl --install --distribution Debian

如果你并不熟悉 Linux 那么使用默认的 Ubuntu 是一个不错的选择,它是一个使用友好的 Linux 发行版

WSL 会从 Microsoft Store 下载和安装适用于 WSL 的 Linux 发行版

在某些情况下你可能无法或不愿使用 Microsoft Store 来安装 WSL 的 Linux 发行版,你可以查阅微软官方文档的 下载发行版导入任何 Linux 分发版 来解决该问题

在安装完第一次启动发行版时,系统会要求你设置一个用于发行版的普通用户名和密码

如果你对于 Linux 不太熟悉,只需要注意:

  1. 在 Linux 上一般特权账号是 root
  2. 在提示 Enter new UNIX username 时输入需要你创建的非特权账号;
  3. 在 Linux 中一般输入密码是不会出现 * 号,只管输入即可;
  4. 有一些命令是需要权限的,一般来说如 Debian/Ubuntu 的 WSL 都预装了 sudo,那么在需要权限的命令前加上 sudosudo apt update,或是忘记加上时紧接着使用命令 sudo !! (意为使用 sudo 运行上一条命令) 即可;

更新

同样的,WSL 当前也已经上架到了 Microsoft Store 因此 WSL 可以独立于操作系统的更新中获得改进,而无需依赖 Windows Update,所以当需要更新 WSL 可以在 Microsoft Store 手动检查更新或使用命令:

 wsl --update

当然如果你无法或不愿使用 Microsoft Store 来更新 WSL 也可以使用命令来指定从 GitHub 而不是 Microsoft Store 下载最新更新:

wsl --update --web-download

基本命令

# 检查 WSL 版本
wsl --version

# 检查 WSL 状态
wsl --status

# 获取 WSL 帮助命令
wsl --help

# 关闭 WSL
wsl --shutdown

# 列出已安装的 Linux 发行版
wsl --list --verbose

# 设置默认 Linux 发行版
wsl --set-default <发行版名称>

# 注销并卸载 WSL 发行版
wsl --unregister <发行版名称>

更多命令可查看 WSL 的基本命令

在 WSL 中远程开发

在 Windows 和 Linux 文件系统之间工作时,有一些注意事项:

例如尽管可以在 WSL 中使用命令进入到 Windows 目录,如进入到 C 盘根目录下的 project 目录 (cd /mnt/c/project),这样就可以使用安装在 WSL 中的开发工具给 Windows 中的开发项目部署开发环境 (如安装在 WSL 中的 Node.js 给在 Windows 中的项目 npm install),但注意,这是不推荐的,微软建议不要跨操作系统使用文件,这也是前面提到的 WSL 2 有一个「跨 OS 文件系统的性能」的劣势。

建议的做法是将项目文件也放入 WSL 中,然后在 Windows 中编辑代码文件,如何操作以及运行和调试它们呢?

VS Code

如果使用的是 VS Code ,那么只需要安装 Remote - WSL 扩展,它极为方便并且使用体验友好,以下是一些它的特性:

  • 在基于 Linux 的环境中进行开发;
  • 使用特定于 Linux 的工具链和实用程序;
  • 从 Windows 轻松地运行和调试基于 Linux 的应用程序,同时保持对 Outlook 和 Office 等生产力工具的访问;
  • 使用 VS Code 内置终端来运行选择的 Linux 发行版;
  • 利用 VS Code 功能,例如Intellisense 代码完成、linting、调试支持、代码片段和单元测试;
  • 使用 VS Code 的内置 Git 支持轻松管理版本控制;
  • 直接在 WSL 项目上运行命令和 VS Code 扩展;
  • 在 Linux 或已装载的 Windows 文件系统(例如 /mnt/c)中编辑文件,而无需担心路径问题、二进制兼容性或其他跨 OS 难题;

适用于 Window 的 Linux 子系统(WSL)的指南

安装 Remote - WSL 扩展后打开任意 WSL 的目录,看到 VS Code 左下角显示连接成功后即可

个人认为,至少在当前 VS Code 配合 Remote - WSL 扩展是基于 WSL 开发的最佳选择

JetBrains IDE

那么如果是使用 JetBrains 的 IDE 呢?

最简单的方法是在打开项目时选择 \\wsl$,如:

适用于 Window 的 Linux 子系统(WSL)的指南

也可以尝试使用 JetBrains 仍处于测试阶段的远程开发工具:JetBrains Gateway,JetBrains Gateway 通过 SSH 访问远程后端上运行的 IntelliJ IDE。

你可以下载安装 JetBrains Gateway 或在任意已安装的 JetBrains IDE 的「File」选择「Remote Development」>「WSL」

适用于 Window 的 Linux 子系统(WSL)的指南

选择「Connect to WSL」

适用于 Window 的 Linux 子系统(WSL)的指南

选择存放开发项目的 WSL 实例

适用于 Window 的 Linux 子系统(WSL)的指南

然后会要求在远程主机 (此处是 WSL) 上选择并安装一个 IDE 在远程主机上作为后端,然后下面选择开发项目的具体路径

如果你不是很了解 Linux,建议将个人文件统一放到用户主目录下,例如你的 Linux 非特权用户名为 toor,那么它的主目录一般为 /home/toor

适用于 Window 的 Linux 子系统(WSL)的指南

等待下载安装完成后就会自动连接上 WSL 中的 IDE 并打开项目了