WSL2安装配置全指南:从入门到避坑实战
你是不是把“WSL2”敲成“WLS2”了这两个字母一颠倒搜索引擎出来的东西完全不是一回事。按标题上下文你要装的应该是Windows Subsystem for Linux 2通称WSL2。我在Windows下用了三年多从WSL1一路用到WSL2从最初只能在命令行里跑ls、grep的小玩具到现在直接在Windows里开Docker、跑K8s、编译C项目WSL2已经成为我日常开发环境里最顺手的那个部分。这篇就把安装、配置、避坑的完整过程写下来给同样想入坑的读者做一份能直接照着操作的教程。WSL2不是虚拟机也不是双系统它本质上是跑在Windows里的一个轻量化Linux环境共享Windows内核的虚拟机平台启动速度比VMware快不少内存占用也比全虚拟机小得多。它适合谁适合需要Linux环境做后端开发、运维脚本练习、跑数据库中间件、又不想为了一个apt命令去重装系统的人。也适合刚接触Linux的入门用户因为完全不用折腾分区。1. 为什么推荐WSL2而不是虚拟机或双系统很多教程喜欢直接甩命令但我觉得先搞清楚“为什么选它”更重要否则你会带着错误预期踩一半的坑。1.1 和传统虚拟机的本质区别传统虚拟机像VMware、VirtualBox是在Windows里跑一个完整的硬件模拟层然后在这个虚拟硬件上装整套Linux系统。好处是隔离彻底坏处是启动要几分钟、内存要吃几个GB、磁盘镜像动辄几十GB而且和Windows之间的文件交换要靠共享文件夹切换起来很别扭。WSL2用了另一条路它借用Windows的Hyper-V虚拟机平台直接跑一个经过微软优化过的真实Linux内核但通过特殊机制和Windows进程管理整合在一起。装完以后你打开Windows Terminal输入wsl几秒钟就能进入一个完整的Ubuntu命令行内存开销远小于传统虚拟机和Windows的文件互访几乎像本地目录一样自然。1.2 WSL2与WSL1的取舍WSL1本质上是一个“翻译层”它把Linux系统调用翻译成Windows的系统调用所以启动极快兼容很多基础命令文件IO也还可以。但一旦遇到依赖完整内核特性的软件比如需要iptables、需要mount、需要某些内核模块的Docker容器WSL1就顶不住了。WSL2是做在轻量虚拟机里跑一个真正的Linux内核所以Docker能在里面直接跑fuse、inotify这类内核特性也都支持。代价是文件IO性能在跨Windows文件系统时会降低如果你把项目直接放在/mnt/c/下面用WSL2编译会有明显的性能损失。所以我一般强调代码放Linux自己的文件系统里通过\\wsl$路径访问效率更好。1.3 什么样的开发场景最适合WSL2后端开发是最典型的场景。比如你要在本地启动一个ElasticsearchWindows原生版不是不能跑但版本一多、环境一乱就头疼在Windows上装Docker也要额外装Docker Desktop底层还是绕不开虚拟机。有WSL2以后这些都可以在同一个Linux环境里搞定你还能直接在Windows侧用VSCode远程连接WSL2里的目录编辑体验和本地几乎没差别。如果你只是偶尔想查几个Linux命令或者只用来看logWSL1也够用了。但既然现在WSL2这么稳直接上WSL2是更省心的选择。安装起来也不比WSL1复杂。2. 安装前的准备工作不要越级直接执行安装命令。先花两分钟确认硬件和系统层面是否满足条件不然你会在报错信息里绕半天。2.1 确认Windows版本和硬件虚拟化WSL2要求64位Windows 10版本2004及以上或者Windows 11。Windows 10 1909及以下版本虽然能用WSL1但装WSL2会比较麻烦。最简单的确认方法在“运行”里输入winver看弹出的系统信息。硬件虚拟化一定要在BIOS里开启。现在大多数新电脑默认是开着的但有些品牌机默认关闭。你可以打开任务管理器切到“性能”页看左下角是否有“虚拟化: 已启用”。如果显示“已禁用”需要进BIOS找到Intel Virtualization TechnologyVT-x或AMD SVM Mode把它改成Enabled保存重启。这一步不做后面启动WSL2会直接提示0x80370102。2.2 开启“Windows Subsystem for Linux”和“虚拟机平台”功能在Windows功能列表里需要勾选两个和WSL2直接相关的组件“适用于Linux的Windows子系统”和“虚拟机平台”。如果只用WSL1第一个就够了要跑WSL2两个都得开。可以用图形界面操作但我更习惯用管理员权限的PowerShell直接跑命令这样方便记录和排查dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完以后根据提示重启系统。别偷懒不重启我当时第一次就是没重启直接装结果后面一连串错误最后还是要重启才能解决。2.3 安装内核更新包与WSL命令行基础命令如果你是Windows 10较老版本还需要手动下载一个WSL2内核更新包这是微软官方提供的MSI文件装上就完事。Windows 11和更新版本的Windows 10一般不需要系统会通过Windows Update自动带上。安装完后打开Windows Terminal或者PowerShell先确认一下wsl命令是否可用wsl --status如果提示“默认版本2”说明已经进入WSL2状态。如果还没有或者提示无法识别命令先执行wsl --update这会拉取最新的WSL组件。注意这一步需要网络畅通国内网络环境下这一步一般没问题偶尔会慢耐心等就好。3. 安装与初始化Linux发行版准备工作做完真正安装Linux发行版其实非常快。微软商店里的Ubuntu、Debian、openSUSE等发行版都能用但命令行安装才是最省事的。3.1 用wsl --install一键安装Ubuntu新版本Windows下一键安装非常简单。在管理员PowerShell里执行wsl --install -d Ubuntu这个命令会自动下载Ubuntu并且创建WSL2环境。整个过程大概几分钟取决于网速。执行完以后会自动进入Ubuntu初始化界面要求设置一个新的UNIX用户名和密码。注意这个账号不是Windows账号是Linux里的独立账号。密码输入时不会显示任何字符你以为是坏了其实是在等键盘输入。如果你是Windows 10旧版wsl --install可能不显示-d参数那可以先去Microsoft Store搜“Ubuntu”并安装安装后打开Ubuntu应用也会进入同样的初始化流程。3.2 后装其他发行版与切换默认发行版装完一个之后你可以继续装更多发行版。比如你在生产环境用Debian想在本地复现就执行wsl --install -d Debian安装多个发行版后系统会有一个默认发行版进入wsl命令时默认启动它。查看所有可用的发行版wsl --list --verbose wsl -l -v如果想把默认发行版改成Debianwsl --set-default Debian注意每个发行版的用户名、密码、软件源都是独立的不要在一个发行版里改了配置期望另一个也跟着变。3.3 设置WSL2为默认版本并创建用户有时候wsl默认版本还是1需要手动指定wsl --set-default-version 2如果提示需要更新内核就按之前说的执行wsl --update。安装Ubuntu完成后首次初始化会让你创建用户名密码。如果你不小心跳过或者想要root账号也可以后面重新设置sudo passwd root设置完root密码后日常使用还是应该用普通用户只在需要时用sudo。WSL2默认以普通用户身份登录不用像某些教程那样强制切到root这样更安全。3.4 文件系统互访\wsl$与/mnt/盘符WSL2安装好以后最重要的就是和Windows共享文件。在Windows资源管理器地址栏输入\\wsl$这里会列出所有发行版。点开Ubuntu你就能看到Linux的根目录可以直接用Windows资源管理器复制、移动文件。反过来在Linux里访问Windows盘ls /mnt/c/Users/你的用户名这里需要注意的是如果项目需要频繁读写Windows磁盘别直接放在/mnt/c下编译性能会比较差。正确做法是把项目克隆到WSL2内部比如~/projects然后通过\\wsl$\Ubuntu\home\你的用户名\projects从Windows侧访问。我在实际项目里就把一个几万文件的Node项目放在Linux文件系统里再通过VSCode的WSL远程模式打开编译速度和直接在Linux服务器上差不多。4. 环境配置与日常使用优化装完只是开始。WSL2默认配置偏保守内存不是吃满就是没用上软件源在国外也慢。做完下面这几个配置体验会顺很多。4.1 用.wslconfig限制内存和CPUWSL2默认的情况是内存最多占用Windows总内存的50%或者8GB取较小值。如果你的电脑只有16GB内存Windows和WSL2同时跑可能会觉得有点紧。可以通过.wslconfig文件来精确控制。在Windows用户目录C:\Users\你的用户名下新建一个文件名字是.wslconfig内容可以这样写[wsl2] memory4GB processors2 swap2GB localhostForwardingtruememory限制WSL2最大内存processors限制CPU核心数swap是虚拟内存大小。改完后在PowerShell执行wsl --shutdown再重新进入WSL2配置才会生效。我以前默认情况下WSL2内存吃了6GB但我实际只需要3GB加了限制之后Windows侧明显流畅很多。4.2 替换软件源加速包下载如果你用Ubuntuapt默认源在国外国内下载经常只有几十KB/s。换成阿里云或清华镜像后速度翻好几倍。先备份原始源文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后编辑/etc/apt/sources.list。以Ubuntu 24.04Noble为例用阿里云镜像的内容大致是deb http://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse如果你不确定自己的Ubuntu版本可以执行lsb_release -a查看。替换完以后sudo apt update执行update时看到从mirrors.aliyun.com拉取索引就说明换源成功了。4.3 安装Docker和常用开发工具WSL2里跑Docker是它最吸引人的地方。首先是安装依赖sudo apt update sudo apt install -y ca-certificates curl gnupg lsb-release添加Docker官方GPG密钥和仓库sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin最后启动服务sudo service docker start sudo usermod -aG docker $USER重新进入终端后直接用docker version确认。日常写Python的话系统自带python3但版本可能不够新推荐用工具如pyenv或直接用apt装最新版。Node的话建议通过nvm安装方便切换版本。4.4 与Windows终端、VSCode的整合WSL2最爽的一点就是和Windows工具链无缝配合。在WSL里输入explorer.exe .可以直接打开当前目录到Windows资源管理器explorer.exe .想用Notepad打开一个Linux下的文件notepad.exe ~/test.txt开发层面VSCode的Remote - WSL扩展是标配。在Windows侧装好VSCode和Remote-WSL扩展后在WSL目录下执行code .VSCode会自动以远程模式启动底部显示“WSL: Ubuntu”你能直接用VSCode的图形界面编辑Linux里的文件比较顺畅。Windows Terminal也是强烈推荐的终端。安装后在设置里把默认终端改成“Windows Terminal”启动配置文件里添加Ubuntu以后打开终端直接就是Linux命令行不再需要手动在PowerShell里输入wsl。5. 常见问题与避坑指南这一段是硬通货。我这几年前前后后帮同事处理过不少WSL2的问题下面这些是出现频率最高的每个都有对应的解决办法。5.1 启动时报错0x80370102怎么办这个错误基本等于告诉你CPU虚拟化没开启。排查路径很清晰打开任务管理器确认“虚拟化”状态如果显示已禁用进BIOS开启Intel VT-x或AMD SVM开启后重启再执行wsl --set-default-version 2验证。如果你确认BIOS已经开启还会报错检查一下Windows功能里的“虚拟机平台”是否真正启用了。用PowerShell执行Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform看State是不是Enabled如果是Disabled用前面dism命令开启再重启。5.2 vmcompute服务异常导致WSL2无法启动WSL2依赖一个叫Virtual Machine Compute的Windows服务简称vmcompute。有时候Windows更新后这个服务会停掉导致所有WSL发行版启动时报“无法停止 vmcompute 服务”或者“操作超时”。可以在管理员PowerShell里查看服务状态Get-Service vmcompute如果状态不是Running执行net start vmcompute如果服务被禁用先在“服务”管理工具里找到Hyper-V Host Compute Service把启动类型改为自动再启动它。这个问题在Windows 11早期版本偶发现在的版本已经稳定很多但遇到WSL启动异常且无法定位时先看一眼这个服务总没错。5.3 WSL2磁盘膨胀的压缩方法WSL2的磁盘镜像VHDX文件默认会“只扩不缩”。你安装了几个大软件、删了又装删掉的文件不会自动释放空间最终你会发现Windows的C盘越来越臃肿而WSL2里的实际内容只占了一小部分。压缩步骤如下在WSL2内清理系统sudo apt clean sudo apt autoremove用fstrim释放未使用的块sudo fstrim -v /这一步会告诉虚拟磁盘哪些块是空闲的Windows侧才能安全压缩。关闭WSL2wsl --shutdown找到发行版的VHDX文件。默认路径在C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...里可以搜索.vhdx。用diskpart压缩。管理员PowerShell执行diskpart select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\Ubuntu...\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit注意路径要根据实际发行版调整。我给同事操作过一次原本30GB的VHDX压缩到了8GB效果很直观。5.4 网络DNS失灵和端口访问的排查WSL2的网络模式是NAT内置DNS解析默认会借鉴Windows的DNS配置。如果Windows网络环境变化频繁比如换了wifi、用了公司网络WSL2里可能出现apt update能连但ping域名不通的情况。这时先看/etc/resolv.confcat /etc/resolv.conf如果里面指向的DNS不可用可以改成公共DNS比如sudo sh -c echo nameserver 223.5.5.5 /etc/resolv.conf但要注意WSL2重启后会自动重新生成resolv.conf。如果你希望手动固定DNS在/etc/wsl.conf里加上[network] generateResolvConf false然后重启WSL之后再手动改/etc/resolv.conf就不会被覆盖了。至于端口访问WSL2里启动的服务比如nginx监听8080一般在Windows侧可以直接通过localhost:8080访问因为默认开启了localhostForwarding。如果你遇到访问不了先确认服务监听的是0.0.0.0而不是127.0.0.1再检查Windows防火墙是否拦截了相关端口。用curl.exe http://localhost:8080是从PowerShell里测WSL服务的一个好办法。我在实际使用中还有一个小习惯所有WSL2里的服务都让它们监听0.0.0.0然后用localhost在Windows侧访问很少遇到端口转发问题。如果哪天访问不通了第一条命令永远是wsl --shutdown再重启因为很多时候只是虚拟网络设备在小睡之后没醒过来。

