WSL2 全指南:MSI 安装、镜像导入与基础配置

在 Windows 上使用 Linux 时,双系统需要反复重启切换,传统虚拟机(VMware/VirtualBox)又占用整机内存、图形界面开销大,日常命令行工作显得笨重。日常只想要一个干净的 Linux 终端跑命令、编译、部署脚本时,需要一条更轻的路径。

WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统) 是微软提供的一层兼容层,让你直接在 Windows 内运行原生 Linux 发行版,无需重启、无需桌面虚拟机。WSL 2 在真实 Linux 内核上运行发行版,兼容性和性能已接近裸机。

WSL 2 的核心优势:

  • 免重启:Windows 与 Linux 并存,一个终端窗口随时进出。
  • 低开销:按需启动、按需回收内存,闲置时几乎不占资源。
  • 真实内核:WSL 2 基于完整 Linux 内核,支持 Docker、systemd、绝大多数 Linux 软件。
  • 文件互通:Windows 盘挂载到 /mnt/c,也能从 Windows 侧直接访问 Linux 文件。
  • GUI 支持:WSLg 可直接运行图形程序(Windows 11)。

本文将以 Ubuntu 26.04 LTS 为例,从环境要求、MSI 安装、镜像导入、用户与 sudo 设置、APT 换源(传统格式与 DEB822 格式)、Locale 中文显示到关闭终端响铃与故障排除,带你完成一套完整的 WSL 2 环境搭建。

目录


1. 环境要求与前置准备

1.1 系统版本要求

WSL 2 对 Windows 版本有最低要求。按 Win + R 输入 winver 检查版本:

系统要求
Windows 10版本 1903 或更高,内部版本(Build)≥ 18362
Windows 11所有版本均支持

提示:WSL 的 systemd 启动(Docker、systemctl 等依赖)仅在 Windows 11 与 Windows Server 2022 上可用,Windows 10 无法使用 systemd 启动。

1.2 开启硬件虚拟化

WSL 2 基于虚拟化技术运行,需要在主板 BIOS/UEFI 中启用虚拟化:

  1. 打开「任务管理器」→「性能」→「CPU」。
  2. 查看右下角「虚拟化」是否显示 已启用
  3. 若未启用,重启进入 BIOS/UEFI,将 Intel VT-x(Intel)或 AMD-V(AMD)设为 Enabled

1.3 启用 Windows 功能

方法 A:图形界面

Win + S 搜索并打开「启用或关闭 Windows 功能」,勾选以下两项:

  • 适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux)
  • 虚拟机平台(Virtual Machine Platform)

点击确定并重启电脑。

方法 B:命令行(管理员权限)

以管理员身份运行 PowerShell,执行:

# 启用 WSL(/all 同时启用所有必要子功能,/norestart 不在本次命令后立即重启)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
 
# 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

执行完毕后手动重启电脑


2. 安装 WSL:MSI 离线安装

2.1 下载 MSI 安装包

访问 WSL GitHub Releases,下载最新的 .msi 安装包。以下载 WSL 2.7.11(2026-07-24 发布)为例:

https://github.com/microsoft/WSL/releases/download/2.7.11/wsl.2.7.11.0.x64.msi

不同架构的包名区别:

安装包适用架构说明
wsl.2.7.11.0.x64.msiIntel/AMD 64 位绝大多数 PC 使用
wsl.2.7.11.0.arm64.msiARM64(如骁龙 PC)ARM 设备使用
Microsoft.WSL_*.msixbundlex64 + ARM64 双架构商店格式,含两个架构

2.2 安装并重启

双击 .msi 安装,安装完成后需要重启电脑。重启后验证安装:

wsl --version   # 输出 WSL 内核版本与 Windows 版本信息

若输出版本号(如 WSL 版本: 2.7.11.0),说明安装成功。若提示 wsl: command not found,说明未安装或需要重启后再试。

2.3 设置 WSL 2 为默认版本

# 让之后新安装/导入的发行版默认使用 WSL 2(而非旧的 WSL 1)
wsl --set-default-version 2

提示:也可用 wsl --install(无参数)走在线安装流程。本指南使用 MSI 离线安装,适合网络受限或需要固定版本的环境。


3. 导入 Ubuntu 26.04 镜像

3.1 下载镜像

Ubuntu 官方为 WSL 提供专用的 .wsl 镜像文件。国内网络建议使用清华镜像源下载,目录为 ubuntu-releases/

