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 用户。这里会有两个输入项:
- 用户名
- 密码
这套用户名和密码只在 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,让虚拟磁盘的增长方式更合理,长期使用更省空间,也更适合后面做磁盘整理
如果你的机器配置更高,memory 和 processors 当然可以往上调。但经验上不是越大越好,真正舒服的状态,是 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 工具链最友好
git、npm、pnpm、cargo、pip、venv、node_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。等入口和底层都稳了,终端美化这件事才算真正开始好看又好用。
Comments (0)
No comments yet. Be the first!