相关新闻

C语言结构体内存对齐原理与工程实践

C语言结构体内存对齐原理与工程实践

1. 为什么结构体变量的内存布局不是“把所有成员挨个排过去”那么简单? 刚学C语言时,我教过不少零基础学员。几乎所有人第一次看到 struct 定义,都会下意识认为:内存就是一条直线,int占4字节、char占1字节、double占…

2026/9/30 7:50:28 阅读更多 →
Flow-OPD:面向流匹配模型的在策略蒸馏

Flow-OPD:面向流匹配模型的在策略蒸馏

Flow-OPD:面向流匹配模型的在策略蒸馏

2026/9/30 7:50:28 阅读更多 →
做TikTok Shop多店铺,用什么浏览器防关联?TK小店多账号必看

做TikTok Shop多店铺,用什么浏览器防关联?TK小店多账号必看

TikTok Shop 的风控和亚马逊不是一套逻辑——五款主流浏览器在店群场景下的真实差异摘要: TikTok Shop 做店群,很多人把亚马逊那套"换 IP 分环境"直接搬过来,结果还是连锁封店。原因在于 TikTok 是移动优先平台,风控同…

2026/9/30 7:50:28 阅读更多 →

最新新闻

AI求职Demo失效真相:从玩具到产品的能力表达重构