https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/26.04/ubuntu-26.04-wsl-amd64.wsl

其中 26.04 是版本号,Ubuntu 26.04 LTS 代号为 Resolute Raccoon,发布于 2026-04-23。若版本更新,可在 镜像目录 中查看最新版本。

3.2 校验镜像完整性(可选但建议)

下载同目录下的 SHA256SUMS,用 PowerShell 计算哈希并比对:

# 计算下载文件的 SHA256 哈希
Get-FileHash -Path "$env:USERPROFILE\Downloads\ubuntu-26.04-wsl-amd64.wsl" -Algorithm SHA256

ubuntu-26.04-wsl-amd64.wsl 为例,正确哈希为:

96c7f5fb28a7fe28245331f9bfbe4375f18dd29a4850116ad3c4f60f6700c55c

若本地计算的哈希与官方一致,说明文件完整未被篡改。

3.3 导入发行版

方法 A(推荐):wsl --install --from-file

.wsl 是 WSL 的原生镜像格式,--from-file 会保留镜像自带的发行版元数据(如默认用户):

# --from-file 指定 .wsl 镜像;--name 指定发行版名;--location 指定安装位置
wsl --install --from-file C:\Users\59507\Downloads\ubuntu-26.04-wsl-amd64.wsl --name ubuntu-26.04 --location C:\linux\ubuntu-26.04

方法 B:wsl --import

传统方式,把 .wsl(本质是 tar 包)作为 rootfs 导入:

# --import 后依次为发行版名、安装目录、镜像文件路径
wsl --import ubuntu-26.04 C:\linux\ubuntu-26.04 C:\Users\59507\Downloads\ubuntu-26.04-wsl-amd64.wsl

提示:两种方式都能导入成功。--import 只提取 rootfs,不会带入镜像元数据,因此导入后默认以 root 用户进入(这正是后续需要手动创建普通用户的原因)。推荐优先使用 --from-file

3.4 查看与进入

# 查看已安装的发行版列表(带版本号)
wsl --list --verbose
 
# 按名称进入指定发行版
wsl -d ubuntu-26.04
 
# 不指定名称时,进入默认发行版
wsl

wsl --list --verbose 输出示例:

  NAME            STATE           VERSION
* ubuntu-26.04    Stopped         2

* 表示默认发行版,VERSION 为 2 表示运行在 WSL 2 上。进入后即可在 Linux shell 中操作。


4. 基础设置:创建普通用户与 sudo

4.1 创建普通用户

通过 --import 导入的 rootfs 默认以 root 进入。日常使用建议创建普通用户并配置 sudo:

# -m 创建主目录;-s /bin/bash 指定登录 shell;-G sudo 将用户加入 sudo 管理组
useradd -m -s /bin/bash -G sudo ubuntu
 
# 为用户设置密码
passwd ubuntu

提示:Ubuntu/Debian 的管理员组名为 sudo,而 RHEL/CentOS 系名为 wheel。写脚本时注意发行版差异。

4.2 配置免密 sudo

免密 sudo 适合个人开发机,减少频繁输密码的打扰。建议写入 /etc/sudoers.d/ 而非直接改 /etc/sudoers

# 使用 visudo 的 -f 参数编辑独立文件,保存时会自动做语法校验
sudo visudo -f /etc/sudoers.d/ubuntu

写入内容:

ubuntu  ALL=(ALL) NOPASSWD: ALL

警告NOPASSWD 会让该用户无需密码即可执行任意 root 命令,显著降低系统边界。仅限个人可信环境使用;多用户或生产环境应使用密码验证或按命令白名单放行。

4.3 设置默认登录用户

通过 Windows 侧命令直接设置发行版的默认登录用户:

wsl --manage ubuntu-26.04 --set-default-user ubuntu

5. APT 换源:传统格式与 DEB822 格式

Ubuntu 的 APT 源有两种配置文件格式。24.04 及之后的版本默认使用 DEB822 格式,这与老用户熟悉的传统格式不同,下面重点说明两者的区别和换源时的注意点。

5.1 两种格式对比

