← Windows与WSL的终端美化

Windows与WSL的终端美化(一)——WSL安装与配置

刚开始折腾 Windows 终端时,很多人第一反应都是先换主题、换字体、换提示符。我也一样。后来吃过几次亏才明白,WSL 这层要是没装稳,后面所有“美化”都容易变成表面功夫。

这一篇我想按最朴素、也最不容易出错的顺序,把 WSL2 从安装、首次配置、性能调优、磁盘迁移到空间回收一次讲清楚。你可以把它当成一篇我踩过坑之后整理出来的入门笔记,照着走,小白也能一步一步配起来。

先把方向定下来,我建议直接用 WSL2

如果你只是偶尔开一下 Linux 命令,WSL1 也不是不能用。 但只要你想把 WSL 当成长期开发环境,我还是更推荐 WSL2。 原因很直接,它用的是真正的 Linux 内核,systemd、容器、现代工具链都更稳, 后面不管是配 Zsh、装语言运行时,还是继续做终端美化,路都会顺很多。

所以这一篇后面的所有配置,都是按 WSL2 来写的。比如 .wslconfig,它就只对 WSL2 生效。

前置条件,先确认虚拟化真的开了

开始前先确认两件事:

  • 最好是 Windows 11,如果你还在用 Windows 10,至少要 2004 及以上版本
  • BIOS 或 UEFI 里已经开启虚拟化,常见名字有 Intel VT-x、 Intel Virtualization Technology、AMD-V、SVM Mode

最稳的办法,是先在 PowerShell 里直接查。

1. 用 PowerShell 检查虚拟化状态

powershell -Command "Get-ComputerInfo | Select-Object HyperV*"

正常情况下,你应该看到类似下面的输出:

HyperVisorPresent                                 : True
HyperVRequirementDataExecutionPreventionAvailable : True
HyperVRequirementSecondLevelAddressTranslation    : True
HyperVRequirementVirtualizationFirmwareEnabled    : True
HyperVRequirementVMMonitorModeExtensions          : True

这几项最好全是 True。只要有一项不对,后面安装 WSL2 时就可能卡住,或者能装上但启动不起来。

2. 如果虚拟化没开,用管理员 PowerShell 启用相关组件

如果上面的检查结果不全是 True,先别急着继续。请用管理员身份打开 PowerShell,执行下面 3 条 DISM 命令,然后重启电脑。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart

这 3 条命令分别做了这些事:

  • VirtualMachinePlatform,启用 WSL2 依赖的虚拟机平台
  • Microsoft-Windows-Subsystem-Linux,启用 WSL 本体
  • Microsoft-Hyper-V-All,把 Hyper-V 相关能力一起补齐,省得后面缺组件

跑完以后,记得重启。别嫌这一步慢,很多“为什么别人一条命令就装好了,我却总报错”的问题,根子都在这里。

3. 再顺手检查两件小事

  • 你能正常以管理员身份打开 PowerShell
  • 任务管理器 -> 性能 -> CPU 里,Virtualization 显示为 Enabled

如果这里还是没开,那就要回 BIOS 或 UEFI 里再确认一次。

WSL2 安装,按这个顺序来最省心

前置条件没问题以后,接下来就进入真正的安装步骤了。

1. 在管理员 PowerShell 里安装 WSL,并把默认版本设成 2

wsl --install
wsl --set-default-version 2

这两条命令会帮你做几件事:

  • 启用 WSL 需要的 Windows 组件
  • 安装 WSL kernel
  • 默认安装 Ubuntu
  • 把新安装的发行版默认设为 WSL2

如果系统提示你重启,就直接重启,别拖。重启完再继续下面的步骤。

2. 安装完以后,检查发行版是不是已经跑在 WSL2 上

wsl -l -v

这条命令会列出已经安装的发行版、当前状态,还有最关键的 VERSION。这里你要确认目标发行版显示的是 2

3. 如果你不想用默认 Ubuntu,可以直接指定版本

wsl --install -d Ubuntu-24.04

默认情况下,wsl --install 会直接装 Ubuntu。如果你已经知道自己想要哪个发行版或版本,用 -d 指定会更省事。

第一次进入 Ubuntu,先把账号和基础包更新好

第一次启动 Ubuntu 时,系统会让你创建一个 Linux 用户。这里会有两个输入项:

  1. 用户名
  2. 密码

这套用户名和密码只在 WSL 里的 Linux 环境生效,不是你的 Windows 登录密码。输入密码时终端不会显示字符,这很正常,不是键盘坏了。

用户创建完以后,第一件事就是更新软件包:

sudo apt update && sudo apt upgrade -y

我很建议别跳过这一步。后面你要装 shell、字体、提示符、语言环境、各种 CLI 工具,都会建立在这个基础系统上。先把系统更新到比较新的状态,后面少掉很多奇怪的小问题。

基础调优,先配两份文件,后面会轻松很多

默认配置当然也能用,但如果你打算把 WSL2 当成长期开发环境,那我建议早点把 Windows 侧和 Linux 侧这两份配置文件补上。