AI求职Demo失效真相:从玩具到产品的能力表达重构

1. 这不是技术问题,是求职信号系统失灵了 “做了3个AI Demo,为什么还是拿不到面试?”——这句话我去年在技术社区刷到不下二十次,每次看到都下意识点开,不是因为好奇,而是太熟悉了。熟悉到能一眼看出提问者…

2026/10/1 18:38:45 阅读更多 →
用NumPy从零实现BP神经网络:前向传播、反向传播与训练循环

用NumPy从零实现BP神经网络:前向传播、反向传播与训练循环

简介:面向神经网络导论课程的实验代码包,围绕自适应线性单元(Adaline)及其LMS学习算法展开,采用Matlab实现,适合正在学习神经网络基础、需要动手验证经典模型的学生。压缩包共5个文件,包含3个Ma…

2026/10/1 18:38:45 阅读更多 →
AI会取代程序员吗?2026年程序员生存指南与AI工具实战

AI会取代程序员吗?2026年程序员生存指南与AI工具实战

上周在技术群里,有人转发了一段关于"AI 2026年将引发失业潮"的新闻,群里一下子就炸了。有人立刻开始焦虑初级程序员是不是明年就没了,有人翻出招聘软件截图问要不要转行,还有人贴自己的简历求支招。我看了半天&#xff…