维度传统格式(one-line)DEB822 格式
文件路径/etc/apt/sources.list/etc/apt/sources.list.d/*.list/etc/apt/sources.list.d/*.sources
语法每行一个源,用空格分隔字段类 INI 的段落式,键: 值 分行书写
一个文件多源多行多个 Types: deb 段落
引入版本古老格式Ubuntu 22.04 支持,24.04 起默认
签名配置由发行版自动处理(或 [signed-by=...]显式声明 Signed-By:

传统格式示例(每行一个源):

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse

5.2 DEB822 字段说明

/etc/apt/sources.list.d/ubuntu.sources 是 26.04 默认的源文件,核心字段如下:

字段含义
Types:源类型,deb 表示二进制包,deb-src 表示源码包
URIs:镜像地址,可写多行多个地址
Suites:套件名,即发行版代号加后缀(如 resoluteresolute-updates
Components:组件,mainuniverserestrictedmultiverse
Signed-By:签名密钥路径,用于校验包完整性

Ubuntu 26.04 的代号为 resolute,因此套件为 resoluteresolute-updatesresolute-backports,安全更新套件为 resolute-security

5.3 一键换为清华源

默认 /etc/apt/sources.list 全是注释,只需处理 ubuntu.sources 一份文件:先备份,再用清华源整体重写:

# 1. 备份现有源文件(用于还原官方源)
sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
 
# 2. 用清华源整体重写 ubuntu.sources
sudo tee /etc/apt/sources.list.d/ubuntu.sources > /dev/null << 'EOF'
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: resolute resolute-updates resolute-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
 
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: resolute-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
 
# 3. 刷新包索引
sudo apt update

提示:不同发行版代号对应不同套件(24.04 为 noble),换版本时改 Suites 行。清华镜像帮助页见 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

5.4 验证与还原

# 确认只命中清华源(archive.ubuntu 条目数应为 0)
apt-get indextargets --no-release-info | grep -c "mirrors.tuna"     # 清华源条目数
apt-get indextargets --no-release-info | grep -c "archive.ubuntu"   # 官方源条目数

需要还原官方源时,用备份反向覆盖:

sudo cp /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources

6. Locale 配置:支持中文显示

导入镜像后,终端默认无法正确显示中文文件名,ls 输出形如:

$ mkdir 测试
$ ls
 ''$'\346\265\213\350\257\225'

原因:系统默认 locale 为 C.UTF-8,没有启用 UTF-8 中文 locale,中文只能以转义字节显示。

6.1 最小化方案:不装语言包

无需安装 language-pack-* 语言包,只需生成并启用单个 zh_CN.UTF-8 locale:

# 在 /etc/locale.gen 中启用 zh_CN.UTF-8(取消该行注释;若文件里没有这一行则手动追加)
sudo sed -i 's/^# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen
 
# 生成 locale 文件(必须加 sudo,否则无写权限报 Permission denied)
sudo locale-gen
 
# 将系统默认 locale 设为 zh_CN.UTF-8(自动写入 /etc/default/locale,无需手动编辑)
sudo update-locale LANG=zh_CN.UTF-8

提示locale-gen 需 root 权限;update-locale 是系统级命令,自动修改 /etc/default/locale,无需手动编辑配置文件,也不涉及个人 shell 启动文件。

6.2 重启 WSL 生效

当前会话的 locale 不会自动刷新,需完全重启 WSL(在 Windows PowerShell 中执行):

wsl --shutdown

重新进入发行版后验证:

locale   # LANG 应显示为 zh_CN.UTF-8
ls       # 中文文件名正常显示

提示:重启前临时验证可执行 export LANG=zh_CN.UTF-8,但该设置只对当前会话有效,重启后失效。


7. 关闭终端响铃

WSL 里的终端响铃来自多个层面,需要逐层关闭。下面只给出正确做法。响铃配置均作用于各自的新会话(新开的 shell / Vim / 终端窗口),无需重启 WSL

7.1 关闭 Readline 响铃(Tab 补全、命令提示等)

Readline 的响铃由 bell-style 选项控制,正确入口是配置文件 .inputrc

# 当前用户
echo "\$include /etc/inputrc" >> ~/.inputrc
echo "set bell-style none" >> ~/.inputrc
 
# 全局生效(影响所有用户)
sudo bash -c 'echo "set bell-style none" >> /etc/inputrc'

注意:新建 ~/.inputrc 会完全取代默认 Readline 配置,因此首行用 $include /etc/inputrc 保留系统默认行为,避免丢失其他 Readline 特性(如历史搜索)。

7.2 关闭 Bash 自身的响铃

# 当前用户
echo "bind 'set bell-style none'" >> ~/.bashrc
 
# 全局生效(影响所有用户)
echo "bind 'set bell-style none'" | sudo tee -a /etc/profile.d/no-bell.sh

7.3 关闭 Vim 响铃

sudo bash -c "cat >> /etc/vim/vimrc << 'EOF'
set belloff=all
set vb t_vb=
EOF"

set belloff=all 关闭 Vim 内部所有响铃;set vb t_vb= 使用可视提示(闪烁)代替响铃。

7.4 关闭 Windows Terminal 的响铃

WSL 终端(如 Windows Terminal)自身也有响铃行为。在 Windows Terminal 的设置中,将对应配置文件的 bellStyle 设为 none(或改为 visual 用视觉提示)。若使用其他终端模拟器,查找其声音/响铃相关设置关闭即可。

7.5 验证

# 查看当前 Readline 的 bell-style 生效值
bind -v | grep bell

输出 set bell-style none 即表示 Readline 层已关闭。

提示:修改 .inputrc 后,新开的 shell 自动生效;若要在当前 shell 立即生效,执行 bind -f ~/.inputrc


8. 故障排除

8.1 启动报错 0x80370102

错误提示:

WslRegisterDistribution failed with error: 0x80370102

原因:主板 BIOS 未开启硬件虚拟化,或 Hyper-V 相关功能冲突。
解决:

  1. 重启进入 BIOS/UEFI,开启 Intel VT-x / AMD-V
  2. 确认第 1 节的 Windows 功能均已启用。
  3. 以管理员身份运行 bcdedit /set hypervisorlaunchtype auto 后重启。

8.2 apt-get update 缓慢或同时命中多个源

原因:手动往 /etc/apt/sources.list 写入的源与 ubuntu.sources 同时生效(默认 sources.list 全是注释,双源只发生在手动写入时,见 5.4 节)。
解决:用 apt-get indextargets 确认后,只保留一份源配置,再执行 sudo apt update

8.3 修改 .wslconfig 后不生效

原因:WSL 后台虚拟机仍在运行,配置在启动时读取一次,改动未重新加载。
解决:先确认没有发行版在运行,再完全关停:

# 查看是否仍有发行版在运行
wsl --list --running
 
# 完全关停所有 WSL 2 实例(约需 8 秒)
wsl --shutdown

等约 8 秒后重新进入发行版,配置即生效。

8.4 WSL 内执行 reboot 不起作用

原因:WSL 没有传统意义上的重启流程,reboot 不会按预期重启发行版。
解决:从 Windows 侧终止并重启发行版:

# 终止指定发行版(区别于关闭所有实例的 --shutdown)
wsl --terminate ubuntu-26.04

重新 wsl 进入即完成「重启」。

8.5 每次运行 WSL 命令都提示 localhost 代理未镜像

错误提示(示例):

检测到 localhost 代理配置,但未镜像到 WSL。

原因:WSL 默认的 NAT 网络模式下,Windows 上配置的 localhost HTTP 代理不会自动传递到 WSL 内部。
解决:在 Windows 侧 .wslconfig 中开启自动代理,或改用镜像网络模式:

[wsl2]
autoProxy=true        # 让 WSL 使用 Windows 的 HTTP 代理信息
networkingMode=mirrored

修改后执行 wsl --shutdown 再进入生效。

8.6 WSL 1 升级到 WSL 2

# 将指定发行版从 WSL 1 升级到 WSL 2(VERSION 列变为 2)
wsl --set-version <发行版名> 2

9. 总结

WSL 2 是一款运行在 Windows 上的轻量虚拟化方案,通过基于真实内核的 WSL 2 虚拟机与按需启动机制,解决了双系统重启切换与桌面虚拟机资源开销大的问题。配合 wsl --install/MSI 安装、--from-file 导入镜像、APT 换源与 Locale 配置,可以快速搭建一个接近原生、可长期使用的 Linux 开发环境。

掌握 WSL 2 后,你可以:

  • 在 Windows 中随时进入 Ubuntu 终端,免重启即可运行 Linux 命令、执行编译、运行脚本。
  • wsl --from-filewsl --import 管理多个发行版镜像,互不干扰。
  • sudo update-locale 启用 zh_CN.UTF-8,让终端正常显示中文文件名。
  • 在 DEB822 与传统两种 APT 源格式之间正确切换,避免双源踩坑。

建议先按本文完成环境搭建,再逐步探索 systemd 服务管理、Docker(WSL 2 后端)与 WSLg 图形应用,结合镜像网络与代理配置进一步提升使用体验。


10. 参考资料