ARTICLE DETAIL

资讯详情

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

WSL 2 安装配置实战:在 Windows 上打造高效 Linux 开发环境

WSL 2 安装配置实战:在 Windows 上打造高效 Linux 开发环境 写这篇东西之前先说个实话——我在 Windows 上折腾 Linux 环境折腾了快十年从最早的双系统到后来忍受 VMware 里跑 Ubuntu再到用 Cygwin 怀念 Linux 命令行的日子每一步都踩过坑。直到 WSL 2 出现我的开发主力机才算是真正安定了下来。它既能让你在 Windows 里正常办公、打游戏、用各种 Windows 原生软件又能随时打开一个接近原生的 Linux 终端跑 Docker、编译 C、部署 Python 服务几乎没有任何割裂感。这篇文章就把 WSL 2 从概念到实操完整讲清楚重点放在“怎么装、怎么选、怎么避坑”。不管你是刚接触编程的学生还是被 Linux 虚拟机折腾到崩溃的后端开发者或者就是想在 Windows 上体验一把 Ubuntu 的普通用户照着这篇文章操作基本能在半小时内把环境跑起来。1. WSL 2 到底是什么为什么它值得装1.1 WSL 的进化历史从翻译层到轻量虚拟机WSL 的全称是 Windows Subsystem for Linux也就是 Windows 系统里的 Linux 子系统。第一代 WSLWSL 1在 2016 年推出它的原理非常取巧——直接在内核层把 Linux 系统调用翻译成 Windows 系统调用。这种设计让启动速度极快几乎不占额外资源但代价是兼容性不够完整很多依赖真实 Linux 内核特性的软件比如 Docker、某些文件系统操作会出问题。WSL 2 在 2019 年左右正式亮相它的架构彻底重写了。WSL 2 跑在一个真正的轻量级虚拟机里这个虚拟机使用了一颗经过微软深度定制的真实 Linux 内核。你可能会问这不就是虚拟机吗和 VMware 有什么区别区别大了。WSL 2 的虚拟机启动只需要 1 到 2 秒内存占用通过动态回收机制控制在很低的水平文件系统访问速度也比 WSL 1 快了数倍。它不像传统虚拟机那样需要你手动分配 CPU、内存、磁盘而是按需使用关了窗口就自动休眠。我用一个还算贴切的类比来理解传统虚拟机是你在 Windows 里开了一间完全独立的出租屋要装门禁、配钥匙、交水电费WSL 2 则是把你需要的 Linux 功能打包成一个轻量级集装箱随用随开开箱即食吃完了就自动回收资源。1.2 WSL 2 的实际应用场景WSL 2 最吸引人的地方在于它把 Windows 和 Linux 的边界模糊掉了。举个最典型的例子你可以用 VSCode 连接 WSL 2 里的 Ubuntu直接在 Windows 的图形界面里编辑代码但代码运行环境、依赖安装、路径解析完全按照 Linux 的逻辑走。这样你在 Windows 上写的 Python 项目、Node.js 项目到了服务器上部署时几乎不会出现环境不一致的问题。再比如 Docker。WSL 2 可以直接承载 Docker Desktop 的后端不需要额外安装 Docker Toolbox 或者 VirtualBox。你的 Windows 里跑着 Docker容器内却是完整的 Linux 环境这种体验在老版本 Windows 上想都不敢想。其他常见用途还包括编译 Linux 下的 C/C 项目避免 CMake、Makefile 在 Windows 下的各种兼容性问题跑机器学习模型训练脚本大部分深度学习框架对 Linux 的支持优先级远高于 Windows练习 Linux 运维命令比如 grep、awk、sed、systemd、systemctl使用 Linux 下的 Redis、MySQL、MongoDB 等中间件做本地开发跑 ROS机器人操作系统相关的开发环境很多机器人仿真工具链只能原生跑在 Ubuntu 上如果你和我一样工作环境无法彻底摆脱 Windows比如必须用 Windows 版的 Office、企业办公软件、游戏又想拥有流畅的 Linux 开发体验WSL 2 几乎是当前最优解。2. 安装 WSL 2 前的准备工作2.1 检查 Windows 版本和硬件要求WSL 2 对系统版本有硬性要求Windows 10 版本 2004Build 19041或更高版本以及 Windows 11 全系列。Windows 10 老版本比如 1809 之前的系统大概率无法直接安装 WSL 2需要先升级系统。快速查看系统版本的方法按Win R打开运行框输入winver回车弹出来的对话框里会显示完整的版本号和操作系统内部版本号。如果版本号低于 19041我建议先更新 Windows杜绝对着教程折腾半天却因为系统版本不达标而失败的尴尬。硬件方面你的 CPU 必须支持虚拟化技术并在 BIOS 中已启用。Intel 处理器对应 Intel VT-xAMD 处理器对应 SVM Mode。大部分 2015 年之后上市的电脑都支持虚拟化只是各品牌主板默认开启状态不一样。你可以在任务管理器 - 性能 - CPU 页面里查看“虚拟化”状态显示“已启用”就说明 BIOS 那边已经处理好了。如果你的电脑显示“已禁用”需要重启进入 BIOS 设置开机时按 F2、F10、Del 键之一具体看主板品牌在 Advanced 或 Security 菜单下找到 Intel Virtualization Technology 或 SVM Mode将其设为 Enabled保存退出后重新进入 Windows。2.2 启用 Windows 可选功能虚拟机平台和 Hyper-VWSL 2 依赖 Windows 的虚拟机平台Virtual Machine Platform功能旧版本还依赖 Hyper-V。这些是 Windows 的“可选功能”默认关闭需要手动启用。最直接的方式是以管理员身份打开 PowerShell 或命令提示符在开始菜单里对着 PowerShell 图标右键选择“以管理员身份运行”然后执行以下命令dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart两条命令分别启用了 WSL 基础功能和虚拟机平台。执行完成后系统会提示是否立即重启选择“是”即可。重启之后WSL 2 的底层支持就备好了。如果你用的是 Windows 11其实还有更偷懒的方式直接在 PowerShell 里执行wsl --install这条命令会自动帮你启用所需功能、安装默认的 Ubuntu 发行版、设置 WSL 2 为默认版本全程几乎不需要人工干预。这也是我目前最推荐新手使用的安装方式下一小节我会细讲。3. 实操从零开始完成 WSL 2 安装3.1 最快路径一条命令安装 Ubuntu如果你满足 Windows 10 2004或 Windows 11 的系统条件强烈建议直接用命令安装。注意必须用管理员身份打开 PowerShell 或命令提示符执行wsl --install这条命令执行后的效果等同于启用 WSL 和虚拟机平台功能 - 下载并安装 WSL 2 内核 - 设置 WSL 2 为默认版本 - 从微软商店下载安装 Ubuntu。整个过程大概耗时几分钟视网络情况而定。如果你不想装默认的 Ubuntu可以用-d参数指定发行版。常见选项包括 Debian、Kali Linux、openSUSE 等。例如wsl --install -d Debian安装完成后需要重启电脑。重启后开始菜单里会多出来一个 Ubuntu 的图标第一次点击运行时会让你设置 Linux 用户名和密码。这里的用户名和密码只影响 Linux 环境内和 Windows 账户分开你可以放心设置。进入 Linux 终端后第一件事我建议把软件源换成国内的镜像源。Ubuntu 默认软件源在国外国内网络下载速度会明显偏慢。具体操作是编辑/etc/apt/sources.list把archive.ubuntu.com和security.ubuntu.com里的域名替换成国内镜像站域名。以清华源为例Ubuntu 22.04jammy的写法是sudo sed -i s//archive.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo sed -i s//security.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list sudo apt update如果你用的是 Ubuntu 24.04noble软件源文件位置和组织方式略有不同需要先检查/etc/apt/sources.list.d/ubuntu.sources文件用类似方式替换archive.ubuntu.com为镜像域名。替换之前建议先备份原文件避免改错了无法回滚。3.2 备用方案通过控制面板手动安装如果你用的系统版本较老或者wsl --install命令执行失败可以走手动路线。方式分为两部分。第一部分是启用功能。打开控制面板 - 程序 - 启用或关闭 Windows 功能在弹窗列表里勾选“适用于 Linux 的 Windows 子系统”以及“虚拟机平台”确定后重启。第二部分是安装内核更新包。前往微软官方文档页面下载“WSL 2 Linux 内核更新包”并安装。这个更新包以.msi格式提供双击运行一路下一步即可。如果没记错现在较新版本的微软官方文档已经把这步集成到了 wsl 更新里但老教程和旧系统还需要手动处理。第三部分是在微软商店搜索“Linux”会列出 Ubuntu 等多个发行版选择一个安装然后点击启动并初始化用户。这套流程比较繁琐好处是不依赖命令行适合习惯图形界面的用户。3.3 安装后的必要检查安装完成后建议打开 PowerShell 确认当前状态。运行wsl --status正常情况下会显示“默认分发版: Ubuntu”和“默认版本: 2”。如果默认版本显示为 1说明系统没有自动切换可以手动设置wsl --set-default-version 2你还可以用wsl -l -v查看当前已安装发行版的列表和 WSL 版本号。如果某个发行版显示 VERSION 为 1可用以下命令单独切换wsl --set-version Ubuntu 2切换过程需要一点时间可能提示你输入登录密码等它跑完就行。4. WSL 1 与 WSL 2 的选型与切换4.1 到底选哪个版本一张表看懂差异很多人在安装时会纠结到底该用 WSL 1 还是 WSL 2其实两个版本各有优劣不是简单的“新的就更好”。对比项WSL 1WSL 2架构系统调用翻译层轻量级虚拟机 真实 Linux 内核启动时间极快毫秒级快秒级但体感几乎无差系统调用兼容性不完整部分工具报错接近 100% 兼容I/O 性能跨文件系统操作慢文件系统性能大幅提升Docker 支持不支持原生支持内存动态回收天然低占用支持但配置不当会吃内存适用于老旧电脑、低配机器现代主流配置电脑如果你只是想在 Windows 里用用 Linux 命令行、跑跑grep、sed旧电脑上装 WSL 1 完全够用。但如果你是做开发为主要跑 Docker、MySQL、Python 虚拟环境无脑选 WSL 2。目前 Windows 10 2004 和 Windows 11 默认都是 WSL 2不是特殊情况根本不需要切换回 WSL 1。4.2 切换版本的正确姿势切换命令很简单就是上节提到的wsl --set-version。比如把 Ubuntu 从 WSL 2 降级为 WSL 1wsl --set-version Ubuntu 1但这里有一个很重要的提醒从 WSL 2 切换到 WSL 1 的过程是不可逆的。WSL 2 使用的是 ext4 虚拟磁盘一个存储在 Windows 目录下的ext4.vhdx文件切换成 WSL 1 后这个虚拟磁盘会被转换原来的文件系统可能会丢失。在切换之前务必把重要的代码和配置备份到 Windows 文件系统下比如/mnt/c/目录。4.3 通过 .wslconfig 精细控制资源WSL 2 默认会消耗大量内存尤其在跑 Docker 或大型编译任务时。如果你希望限制它的内存使用量可以在 Windows 用户目录下创建一个名为.wslconfig的配置文件位置在C:\Users\你的用户名\.wslconfig内容如下[wsl2] memory4GB processors2 swap2GB localhostForwardingtrue参数说明memory限制最大内存processors限制 CPU 核心数swap限制交换分区大小localhostForwarding控制是否允许 Windows 侧通过 localhost 直接访问 WSL 内的服务。改完配置后运行wsl --shutdown再重新打开 WSL配置才会生效。我个人一般会设置最大内存为物理内存的一半既保证 WSL 里能舒服地干活又不至于把 Windows 本机的内存吃光。如果你的电脑内存只有 8GB建议设置memory4GB如果 16GB 以上可以设到 8GB。4.4 选择终端工具WSL 本身不提供图形界面所有操作都在终端里完成。Windows 自带的命令提示符虽然能打开 WSL但体验一般。我更推荐使用Windows Terminal。它支持多标签、自定义主题、能感知 WSL 环境变量用起来非常顺手微软商店直接搜 “Windows Terminal” 安装即可。安装后打开 Windows Terminal点击标签栏的下拉箭头你会看到已安装的 Ubuntu 分布。点击它就能进入 Ubuntu 的 Bash 环境配色、字体、透明度都可以设置。有了它之后CMD 和 PowerShell 基本可以退居二线了。5. 踩坑实录常见问题与排查技巧5.1 初学者最常见的四个报错速查表我在帮同事和朋友装 WSL 时遇到的高频问题高度集中这里直接做成速查表方便你对着排查。报错代码或信息含义解决方式0x80070003系统找不到指定的路径确保 Windows 用户目录在 C 盘根目录附近不要放在中文路径或网络驱动器0x8007019eWSL 可选组件未安装执行dism.exe两条命令启用 WSL 功能重启0x80370102虚拟化未启用进入 BIOS 打开 Intel VT-x 或 SVM Mode0x800701bcWSL 2 内核版本过旧运行wsl --update更新内核然后wsl --shutdown重启5.2 问题一安装时提示“WslRegisterDistribution failed with error 0x80370102”这个报错基本可以断定是虚拟化没开或 Hyper-V 功能不全。先把任务管理器里的虚拟化状态查一下如果是“已禁用”进 BIOS 开启如果已经是“已启用”就在 PowerShell 里执行dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V-All /all /norestart注意这条命令只适用于 Windows 10 专业版及以上。Windows 10 家庭版没有 Hyper-V 功能但一般情况下也不用装 Hyper-V打开“虚拟机平台”就足够了。别乱装装完家庭版可能出其他幺蛾子。5.3 问题二Vmmem 进程占用内存过高很多人第一次用 WSL 2 时会发现任务管理器里有个叫 Vmmem 的进程内存占用动不动就到 5GB 甚至更多。这是因为 WSL 2 会在启动时预留一部分内存而这个预留量默认等于总内存的 50% 或 80%。解决办法就是我 4.3 节提到的.wslconfig配置。设置好memory4GB后重启 WSL这个问题立刻解决。为什么默认会留这么多内存因为 WSL 2 内部把空闲内存缓存用来做文件系统缓存这样下次访问文件时会更快。但对于内存本来就紧张的用户来说这个机制不太友好手动限制一下反而更实用。5.4 问题三VSCode 连接 WSL 时提示找不到 WSL 路径这种情况多出现在 Windows 用户名带中文或空格时。VSCode 的 WSL 扩展依赖于正确的 WSL 路径解析如果用户名带中文远程资源管理器可能无法正确识别。解决方案有两个一是换一个纯英文的 Windows 用户名比较麻烦不推荐改账户名二是直接手动在 VSCode 终端里输入wsl进入 Bash然后在 Bash 里用code .命令打开当前目录。后者亲测有效绕过了解析路径的问题。5.5 问题四想在 WSL 里访问 Windows 文件或反过来WSL 2 的文件系统互通是通过挂载实现的。在 WSL 里Windows 的 C 盘被挂在/mnt/c比如C:\Users\你的用户名\Desktop对应 WSL 里的/mnt/c/Users/你的用户名/Desktop。反过来你可以把 WSL 里的文件直接拖到 Windows 资源管理器访问因为 WSL 的虚拟磁盘在 Windows 侧也映射了路径地址栏输入\\wsl$\Ubuntu就能打开文件系统。但这里有个性能问题要特别注意跨文件系统操作很慢。比如你把项目放在/mnt/c/...Windows NTFS 文件系统下然后在该路径下执行npm install速度会比在 WSL 原生文件系统~/...下慢不少。最佳实践是代码项目放在 WSL 内部目录比如/home/你的用户名/projects需要最终交付或备份时再拷贝到 Windows 目录。5.6 问题五systemd 服务无法启动WSL 2 默认不启动 systemd 服务所以像systemctl这类命令会报错。这是 WSL 2 早期版本非常让人头疼的一点好在新版本已经支持了。检查并开启 systemd 的方法编辑/etc/wsl.conf文件在末尾加上以下内容[boot] systemdtrue保存后在 PowerShell 执行wsl --shutdown重新启动 WSL。再次进入 Ubuntu 后运行systemctl list-units如果能看到服务列表说明 systemd 已经正常工作了。这样你在 WSL 里就能用systemctl enable mysql这类命令管理服务体验接近完整 Linux。5.7 问题六局域网内访问 WSL 里的服务失败默认情况下WSL 2 的网络是通过 NAT 模式实现的它有自己的虚拟 IP局域网内的其他设备无法直接访问。如果你需要让局域网设备访问 WSL 里跑的服务比如测试手机访问本机上的网站有几种办法。最简单的办法是把服务的监听地址设为0.0.0.0然后用ip addr查看 WSL 的 IP让其他设备访问这个 IP。缺点是 WSL 每次重启 IP 可能变比较麻烦。如果想要稳定的地址可以在.wslconfig文件里开启镜像网络模式[wsl2] networkingModemirrored设置这个模式后WSL 2 与 Windows 共享同一套网络接口局域网设备直接访问 Windows 的 IP 加端口就能访问到 WSL 内的服务非常方便。不过镜像模式依赖较新的 WSL 版本如果配置后不生效先跑一下wsl --update升级内核。5.8 问题七WSL 启动卡在“正在进行首次安装”如果你首次启动 Ubuntu 一直卡在初始化界面大概率是下载或解压发行版时中断了。排查方式先执行wsl --shutdown然后再启动不行就注销发行版重新安装。注销命令是wsl --unregister Ubuntu注意这个命令会删除该发行版内的所有数据相当于格式化重装操作前确认不需要保留里面的数据。重新安装之后重新设置用户名密码即可。这一套流程走下来WSL 2 基本上就能成为你日常开发环境的一部分了。我个人实际使用中的体会是WSL 2 最强的不是它快而是它让你在 Windows 上恢复了“用 Linux 方式思考”的自由。你不会因为系统边界而被迫在开发工具链上妥协也无需为了一个grep命令专门启动一台虚拟机。最后再分享一个小技巧把常用的 WSL 启动命令做成别名比如在 Windows Terminal 里新建一个 Ubuntu 标签页以后开机只需要按两下就能进入 Linux 环境。很多同事问我在 Windows 上做开发用什么环境我每次的回答都是同一句话先在电脑上装个 WSL 2你会回来感谢我的。
返回列表