新闻详情

新闻详情

首页 / 资讯中心 / 详情

Windows 上用 WSL 2 与 Ubuntu 搭建 Linux 开发环境指南

发布时间:2026/10/1 4:33:12来源:尧图网络
Windows 上用 WSL 2 与 Ubuntu 搭建 Linux 开发环境指南
1. 先把话说清楚我为什么把主力开发环境搬进了 WSL如果你是一个长期在 Windows 上写代码的人大概率经历过这种纠结Windows 的图形界面、Office 生态、微信和企业 IM 都很顺手可一旦要跑一套 Linux 上的工具链就立刻开始别扭。装双系统要重启开虚拟机吃内存还卡顿文件夹挂载慢得让人想砸键盘。WSLWindows Subsystem for Linux就是冲着这个痛点来的——它让你在 Windows 里拥有一个真正的 Linux 内核环境无需重启、无需完整虚拟机命令行、服务、包管理器全都在。这篇内容围绕 WSL 搭配 Ubuntu 的完整落地过程来讲包括版本选择、安装、初始化、工具链协同、跨系统文件坑以及我这些年踩过的具体故障。关键词就是 WSL、Ubuntu、Windows、Linux 这几个场景覆盖从零安装到日常开发使用的全过程。适合三类人看一是刚接触 Linux、想找个低成本入门环境的新手二是已经在用虚拟机、想换到更轻量方案的开发者三是需要在 Windows 上跑 Docker、CUDA、编译工具链的工程人员。我不打算写成一份干巴巴的官方文档翻译。官方文档告诉你“执行这条命令”但不会告诉你为什么这条命令在家里网络环境下会卡住、不会告诉你/mnt/c下跑npm install为什么会慢十倍、也不会告诉你在 WSL 里编译出来的东西拷回 Windows 后为什么会莫名其妙报错。这些才是真正消耗时间的地方。先说结论对绝大多数人来说WSL 2 加 Ubuntu LTS 是目前 Windows 上最省心的 Linux 开发方案没有之一。装好之后你的日常操作就是打开 Windows Terminal敲wsl回车五秒内进到一个完整的 Ubuntu 环境里。下面我按实际落地的顺序一步步拆开讲。2. WSL 1 和 WSL 2 到底差在哪该选哪个2.1 架构差异决定了性能差异很多人装的时候被问“要不要升级到 WSL 2”就懵了其实一句话能说清WSL 1 是微软自己做的一套系统调用翻译层把 Linux 的系统调用实时翻译成 Windows 能听懂的形式WSL 2 则干脆在轻量虚拟机里跑了一个真实的 Linux 内核。这个差别直接体现在几个地方。文件系统性能上WSL 2 在 Linux 原生目录比如/home/yourname里的读写速度比 WSL 1 快很多我实测解压一个几百兆的源码包WSL 1 要磨蹭十几秒WSL 2 基本三四秒搞定。系统调用兼容性上WSL 2 因为是真内核Docker、systemd、CUDA 这类需要内核特性的东西才能跑起来WSL 1 基本没戏。代价也有。WSL 2 需要硬件虚拟化支持Intel VT-x 或 AMD-V而且它跟 Windows 之间的跨系统文件访问也就是访问/mnt/c/...这种路径性能反而不如 WSL 1。这一点很关键后面我会专门讲怎么规避。2.2 我的选型建议如果你只是想在 Windows 上跑几个 Linux 命令、写写脚本WSL 1 也不是不能用启动更快、跨系统文件访问更顺。但只要你有以下任一需求直接上 WSL 2要跑 Docker 或在 Linux 里跑服务进程要编译大型项目、跑数据库、跑机器学习环境要用 systemd 管理服务比如自己启一个后台常驻程序需要 GPU 加速计算老实说2025 年了新装环境没有理由再选 WSL 1。微软的默认行为也早就改成 WSL 2 了直接跟着默认走就行。提示WSL 2 的数据存在一个虚拟磁盘文件ext4.vhdx里这个文件会随着使用不断膨胀删掉文件后空间不一定马上回收。后面章节会讲怎么压缩它。2.3 版本升级与切换的实操已经装过 WSL 1 的老用户检查和切换的命令很直接# 查看当前已安装的发行版及其 WSL 版本 wsl --list --verbose # 把指定发行版切到 WSL 2 wsl --set-version Ubuntu 2 # 把默认版本设为 WSL 2以后新装的都默认用 2 wsl --set-default-version 2这里有个细节wsl --set-version转换过程中会重建文件系统镜像耗时可能几分钟到十几分钟取决于你环境里数据量。转换期间别关终端。我见过有人以为卡死了直接 CtrlC结果环境处于半转换状态只能重装。3. 安装前必须确认的三件事3.1 系统版本与硬件门槛WSL 2 对系统有硬性要求Windows 10 版本 2004内部版本 19041及以上或者 Windows 11 任意版本。查版本的方法是按Win R输入winver回车弹出的窗口里会写清楚。硬件方面需要 CPU 支持虚拟化并且 BIOS/UEFI 里已经开启。检查方式有两个任务管理器 → 性能 → CPU看右下角“虚拟化”是否为“已启用”或者用命令行systeminfo | findstr /i Hyper-V如果这里的几项要求显示“是”说明可以正常使用。如果虚拟化没开需要重启进 BIOS 打开对应选项Intel 平台一般叫 Intel VT-x 或 Virtualization TechnologyAMD 平台叫 SVM Mode。这一步没什么技巧就是位置因主板而异找不到就去主板官网查说明书。3.2 Windows 功能组件的开启虽然现在的wsl --install会自动帮你开但手动确认一遍更稳妥尤其是老系统升级上来的机器。需要开启两个组件“适用于 Linux 的 Windows 子系统”和“虚拟机平台”。用管理员权限打开 PowerShell执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart两条都执行完重启一次。这一步的坑在于很多人只开了第一个结果 WSL 2 起不来报一个WSL 2 requires an update to its kernel component的错。遇到这个错误不用慌装一下内核更新包或者直接跑wsl --update即可。3.3 磁盘空间的实际预估Ubuntu 基础环境大概占 1.5~2 GB但这只是开始。如果你要装 Docker、Node.js 生态、Python 科学计算包、CUDA 工具链占用很容易冲到 20~40 GB。而且前面说了ext4.vhdx是只增不减的。我的建议是把 WSL 的虚拟磁盘放到系统盘之外的分区。默认位置在%LOCALAPPDATA%\Packages\...下面系统盘紧张的话会很难受。迁移方法在第六节讲。4. 从一条命令到能用的终端完整走一遍4.1 最快路径wsl --installWindows 10 2004 之后的版本最简单的方式就是在管理员 PowerShell 里敲wsl --install默认它会装 Ubuntu 最新 LTS同时把上面提到的两个 Windows 组件、WSL 内核、以及默认发行版一次性搞定。装完重启第一次启动 Ubuntu 会要求你创建用户名和密码。这个用户名和密码是 Linux 系统内部的跟你的 Windows 账户没关系密码输入时不显示任何字符是正常现象不是键盘坏了。如果你想要指定发行版先看看有哪些可选wsl --list --online然后wsl --install -d Ubuntu-24.044.2 wsl --install 卡住或者太慢怎么办这是搜索量极高的问题我身边至少五个人问过。原因通常有两个一是下载发行版镜像时网络抖动二是 Windows 组件安装后没重启就继续执行。排查顺序建议这样第一看卡在哪一步。如果卡在“正在下载”那就是网络问题。这时候可以中断CtrlC改用离线方式从微软官方渠道下载对应发行版的安装包.appx或.AppxBundle然后用 PowerShell 的Add-AppxPackage安装或者直接双击安装。离线包安装完第一次启动同样会走创建用户的流程。第二如果卡在“正在安装”检查是不是没重启。很多情况下重启一次再执行wsl --install它会跳过已完成的步骤直接继续。第三如果完全没反应执行wsl --status看当前状态再用wsl --update手动更新内核组件。这个命令在多数网络环境下比整体安装快得多因为包体积小。注意不要在安装过程中强行结束进程或者关机。半安装状态下 WSL 的注册信息可能不完整表现为wsl -l -v列出条目但一启动就报错。真遇到了先wsl --unregister 发行版名卸载干净再重来别硬修。4.3 首次启动后的基础配置进入 Ubuntu 后第一件事是更新包索引。默认源在国内访问速度一般建议换源具体在第五节。更新命令sudo apt update sudo apt upgrade -y这里sudo apt update是刷新软件包列表apt upgrade才是真正升级已装软件很多人第一次用会搞混。-y表示自动确认脚本里常用手动操作时可以先不加看清楚要升级什么再决定。然后装几个日常必备的基础工具sudo apt install -y build-essential git curl wget unzip zip vim htop net-toolsbuild-essential包含了 gcc、g、make 等编译工具链是后面编译任何源码的基础。net-tools提供ifconfig这类老命令虽然现在推荐用ip命令但很多教程还在用它装上省事。5. 装完之后必须做的几项优化5.1 换软件源把下载速度拉起来Ubuntu 默认的软件源在国外apt install一个大包能等出人生感悟。换成国内镜像源是性价比最高的一步优化。Ubuntu 24.04 的源配置文件在/etc/apt/sources.list.d/ubuntu.sources新格式22.04 及以前在/etc/apt/sources.list。改之前先备份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后编辑文件把archive.ubuntu.com和security.ubuntu.com替换成国内镜像站域名比如清华、阿里、中科大的镜像。改完执行sudo apt update如果没有报错并且速度明显变快就成功了。报错的话通常是格式或者域名写错了用备份还原再改一遍。5.2 中文输入法与中文环境WSL 默认是纯命令行环境没有图形界面所以严格来说日常在 WSL 里写代码不需要中文输入法——你是在 Windows 侧的编辑器里输入的中文由 Windows 的输入法处理。这一点很多人搞混装了半天输入法发现根本用不上。但如果你确实需要跑 GUI 程序通过 WSLgWindows 11 自带那才需要考虑输入法。这种情况下的推荐方案是安装fcitx5加拼音输入法框架然后在 GUI 应用里切换。步骤大致是装fcitx5、fcitx5-chinese-addons再配置环境变量。不过说实话WSLg 里跑图形界面应用体验只能算“能用”重度使用还是建议 Windows 侧操作。如果你只是想解决终端里的中文显示乱码那问题在 localesudo apt install -y locales sudo locale-gen zh_CN.UTF-8 sudo update-locale LANGzh_CN.UTF-8然后重启 WSL。不过要注意把 LANG 设成中文后一些命令的输出也会变中文在搜索引擎里搜报错信息时反而不好找。我个人的做法是保持 LANG 为 en_US.UTF-8只保证 UTF-8 编码支持中文显示即可。5.3 字体配置让终端观感接近 Mac 的顺眼程度关键词里提到“写代码最推荐的字体接近 macOS 的体验”这个点值得单独说。macOS 终端好看的核心不在于系统而在于字体渲染和字体本身——等宽、字形清晰、连字可选、中英文对齐良好。在 WSL 场景下字体配置其实是在Windows Terminal 侧完成的因为 Windows Terminal 负责渲染。我推荐的组合是这样字体特点适合人群JetBrains Mono字形规整官方有 Nerd Font 版本通用首选辨识度高Maple Mono中英文对齐好带圆角观感柔和喜欢清爽风格的人Sarasa Mono更纱黑体等宽中英文混合排版整齐中文注释多的人Cascadia CodeWindows 官方出品支持连字喜欢连字效果的人安装方式是在 Windows 侧下载字体文件右键选择“为所有用户安装”。然后在 Windows Terminal 的settings.json里配置{ profiles: { defaults: { font: { face: JetBrainsMono Nerd Font, size: 11 } } } }尺寸这块别照抄跟你的显示器分辨率相关。我用 2K 屏11 到 12 比较舒服4K 屏可能需要 13 以上。另外记得把antialiasingMode设成cleartype或者grayscale前者锐利后者柔和看个人偏好。提示中英文混排想要对齐字体必须同时包含等宽的拉丁字符和等宽的中文字形。只装纯英文字体的话中文会退回到系统默认字体宽度对不上表格和注释就会歪。6. 和 Windows 侧工具链怎么配合用6.1 在 VS Code 里直接打开 WSL 项目这是我觉得 WSL 最舒服的一个用法。装了 VS Code 的 WSL 扩展之后你在 WSL 终端里进入某个项目目录敲code .VS Code 会在 Windows 侧弹出来但它的语言服务、终端、调试器全都跑在 WSL 里。也就是说你既能享受 Windows 的图形界面又能用 Linux 的工具链两边不用来回倒腾文件。配置上有几个点要注意。第一项目文件一定要放在 Linux 侧目录比如~/projects/xxx不要放在/mnt/c/...下面原因下一节讲。第二扩展要装“WSL 版本”VS Code 会提示你别装到 Windows 本地去否则在远程环境里不可用。第三如果你用 Git建议在 WSL 里配一遍用户名邮箱git config --global user.name 你的名字 git config --global user.email 你的邮箱并且注意core.autocrlf这个配置在 Linux 环境下应该设为input或者false具体在第七节展开。6.2 Docker、CUDA 这类重环境的接入Docker 在 Windows 上有两种跑法一是 Docker Desktop 开启 WSL 2 后端二是直接在 WSL 发行版里装 Docker Engine。前者对新手友好图形界面管理方便后者资源占用更小、更接近生产环境。我个人的选择是本地开发用 Docker Desktop 加 WSL 2 后端因为它整合好、启动快、跟 VS Code 配合顺。做法是安装 Docker Desktop 时勾选“使用 WSL 2 而不是 Hyper-V”然后在设置里的 Resources → WSL Integration 中把你要用的发行版打开。这样在 WSL 终端里直接敲docker就能用。如果你要做的是服务器侧的复现那还是老老实实在 WSL 里装 Docker Engine用apt装官方源版本流程跟真机一致将来上线不会有“本地能跑线上不行”的落差。CUDA 方面WSL 2 支持 GPU 直通。前提是你先在 Windows 侧装好 NVIDIA 驱动注意只需要 Windows 驱动不要在 WSL 里再装一遍驱动这是新手最常见的错误会直接把环境搞坏。然后 WSL 里装 CUDA Toolkit 就行nvidia-smi能正常输出显卡信息就说明通了。6.3 路径互访规则与迁移磁盘Windows 访问 WSL 文件在资源管理器地址栏输入\\wsl$\Ubuntu或者\\wsl.localhost\Ubuntu就能看到。反过来WSL 里访问 Windows 盘符是/mnt/c、/mnt/d这样。迁移 WSL 虚拟磁盘到其他分区的流程是这样的先关闭 WSL导出再导入。wsl --shutdown wsl --export Ubuntu D:\wsl-backup\ubuntu.tar wsl --unregister Ubuntu wsl --import Ubuntu D:\wsl\ubuntu D:\wsl-backup\ubuntu.tar --version 2导入后默认用户会变回 root需要手动改回来。编辑/etc/wsl.conf[user] default你的用户名然后wsl --shutdown重启生效。这个迁移过程我做过几次几十 GB 的镜像导出导入大概十几分钟建议留足时间别中途关机。7. 跨系统操作最容易踩的几个坑7.1 文件性能为什么在 /mnt/c 下跑项目会慢十倍这是 WSL 2 里最反直觉的一点。你从 Windows 访问 WSL 文件走的是网络协议9P 之类从 WSL 访问 Windows 文件走的是另一种映射两者都有额外开销。具体表现是在/mnt/c/Users/xxx/project下执行npm install或者git status速度可能只有在 Linux 原生目录下的十分之一。我做过粗糙对比同一个中型前端项目在~/projects下npm install大约 40 秒放到/mnt/c下要 6 分钟以上。原因就是成千上万个小文件的元数据操作被跨系统映射放大了。所以结论很简单所有代码、依赖、构建产物一律放在 Linux 侧的~目录下。Windows 侧的盘只用来放文档、下载文件、临时中转。VS Code 通过 Remote-WSL 打开 Linux 侧路径编辑体验完全不受影响。7.2 换行符、乱码与解压问题Windows 用 CRLF 作为换行Linux 用 LF。这会导致两类问题脚本在 WSL 里跑时报bad interpreter: /bin/bash^M或者 Git 显示整个文件都被修改了。解决办法有几个层次。Git 侧配置git config --global core.autocrlf input如果你有跨平台协作的仓库更规范的做法是加一个.gitattributes文件明确指定文本文件的换行符处理方式。已经存在的文件可以用dos2unix处理sudo apt install -y dos2unix dos2unix script.sh至于解压乱码典型场景是解压 Windows 上用中文编码打包的 zip文件名会变成乱码。这时候用unzip -O cp936指定编码unzip -O cp936 archive.zip -d output/如果unzip版本不支持-O参数可以换用7z或者 Python 的zipfile模块配合编码参数处理。7.3 SSH 连不上、服务起不来的排查思路WSL 里的 SSH 服务连不上我遇到过三种原因。第一种服务没起来。WSL 默认不会在启动时自动起 sshd需要手动sudo service ssh start。想开机自启在/etc/wsl.conf里加[boot] systemdtrue或者用更传统的方式在~/.bashrc里加启动命令。启用 systemd 之后就能用systemctl管理服务了这是 WSL 2 比较新版本才支持的能力值得开。第二种端口没通。WSL 2 的网络是 NAT 模式从局域网访问 WSL 里的服务需要端口转发或者用较新版本支持的镜像网络模式。在%UserProfile%\.wslconfig里加[wsl2] networkingModemirrored然后wsl --shutdown重启。镜像模式下 WSL 和 Windows 共享网络栈局域网访问会方便很多。第三种密钥权限问题。Linux 对私钥文件权限很敏感权限过宽会拒绝使用。改成 600chmod 600 ~/.ssh/id_rsa chmod 700 ~/.ssh8. 常见问题速查与我的实战心得8.1 高频问题速查表现象大概率原因处理方式wsl --install长时间无响应网络下载慢或未重启改用离线包安装或重启后重试启动报内核组件错误WSL 内核未更新执行wsl --update提示虚拟化未启用BIOS 中虚拟化关闭进入 BIOS 开启 VT-x / SVM项目构建极慢代码放在/mnt/c下迁移到~/目录磁盘空间不释放vhdx 只增不减用diskpart或Optimize-VHD压缩脚本报^M错误CRLF 换行符用dos2unix转换解压文件名乱码编码不匹配指定cp936编码解压nvidia-smi无输出在 WSL 里重复装了驱动卸载 WSL 内驱动只保留 Windows 侧关于磁盘压缩具体步骤是先关闭 WSLwsl --shutdown diskpart # 进入交互后依次执行 # select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\...\ext4.vhdx # compact vdisk # exit执行前建议先备份 vhdx 文件虽然正常操作不会损坏但涉及磁盘的操作谨慎一点总没错。8.2 几条文档里不会写的心得心得一给 WSL 限制内存上限。WSL 2 默认会吃掉最多一半的物理内存跑大型构建时 Windows 侧会卡到无法操作。在%UserProfile%\.wslconfig里限制一下[wsl2] memory8GB processors4 swap2GB数值按你的机器配置调整8 GB 内存的机器建议给 4 GB。改完wsl --shutdown重启生效。这个配置我强烈建议每台机器都设一下。心得二别在 WSL 里装 GUI 全家桶。有人装完 WSL 就把 Gnome、各种桌面环境全套装上结果启动慢、占用高、还容易崩。WSL 的定位就是终端开发环境需要图形界面就用 Windows 侧的工具。这个边界划清楚体验会好很多。心得三用 binwalk 这类工具时注意路径。做固件分析、逆向相关工作时binwalk 在 WSL 里跑没问题但要注意输入文件如果在/mnt/c下处理速度会明显受影响而且输出的权限属性会带上777这种奇怪的值。习惯做法是先把待处理文件cp到 Linux 侧的临时目录再操作。心得四定期更新但别盲目追新。wsl --update偶尔会引入新问题如果当前环境稳定不必每月追更。我的节奏是两三个月更一次更新前用wsl --export做一次快照备份出问题能立刻回滚。这个习惯帮我省过至少两次重装的时间。心得五备份比修复便宜。WSL 环境配好一次要花不少时间把wsl --export写成脚本定期跑或者干脆在配好之后立刻导出一份干净的基线镜像存着。真出问题了--unregister再--import十分钟回到可用状态比慢慢排查高效得多。写到这里从安装到日常使用的整条链路基本都覆盖了。最后分享一个我自己一直在用的小技巧把常用的 WSL 操作做成 Windows 侧的批处理或者 PowerShell 别名比如一个dev.bat直接打开 Windows Terminal 并进入指定项目的 WSL 目录。每天省下的是几十秒一年下来也是实实在在的时间。工具的价值就在这儿配一次之后一直受益。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SVM分类实战:从Iris数据集到标准化、核函数与网格搜索调参 2026/10/1 5:34:19

