WSL这个热度我一直觉得是"早该如此"。过去几年里我见过太多Windows用户为了跑Linux环境,要么装个笨重的虚拟机,要么干脆把电脑搞成双系统来回重启,还有一些人直接在Windows上装Cygwin凑合——用起来总觉得差口气。直到微软把WSL做到2.x版本,才算是真正让Windows和Linux在同一个桌面上和平共处。这篇东西我会按自己实际装过的流程来写,从安装前的检查,到在线安装、离线安装、踩坑排查,再到装完之后的日常配置和进阶玩法,尽量把那些搜索热词里反复出现的问题一次讲透。
1. 我为什么最终转向了WSL:本地Linux环境的取舍
很多人的第一反应是:我要用Linux,为什么不直接装虚拟机,或者干脆装个双系统?这个问题我当年也纠结了很久,但现在回过头看,WSL并不是要替代虚拟机和双系统,它解决的是"让普通Windows用户也能低成本用上Linux环境"这件事。
1.1 虚拟机、双系统、WSL三者的真实差异
先说虚拟机。VMware、VirtualBox这类方案最大的好处是隔离彻底,Linux跑在虚拟硬件上,想怎么折腾都行,拍个快照就能随便回滚。但代价也明显:性能损耗大,磁盘占用动不动几十GB起步,启动要等,日常还要时不时手动分配内存和CPU,开着虚拟机跑代码风扇就开始转。如果你只是想在终端里跑跑命令、编译点东西,这种重量级方案确实不太划算。
双系统就更是另一回事了。分区、引导、驱动、数据共享,每一步都可能劝退新手。而且双系统最大的痛点是切换成本,我当年为了改个脚本要重启两次进Linux,真的折腾两三次就不想再碰了。
WSL的定位恰好卡在中间:它没有虚拟机的完整隔离,但代价换取的是几乎原生的启动速度和极低的资源占用;它没有双系统的独立性,但换来的是Windows和Linux进程共存在同一个系统里,文件直接互通,剪贴板共享,本地端口都能互相访问。对我这种日常以开发为主、又不想丢掉Windows生态的人来说,WSL就是当前最顺手的答案。
1.2 WSL1和WSL2到底选哪个
这个选择其实在2024年之后的Windows 11上已经不用纠结了,因为系统默认就给你装WSL2,微软官方也在逐步弱化WSL1的存在感。但如果你还在Windows 10上,或者看到一些老教程提到WSL1,还是得知道两者的区别。
WSL1的实现方式是把Linux系统调用翻译成Windows系统调用,底层不用真正的Linux内核,所以启动快、文件性能好,但兼容性有限,很多依赖内核模块的东西跑不了。WSL2则是在Hyper-V虚拟机技术基础上跑了一个完整的轻量级Linux内核,兼容性大幅提升,Docker、systemd、deep learning框架这些都能正常跑,代价是跨文件系统的读写性能不如WSL1——也就是说,如果你在Linux侧频繁读写Windows盘符下的文件,速度会明显偏慢。
所以我给的建议很直接:默认选WSL2,除非你有特殊的老项目兼容性需求。文件读写性能的问题后面会讲怎么规避,核心原则是"项目文件放在Linux侧,Windows侧只做传输中转"。
2. 安装前先把两件事确认好:系统版本与虚拟化开关
WSL安装失败有相当大一部分原因出在安装前的准备没做足。我自己就见过不少同事,直接打开PowerShell敲wsl --install,报错了才开始到处搜解决方案。与其到时候手忙脚乱,不如先把两个前置条件确认好。
2.1 你的Windows够不够格
如果你用的是Windows 10 2004版(Build 19041)及以上,或者Windows 11任意版本,那就放心往下走。Windows 10的老版本虽然也能装WSL1,但装WSL2需要2004以上版本,并且要系统更新到最新补丁,因为WSL2依赖一个叫"VirtualMachinePlatform"的功能组件。
这里顺便回应热搜里的一个高频问题:win10 长期企业版能用wsl吗。长期服务版Windows 10 LTSC只要你把系统补丁打到位,同样可以开WSL2,我就在一台LTSC 2019机器上装过,只是部分新特性支持得晚一些。关键是看版本号,不要只看版本名称。
验证版本的方法很简单:打开设置 -> 系统 -> 关于,或者快捷键Win + R输入winver回车,看那个Build号就行。
2.2 BIOS里被遗忘的虚拟化开关
凡是跑WSL2、虚拟机、模拟器遇到"启动失败""蓝屏提示hypervisor未运行"之类的问题,先别急着重装系统,90%的情况是BIOS里的CPU虚拟化没开。
开机进BIOS(不同品牌按键不一样,常见的是Del、F2、F10、Esc),找到Intel Virtualization Technology(Intel平台)或SVM Mode(AMD平台),确保设置为Enabled。保存退出之后,可以在Windows里验证一下:按Ctrl + Shift + Esc打开任务管理器,切到"性能"标签页,看底部有没有"虚拟化:已启用"。
我自己遇到过一个很典型的案例:一台公司配的笔记本,BIOS虚拟化默认是关闭的,结果Docker Desktop一直报WSL内核错误,查了半天才发现是这个开关。所以这一步真的值得提前确认好。
3. 在线安装全流程:wsl --install 的完整执行记录
前置检查做完,就可以开始装了。现在我实际演示一遍从零到能用的流程,顺便把过程中遇到的几个典型报错一并解释。
3.1 一条命令完成安装,但这些坑会先找上门
在Windows 11或较新的Windows 10上,最简单的方式就是管理员权限打开PowerShell或Windows Terminal,然后执行:
wsl --install这条命令会自动完成几件事:启用Microsoft-Windows-Subsystem-Linux和VirtualMachinePlatform两个功能组件,下载并安装当前微软推荐的WSL版本,然后默认安装Ubuntu发行版。
如果一切顺利,系统会提示你重启电脑。重启之后,Ubuntu的安装初始化窗口会自动弹出来,让你设置用户名和密码,这一步就基本完成了。
但实际操作中,wsl --install很容易卡在"正在下载"这里很久,或者直接给你来个wsl --install 已禁止(403)。原因先说结论:这通常是当前网络到微软下载服务器之间的请求被返回了403,常见于企业网络策略、学校/公共网络限制,或者当前网络环境下微软CDN的访问链路异常。这个情况下,直接死磕wsl --install只会浪费时间,首选方案是改用离线安装包,后面第5节我会专门讲。
3.2 手里只有PowerShell?那就手动启用功能组件
如果你用的是较老的Windows 10,或者wsl --install报错找不到这条命令,那就手动把底层功能组件打开:
# 管理员身份运行 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完两条命令后重启电脑。之后就算没有wsl --install这条命令,也可以手动下载Linux发行版来用(详见第5节离线方案)。
很多人不知道的是,wsl --install并不是一直存在的,它是微软在2021年前后随新版WSL引入的简化命令。老系统里能用dism命令,能手动装发行版,功能上反倒更可控。所以如果你属于"老系统"用户,别慌,不是你的电脑坏了,只是命令入口不同。
4. 三个高频安装故障的完整排查链路:太慢、403、连接超时
热搜词里密度最高的几个问题就是:wsl --install 太慢、wsl --install 已禁止(403)、wsl --list --online 连接超时。这三个问题其实都指向同一个环节:WSL安装器在从微软的服务器拉取发行版或组件时,网络链路出了问题。
4.1 wsl --install 太慢:先判断卡在哪个阶段
wsl --install执行时,在界面上看起来只有一行进度,但它内部其实是分几个步骤的。如果你卡了很久,可以先按Ctrl + C中断,然后手动分步操作,这样能精确知道是哪个环节慢。
我自己的经验是:第一步"下载WSL本身"通常很慢,因为新版WSL变成了一个Store应用,安装器要联到微软的应用分发服务去拉包。这个环节如果网络不稳定,可能十几分钟都走不完。
解决思路是不要干等,直接改用离线安装WSL本体。微软官方提供了一个.msixbundle格式的WSL安装包,手动下载后双击安装就行,完全不依赖wsl --install的网络流程。这个包在微软的官方Release页面能找到,下载后执行:
Add-AppxPackage .\Microsoft.WSL_x.x.x.0_x64.msixbundle装完之后再执行wsl --version确认版本号正常。
4.2 403 forbidden:域名被拦还是网络策略
wsl --install 已禁止(403)这个报错特别迷惑人,因为它看起来像是权限问题,但其实和权限没有半点关系。403是HTTP状态码,表示服务器拒绝了当前请求。为什么会拒绝?
从我排查过的案例来看,原因主要有两类。第一类是当前网络环境到微软服务器的链路被某种策略拦了,比如公司防火墙、学校网络、某些安全软件的网络过滤规则,这些都会导致请求被403。第二类是微软那边对某些区域或某些请求频率做了限流,你短时间内频繁执行wsl --install,也可能触发403。
遇到403,我的建议是不要再重试了,因为重试大概率还是同样的结果。直接转离线安装方案,绕开在线下载链路,这是目前最省心的路子,后面我会详细展开。
4.3 wsl --list --online 连接超时:换一种方式获取发行版
wsl --list --online是用来查看当前可安装的Linux发行版列表的。如果你在执行这条命令时连接超时,说明你的网络到微软的发行版列表服务也有问题。这个报错同样不用硬解,因为我接下来要讲的离线安装方案,本身就不需要依赖这条命令。
4.4 真正好用的网络准备动作(不含任何收费渠道)
这里我不推荐任何来路不明的"加速"工具,那种东西既不可控也不安全。我自己的处理原则是:优先换源、换下载通道、离线包。具体到WSL的场景,就是尽量用官方离线包替代在线拉取,因为官方离线包放到本地安装,整个过程就只剩下"解压+部署",成功率最高。
5. 一条更稳妥的路:离线安装Ubuntu发行版
如果你已经确认在线安装的各种报错搞不定,那恭喜你,现在进入的是最稳妥的方案——离线安装。事实上,就算你网络没问题,我也建议至少知道这条路,因为有时候帮同事装机器、批量部署内网环境,离线包是唯一选项。
5.1 手动下载分发包:appx与tar.gz两种格式
WSL的Linux发行版有两种常见分发格式:一种是.appx或.msixbundle,这种格式本质上是Windows应用包,双击或用命令就能安装,安装之后会出现在开始菜单里,和从Microsoft Store安装的效果完全一样;另一种是.tar.gz格式的rootfs,这种一般用于wsl --import方式导入,更加轻量、适合做开发环境快照和批量分发。
手动获取Ubuntu的appx包,最靠谱的路径是到微软的商店网页找到对应发行版的详情页,然后从页面上想办法拿到直链下载。有些发行版官方也提供tar.gz的rootfs下载,比如Ubuntu就提供了WSL专用的rootfs压缩包。下载时注意选择x64或arm64架构,别下错了。
5.2 离线安装的两种方式:Add-AppxPackage 与 wsl --import
拿到appx包之后,管理员PowerShell执行:
Add-AppxPackage .\Ubuntu.appx安装完成后,直接从开始菜单点开Ubuntu图标,就会自动进入初始化流程,设置用户名密码即可。
如果你下的是rootfs的tar.gz,则用wsl --import导入:
# 在某个目录下解压或直接指向tar.gz wsl --import Ubuntu-DEV D:\WSL\Ubuntu-DEV .\ubuntu-22.04-wsl-rootfs.tar.gz --version 2这里的D:\WSL\Ubuntu-DEV是发行版的数据目录,建议放在空间比较大的盘上。导入完成后,可以用wsl -d Ubuntu-DEV进入这个发行版。和appx安装方式不同的是,wsl --import导入的发行版默认以root身份运行,而且没有默认用户,后面需要手动配置。
5.3 多台内网机器分发时的注意事项
如果你要把同一个Ubuntu环境部署到多台机器,推荐的做法是:在一台机器上配置好完整环境,包括换源、装好常用工具、配好用户,然后关掉所有进程,把这个发行版的数据目录整个压缩打包,拷贝到其他机器上再wsl --import导入。这样出来的几套环境完全一致,省去重复配置的麻烦。
但注意两点:第一,压缩打包前要wsl --shutdown,否则文件被占用容易损坏;第二,拷贝到新机器后,如果提示wsl: 检测到 localhost 代理配置,但未镜像到 WSL,不要慌,这是网络代理配置提示,和发行版本身没关系,忽略即可。
6. 装完之后做的事:初始化、换源、终端与编辑器接入
发行版装好只是第一步,真正决定使用体验的是装完之后的配置。这一节我按照自己每次装完新环境都会做的顺序来写,照着做就能获得一个相对舒服的日常开发环境。
6.1 进入WSL、设置默认用户和root密码
安装完成并初始化用户之后,日常进入Linux环境的方式有几种:
# 直接进入默认发行版 wsl # 指定发行版进入 wsl -d Ubuntu # 以root身份进入指定发行版(热搜里的 wsl -d ubuntu -u root) wsl -d Ubuntu -u root如果是通过wsl --import导入的发行版,默认没有普通用户。这时候要先以root进入,手动创建用户并设置默认用户:
# 以root进入 wsl -d Ubuntu-DEV -u root # 创建新用户并加入sudo组 useradd -m -s /bin/bash dev passwd dev usermod -aG sudo dev # 退出后用dev用户进入 wsl -d Ubuntu-DEV -u dev把dev设为默认用户,避免每次都要带-u参数:
# PowerShell中执行 Ubuntu-DEV config --default-user dev6.2 换源:不换源,apt install 会有多煎熬
国内环境下,Ubuntu默认的软件源指向官方服务器,网速时快时慢,apt update经常卡到怀疑人生。换源是我装完WSL后的第一件正事,没有之一。
Ubuntu 22.04及更新版本的软件源配置文件在/etc/apt/sources.list里,但有些版本改用了/etc/apt/sources.list.d/ubuntu.sources。不管哪种,原理都是把archive.ubuntu.com和security.ubuntu.com替换成国内镜像源(比如清华、阿里云、中科大)。
以清华源为例,先备份原文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后把源文件内容替换成对应版本的镜像源地址,我习惯直接用sed替换域名,减少手动编辑出错的可能性:
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list对Ubuntu 22.04之后的版本,如果源文件在/etc/apt/sources.list.d/ubuntu.sources,同样用sed替换。替换完执行:
sudo apt update && sudo apt upgrade -y看到下载速度从几十KB/s变成几MB/s,那种感觉真的能提升幸福感。
6.3 VS Code接入WSL:Remote-WSL的用法
在VSCode中使用WSL写代码,是热搜里出现频率很高的场景。微软官方提供了一款名为Remote - WSL的扩展,装上之后,在WSL里执行code .,就能直接在VSCode中打开当前目录,相当于用VSCode装着Linux开发环境。
具体步骤是:Windows侧装好VSCode,打开扩展面板装上Remote - WSL。然后在WSL里随便进入一个项目目录,执行:
code .VSCode会自动以WSL模式启动,左下角会显示类似WSL: Ubuntu的字样。这个模式下,终端、调试器、Git、扩展都跑在Linux环境里,和本机就是Linux的体验很接近了。
很多人在这一步会遇到"code: command not found",原因通常是VSCode没装到系统PATH里。检查一下Windows的环境变量是否有VSCode安装目录的bin路径,或者重装VSCode时勾选"添加到PATH"选项。
6.4 Windows Terminal 与 WSL 的目录互通
WSL和Windows之间的文件系统是互相可见的。在WSL里,Windows的C盘挂在/mnt/c下;在Windows的资源管理器里,WSL的所有文件都能通过\\wsl$\Ubuntu\home\用户名访问。
这个机制带来了一个非常实用的操作:在资源管理器地址栏输入\\wsl$,按回车就能看到你所有已安装的WSL发行版,然后像操作普通文件夹一样操作Linux侧的文件。反过来,在WSL里也可以直接访问Windows文件:
cd /mnt/c/Users/你的用户名/Desktop但这里必须说一个性能上的坑:WSL2虽然整体很快,但跨文件系统(就是Linux侧访问/mnt/c下的Windows文件)的IO性能比原生慢不少。所以日常开发项目,放在WSL侧自己的文件系统里(比如/home/你的用户名/projects),性能体验明显更好;只有需要和Windows侧协同的文件,才通过/mnt/c中转。这算是我用WSL一年后最大的体会之一。
7. 中高阶玩法与周边工具的接入:Docker、CUDA、安全工具
WSL装好之后能做的远不止是跑个gcc。这一节我把几个搜索热词里出现的高频场景串起来讲,包括Docker Desktop、CUDA开发、硬件安全分析工具binwalk,以及PyCharm和MATLAB接入WSL的问题。
7.1 Docker Desktop 走WSL2后端的配置
在Windows上装Docker Desktop,默认就是跑在WSL2后端的,也就是说Docker容器真正运行在WSL2的轻量级虚拟机里,而不是Hyper-V的完整虚拟机里。好处是启动快、内存占用低,而且想直接用GPU、编译内核模块这类需求也能满足。
安装Docker Desktop的时候,安装向导会让你选择是否启用WSL2后端,勾上就行。装完之后进入Settings -> Resources -> WSL Integration,确保你常用的发行版被勾选。这样在WSL终端里直接执行docker ps,就能连上Docker守护进程。
如果你在WSL里看到Cannot connect to the Docker daemon,多半是WSL发行版没有被正确集成。回Docker Desktop设置里重新勾选一下,然后wsl --shutdown再重进WSL即可。
7.2 WSL里装CUDA跑深度学习
wsl安装cuda也是热搜常客。在WSL2里跑CUDA,最关键的认知是:不需要在WSL里安装NVIDIA驱动,只要Windows侧装了合适的NVIDIA驱动,WSL2会自动复用这套驱动。这是微软和NVIDIA一起做的"GPU加速WSL"方案。
你需要做的是两件事:第一,确认Windows侧的NVIDIA驱动版本足够新,到NVIDIA官网下载最新的Windows驱动即可;第二,在WSL里安装CUDA Toolkit,选择WSL-Ubuntu这个分支的安装包,按官方给的命令用apt或runfile安装。
装完之后验证:
nvidia-smi如果能看到和Windows侧一致的GPU信息,说明CUDA已经可用了。之后在WSL里跑PyTorch、TensorFlow,torch.cuda.is_available()返回True,整个体验和原生Linux几乎没区别。
7.3 binwalk等硬件固件分析工具的安装
热搜里有wsl使用binwalk,这应该是有做CTF或者固件逆向需求的同学。binwalk是一个固件分析和文件提取工具,用来识别固件里嵌入了哪些文件系统、压缩包和签名。在WSL里装它非常简单:
sudo apt update sudo apt install binwalk安装完常用用法是这样的:
# 查看固件里都包含了什么 binwalk firmware.bin # 把识别出来的内容全部解出到指定目录 binwalk -e firmware.binbinwalk依赖的部分工具链(比如sasquatch)可能需要另外处理,但最基础的使用场景装一个包就能跑。用WSL来做这类分析的便利之处在于,可以直接和Windows侧的取证工具、十六进制编辑器互相配合,文件拖来拖去不用U盘或网络传。
7.4 PyCharm、MATLAB如何识别WSL环境
pycharm如何使用wsl conda环境是另一个高频问题。PyCharm对WSL的支持已经很成熟了。进入Settings -> Project -> Python Interpreter,点齿轮选Add Interpreter,选择WSL,PyCharm会自动扫描当前可用的WSL发行版和里面的解释器。只要你在WSL里装了Miniconda或Python,就能直接把WSL里的解释器作为项目解释器用。
有个小细节:PyCharm在WSL模式下运行项目,实际是远程解释器机制,所以项目文件最好放在WSL侧,不要放在/mnt/c下,否则PyCharm需要通过Samba机制来回传输文件,体验会打折扣。
MATLAB识别不到WSL这个问题,从我的排查经验看,原因通常是:MATLAB版本较老,不识别新版的WSL注册信息,或者没有正确安装支持的第三方工具。解决方向很明确:把WSL更新到最新版,用wsl --update补丁打齐;然后在MATLAB里设置路径时,通过\\wsl$\Ubuntu\home\用户名这种UNC路径直接访问WSL文件。注意,MATLAB要注意版本兼容,太老的R2020a之前的版本对WSL支持很有限。
8. 卸载重装与常见报错的现场处理
装环境这件事,难免遇到装了又坏、坏了又要重装的时刻。最后这一节专门讲一下清理和几个常见报错的现场处理。
8.1 提示 WSL too old 的根因
热搜原文是your version of windows subsystem for linux (wsl) is too old. run the comman...(后半句没显示全,实际提示是让用户运行wsl --update更新WSL)。看到这个报错别慌,它的意思是你的WSL内核太旧,某些新功能用不了,常见于老系统升级后带过来的旧WSL版本。
解决方法是:
# 管理员PowerShell wsl --update如果wsl --update也报403或者下载超时,那和之前安装403是同一个网络问题,解决思路还是那条:手动下载WSL的.msixbundle离线包,然后Add-AppxPackage升级安装。
8.2 彻底卸载WSL发行版
win11 wsl怎么卸载、卸载wsl这两个热词说明不少人有"卸干净"的需求。如果你要把某个发行版彻底删掉,先看已装的发行版:
wsl --list --verbose然后注销并删除这个发行版的所有数据:
wsl --unregister Ubuntu这条命令会删除该发行版及其全部数据文件,执行之后想恢复就要重新装。如果是要把WSL本身整个卸掉,那就是Windows的"可选功能"管理页面,关掉适用于Linux的Windows子系统和虚拟机平台两个功能,重启后WSL的相关服务就不再运行了。
卸载前记得备份该保留的数据,wsl --unregister没有确认提示,执行了就找不回来了,这是一条我踩过的坑。
8.3 总结一条稳的安装路径
最后总结一条我自己给新同事推荐的"最稳安装路径":先在BIOS确认虚拟化开启,然后Windows设置里确认版本号;如果网络条件好,直接管理员PowerShell执行wsl --install,重启后按提示初始化;如果网络条件差或者遇到403、超时,别反复重试,直接改用离线包方案,先装WSL本体msixbundle,再用Add-AppxPackage装发行版appx,或者用rootfs配合wsl --import导入。装完发行版第一件事换源,然后apt update && apt upgrade,之后再按场景装VS Code Remote、Docker Desktop、CUDA这些周边工具。
这套路径我从Windows 10一路用到Windows 11,从Ubuntu 20.04折腾到22.04,踩过的坑基本都写在上面了。WSL现在对我来说已经不是"Windows下的Linux模拟器"了,它就是一台完整可用的Linux开发环境,只是恰好和Windows共享同一个桌面。如果你还没装上,或者装了被各种报错劝退,照着这篇文章的顺序走一遍,大概率能顺利跑起来。