Skip to content

WSL 概述

微软 WSL 官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/

什么是 WSL?

WSL 是 Windows Subsystem for Linux 的缩写,意思是适用于 Linux 的 Windows 子系统。WSL 可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境(包括大多数命令行工具、实用工具和应用程序),且不会产生传统虚拟机或双启动设置开销。

WSL 可以用于:

  • 在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。
  • 运行常用的命令行软件工具(例如 grep、sed、awk)或其他 ELF-64 二进制文件。
  • 运行 Bash shell 脚本和 GNU/Linux 命令行应用程序,包括:
    • 工具:vim、emacs、tmux
    • 语言:NodeJS、Javascript、Python、Ruby、C/C++、C# 与 F#、Rust、Go 等
    • 服务:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQL。
  • 使用自己的 GNU/Linux 分发包管理器安装其他软件。
  • 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
  • 在 Windows 上调用 GNU/Linux 应用程序。
  • 运行直接集成到 Windows 桌面的 GNU/Linux 图形应用程序
  • 将 GPU 加速用于机器学习、数据科学场景等

使用 WSL 的好处是:

  • 与在虚拟机下使用 Linux 相比,WSL 占用资源更少,更加流畅;
  • WSL 可以对 Windows 文件系统下的文件直接进行读写,文件传输更方便;
  • 剪贴板互通,可以直接在 Windows 下其它地方复制文本内容,粘贴到 WSL;

什么是 WSL 2?

WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性

单个 Linux 分发版可以在 WSL 1 或 WSL 2 体系结构中运行。每个分发版可随时升级或降级,并且可以并行运行 WSL 1 和 WSL 2 分发版。WSL 2 使用全新的体系结构,该体系结构受益于运行真正的 Linux 内核。

WSL 版本对比

目前 WSL 的版本分别是:WSL 1 和 WSL 2

WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。 WSL 2 是安装 Linux 发行版时的当前默认版本,它使用最新最好的虚拟化技术在轻量级实用工具虚拟机 (VM) 内运行 Linux 内核。

功能对比表:

功能WSL 1WSL 2
Windows 和 Linux 之间的集成
启动时间短
与传统虚拟机相比,占用的资源量少
可以与当前版本的 VMware 和 VirtualBox 一起运行
托管 VM
完整的 Linux 内核
完全的系统调用兼容性
跨 OS 文件系统的性能

Notes: WSL 2 适用于 VMware 15.5.5+VirtualBox 6+。有关详细信息,请参阅常见问题解答

Microsoft Store 中的 WSL

WSL 已将更新功能从 Windows OS 映像提取到一个包中,该包可通过 Microsoft Store 获得。一旦更新和服务可用就会进行快速更新并提供服务,而无需等待 Windows 操作系统的更新。

WSL 最初作为可选组件包含在 Windows 操作系统中,需要启用该组件才能安装 Linux 发行版。 Microsoft Store 中的 WSL 具有相同的用户体验,并且是相同的产品,但作为商店包而不是整个 OS 更新接收更新和服务。从 Windows 版本 19044 或更高版本开始,运行 wsl.exe --install 命令将从 Microsoft Store 安装 WSL 服务更新。 如果已经在使用 WSL,则可以更新以确保通过运行 wsl.exe --update 从商店接收最新的 WSL 功能和服务。

WSL 的基本命令

以下 WSL 命令以 PowerShell 或 Windows 命令提示符支持的格式列出。若要通过 Bash/Linux 发行版命令行运行这些命令,必须将 wsl 替换为 wsl.exe。若要获取完整的命令列表,请运行 wsl --help

Help 命令

PowerShell
wsl --help

查看 WSL 中可用的选项和命令列表。

安装

安装 WSL 和 Linux 的默认 Ubuntu 发行版:

PowerShell
wsl --install

安装其他 Linux 发行版:

PowerShell
wsl --install <Distribution Name>

