安装
WSL 是给 Windows 用的 Linux 子系统,依托于微软自己的虚拟化平台 Hyper-V。在安装 WSL 之前需要先安装开启 Hyper-V。
注意
虽然 WSL 可以通过一些方法安装桌面环境,但我们用的 WSL 一般都是直接通过 Windows 终端使用,没有桌面环境。
因此,一个方便的 Windows 终端还是很有必要的,这里我建议使用 Powershell7(pwsh),除了可以自定义好看的页面外,还能添加快速输入历史记录等实用的插件。安装教程如下: https://zhuanlan.zhihu.com/p/690118041
如果想用更高级的终端,建议 WezTerm。
建议按照教程中给系统装上 Nerd 字体并在终端中使用。
启动WSL和虚拟机平台功能
下面两种方式相同,选一种方式即可:
方式一:
Windows 搜索栏中搜索功能并打开,

或 Win + R 键打开启动,输入 optionalfeatures。
打开之后启用这两项然后重启电脑。

方式二:
在终端中输入以下命令后重启电脑。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart安装WSL
我建议去 Github 上下载安装包。 https://github.com/microsoft/WSL/releases
找一个最新的正式版并下载安装:

安装最后可能会出现下面的弹窗:

与右键菜单有关,点击 Ignore 忽视即可。
安装完成后,在终端中输入 wsl --version,出现如下即安装成功:

安装一个发行版
虚拟机搭好了,现在可以安装一个 Linux 镜像系统了。这里我建议装 Debian。
# 安装debian
wsl --install Debian
# 使用 --location 参数可以指定安装路径,具体请使用 wsl --help 查阅
# 查看当前已安装的发行版
wsl -l -v
# 可能的显示如下
# NAME STATE VERSION
# * Debian Running 2
# docker-desktop Stopped 2
# Ubuntu Stopped 2
# *表示默认使用的发行版重新打开终端,就可以直接在 + 号右侧点击进入虚拟机了。

下一步
至此,WSL 已经安装完毕并可以使用了。
在阅读了 wsl内安装codex的流程 后,本章剩下的内容就是一些日常维护的备忘录或技巧了,建议阅读同时一并阅读疑难问题解决。
命令
使用wsl --help查看,包括设置默认用户、迁移发行版、设置默认发行版等操作
设置默认用户
设置wsl子系统的默认用户
wsl --manage Ubuntu --set-default-user xxx- 上面那个没用,需要在子系统中修改
/etc/wsl.conf
[user]
default = xxxwsl内安装codex的流程
建议开启代理。在 WSL 中使用宿主机系统代理的方法,具体请点击查看这里。
安装zsh和oh-my-zsh
这是为了使用更方便且更美观的终端,支持自定义和快速输入历史记录等。
当然之后也可以去使用 WezTerm。
https://www.haoyep.com/posts/zsh-config-oh-my-zsh/
安装zsh
sudo apt install zsh git curl -y
chsh -s /bin/zsh安装oh-my-zsh
sh -c "$(curl -fsSL https://install.ohmyz.sh/)"使用powerlevel10k主题
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k在 ~/.zshrc 设置 ZSH_THEME="powerlevel10k/powerlevel10k"。接下来,终端会自动引导你配置 powerlevel10k。
安装插件
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting设置插件为plugins=(git zsh-autosuggestions zsh-syntax-highlighting z extract web-search)
安装pnpm
https://pnpm.io/zh/installation#%E5%9C%A8-posix-%E7%B3%BB%E7%BB%9F%E4%B8%8A
curl -fsSL https://get.pnpm.io/install.sh | sh -安装后重新 source,并调整该设置
安装nodejs
# apt装的版本比较旧,但是够用
sudo apt update
sudo apt install nodejs安装codex
pnpm install -g @openai/codex安装后按照提示看是否需要执行 pnpm approve-builds -g。
安装bun
为了后面安装 opencode。
pnpm install -g bun安装tmux
这是为了方便使用各种 agent。请点击这里。
配置codex
可参照如下: https://docs.packyapi.com/docs/cli/codex#windows-%E9%85%8D%E7%BD%AE https://codex.4399ai.chat/docs
- 这个参数确保打开的时候模型最高,并且执行命令不需要手动确认
codex --ask-for-approval never --sandbox danger-full-access -c model_reasoning_effort=highresume参数可以从历史记录中接续开始
Tip
可以在Windows的powershell终端中,通过
wsl codex直接在当前目录下使用codex,如果无法使用,参看
迁移发行版
指移动发行版在本地系统的路径。
可以导出后再导入,或者直接利用命令:
wsl --manage <发行版名称> --move <目标路径>快照/备份
wsl --shutdown
wsl --export <发行版名称> <目标路径>
# 还原系统
wsl --import <发行版名称> <安装位置> <快照路径>同样也可用于导入导出
查找发行版在Windows磁盘中的位置
注册表
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\中的子项记录了所有发行版的信息
也可以通过下面命令查询。
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | ForEach-Object { Get-ItemProperty $_.PSPath } | Select-Object DistributionName, BasePath压缩磁盘空间
Windows 中的 ext4.vhdx 是 WSL 使用的磁盘镜像文件,WSL 系统里面的所有东西都在这里。当使用过多后,会发现体积很大。

可以使用 spacesniffer 观察 \\wsl.localhost\Ubuntu\mnt\wslg\distro 发现实际上并没有占用这么大的空间:

剩下的都是未回收的无用空间。
压缩体积:
网上会教使用 diskpart 进行 compact,但是单独使用这个工具并不能极致压缩。因为 compact 会回收全 0 的块,但是有些被标记成“未使用”的块中依然有数据,会造成逻辑上空闲,但是物理上依然占用空间的情况,因此,最好的是要~~先把无用空间写零,再执行 compact~~。
问题
wsl 动态调整磁盘大小,默认的最大上限太大,都写 0 的话写的太多,会影响 SSD 寿命。然而 wsl 调整已有的子系统的磁盘空间上限又比较麻烦,因此还没有好的办法,只能直接 diskpart 了。
- 关闭子系统
wsl --shutdown- 打开 diskpart 并执行compact
diskpart
select vdisk file="E:\WSL\Ubuntu\ext4.vhdx"
attach vdisk readonly # 只读模式挂载
compact vdisk # 压缩操作
detach vdisk
exit通常收益不大,可以重新导入来彻底压缩体积。
防止发行版被系统自动回收
哪怕使用了 tumx 等工具,哪怕 wsl 里面还在执行着任务,只要你把终端关闭了,那么一段时间之后发行版就会被系统回收,终止运行。
目前中文网站搜索到的教程都是小聪明,后台运行一个脚本并持续占用发行版的 shell,让系统误认为你没有关闭终端。然而 2025 年 wsl 已经给出了官方的解决方案:
https://github.com/microsoft/WSL/issues/9401#issuecomment-2755505754
修改宿主机用户路径下的 .wslconfig,添加以下内容:
[general]
instanceIdleTimeout=-1目前简中互联网似乎还没有介绍这样的解决方案。
关键词:wsl 自动关闭;阻止系统自动关闭 wsl;防止系统回收 wsl;