Windows 侧,配置 .wslconfig

这个文件放在下面这个位置:

C:\Users\你的用户名\.wslconfig

如果你想直接用记事本打开或创建它,可以在 PowerShell 里执行:

notepad $env:USERPROFILE\.wslconfig

文件内容建议先写成这样:

[wsl2]
memory=8GB
processors=4
swap=4GB
localhostForwarding=true

[experimental]
autoMemoryReclaim=gradual
sparseVhd=true

为什么我会这样配,可以逐项看:

  • memory=8GB,把 WSL2 的内存上限先控制在 8GB。这样做不是抠门,而是避免它把 Windows 宿主机的内存吃得太狠,尤其是你同时开浏览器、编辑器、终端的时候
  • processors=4,先给 4 个逻辑核心。对大多数日常开发来说,这个数已经够用,Windows 自己也还能留出余量
  • swap=4GB,给突发的内存峰值留缓冲。装依赖、跑索引、执行一些构建任务时,这个设置能减少直接 OOM 的概率
  • localhostForwarding=true,让 Windows 和 WSL 之间的本地端口访问更顺手。比如你在一边起了服务,另一边访问起来会方便很多
  • autoMemoryReclaim=gradual,让 WSL 在空闲下来之后,更积极地把内存慢慢还给 Windows。这个设置对长期开机特别有用
  • sparseVhd=true,让虚拟磁盘的增长方式更合理,长期使用更省空间,也更适合后面做磁盘整理

如果你的机器配置更高,memoryprocessors 当然可以往上调。但经验上不是越大越好,真正舒服的状态,是 Windows 和 WSL 都留有余量。

Linux 侧,配置 /etc/wsl.conf

接下来进到 WSL 里,把 Linux 侧配置也补上。你可以用自己熟悉的编辑器,我这里用 nano 演示:

sudo nano /etc/wsl.conf

文件内容写成这样:

[boot]
systemd=true

[interop]
appendWindowsPath=false

这两个参数看着不多,但都很关键:

  • systemd=true,让 WSL 的行为更接近一台正常的 Linux 机器。现在很多开发工具和服务管理逻辑都默认围着 systemd 转,开了以后少很多绕路
  • appendWindowsPath=false,阻止 WSL 启动时把整条 Windows PATH 自动塞进 Linux PATH。这样 PATH 会更干净,命令解析更可控,shell 启动也通常会更快

为什么 appendWindowsPath=false 经常能让 shell 更利落,原因也很实在:

  • 少了一大串 Windows 目录需要处理
  • shell 初始化时要整理的 PATH 更短
  • 少一些重复或没意义的 Windows 可执行文件查找
  • PATH 更干净以后,命令冲突也更少

如果你后面还要继续装 zsh、starship、fzf、tmux 这类东西,这个小设置会越来越有感觉。

改完配置以后,记得彻底重启 WSL

.wslconfig/etc/wsl.conf 改完以后,不是关一个终端窗口就完事了。要让它们完整生效,需要在 Windows 侧执行:

wsl --shutdown

然后重新打开你的发行版。这样新的内存、CPU、systemd 和 PATH 行为才会真正按配置运行。

WSL2 虚拟磁盘迁移,早点做,C 盘以后会轻松很多

WSL 默认装在 C 盘,用久了它的虚拟磁盘会越来越大。你现在可能还没感觉,但只要后面开始装开发工具、拉项目、跑依赖,空间会涨得很快。

我的建议是,如果你有别的盘位,尽量早点迁走。最稳的流程就是这 3 个关键词,导出、注销、导入。

1. 先关闭 WSL

wsl --shutdown

这一步别省,后面导出和迁移都需要在 WSL 已经完全关闭的状态下进行。

2. 查看当前发行版名称

wsl -l -v

你后面导出、注销、导入时都要用到发行版名称。下面我先拿 Ubuntu 当例子。

3. 导出虚拟磁盘到 tar 文件

wsl --export Ubuntu H:\Ubuntu.tar

这一步的意思,是把 Ubuntu 这套 WSL 环境完整打包导出到 H:\Ubuntu.tar。导出文件可能不小,所以目标盘最好先留够空间。

4. 确认导出成功以后,再注销原来的发行版

wsl --unregister Ubuntu

这一步要看清楚再敲。unregister 是把当前这套发行版从系统里注销掉,所以一定要在前一步导出成功以后再做。别把顺序搞反了。

5. 把发行版导入到新的存储位置

wsl --import Ubuntu H:\ H:\Ubuntu.tar

这条命令的意思,是把 Ubuntu.tar 导回去,并把新发行版安装到 H:\。 如果你想要更整洁的目录结构,也可以把第二个路径换成你自己的专门文件夹, 比如 H:\WSL\Ubuntu,思路完全一样。

6. 迁移完以后,再检查一次状态

wsl -l -v

能正常看到发行版,后面也能正常启动,一般就说明迁移成功了。