SVM分类实战:从Iris数据集到标准化、核函数与网格搜索调参

简介:面向机器学习课程设计或期末大作业场景,这份资源基于经典Iris鸢尾花数据集完成SVM分类项目,提供可直接运行的Python源码与配套实验报告。项目使用Python 3.9 IDLE环境,借助sklearn构建分类模型、numpy处理数组、Matplotlib绘…

阅读更多 →
RTK测量厘米级误差的17个真实原因与现场解决方法 2026/10/1 5:34:19

RTK测量厘米级误差的17个真实原因与现场解决方法

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

阅读更多 →
YOLOv8垃圾分类目标检测工程化落地全链路 2026/10/1 5:34:19

YOLOv8垃圾分类目标检测工程化落地全链路

简介:这是一份面向高校学生与深度学习初学者的高分毕业设计级项目资源,聚焦垃圾分类场景下的目标检测任务,完整覆盖从模型训练、部署到成果展示的全流程。资源包含126个文件,主体为20个带详细注释的Python源码文件(含训…

阅读更多 →
代号鸢460报错排查与优化指南:从DNS到路由器的网络问题解决手册 2026/10/1 5:34:19

代号鸢460报错排查与优化指南:从DNS到路由器的网络问题解决手册

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

阅读更多 →
GPM 2.0崩溃管理平台升级:智能聚合、现场还原与全栈追溯实践 2026/10/1 5:34:12

GPM 2.0崩溃管理平台升级:智能聚合、现场还原与全栈追溯实践

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

阅读更多 →
从零开发英语情景教学Agent:架构、Prompt与避坑实录 2026/10/1 5:34:12

从零开发英语情景教学Agent:架构、Prompt与避坑实录

带过几期英语训练营之后,我越来越觉得传统口语陪练产品的路子有个死穴:剧本是写死的。学员在机场问路,系统只会弹出“Excuse me, where is the gate?”——真实对话里的插话、口误、换说法,它全都不接。所以我给自己定了个新目标…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