WSL 的安装、配置与使用

WSL 的安装、配置与使用
小米里的大麦WSL 的安装、配置与使用
1. 什么是 WSL?
WSL 全称 Windows Subsystem for Linux,是微软为 Windows 提供的一个轻量级虚拟化环境。简单来说,它 不用装双系统,不用开臃肿的传统虚拟机,就能在 Windows 里直接跑原生 Linux 环境(默认发行版为 Ubuntu)。
目前大家常说的基本都是 WSL2。它底层基于 Hyper-V 虚拟化技术(WSL2),但整体体验又比传统虚拟机轻很多,启动快、占用低、和 Windows 协作也方便。对 Windows 用户来说,尤其是要写代码、跑编译、装开发工具、起数据库和后端服务时,WSL 很好用。
2. WSL 的安装
先在 Windows 搜索栏里搜索:启用或关闭 Windows 功能。进入后勾选:
- 适用于 Linux 的 Windows 子系统
- 虚拟机平台
正常情况下,这一步就够了。但我的机器没有 虚拟机平台 这个选项,后面装 WSL 的时候还报了不少错(大概是说很多组件损坏了),用 AI 查了一些方法依旧报错,最终通过 Google 搜索 找到的 解决办法:
1. 机器缺少虚拟机平台选项的解决办法
- 先打开 任务管理器 -> 性能 -> CPU,确认右下角显示 虚拟化:已启用。
- 如果这里没启用,那就得先重启进 BIOS,打开
Intel VT-x或AMD-V。 - 然后在 Windows 上新建一个
Hyper-v.txt文件,把下面内容贴进去,保存后把后缀改成.bat,再用 管理员权限 运行。
参考来源:
1 | pushd "%~dp0" |
中间一般会提示你输入 Y 重启电脑。重启之后再回到 启用或关闭 Windows 功能,通常就能看到 Hyper-V 下面的 Hyper-V 管理工具 和 Hyper-V 平台 了,这里也记得勾上。
如果报错,就按报错信息去 Google、reddit 或 AI,很多时候是系统组件、虚拟化开关或 Windows 功能没配齐。
2. 正式安装 WSL
安装功能准备好后,在管理员终端里执行:
1 | wsl --install --web-download |
如果这个命令不顺利,也可以直接试:
1 | wsl --install |
它会自动下载并安装默认发行版,通常是 Ubuntu(24.04)。安装过程中如果看到类似下面的提示:
1 | Create a default Unix user account: xxxxx |
就说明已经快装好了,现在是在等我们创建 Linux 里的 普通用户。接下来它会让我们设置密码,输入两遍即可。
注意:输密码时屏幕上什么都不会显示,这是正常现象,不是卡死了,直接输完回车就行。
3. 怎么确认自己装成功了?
可以在 Windows 终端里先执行:
1 | wsl -l -v |
如果能看到自己的发行版、版本号,基本就说明已经好了。进入 WSL 后,也可以用下面几条命令确认系统信息:
cat /etc/os-release看发行版和版本号uname -a看内核和架构lsb_release -a看更详细的版本信息
我的输出如下,仅供参考:
1 | minbit@LAPTOP-PMSIKFR4:/mnt/c/Users/minbit$ cat /etc/os-release |
如果中间真的装炸了,也可以考虑直接重来:
1 | wsl --unregister Ubuntu |
这条命令会把这个发行版里的数据一起删掉。
4. 关于安装路径的说明
WSL 核心组件必须装在 C 盘,但发行版本身(如 Ubuntu 的虚拟磁盘文件)是可以放在 D 盘或其他驱动器的。
默认情况下,通过 wsl --install 或 Microsoft Store 安装的发行版,其虚拟磁盘会保存在 C 盘的用户目录下,随着使用越来越大,容易挤占 C 盘空间(但其实正常使用应该不超过 10GB,一般就是 3-5GB 左右)。把发行版迁移到 D 盘,是解决空间不足的常用方法,需要注意的是:如果迁移,直接用 Ubuntu 终端启动会报错失败! 错误信息:
1 | 不存在具有所提供名称的分发。 |
如果你不介意可以进行迁移,后面我会说明这个报错的相关信息和解决办法,但步骤复杂,建议先了解后在做决定!
1. 推荐方法:导出再导入(手动迁移)
这是最稳妥的方法,用 WSL 自带的命令完成,不依赖任何第三方工具。
1. 查看当前发行版名称
1 | wsl -l -v |
假设名称是 Ubuntu(记住它,后面要用)。
2. 关闭 WSL
1 | wsl --shutdown |
3. 在 D 盘创建新目录(用于存放迁移后的虚拟磁盘)
1 | mkdir D:\WSL\Ubuntu |
4. 导出当前发行版为 tar 文件
1 | wsl --export Ubuntu D:\WSL\Ubuntu_backup.tar |
这会生成一个完整的备份文件,稍后用于导入。
5. 注销原来的发行版
1 | wsl --unregister Ubuntu |
这会删除 C 盘的原始虚拟磁盘,释放空间。
6. 将备份导入到 D 盘的新位置
1 | wsl --import Ubuntu D:\WSL\Ubuntu D:\WSL\Ubuntu_backup.tar |
- 第一个
Ubuntu:要使用的发行版名称(可以和原来一样) D:\WSL\Ubuntu:新的虚拟磁盘存放目录- 最后一个参数是上一步导出的 tar 文件路径
7. 设置默认用户(重要)
导入后,默认会以 root 身份登录。需要恢复原来的普通用户可以:
1 | # 进入该发行版 |
或者手动添加:
1 | cat <<EOF >> /etc/wsl.conf |
退出后重新启动 WSL,就会回到原来的普通用户。
8. (可选)删除导出文件
确认迁移完成后,可以删除 D:\WSL\Ubuntu_backup.tar 节省空间。
补充说明:
- WSL 命令行原生没有 安装到其它盘 的直接参数,只能 先装到 C 盘,再立即迁移!
- WSL 内核、WSLg(图形界面支持)、
wsl.exe工具本身等底层组件仍然在 C 盘,但它们体积不大,通常不用管。- 迁移后,通过
wsl命令进入会自动使用 D 盘的系统,所有修改都保存在那里。- Windows 应用商店安装的发行版 也可以通过“设置 → 应用 → 已安装的应用 → 移动”来转移,但可靠性不如导出/导入,且可能导致权限问题,更推荐上面的命令行方法。
2. 关于 Ubuntu 终端启动报错的说明和解决
这个报错说明意思是成功把 Ubuntu 迁移到了 D 盘,数据完整,功能正常。但“不存在具有所提供名称的分发”这个错误,是因为我们点击的那个 Ubuntu 快捷方式,并不是我们刚迁移的发行版,而是原来商店安装版的残留入口。
为什么会这样?
- 安装的 Ubuntu 是一个独立的 UWP 应用,它在注册表里有一个独有的标识符(GUID)和配置项。
- 我们通过
wsl --import创建的发行版虽然也叫Ubuntu,但它是一个 独立的、纯 WSL 导入版,没有绑定那个商店应用的快捷方式。 - 原来的商店版已经被
wsl --unregister注销了数据,但快捷方式还在,它一启动就去寻找原来的 GUID,找不到就报错WSL_E_DISTRO_NOT_FOUND。 - 就像为一个程序创建了快捷方式,却将程序删除了,快捷方式自然用不了了。
但新的 Ubuntu 本身是好的,用 wsl -d Ubuntu 就能进。
解决方案一:让旧快捷方式复活(重新绑定)
警告:修改注册表是十分危险的行为!并且由于过程繁琐,更建议直接用下面一种。
如果想保留“Ubuntu”那个磁贴/快捷方式,需要把新导入的发行版“注册”回商店应用的配置里。这需要几个手工步骤:
- 先查看 GUID:在注册表中找到
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss下新导入的发行版的项(名字可能是一串 UUID),确认其DistributionName值为Ubuntu。 - 找到原来的商店应用的 GUID:通常在
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss下会有一个名为{...}的项,它的DistributionName就是原来商店版的名称(也是“Ubuntu”)。如果没有,说明旧注册表已被清理,此方法不适用。 - 修改启动命令:对于固定到开始菜单的快捷方式,实际是
wsl.exe ~ -d Ubuntu,可以自己创建一个新的快捷方式指向这个命令,比修复旧快捷方式简单得多。
解决方案二:创建一个新的专属快捷方式(一劳永逸)
右击桌面 → 新建 → 快捷方式,位置填写:
1 | C:\Windows\System32\wsl.exe ~ -d Ubuntu |
下一步,命名为“Ubuntu (D 盘版)”,完成,双击就能进入新系统,可以把它固定到任务栏或开始菜单。
3. WSL 和 Windows 到底是什么关系?
很多人第一次接触 WSL,最容易懵的不是怎么装,而是:
- 它和 Windows 是不是一个系统?
- 文件到底放哪?
- 为什么有时候能互通,有时候又感觉隔了一层?
- 我到底该在 Windows 里开发,还是在 WSL 里开发?
一句话说明:Windows 负责图形界面和日常软件,WSL 负责 Linux 工具链、编译和服务运行。两边能互通,但项目代码最好老老实实放在 Linux 自己的家目录里。
1. 文件怎么互通?
WSL 可以直接访问 Windows 的磁盘。
C盘在/mnt/cD盘在/mnt/d
比如在 WSL 里执行:
1 | cd /mnt/d |
就相当于进入了 Windows 的 D 盘。反过来,Windows 也能看到 WSL 里的文件。打开资源管理器,在地址栏里输入:
1 | \\wsl$ |
就可以直接进入我们的 Linux 文件系统。所以这两边并不是完全隔绝的,而是 系统隔离、文件互通。
2. 程序怎么互相调用?
这也是 WSL 很方便的一点:两边的程序能互相喊人。在 WSL 里,可以直接调用 Windows 程序,比如:
1 | explorer.exe . |
explorer.exe .会直接用 Windows 资源管理器打开当前目录notepad.exe会直接启动 Windows 记事本
反过来,在 Windows PowerShell 里,也可以直接调用 Linux 命令:
1 | wsl gcc -v |
这相当于让 Windows 去执行 WSL 里的命令。所以不要把它想成“两个完全互不来往的世界”,它更像是 Windows 里嵌了一个很好使的 Linux 工作区。
3. 项目代码到底该放哪?
这是最关键的一点,也是最容易踩坑的一点。临时文档、图片、压缩包、随手拷来拷去的小文件,放 Windows 盘里没有问题,比如 /mnt/c、/mnt/d。但是:
项目源码、编译产物、第三方依赖、Makefile/CMakeLists、数据库数据目录,最好都放在 WSL 自己的 Linux 目录里,比如
~或~/code。
因为:
- 放在 Linux 文件系统里,编译、读写、遍历目录通常更快。
- Linux 的权限、软链接、大小写敏感这些特性在自己文件系统里更稳。
- 如果把项目扔到 Windows 盘再让 WSL 去编译,很多时候会出现 速度慢、权限怪、工具行为不一致 的问题。
所以推荐做法是:在 Linux 子系统中创建一个自己的文件夹并做好规划。
4. 日常推荐工作流
比较舒服的一套分工大概是这样:
- Windows:浏览器、聊天工具、文档、截图、音乐、Office、日常软件
- WSL:
gcc/g++、gdb、git、make、cmake、Python/Node、MySQL、Redis、后端服务
如果用 VS Code,那么体验会更顺:
- Windows 里安装 VS Code
- 安装
Remote/WSL扩展 - 在 WSL 的项目目录里执行
code . - 用 VS Code 直接连进 Linux 目录开发
这样一来:编辑器界面跑在 Windows 上,终端、Git、编译器、调试器跑在 WSL 里,浏览器依旧在 Windows 里访问 localhost:端口,这套组合基本就是 WSL 最舒服的打开方式。
4. root 登录
1. root 的简单使用
最简单粗暴的办法是在 Windows PowerShell 里执行:
1 | wsl -u root |
这样可以直接以 root 身份进入 WSL。如果想每次打开默认就是 root,也可以改配置:
- 先随便进入一次 WSL。
- 执行:
1 | sudo vim /etc/wsl.conf |
- 写入下面两行:
1 | [user] |
- 保存退出后,回到 PowerShell 执行:
1 | wsl --shutdown |
- 再重新打开 WSL,默认用户就会变成 root。
如果你只是临时需要高权限,其实更推荐直接在 WSL 里执行:
1 | sudo -i |
用完以后再执行 exit 退回普通用户。
2. 为 root 设置密码
Ubuntu 默认的 root 通常是锁着的,也就是 没有可直接登录的密码。所以直接执行 su root,大概率会报错。这时候普通用户执行:
1 | sudo passwd root |
就可以给 root 设置密码。示例如下:
1 | minbit@LAPTOP-PMSIKFR4:~$ sudo passwd root |
这里要注意:
[sudo] password for minbit:要的是当前普通用户的密码New password:和Retype new password:才是在给 root 设置新密码
最后看到:
1 | passwd: password updated successfully |
就说明 root 密码设置完成了。之后再执行 su root,输入刚才设置的新密码即可切换。切到 root 后,就可以:
- 修改 root 自己的密码:
passwd或passwd root - 修改普通用户的密码:
passwd 用户名
5. WSL 访问国际互联网
使用 Linux 最常见的就是从国际互联网或者 GitHub 等地方拉取东西了,如果不使用一点特殊手段,那将面临比使用龟速网盘的还痛苦的事 🤣,所以这里讲讲如何让 WSL 使用到 Windows 的代理。
起初我也是 wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理 或者就是连不通 Google,后来找了一堆脚本和其他的配置,都不行。中间重置了,重新配置,就好了,可以参考一下我的 .wslconfig 配置:
1 | [wsl2] |
使用的代理工具是 v2ryN(V7.20.4),没有使用 允许来自局域网的连接,甚至什么都没有配置,直接就通了(测试命令:curl -I https://www.google.com/curl -I https://www.youtube.com),如果不行,就 wsl --shutdown 重新启动试试。
以上就是我的 WSL 使用 Windows 代理的过程,中间用过脚本、允许来自局域网的连接、更换过配置等其他操作,都没用,感觉应该是和
networkingMode=Mirrored、bestEffortDnsParsing=true有关系吧(不太清楚 🤣),不通就重启试试,这东西有点……玄学?🤣
6. 安装好以后,建议先干这几件事
很多人装完 WSL 就不知道下一步干嘛了。实际上,真正让它能舒服干活,通常就这几步。
1. 先更新软件包
新系统第一件事基本就是:
1 | sudo apt update |
不先更新,后面装软件时经常会遇到依赖问题、版本问题或者一些奇奇怪怪的小报错。
2. 装一批常用工具
我自己比较常装的是这几个:
1 | sudo apt install -y build-essential cmake gdb git tree curl wget unzip zip htop net-tools |
简单解释一下:
build-essential:常用编译工具合集,里头一般就有gcc/g++/makegdb:调试器git:版本管理tree:树状查看目录curl、wget:下载工具unzip、zip:压缩解压htop:交互式进程查看器,比top更直观net-tools:可使用ifconfig、netstat等传统网络工具
3. 给自己准备一个项目目录
建议直接在 Linux 家目录下面建一个统一的工作目录:
1 | mkdir -p ~/Coding |
以后项目都放这里,省得一会儿放 Windows 盘,一会儿放 Linux 盘,把自己绕晕。
4. 顺手检查一下工具链
比如:
1 | git --version |
能正常出版本号,就说明基础开发环境差不多齐了。
5. python 的安装
Linux 中怎么能少了 python 这个瑞士军刀,简单说一下 python 环境的配置。
查看 Python 环境及版本(一般 Ubuntu 自带)
1
2
3
4
5
6
7
8
9# 查看 Python 2 版本(如果已安装)
python --version
# 查看 Python 3 版本(更常见)
python3 --version
# 或者查看更详细的路径和版本
which python3
python3 -V查看全局已安装的 Python 包,先确认
pip3是否已存在:1
pip3 --version
如果显示类似
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12),说明已有pip3。若提示Command 'pip3' not found,则需要安装:1
sudo apt install python3-pip -y
查看全局 Python 包(当前系统 Python 环境):
1
pip3 list
注意:如果当前是
root用户,pip3 list会显示全局的包(系统级,绝大部分是 Ubuntu 系统本身使用的,这些包不是“杂乱”,而是系统组件,最好不要强行删除!)。如果以后使用普通用户,则显示用户级包。
1. 检查 pip 版本
1 | pip3 --version |
如果版本太旧,可以升级:
1 | pip3 install --upgrade pip |
但直接升级系统
pip有时会与 apt 管理的包冲突。更推荐在虚拟环境或用户级升级:
1 python3 -m pip install --user --upgrade pip
2. 安装 uv(推荐官方安装脚本)
使用官方安装脚本(最干净,不触碰系统 Python):
1 | curl -LsSf https://astral.sh/uv/install.sh | sh |
安装完成后,将 ~/.cargo/bin 加入 PATH(脚本会提示,如果没自动生效可手动执行):
1 | export PATH="$HOME/.cargo/bin:$PATH" |
之后验证:
1 | uv --version |
也可以用
pip3 install uv,但官方脚本更干净,且会安装独立的二进制文件。
3. 为每个项目创建虚拟环境(避免污染系统)
1 | cd myproject # 进入项目根目录 |
使用 uv 替代 pip(速度更快,且支持虚拟环境管理):
1 | cd myproject # 进入项目根目录 |
6. Node.js 的安装
Node.js 也是不错的工具,可以让我们使用 hermes-agent、openclaw、opencode 等工具,非常方便,这里不做重点,自行安装需要的工具。
1 | # Download and install nvm: |
7. 用 VS Code 配合 WSL 开发
如果在 Windows 上用 VS Code,那和 WSL 配合起来会很舒服。
1. 基本用法
- 在 Windows 安装 VS Code
- 安装
WSL扩展(名字就是 WSL,认准 Microsoft | Open any folder in the Windows Subsystem for Linux (WSL) and take advantage of Visual Studio Code’s full feature set.) - 点击 VS Code 左下角的 打开远程窗口 按钮(图标是两个尖括号)或者左边工具栏的 远程资源管理器(和原来连接云服务步骤一样)
第一次打开时,VS Code 自动把需要的远程组件装到 WSL 里。之后就可以直接在 VS Code 里编辑 Linux 目录下的项目了。后面也可以直接在 WSL 中进入到项目路径根目录,直接执行 code . 就会自动打开 VS Code 并连接好。
需要注意的是,root 用户直接使用
code .可能存在一些问题导致无法正常打开并连接到 VS Code( 似乎是 VS Code Server 默认不允许以 root 身份运行,可能是安全限制),普通用户基本就很正常。参考:【Linux 虚拟机】wsl+ubuntu+vscode 配置教程 | B 站/告别虚拟机: VSCode 基于 WSL 的自动化 C/C++环境配置指南 | B 站
2. 这种方式为什么舒服?
因为它把最舒服的两部分拼起来了:
- 编辑器界面还是 Windows 的,顺手
- 终端、编译、调试、Git 都跑在 Linux 里,稳定
也就是说,看起来是在 Windows 里写代码,实际上干活的是 WSL。
3. 一个很重要的提醒
即使用 VS Code,也尽量打开 WSL 里的项目目录,不要把重度开发项目长期放在 /mnt/c 或 /mnt/d 里。 推荐路径示例:
1 | ~/code/my_project |
不推荐长期拿来编译开发的路径示例:
1 | /mnt/d/my_project |
前者通常更稳,后者则更容易遇到性能和权限问题。
4. 浏览器访问服务
比如在 WSL 里启动了一个 Web 服务:
1 | python3 -m http.server 8000 |
这时候通常可以直接在 Windows 浏览器里访问:
1 | http://localhost:8000 |
这一点在本地开发时非常方便。
8. 常用 WSL 命令
下面这些命令不一定天天用,但真的很常见,记住会省很多事。
1. Windows 侧常用
1 | wsl -l -v # 查看已安装发行版和 WSL 版本 |
2. WSL 侧常用
1 | cd ~ # 回到 Linux 家目录 |
3. 查看系统信息
1 | cat /etc/os-release |