WSL2 虚拟内存释放,其实是在给 VHDX 压缩瘦身

这一步经常会让人困惑。比如 WSL 占了 10GB,你在 WSL 里面删了 1GB 文件, Windows 里看到的虚拟磁盘大小还是 10GB。 不是你没删干净,而是底层的虚拟磁盘文件不会自动立刻缩回去。

很多人习惯把这一步叫“释放 WSL2 虚拟内存”,实际做的事情更接近压缩 VHDX。叫法先不纠结,你知道它能把空间收回来就行。

1. 先关闭 WSL,并退出占用它的工具

wsl --shutdown

2. 在管理员 PowerShell 里启动 DiskPart

diskpart

3. 选择你要处理的虚拟磁盘文件

把下面路径换成你自己的 ext4.vhdx 位置。这里沿用一个示例路径来演示:

DISKPART> select vdisk file="D:\CentOS7\ext4.vhdx"
DiskPart 已成功选择虚拟磁盘文件

如果你前面是用 wsl --import 迁移过的,ext4.vhdx 往往就在你导入时指定的那个目录里,找起来会轻松很多。

4. 压缩虚拟磁盘

DISKPART> compact vdisk
100 百分比已完成
DiskPart 已成功压缩虚拟磁盘文件

这一步才是“真正把空闲空间挤回去”的关键动作。压缩过程快慢和你的磁盘大小、空闲空间、硬盘速度都有关系,耐心等它跑完就行。

5. 分离虚拟磁盘

DISKPART> detach vdisk
虚拟磁盘服务错误:
虚拟磁盘已经分离。

这个输出示例看起来像报错,其实很多时候只是说明这个虚拟磁盘本来就没处在附加状态。只要前面的 compact vdisk 已经成功跑完,通常问题不大。

6. 退出 DiskPart

DISKPART> exit

如果你发现 compact vdisk 执行失败,最常见的原因往往是 WSL 还没真正关干净,或者有 VS Code、资源管理器、终端窗口还在占着那个磁盘文件。把相关窗口都关掉,再来一遍,一般就行。

文件系统最佳实践,代码尽量放在 WSL 自己的家里

这一条真的很重要,甚至会直接影响你之后对整套终端环境的印象。

我的建议很明确,活跃开发项目尽量放在 WSL 文件系统里,比如 /home/你的用户名/projects/,别长期放在 /mnt/c/ 下面。

推荐这样放:

/home/yourname/projects/

不推荐这样放:

/mnt/c/Users/yourname/Desktop/project

为什么我会这么坚持,原因很现实:

  • WSL 内部文件系统对 Linux 工具链最友好
  • gitnpmpnpmcargopipvenvnode_modules 这类高频小文件操作,在 /mnt/c/ 下通常会明显更慢
  • 跨文件系统访问经常会慢很多,项目越大、文件越碎,差距越明显,有时候能到 10 倍左右

如果你想从 Windows 文件资源管理器访问 WSL 里的文件,不用把项目搬回 C: 盘。直接打开下面这个路径就行:

\\wsl.localhost\Ubuntu\home\yourname\

这样做的好处是,两边都方便。Linux 工具在 WSL 里跑得顺,Windows 这边要看文件、改文件、拖文件,也还是能直接进。

常用命令,最后给你放一张速查表

命令 说明
wsl --install 安装 WSL 和默认 Ubuntu
wsl --set-default-version 2 把新安装发行版默认设为 WSL2
wsl --shutdown 关闭 WSL
wsl --update 更新 WSL 内核
wsl -l -v 列出已安装发行版,并查看版本
wsl --export Ubuntu backup.tar 导出发行版备份
wsl --import Ubuntu-new path backup.tar 从备份导入发行版

我自己平时用得最多的,还是这几个:

wsl --shutdown

改完配置、网络不对劲、系统状态怪怪的时候,先关一次 WSL,能解决不少小问题。

wsl --update

把 WSL 内核保持在比较新的状态,能少踩一些兼容性坑。

wsl -l -v

每次想确认发行版还在不在、是不是 WSL2、当前是不是 Running,我都会先看这条。

写在最后

这一篇不算花哨,但它真的很值。只要 WSL 这层装得对、配得稳,后面不管是 WezTerm、Zsh、Starship 还是各种 CLI 工具,都会顺很多。

下一篇我会接着写 Windows 侧入口,也就是 WezTerm。等入口和底层都稳了,终端美化这件事才算真正开始好看又好用。

系列文章导航

  1. Windows与WSL的终端美化(零)——系列概览
  2. Windows与WSL的终端美化(一)——WSL安装与配置(本篇)
  3. Windows与WSL的终端美化(二)——WezTerm配置
  4. Windows与WSL的终端美化(三)——Zellij工作区管理
  5. Windows与WSL的终端美化(四)——Shell与Prompt配置
  6. Windows与WSL的终端美化(五)——CLI工具链美化
  7. Windows与WSL的终端美化(六)——Catppuccin主题统一
目录

Comments (0)

No comments yet. Be the first!