2026/10/1 18:38:45 阅读更多 →
UE弹丸重叠事件不触发?ProjectileMovement坐标获取的根因与三种解法

UE弹丸重叠事件不触发?ProjectileMovement坐标获取的根因与三种解法

如果你在虚幻引擎UE里做过发射物Actor,多半遇到过这一幕:一颗子弹飞出去了,模型动了、轨迹也正常,但你想通过重叠委托拿它的坐标,委托却一次都不触发,日志里干干净净。我最初以为是自己绑定写错了&#xff…

2026/10/1 18:38:45 阅读更多 →
Windows C盘用户名修改风险与安全替代方案

Windows C盘用户名修改风险与安全替代方案

1. 这不是危言耸听:C盘用户名修改背后的真实代价 “非必要千万不要改C盘用户名!!!”——最近在技术社区、数码论坛甚至朋友圈里,这句话像警报一样反复刷屏。它不是某个博主的夸张标题党,而是成百上千真实用…

2026/10/1 18:38:45 阅读更多 →
arXiv每日论文分析报告:自动抓取、语义打分与结构化摘要实战

arXiv每日论文分析报告:自动抓取、语义打分与结构化摘要实战

1. 一份“每日论文分析报告”到底在解决什么问题每天早上打开 arXiv 的 cs.CL、cs.LG、cs.CV 几个分区,新论文加起来动辄两三百篇,光是标题列表往下滚就要花掉十几分钟。更麻烦的是,标题和摘要之间存在巨大的信息差——有些标题看着平平无奇&…

2026/10/1 18:37:45 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →