Windows 上的 wsl 还是挺好用的。
2026.4.23 改:添加多种开发工具、问题记录,移除 wsl 官网教程、除 Arch 外的其它 Linux 子系统说明。偷喵一句:
还是 Arch 好用😄
环境准备
- Windows 11
- Git Bash
- WSL2
- 魔法工具
- 按下 ⌘,输入 “启用或关闭 Windows 功能”,勾选 Hyper-V 和 适用于 Linux 的 Windows 子系统,点击确定,然后进行重启。
Git Bash 是浪子在 Windows 下喜欢使用的,Windows 基本全部替换为了这个,Git 相关篇中已经介绍过。如果少侠使用的 Windows 10 以上系统,推荐使用 Powershell 代替 CMD。
话说 CMD 这种东西现在真的还有开发喜欢嘛?
新装的系统可能 WSL kernel 没有更新,需要 更新版本。
# 更新 wsl 版本
wsl --update
# 查看版本
wsl --version
# 配置 wsl2 为默认版本
wsl --set-default-version 2
如果输出如下类似内容表示安装成功:
WSL 版本: 2.6.1.0
内核版本: 6.6.87.2-1
WSLg 版本: 1.0.66
MSRDC 版本: 1.2.6353
Direct3D 版本: 1.611.1-81528511
DXCore 版本: 10.0.26100.1-240331-1435.ge-release
Windows: 10.0.26200.7019
WSL 基本命令
# 查找支持的 Linux 分发版系统
wsl -l -o
# 查看已安装的 linux 列表、各自的运行状态以及 wsl 版本
wsl -l -v
# 安装支持的分发版 Linux 系统
# --name 安装的 Linux 名称,后续进入该系统时使此名称
# --location 安装到指定的目录
wsl --install -d <Linux-name> --name <name> --location [path]
# 进入系统时直接到家目录
wsl -d <name> --cd ~
# 以指定用户进入 linux 系统
wsl -d <linux-name> -u [user]
# 关闭所有的 linux 子系统
wsl --shutdown
# 设置默认启动的 linux 发行版,
# 设置完成后可以直接在 bash 中使用 wsl 进行默认的发行版
wsl -s <linux-name>
# 更新 wsl
wsl --update
# 查看 wsl 版本以及默认分发版本
wsl --status
# wsl 版本信息
wsl --version
# 导出镜像 tar
wsl --export <linux-name> <filename>
# 导入镜像 tar
wsl --import <linux-name> <install-path> <filename>
注意:以上简写形式的命令选项必须 运行最新版本的 Windows 版本。
安装 Arch Linux
借助 ArchWSL 项目进行,官方文档:https://wsldl-pg.github.io/ArchW-docs/locale/zh-CN/How-to-Setup/
如何更新:https://github.com/yuk7/ArchWSL/issues/23
Note
2025.10.30 补充
ArchLinux 官方也提供了 wsl 镜像,可以直接使用,但是需要注意官方版只支持 WSL2。
注意:本文依旧基于开源的ArchWSL项目讲解。
创建普通用户、设置 root 用户密码
useradd -m -s /bin/bash <yourname>
passwd <yourname>
# 设置 root 用户密码
passwd root
配置 pacman
使用第三方的 ArchWSL 时,默认情况下,pacman 不能直接使用。编辑 /etc/pacman.d/mirrorlist,在文件的顶端添加:
Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch
之后执行以下命令:
sudo pacman-key --init
sudo pacman-key --populate
sudo pacman -Sy archlinux-keyring
sudo pacman -Su
官方版本不需要此配置。
安装基本工具
# 基本编译工具
sudo pacman -S --needed base-devel
# 文本编辑器
sudo pacman -S neovim bash-completion
# 安装 podman,oci 运行时选择 crun
pacman -S podman podman-compose
# 安装 paru
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si
开发环境推荐使用 mise 管理。
# 安装
curl https://mise.run | sh
# 安装完毕之后执行
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
mise use -g usage
# This requires bash-completion to be installed
mkdir -p ~/.local/share/bash-completion/completions/
mise completion bash --include-bash-completion-lib > ~/.local/share/bash-completion/completions/mise
打开新的 terminal 运行 mise dr,正常输出即安装成功。具体使用参考我的 mise 文章。
配置中文环境
编辑 vim /etc/locale.gen 文件,把 zh_CN.UTF-8 UTF-8 这一行取消注释。然后执行以下命令:
# 安装中文字体
sudo pacman -S wqy-microhei
# 如果使用 yay 或 paru
# paru -S maple-mono-nf-cn-unhinted
locale-gen
echo "LANG=zh_CN.UTF-8" | sudo tee /etc/locale.conf
source /etc/locale.conf
locale
参考 Arch Wiki
中文字体需要安装。
设置默认登录用户
编辑文件 nvim /etc/wsl.conf,加入以下内容。退出 wsl terminal 并关闭系统 wsl --shutdown,然后重新进入。
# 设置默认登录用户
[user]
default=<yourname>
[interop]
# 不要加载 Windows 环境变量
appendWindowsPath=false
# [automount]
# enabled = false
如果使用远程开发的需求,WSL 不可以关闭自动挂载,否则 idea、zed、vscode 等工具都会链接失败。
附:一些错误
禁用 cgroup v1
编辑 ~/.wslconfig 文件(不存在就新建),加入以下内容,重启 wsl 子系统。
[wsl2]
kernelCommandLine = cgroup_no_v1=all
.wslconfig用于在 WSL 2 上运行的所有已安装发行版中配置全局设置。wsl.conf用于为在 WSL 1 或 WSL 2 上运行的每个 Linux 发行版按各个发行版配置本地设置。
无法解析服务器的名称或地址
wsl -l -o
无法解析服务器的名称或地址
或者以下错误:
无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json”中提取列表分发。无法解析服务器的名称或地址
Error code: Wsl/WININET_E_NAME_NOT_RESOLVED
解决办法:DNS 污染的问题,使用魔法或者一些代理工具吧,修改 HOSTS 文件也可以。
安装启动时 WslRegisterDistribution failed with error
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
Press any key to continue...
解决办法:下载安装新的 wsl 内核,下载链接在上面,就是那个更新补丁!
docker/podman 运行容器时报错
Error: netavark: unable to append rule '-d 10.88.0.0/16 -j ACCEPT' to table 'nat': code: 4, msg: iptables v1.8.9 (nf_tables): RULE_APPEND failed (No such file or directory): rule in chain NETAVARK-1D8721804F16F
解决办法:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
参考:https://github.com/microsoft/WSL/issues/6655

说些什么吧!