命令选项说明:

  • --distribution:指定要安装的 Linux 发行版。可以通过运行 wsl --list --online 来查找可用的发行版。
  • --no-launch:安装 Linux 发行版,但不自动启动它。
  • --web-download:通过联机渠道安装,而不是使用 Microsoft Store 安装。

未安装 WSL 时,选项包括:

  • --inbox:使用 Windows 组件(而不是 Microsoft Store)安装 WSL。(WSL 更新将通过 Windows 更新接收,而不是通过 Microsoft Store 中推送的可用更新来接收)。
  • --enable-wsl1:在安装 Microsoft Store 版本的 WSL 的过程中也启用“适用于 Linux 的 Windows 子系统”可选组件,从而启用 WSL 1。
  • --no-distribution:安装 WSL 时不安装发行版。

Notes: 如果在 Windows 10 或更低版本上运行 WSL,可能需要在 --install 命令中包含 -d 标志以指定发行版:wsl --instal -d <distribution name>

查询 Linux 发行版

列出可用的 Linux 发行版

PowerShell
wsl --list --online

查看可通过在线商店获得的 Linux 发行版列表。此命令也可以简化为:

PowerShell
wsl -l -o

列出已安装的 Linux 发行版

PowerShell
wsl --list --verbose

查看安装在 Windows 计算机上的 Linux 发行版列表,其中包括状态(发行版是正在运行还是已停止)和运行发行版的 WSL 版本(WSL 1 或 WSL 2)。此命令也可以简化为:

PowerShell
wsl -l -v

其他选项

可与 list 命令一起使用的其他选项包括:--all(列出所有发行版)、--running(仅列出当前正在运行的发行版)或 --quiet(仅显示发行版名称)。

WSL 设置

设置 WSL 版本

PowerShell
wsl --set-version <distribution name> <versionNumber>

指定运行 Linux 发行版的 WSL 版本(1 或 2)。参数说明:

  • <distribution name> 发行版的名称
  • <versionNumber> 版本号

设置默认 WSL 版本

PowerShell
wsl --set-default-version <Version>

设置默认使用安装的 Linux 发行版的版本。参数说明:

  • <Version> 版本号,取值为数字 1 或 2。

例如设置默认使用 WSL 2 版本,wsl --set-default-version 2

设置默认 Linux 发行版

PowerShell
wsl --set-default <Distribution Name>

设置 WSL 命令将用于运行的默认 Linux 发行版。参数说明:

  • <Distribution Name> Linux 发行版的名称。

设置发行版的默认用户

PowerShell
<DistributionName> config --default-user <Username>

设置用于发行版登录的默认用户。注意:用户必须已经存在于发行版中才能成为默认用户。例如:

PowerShell
ubuntu config --default-user johndoe

将 Ubuntu 发行版的默认用户更改为“johndoe”用户。

警告:此命令不适用于导入的发行版,因为这些发行版没有可执行启动器。可以改为使用 /etc/wsl.conf 文件来更改导入的发行版的默认用户。

WSL 操作

通过 PowerShell 或 CMD 运行特定的 Linux 发行版

PowerShell
wsl --distribution <Distribution Name> --user <User Name>

通过特定用户运行特定 Linux 发行版。参数说明:

  • <Distribution Name> 指定 Linux 发行版的名称(例如 Debian)
  • <User Name> 现有用户的名称(例如 root)。如果指定 WSL 发行版中不存在该用户,将报错误。

Tips: 通过 whoami 命令可以输出当前用户名。

更新 WSL

PowerShell
wsl --update

更新 WSL 到最新版本。选项包括:

  • --web-download:从 GitHub 而不是 Microsoft Store 下载最新更新。

检查 WSL 状态

PowerShell
wsl --status

查看有关 WSL 配置的常规信息,例如默认发行版类型、默认发行版和内核版本。

检查 WSL 版本

PowerShell
wsl --version

检查有关 WSL 及其组件的版本信息。

以特定用户的身份运行

PowerShell
wsl -u <Username>
# 或者
wsl --user <Username>

