ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows11下WSL安装全攻略:从零配置到开发联动

Windows11下WSL安装全攻略:从零配置到开发联动 你在Windows11上想跑Linux环境最省事的路线就是WSLWindows Subsystem for Linux。WSL不是虚拟机也不是一个需要单独安装的完整Linux桌面系统它是Windows里直接集成的一套Linux运行环境。装好之后你在cmd或者PowerShell里输入wsl回车就能进到一个Ubuntu终端跑bash命令、装软件、编译代码体验和原生Linux几乎一样但不用重启切换系统不用忍受虚拟机的性能损耗。这篇文章就以Windows11系统安装WSL为主线把从安装前检查到装完配置再到开发联动和高频翻车问题的完整流程写一遍。适合刚接触WSL的新手也适合装到一半卡住、不知道问题出在哪的老哥照着步骤走基本上能把环境一次拉起来省下到处搜解决方法的时间。1. 先搞明白WSL解决什么问题再决定要不要装1.1 为什么Windows用户需要WSLWindows做日常办公、玩游戏、用Adobe全家桶确实顺手但做开发、跑脚本、部署服务的时候很多工具和依赖都是Linux优先的。以前想在Windows上用Linux环境主流途径是装双系统或者开虚拟机。双系统切换要重启虚拟机占用内存大、磁盘大而且文件在两个系统之间来回拷特别麻烦。WSL的出现把这条链路缩短了你在Windows里直接跑一个完整的Linux用户态环境底层用轻量级虚拟化技术实现启动只要几秒钟内存消耗远低于传统虚拟机。对我个人来说最直观的体验是原来要在公司的Windows笔记本上处理一个只给了Linux版本的二进制工具装虚拟机、配网络、拷贝文件折腾了一下午后来换了WSL之后从安装到跑出结果不到十分钟。这个效率差距用过一次就回不去了。1.2 WSL 1和WSL 2的区别选哪个WSL有两个大版本WSL 1和WSL 2区别比较大。WSL 1是把Linux的系统调用翻译成Windows系统调用相当于一个兼容层启动快、IO性能接近原生Windows但对Linux特性的支持不完整Docker这类依赖完整内核特性的软件跑不起来。WSL 2是真正的轻量级虚拟机内部跑一个完整Linux内核兼容性大幅提升Docker可以直接跑性能损耗也不算大。现在的Windows11系统上新装的WSL默认就是WSL 2不需要你手动选。唯一要注意的是如果机器开启了Hyper-V或者虚拟机平台功能WSL 2才能正常工作。Windows11家庭版默认不显示Hyper-V管理器但WSL 2用的底层虚拟化平台组件是独立存在的开WSL的时候会自动启用所以家庭版也不用担心装就完事了。从实际使用的角度建议直接用WSL 2不要退回WSL 1。一来Docker和绝大多数Linux二进制工具在WSL 2下都能正常用二来WSL 2的文件IO性能在跨系统访问时虽然比WSL 1慢但把项目文件放在Linux目录内部访问几乎无感这个细节后面会细说。2. 安装前的前置准备先检查再动手2.1 Windows11版本要求与硬件条件WSL在Windows11上安装没有太多门槛版本方面只要是Windows11正式版基本都能装。微软在文档里写的是Windows 10版本2004及以上或Windows 11实际操作下来Windows11的21H2、22H2、23H2这些常见版本都没问题。如果你的系统是旧版本先更新到最新再操作不然可能遇到一些莫名其妙的内核兼容问题。硬件方面主要看两块一是内存4GB以下建议先加内存再玩WSL因为WSL 2默认会占用一部分内存WSL加上Windows本身8GB机器跑起来会比较吃紧建议16GB起步二是虚拟化支持CPU需要支持并开启虚拟化技术Intel VT-x或AMD-V。大部分近五年的电脑都支持但有的主板或品牌机默认没开得进BIOS设置里找找。我遇到过一个比较典型的场景同事的电脑是某品牌的办公机Windows版本够了装WSL时一直报“虚拟化支持未启用”最后进BIOS开了Intel VT-x才解决。所以建议安装前先确认虚拟化是否开启。2.2 确认虚拟化和系统组件是否就绪确认虚拟化是否开启最直接的方法是打开任务管理器切换到“性能”选项卡点“CPU”看右下角的“虚拟化”一栏显示“已启用”就说明没问题。如果显示“已禁用”需要重启电脑进BIOS找到Intel Virtualization Technology或者SVM Mode之类的选项改成Enabled保存重启。另外WSL依赖“虚拟机平台”和“适用于Linux的Windows子系统”这两个Windows功能。在管理员PowerShell里执行wsl --install会自动启用它们但有些精简版系统或者手动改过系统组件的人可能需要手动确认一下。方法是在“控制面板-程序-启用或关闭Windows功能”里找到“虚拟机平台”和“适用于Linux的Windows子系统”把勾打上确定后重启。提示如果你用的是公司统一派发的电脑BIOS可能被锁虚拟化选项无法修改。这种情况下WSL 2基本没法用可以退回WSL 1但Docker就别想了提前做好心理准备。3. 实操全过程一条命令装好WSL以及各参数的含义3.1 wsl --install到底做了什么安装WSL最标准的姿势就是在管理员权限的PowerShell或cmd里执行wsl --install这条命令在Windows11上会自动帮你完成以下事情启用“适用于Linux的Windows子系统”功能、启用“虚拟机平台”功能、下载并安装WSL 2内核、安装默认的Linux发行版通常是Ubuntu、把WSL 2设置为默认版本。也就是说只要系统正常、网络正常你只需要执行这一条命令然后等它跑完重启电脑就完成了90%的工作。装完重启后系统会弹出Ubuntu的终端窗口让你创建用户名和密码这个环节注意一下Linux的用户名和Windows用户名可以不相同密码在输入的时候不会显示任何字符这是正常现象不是键盘坏了。另外Linux里的root密码默认是没设置的你创建的普通用户可以通过sudo来提升权限执行管理员命令第一次使用sudo时会要求输入当前用户的密码。3.2 走通完整安装流程如果你确实想自己掌控每一步不想用一键命令也可以手动分步安装先启用功能再下载安装发行版。但说实话现在Windows11上用wsl --install最省心手动分步反而容易漏掉某个组件。下面是一套完整、可复现的操作流程全程建议使用管理员身份的PowerShell打开开始菜单输入powershell右键“Windows PowerShell”选择“以管理员身份运行”。执行wsl --install等待下载和安装过程完成。重启电脑。重启后开始菜单会出现Ubuntu图标打开它等待一两分钟初始化。按提示设置Linux用户名和密码完成。装好之后验证一下版本和运行状态wsl --status wsl --version能看到WSL版本号和默认Linux发行版信息就说明装好了。在PowerShell里输入wsl可以直接进入Ubuntu环境输入exit退出回到Windows。3.3 换源与更新装完Ubuntu第一步默认装好的Ubuntu软件源镜像用的是境外的服务器下载软件包速度可能很慢甚至经常超时。我的建议是装完Ubuntu的第一件事就是把软件源换到国内镜像站比如清华、阿里、中科大然后在Linux环境里跑一次完整的系统更新。换源操作很简单在Ubuntu终端里执行先把源配置文件备份一下sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s//.*archive.ubuntu.com//mirrors.ustc.edu.cng /etc/apt/sources.list sudo apt update sudo apt upgrade -y不同版本的Ubuntu源格式略有点区别比如Ubuntu 24.04的源文件里已经用/etc/apt/sources.list.d/ubuntu.sources这种新格式了换源前先看看自己的系统版本然后去找对应的镜像站配置。如果你怕麻烦也可以把镜像站的配置模板直接拉下来覆盖但记得先备份原文件。注意apt upgrade升级内核或者system库的时候偶尔会弹出一个紫色、全英文的配置界面问你是否重启某些服务。这个是正常现象别慌直接回车选OK就行不影响结果。4. 高频翻车现场我遇到过的WSL问题与排查4.1 wsl --install太慢或卡住的解法WSL安装太慢或者说wsl --install卡住是群里被问得最多的问题。“wsl --install太慢”这个热搜词我一点都不意外因为WSL的发行版文件托管在境外CDN上国内网络环境下载时快时慢有时候卡在某个进度条很久不动。我实际测试过几种解法按推荐顺序排列镜像加速。在PowerShell里设置镜像源环境变量再执行安装。比如使用清华镜像源分发的应用包$env:WSL_DISTRO_NAMEUbuntu $env:WSL_UTF81不过目前常用的是手动下载发行版安装包再通过wsl --import安装。微软官方提供了每种发行版的下载链接但国内访问同样不稳定可以找国内镜像站下载Linux发行版的应用包.appx或.tar.gz格式下载完成后解压或安装再用wsl --import 发行版名 安装目录 安装包路径来导入。换网络环境。手机热点、不同的宽带不同运营商对境外CDN的速度差异巨大实测有时候家里网络卡半天切手机热点一两分钟就下完了。用备用安装方式。如果wsl --install实在走不通可以去微软官网单独下载WSL的安装包Windows Subsystem for Linux release包和Ubuntu应用包手动安装。这种方式稍微麻烦一点但胜在可控。我在测试环境里重装过好几次WSL最省心的方案其实还是先手动下载安装包再装虽然多几个步骤但基本不会出现挂一晚上的情况。文章后半部分我会把离线安装的具体操作展开细讲急用的朋友可以跳到那一节。4.2 WSL版本过旧与报错信息处理装了WSL之后可能会遇到一个提示“your version of Windows Subsystem for Linux (WSL) is too old. run the command wsl --update”。这个提示的意思是WSL组件太旧需要更新到当前WSL发行版支持的最低版本。这个问题常见于以前装过WSL但一直没更新或者系统是Windows10升级到Windows11的老环境。解决办法很简单在管理员PowerShell里执行wsl --update这个命令会从微软官方渠道获取最新的WSL版本更新完成后重新打开终端或重启WSL即可。如果更新过程中网络不给力也可以到微软的WSL发布页面下载最新的WSL安装包直接双击安装。记住更新WSL本身不影响已经安装的Linux发行版里面的文件、配置文件都还在不用重新配环境。说到这里还要提一个容易搞混的概念wsl --update更新的是WSL框架部分而不是Ubuntu系统的软件包。要更新Ubuntu里的软件得在WSL终端里执行sudo apt update sudo apt upgrade。两者是不同的东西别搞混了。4.3 与Docker Desktop、VSCode等联动问题WSL装好之后很多人会立刻去装Docker Desktop结果遇到“Docker Desktop there was a problem with WSL”这类报错。这个报错大部分情况和WSL版本过旧、WSL没有正常启动、或者Docker Desktop没有被允许使用WSL这些原因有关。我的排查顺序是这样的先确认WSL本身能正常进入比如在PowerShell里执行wsl能进Ubuntu终端就说明WSL没问题第二步检查WSL版本执行wsl --version确保不是太旧的版本第三步打开Docker Desktop的Settings找到Resources - WSL Integration确保开启了与当前发行版的集成并且勾选了你的Ubuntu发行版。这三个地方都正常Docker Desktop一般就能跑起来了。VSCode的联动相对顺滑一些安装好微软官方的“WSL”扩展插件然后在VSCode左下角点击绿色的“”图标选择“连接到WSL”VSCode会自动在WSL环境里启动一个远端窗口代码补全、终端、调试器都直接工作在Linux环境里体验比用Windows本机开发Linux目标顺畅太多。5. 把WSL用起来开发场景与进阶配置5.1 在VSCode里用WSL开发很多开发者的日常是在VSCode里写代码本地环境是Windows但代码最终要跑在Linux服务器上。这种情况下WSL的巨大价值就体现出来了你在VSCode里连接WSL开发终端、解释器、编译工具链都是Linux版打包发布到服务器前就能提前发现环境兼容问题。把VSCode和WSL配置好我推荐按这个流程走先在Windows侧装好VSCode然后在扩展市场搜索“WSL”插件并启用。接着打开一个新的VSCode窗口按F1或者CtrlShiftP输入“WSL: Connect to WSL”回车VSCode会重建一个连接到WSL的窗口。在这个窗口里打开文件夹直接选Linux路径比如/home/用户名/project终端也会自动变成bash。到这里你的开发环境就已经跑在Linux里了。有一个小坑有必要提一下如果你打开了Windows路径下的项目比如C:\Users\xxx\project再通过WSL里的工具去编译跨文件系统的IO性能会有明显损耗项目越大越明显。我的建议是WSL里开发的项目尽量放在Linux侧的home目录下例如/home/用户名/project这样读写速度接近原生跟Windows侧的交互通过WSL自己的网络路径来访问。5.2 离线安装与手动分发如果你的电脑不方便联网或者网络环境差到在线安装等于做梦那就要走离线安装这条路尤其是公司内网、保密环境、机房服务器这类场景。WSL连同发行版是可以完全离线分发的。总的思路是在一台可以上网的机器上准备好两个东西一个是WSL的内核更新包一个是Linux发行版的rootfs压缩包然后把它们拷到目标机器上安装。WSL的内核更新包可以从微软官方网站下载文件名通常是wsl_update_x64.msi直接双击安装就行。Linux发行版的rootfs包可以从官方渠道下载格式是.tar.gz或.appx。如果是.appx格式先用解压工具解压找到里面的install.tar.gz或rootfs.tar.gz文件。拷贝到目标机器后在管理员PowerShell里执行wsl --import Ubuntu-Offline C:\WSL\Ubuntu-Offline D:\downloads\ubuntu.tar.gz --version 2稍微解释下这条命令的含义wsl --import后面第一个参数是发行版名称可以自定义比如Ubuntu-Offline第二个参数是安装目录指定Linux文件系统存放到哪里第三个参数是rootfs包路径--version 2意思是使用WSL 2模式。导入完成之后执行wsl -d Ubuntu-Offline就能进入这个离线导入的Linux系统。需要注意的是这种离线方式导入的系统默认是root用户没有设置普通用户和密码需要自己在系统里手动添加用户和配置sudo比在线安装稍微麻烦一点但关键工具链完全不受影响可以正常编译、运行Linux程序。5.3 扩展玩法编译.so库、CUDA、binwalk这些都能做WSL里面跑Linux工具链的最大好处是你不需要在Windows上折腾一堆适配库直接按Linux的套路来就行。比如有人问在Windows11下怎么编译出.so文件传统做法是装MinGW或者用交叉编译工具链挺折腾的但在WSL里就简单了直接用gcc编译带-shared参数或者用CMake指定生成动态库出来的文件就是Linux格式的.so直接拷贝到Linux服务器上就能用。再比如安全分析、固件分析常用的binwalk原生是在Linux下用的工具Windows上装要过节一波Python和依赖库运气不好还会卡在各种编译错误上。在WSL里一条sudo apt install binwalk就搞定无线那条命令。做CTF题或者看固件结构的人用了WSL之后基本不会再回头去Windows上折腾。还有深度学习相关的CUDA环境。WSL 2本身支持GPU调用微软和NVIDIA专门做了WSL上的CUDA支持不需要在Windows里安装Linux版驱动只要Windows侧装好NVIDIA驱动WSL里就能识别GPU并调用CUDA。安装方法大概就是进WSL后按照Linux版CUDA Toolkit的官方指引配置源、安装即可。跑PyTorch、TensorFlow这类框架时GPU在WSL里可以直接被识别使用很方便。有一个使用上的体验值得说一下所有这类Linux独占工具箱放在WSL里跑不会弄乱Windows系统而且随时可以用wsl --terminate关掉进程、wsl --shutdown释放资源。Windows这边照常办公娱乐互不干扰。5.4 在WSL里装Docker以及和Docker Desktop的选择提到WSL的用途Docker是绕不开的一个词。在WSL里直接装Docker引擎本身是可以的只需按Linux标准流程配置一下sudo apt install docker.io或者用官方脚本安装之后启动sudo service docker start再用docker ps验证命令是否可用。这种方式的优点是资源占用少纯粹在Linux环境里跑容器适合服务器端的模拟场景。Windows下更多人的选择是装Docker Desktop它底层就是调用WSL 2来跑Linux容器好处是有图形界面配置卷映射、端口映射比较直观而且在Windows和Linux之间共享文件更自然。要注意的是Docker Desktop依赖WSL 2所以先确保WSL 2可用再装Docker Desktop不然就会出现文章前面提到的“there was a problem with WSL”报错。从开发机日常使用体验来看如果你只跑一两个容器做本地调试WSL里直接装docker-ce就够用了如果经常要多容器编排比如用docker-compose起一整套依赖环境Docker Desktop会更省心。两者不用同时装选顺手的方式即可。6. 常见问题与排查技巧速查表6.1 一组我实测过的WSL问题清单把上面正文里提到的和下面这次总结的几个高频问题整理一张表方便大家直接照方抓药。这张表里的内容全是我在Windows11上实操验证过的不是网上随便汇总来的空话。问题现象可能原因推荐排查/解决办法执行wsl --install卡在下载发行版阶段国内网络访问境外出错手动下载Linux发行版包后用wsl --import导入或更换网络环境提示WSL版本太旧WSL组件长期未更新管理员PowerShell执行wsl --updateDocker Desktop报WSL错误WSL 2未正常启用/版本过旧先确认wsl能进入终端再检查WSL版本最后检查Docker Desktop的WSL集成设置进入WSL后网络不通DNS配置或代理影响查看/etc/resolv.conf必要时设置固定的DNS如223.5.5.5WSL无法访问Windows磁盘下的文件权限或路径表达式错误用/mnt/c/Users/xxx/这种方式访问Windows路径Windows侧编辑Linux文件后Linux内权限变化Windows编辑器改变了文件权限元数据在WSL的/etc/wsl.conf中配置metadata启用或尽量使用WSL侧工具编辑WSL占用内存太多WSL 2默认拿了一半物理内存在Windows用户目录下写.wslconfig限制内存和CPU核数6.2 用.wslconfig控制WSL资源占用WSL 2虽然轻量但默认的内存占用策略是取Windows物理内存的50%比如32GB内存的电脑WSL可能直接分走16GB。对于平时只是跑跑命令、编译点代码的场景来说这个配额远远用不完反而浪费了Windows侧的资源。有一个很管用的办法在Windows用户目录下C:\Users\你的用户名新建一个文件命名为.wslconfig注意没有前面的文件名部分就是一个以.wslconfig命名的文件后缀不要加.txt然后写入类似下面这样的配置[wsl2] memory8GB processors4 swap2GB localhostForwardingtrue保存后执行wsl --shutdown再重新进入WSL配置就会生效。memory限制WSL最大可用内存processors限制CPU核数localhostForwarding保持WSL内的端口能被Windows访问。这算是优化WSL日常体验最实用的一个小技巧。6.3 WSL文件互访问的坑与正确姿势很多新手会在Windows里用记事本打开WSL目录下的文件比如\\wsl$\Ubuntu\home\用户名\...改完保存后发现文件在Linux侧的权限和格式变得奇怪比如执行权限丢失、编码错乱。原因是Windows的记事本默认以带BOM的UTF-8保存而且Windows和Linux的换行符、权限系统不一样Linux侧在解析这类文件时容易出问题。我的建议是Windows侧只查看WSL文件不改它需要修改时在WSL终端里用vim、nano这类Linux工具来改。如果实在需要用Windows编辑器改Linux侧的文件可以先用wsl --shutdown关掉WSL在资源管理器里通过\\wsl$路径打开修改改完再启动WSL也能降低出坑的概率。另外在WSL的/etc/wsl.conf里加一项配置也能改善跨系统文件的元数据兼容问题[automount] enabled true options metadata,umask22,fmask11这个配置的意思是给挂载的Windows磁盘和WSL文件系统自动携带Linux权限元数据支持实际用下来双系统编辑器混用的权限问题会少很多。7. 实操心得与避坑总结7.1 我的个人使用建议WSL这玩意儿用了两三年踩过的坑不少但整体体验是越用越顺。有几个建议希望对正在折腾的人有帮助不要在Windows和Linux文件之间频繁倒腾大文件。WSL里操作Windows文件系统速度比在Linux跨系统访问Windows磁盘时的性能损耗是能直观感受到的项目代码和编译产物尽量都放在Linux侧。wsl --install一键安装确实香但遇到网络问题卡住时别死磕转手动下载安装包导入很可能十分钟就搞定了。在线安装和离线导入的最终结果没有本质差别选一条能走通的路就行。还有一点WSL最迷人的地方在于可重复性。Windows系统出问题重装之后WSL的Linux发行版如果用wsl --export导出后再用wsl --import导入里面装好的环境、配置、项目都能原封不动地恢复。这个功能我用来迁移过好几次开发环境比重新搭一遍省太多时间。7.2 最后分享一个小技巧如果你经常在WSL里跑服务比如Redis、MySQL、Node.js又希望在Windows浏览器里直接访问WSL 2默认会开启localhost转发通常情况下localhost:端口就能直接访问到WSL里的服务。偶尔遇到访问不了的情况先去检查服务的监听地址是不是0.0.0.0然后看看Windows防火墙是否拦截了端口最后确认.wslconfig里的localhostForwarding没有写成false。另外一个容易被忽略的便捷操作是在Windows的地址栏里直接输入\\wsl$\Ubuntu回车就能用资源管理器浏览WSL里的Linux文件系统往里面拖文件、复制备份都跟Windows文件夹一样直观。把项目的存档目录放到WSL里的好处是就算哪天Windows系统坏了只要把VHD文件备份出来环境照样能恢复。WSL的坑基本都集中在初期安装和网络配置上真正把环境搭好之后日常使用的稳定性和Linux几乎没差别。如果这篇文章能帮你少走点弯路那就算没白写。
返回列表