安装

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子系统的默认用户

  1. wsl --manage Ubuntu --set-default-user xxx
  2. 上面那个没用,需要在子系统中修改/etc/wsl.conf
[user]
default = xxx

wsl内安装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=high
  • resume参数可以从历史记录中接续开始

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;