指定用户身份运行 WSL。参数说明:

  • <Username> WSL 发行版中存在的用户名

关闭 WSL

PowerShell
wsl --shutdown

立即终止所有正在运行的发行版和 WSL 2 轻量级实用工具虚拟机。例如更改内存使用限制或更改 .wslconfig 文件等需要重启 WSL 2 虚拟机环境的情形时,必须使用此命令。

终止运行 WSL

PowerShell
wsl --terminate <Distribution Name>

终止或阻止运行指定的发行版。参数说明:

  • <Distribution Name> 目标发行版的名称。

将目录更改为主页

PowerShell
wsl ~

~ 可与 wsl 一起使用,以在用户的主目录中启动。若要在 WSL 命令提示符中从任何目录跳回到主目录,可使用命令 cd ~

导入和导出发行版

PowerShell
# 导出
wsl --export <Distribution Name> <FileName>
# 导入
wsl --import <Distribution Name> <InstallLocation> <FileName>

将指定 tar 文件导入和导出为新的发行版。在标准输入中,文件名可以是 -。选项包括:

  • --vhd:指定导入/导出发行版应为 .vhdx 文件,而不是 tar 文件
  • --version:(仅导入)指定将发行版导入为 WSL 1 还是 WSL 2 发行版

也可以将指定的 .vhdx 文件导入为新的发行版。虚拟硬盘必须采用 ext4 文件系统类型格式:

PowerShell
wsl --import-in-place <Distribution Name> <FileName>

注销或卸载 Linux 发行版

可以通过 Microsoft Store 安装 Linux 发行版,但无法通过 Store 将其卸载。注销并卸载 WSL 发行版需要执行以下命令:

PowerShell
wsl --unregister <DistributionName>

参数说明:

  • <DistributionName> 指定目标 Linux 发行版的名称,将从 WSL 取消注册该发行版,以便可以重新安装或清理它。

警告:取消注册后,与该分发版关联的所有数据、设置和软件将永久丢失。从 Store 重新安装会安装分发版的干净副本。例如:wsl --unregister Ubuntu 将从可用于 WSL 的发行版中删除 Ubuntu。运行 wsl --list 将会显示它不再列出。

还可以像卸载任何其他应用商店应用程序一样卸载 Windows 计算机上的 Linux 发行版应用。若要重新安装,请在 Microsoft Store 中找到该发行版,然后选择“启动”。

装载磁盘或设备

PowerShell
wsl --mount <DiskPath>

通过将 <DiskPath> 指为物理磁盘所在的目录 \ 文件路径,在所有 WSL2 发行版中附加和装载该磁盘。参数说明:

  • --vhd:指定 <Disk> 引用虚拟硬盘。
  • --name:使用装入点的自定义名称装载磁盘。
  • --bare:将磁盘附加到 WSL2,但不进行装载。
  • --type <Filesystem>:装载磁盘时使用的文件系统类型默认为 ext4(如果未指定)。此命令也可输入为:wsl --mount -t <Filesystem>。可以使用 blkid <BlockDevice> 命令检测文件系统类型,例如:blkid <dev/sdb1>
  • --partition <Partition Number>:要装载的分区的索引号默认为整个磁盘(如果未指定)。
  • --options <MountOptions>:装载磁盘时,可以包括一些特定于文件系统的选项。例如,wsl --mount -o "data-ordered"wsl --mount -o "data=writeback 之类的 ext4 装载选项。但是,目前仅支持特定于文件系统的选项。不支持通用选项,例如 rorwnoatime

Notes: 如果运行的是 32 位进程来访问 wsl.exe(一种 64 位工具),那么可能需要按如下方式运行此命令:C:\Windows\Sysnative\wsl.exe --command

卸载磁盘

PowerShell
wsl --unmount <DiskPath>

卸载磁盘路径中给定的磁盘,如果未提供磁盘路径,则此命令将卸载并分离所有已装载的磁盘。

参考资料

I know where dry desert ends, green grass grows · MooN