
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 TechnologyIntel平台或SVM ModeAMD平台确保设置为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接入WSLRemote-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、TensorFlowtorch.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选择WSLPyCharm会自动扫描当前可用的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共享同一个桌面。如果你还没装上或者装了被各种报错劝退照着这篇文章的顺序走一遍大概率能顺利跑起来。