尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows 11 启用 WSL 2 安装 Linux 完整指南:配置 Docker 与 CUDA

Windows 11 启用 WSL 2 安装 Linux 完整指南:配置 Docker 与 CUDA Windows 11 出来之后我身边越来越多同事开始问同一个问题为什么大家都在用 WSL说真的作为一个几乎每天都跟 Linux 服务器打交道的人我在 Windows 11 上待的时间越长就越觉得 WSL 是微软这些年做得最值的功能之一。不需要装双系统不需要单独开虚拟机直接在 Windows 里运行一套真实的 Linux 环境跑命令、跑脚本、跑 Docker甚至跑 GPU 计算日常开发基本都能闭环。这篇文章我就从自己的实际使用经历出发把 Windows 11 上启用 WSL 并安装 Linux 的完整过程、配置细节和踩坑记录都写清楚给打算入门或者已经被安装过程折磨过的朋友一个参考。1. WSL 到底是什么为什么 Windows 11 用户该用它1.1 WSL 1 和 WSL 2底层机制有什么不同很多人第一次听说 WSL以为它就是个“Linux 模拟器”这个理解其实不太对。WSL 全称是 Windows Subsystem for Linux也就是 Windows 的 Linux 子系统。它的核心目标不是模拟一套 Linux 界面给你看而是让 Linux 的二进制程序能直接在 Windows 上运行。这里有两条技术路线WSL 1 和 WSL 2区别很大。WSL 1 用的是系统调用翻译层Linux 程序发起的系统调用会被实时转换成 Windows NT 内核能识别的调用。好处是启动快、内存占用低文件读写走 Windows 文件系统时性能很好坏处是兼容性不够一些依赖 Linux 内核特性的程序会直接跑不起来比如 Docker。WSL 2 则换成了轻量级虚拟机方案内部跑的是一个真正的 Linux 内核只不过通过虚拟化技术把它和 Windows 无缝集成在一起让你感觉不到“这是一台虚拟机”。从体验上讲WSL 2 更接近一台完整 Linux 虚拟机但启动时间只要一两秒而且和 Windows 共享网络、剪贴板、文件系统这是传统虚拟机做不到的。我这几年用下来结论很简单新用户直接选 WSL 2别犹豫。除非你确实有特定场景对跨文件系统读写性能极其敏感否则 WSL 2 的收益远大于它的损耗。1.2 用 WSL 能覆盖哪些日常工作WSL 能干的活比大部分人想象中多。对我来说它至少覆盖了四类场景。第一类是命令行操作。以前在 Windows 上想用 grep、awk、sed、ssh、rsync 这些 Linux 工具要么装 Git Bash要么装 Cygwin要么开虚拟机体验都很割裂。有了 WSL 之后我直接在 Windows Terminal 里敲 Linux 命令管道、重定向、shell 脚本全部原生支持和登录服务器操作没什么区别。第二类是应用部署。我自己经常需要本地验证一个 Node.js 服务或者 Python 后端能不能正常运行以前要专门准备一台 Linux 机器或者开虚拟机现在 WSL 里直接装运行时、跑服务Windows 浏览器里打开 localhost 就能访问调试效率高很多。第三类是容器开发。Docker Desktop 在 Windows 上的后端引擎就是依赖 WSL 2有了 WSL 2我可以在本地起一套完整的 Redis、MySQL、Nginx 环境用完一键停掉不污染 Windows 系统。这类工作流以前在纯 Windows 环境里非常麻烦现在基本是无缝的。第四类是安全研究和固件分析这类偏门需求。很多安全工具只提供 Linux 版本比如 Binwalk在 Windows 上想跑起来要绕很多弯路有了 WSL 之后直接 apt 安装就能用大大降低了折腾成本。1.3 Windows 11 相比 Windows 10 在 WSL 上更值得升级的理由如果你还在 Windows 10 上用 WSL升级到 Windows 11 之后的体验提升其实是肉眼可见的。最明显的一点是安装方式不一样Windows 10 上启用 WSL 需要手动去“启用或关闭 Windows 功能”里勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”还要重启、下载内核包、设置版本步骤繁琐新版 Windows 11 直接一条 wsl --install 命令就全部搞定了。另外 Windows 11 对 WSLg 的支持也更成熟。 WSLg 是微软做的图形界面支持层让 WSL 里的 Linux GUI 程序可以直接弹窗显示在 Windows 桌面上。编辑器和 IDE 就不用说了很多人喜欢直接在 WSL 里跑 PyCharm 图形式界面Windows 11 上默认就支持不需要额外配置。再加上 Windows 11 的 Terminal 默认集成度更高整体体验明显比 Windows 10 时期顺滑。所以我的观点一直是如果你平时工作要对 Linux 环境做开发Windows 11 加上 WSL 这套组合是非常值得升级的。2. 在 Windows 11 上启用 WSL 的完整安装流程2.1 安装前先确认系统版本与虚拟化设置很多人照着教程执行 wsl --install 发现报错问题往往出在安装之前没确认环境。先说系统版本WSL 的命令行安装方式最早出现在较新的 Windows 10 版本里但到了 Windows 11所有正式版都支持不过建议先把系统更新到最新状态避免旧版本缺组件。可以在设置里检查 Windows 更新或者直接在运行框里输入 winver 查看当前版本号只要确认是 Windows 11 的正式版一般都没问题。然后是虚拟化设置。WSL 2 依赖 CPU 虚拟化技术如果 BIOS 里关闭了虚拟化后面启动时会提示“请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化”。我遇到过一个很典型的场景一台办公电脑 CPU 是 AMD 的买回来的时候 BIOS 里 SVM 选项是关的装好 WSL 后怎么启动都报错最后进 BIOS 打开 SVM 才解决。Intel 平台对应的是 VT-x 或 VT-d不同主板位置不一样但名字里基本都有 Virtualization 字样。安装前用任务管理器切到“性能”标签看右下角“虚拟化”是否显示“已启用”如果显示“已禁用”就需要重启进 BIOS 改设置。还有一点容易被忽略就是内存。WSL 2 默认会从 Windows 里动态分配内存如果整机内存只有 4GB跑大型编译任务会很吃力建议至少 8GB 内存起步16GB 体验才比较舒服。2.2 一行命令启用 WSLwsl --install 到底做了什么确认环境没问题后安装其实就一条命令。以管理员身份打开 PowerShell 或 Windows Terminal执行wsl --install这条命令是我眼中 Windows 11 上最省心的改动之一。它会自动做四件事启用“适用于 Linux 的 Windows 子系统”可选组件、启用“虚拟机平台”可选组件、下载并安装 WSL 2 内核、默认安装 Ubuntu 发行版。整个过程中可能需要重启一次重启后继续完成剩余组件的配置。如果你不想装默认的 Ubuntu可以在安装命令里带上发行版名称。比如我想装 Ubuntu 24.04可以这样写wsl --install -d ubuntu-24.04这里要提醒一下网上很多老教程会让你先去“启用或关闭 Windows 功能”里手动勾选两个选项然后重启再继续执行后续命令。在 Windows 11 上这套操作没必要了wsl --install 自己会处理组件启用。如果你用系统自带的 wsl --install 却提示找不到命令多半是版本太老先把 Windows 更新到最新再来尝试。安装完成后可以先用 wsl --status 和 wsl --version 查看当前 WSL 版本信息确认 WSL 2 内核已经就绪。2.3 安装 Linux 发行版与切换到 WSL 2默认情况下的 wsl --install 会把 Ubuntu 装好但如果你想装其他发行版可以用 wsl --list --online 查看所有可用的发行版列表。我列一下 Windows 11 上比较常见的几个Ubuntu 22.04 / 24.04最主流的发行版社区资料多遇到问题很容易搜到解决方案Debian稳定性优先服务器场景很常用Kali Linux安全测试专用预装大量工具openSUSE Leap 42企业级用户可以考虑AlmaLinux和 CentOS 生态兼容我的推荐是日常开发无脑选 Ubuntu不要为了小众去折腾冷门发行版除非你有明确需求。原因是 Ubuntu 的用户基数最大apt 装软件最方便很多第三方工具也都优先给 Ubuntu 做适配能省掉大量不必要的麻烦。装好发行版后还要确认它跑在 WSL 2 上而不是 WSL 1。用下面的命令可以查看wsl --list --verbose如果看到某个发行版的 VERSION 列是 1可以手动切换wsl --set-version 发行版名称 2 wsl --set-default-version 2最后一条命令是把所有新装的发行版默认设置为 WSL 2。这一步强烈建议做否则以后新建发行版可能落到 WSL 1后面的 Docker、systemd 等功能都用不了。3. 装完不等于用完WSL 落地配置与日常使用3.1 文件互访Windows 和 Linux 如何共享数据WSL 装好之后第一个要搞明白的就是文件系统怎么互访。Windows 里的 C 盘、D 盘在 WSL 里被挂载到 /mnt 目录下比如 C 盘就是 /mnt/cD 盘就是 /mnt/d。反过来WSL 的 Linux 文件系统在 Windows 里也有对应的访问入口在文件资源管理器地址栏输入 \wsl$\ 就能看到所有发行版的目录也可以输入 \wsl$\Ubuntu\home\用户名 直接定位到某个用户目录。这里有个很重要的性能知识WSL 2 访问 Linux 原生文件系统比如 /home、/root比访问 /mnt/c 下的 Windows 文件要快得多。尤其是做 npm install、Python 虚拟环境创建、git 仓库操作这类涉及大量小文件读写的工作如果项目放在 /mnt/c 下速度可能慢到你怀疑人生放到 Linux 侧目录里速度会明显提升。所以我的习惯是所有需要 WSL 里运行的项目代码都放在 Linux 文件系统里比如 ~/projects然后用 VS Code 的远程 WSL 功能打开Windows 和 Linux 的互操作完全不影响。如果只是偶尔在 Windows 和 Linux 之间拷贝文件放哪个目录都无所谓但做开发一定要守住这个原则。3.2 把 VS Code 和 Windows Terminal 接入 WSLWSL 的命令行体验本身已经很好了但图形界面的编辑器同样不能少。微软官方推荐的方案是 VS Code配合 Remote - WSL 扩展可以直接在 WSL 里打开项目文件夹编辑、调试、终端操作全部发生在 Linux 环境里。这个方案的好处是VS Code 安装的是 Windows 版但所有插件、解释器、终端都走 WSL不需要在 Windows 里重复配置环境。在 WSL 里进入项目目录后直接执行code .如果第一次执行提示找不到 code 命令需要在 Windows 版 VS Code 里手动安装 Remote - WSL 扩展或者在 WSL 终端里运行 VS Code 的远程安装脚本。装好之后以后就是无缝衔接了。Windows Terminal 同样值得花时间配置。它能同时开多个标签页一个标签是 PowerShell一个标签是 WSL Ubuntu还能设置统一的主题、快捷键、字体。我在 Windows Terminal 的设置里把默认配置文件改成 Ubuntu这样每次打开终端就直接进入 Linux 环境Windows 反而成了备用。搜索词里有“在vscode中使用wsl”这类的需求说明大家对这个集成非常关注确实这已经是 WSL 使用体验里最不可替代的一环了。3.3 在 WSL 里装 Node.js、Python 和 Docker跑开发环境是 WSL 的高频用法。先说 Node.js不建议用 apt 直接装因为版本太老。我习惯用 nvm 管理 Node 版本安装方式如下curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install --lts装完之后 node -v 和 npm -v 就能正常显示了。Python 方面Ubuntu 22.04 之后默认自带 Python 3.10 或 3.12直接用就行。但要注意系统的 Python 最好不要乱动建议通过 venv 或 conda 管理项目依赖避免搞坏系统环境。Docker 这块是 WSL 2 的经典应用场景。如果你用的是 Docker Desktop直接在它的设置里启用“基于 WSL 2 的引擎”然后在 WSL 发行版里就能直接用 docker 命令。如果你不想用 Docker Desktop也可以只安装 Docker Engine 本身步骤是sudo apt update sudo apt install docker.io sudo service docker start sudo usermod -aG docker $USER我个人的建议是日常本地开发用 Docker Desktop 效率更高它把 GUI 配置和自动启动都做好了如果想像服务器环境一样跑纯 Linux 的容器服务可以只用 Docker Engine省掉 Docker Desktop 的资源占用。两条路都试过之后我觉得大多数人用 Docker Desktop 就够了毕竟 Windows 上的容器场景大概率还是以开发验证为主。4. 安装与使用中的高频报错以及我的排查思路4.1 wsl --install 太慢卡住不动怎么办网上搜“wsl --install 太慢”的人很多我自己第一次装的时候也卡了十几分钟以为死机了。这个问题的本质是wsl --install 需要从微软的服务器下载 WSL 2 内核包以及发行版镜像下载速度受到网络环境影响有时候并不是卡死只是进度反馈不明显。排查思路分三步走。第一步先确认到底是不是真的卡住。保持命令窗口不动去任务管理器里看网络占用如果网络流速不为零说明还在下载耐心等就好。第二步如果网络长时间没有流量多半是连接中断了直接按 CtrlC 终止命令再重新执行一次很多时候第二次就顺利很多。第三步如果反复中断可以手动下载 WSL 2 内核更新包或者换一个网络环境再试。这里有个小技巧wsl --install 的过程不是不可断点续传的一旦中断重启命令一般会重新走流程所以尽量挑网络稳定的时候装。4.2 “WSL 2 需要更新其内核组件”和 403 报错这个报错很经典文本一般是“WSL 2 需要更新其内核组件。有关详细信息请访问 https://aka.ms/wsl2kernel”。原因通常是系统的 WSL 2 内核版本过老或者安装被安全策略拦截。遇到的时候先去“设置 - 应用 - 可选功能”里检查“虚拟机平台”是否已经启用没启用就勾上并重启。如果功能没问题就手动下载 WSL 2 Linux 内核更新包这是微软官方提供的一个 msi 安装文件下载完成后以管理员身份双击安装。至于“wsl --install 已禁止403”这种报错我理解是安装时从服务器拉取资源被拒绝了常见的原因有网络出口不稳定、本地防火墙策略限制或者企业电脑有额外的安全软件拦截。处理顺序建议是先以管理员身份重新运行一次命令看是不是临时性问题不行就检查 Windows 防火墙是否拦截了 WSL 相关进程再不行就换一个更干净的网络环境。不要轻易去改系统防火墙的高级规则除非你明确知道自己在做什么。4.3 运行 wsl 命令时提示 An error occurred while running a wsl command这类错误提示后面通常会跟一句“Error code: Wsl/...”排查思路可以从底层往上看。第一步执行wsl --status看 WSL 自身的状态是否正常。如果提示“未安装用于 Linux 的 Windows 子系统”说明组件没启用完全重新执行 wsl --install 并在提示时重启。第二步检查默认发行版是否存在wSL --list --verbose如果列表为空说明发行版没装好可以用 wsl --install -d ubuntu-24.04 重装。第三步如果发行版在列表里但是依然报错尝试重置发行版wsl --unregister 发行版名称这相当于把 Linux 子系统重置到初始状态再次启动时会让你重新设置用户名和密码。需要注意这条命令会清空发行版里的数据执行前确认没有重要文件。还有一个常见原因是 Windows 系统版本太旧导致 WSL 相关组件不完整。我的建议是先把 Windows Update 全部更新到最新再做进一步排查相当一部分诡异报错在更新系统后自动消失。5. 进阶玩法从开发到安全研究WSL 能干的活比你想的多5.1 在 WSL 里使用 systemd让服务管理回归 Linux 习惯WSL 早期版本没有 systemd很多人吐槽它“不像真正的 Linux”。确实没有 systemd 就无法用 systemctl 管理服务很多 Linux 教程里的命令在 WSL 里直接失效。不过新版 WSL 已经支持 systemd开启方法很简单。在 WSL 里编辑 /etc/wsl.conf 文件[boot] systemdtrue然后回到 Windows 侧执行 wsl --shutdown重新进入 WSL 后运行 systemctl list-units --typeservice看到一堆服务列表就说明 systemd 已经生效。开启之后SSH、Docker、Nginx 这些服务就能用 systemctl 来管理了比如sudo systemctl enable --now ssh我的经验是只要你有任何“把 WSL 当服务器用”的需求就尽早开启 systemd越早适应越舒服。不然等服务装多了再切 systemd容易踩到一些旧服务的兼容性问题。5.2 CUDA 和 WSLg机器学习的本地实验环境搜索词里有人提到“wsl安装cuda”这确实是很多重度用户的刚需。WSL 2 支持通过 Windows 侧安装最新的 NVIDIA 驱动来获得 GPU 直通能力然后在 WSL 里直接安装 CUDA Toolkit 和 cuDNN就能跑 PyTorch、TensorFlow 这些框架。注意Windows 侧的驱动要选支持 WSL 的版本一般 NVIDIA 官方的 Game Ready 驱动和 Studio 驱动都自带了 WSL 支持不需要在 WSL 里再装一遍驱动。我实测下来本地做小规模模型训练和推理验证WSL 2 的性能和原生 Linux 差距很小主要是省去了双系统的切换成本。如果你的任务要跑多卡并行或者特别大的模型那还是建议用正经 Linux 服务器WSL 更适合做单卡、小批量的实验环境。WSLg 则是图形界面层的福利它让 WSL 里的 GUI 程序直接显示在 Windows 桌面上不需要额外装 X Server。比如你在 WSL 里安装 GNOME 软件或者某些需要图形界面的 IDE直接运行就能弹窗出来。这个功能在 Windows 10 上需要折腾第三方 X ServerWindows 11 上开箱即用体验很舒服。5.3 Binwalk、抓包、渗透测试等偏门场景安全研究和 CTF 领域WSL 也是神器。很多固件分析工具、逆向工具、取证工具都是 Linux 原生应用Windows 上要么没有要么特别难编译。比如 Binwalk这是固件分析最常用的工具之一在 WSL 里装起来非常方便sudo apt update sudo apt install binwalk然后直接对固件镜像执行binwalk firmware.bin就能扫描出固件里嵌入了哪些文件系统、压缩包或者特定文件特征。这类工作在传统 Windows 环境里相当痛苦有了 WSL 之后安全研究人员完全可以只带一台 Windows 笔记本出门。做 CTF 的时候我还会用 WSL 跑各种 Pwn 题目因为很多 exploit 脚本依赖 Linux 的 libc 版本和调试工具比如 pwntools、gdb 插件这些装在 WSL 里都比在纯 Windows 里折腾虚拟机要轻量得多。唯一要注意的是涉及网络抓包和分析时WSL 的网络栈和 Windows 是共享的有些原始套接字操作可能受限遇到这种场景再切换到虚拟机也不迟。6. 用了一年半 WSL我的取舍建议与注意事项6.1 性能边界什么情况别硬用 WSLWSL 2 很强大但也不是万能的。我遇到过最典型的问题就是跨文件系统 I/O 性能差前面也提过项目文件必须放在 Linux 侧。如果你硬要把整个项目放在 D 盘然后用 WSL 去构建那性能会特别拉胯别怪 WSL 不好用其实是使用方式没对。另外WSL 2 的虚拟机本质决定了它对某些底层硬件的访问是受限的。比如你想在 WSL 里直接操作 USB 设备、跑需要 TUN/TAP 虚拟网卡的网络工具或者做依赖特定内核模块的实验这些都可能会碰壁。微软现在提供了 usbipd-win 工具来转发 USB 设备到 WSL但稳定性比原生 Linux 还是有差距。我的边界判断标准很简单如果是日常开发、脚本、容器、训练小模型用 WSL 完全没问题如果需要深度访问硬件、跑完整内核态服务直接上虚拟机或者裸机 Linux。6.2 我的 WSL 日常配置清单最后分享一份我自己用着很舒服的配置清单给想少走弯路的读者参考。WSL 版本2发行版Ubuntu 24.04 LTS用 LTS 版本省心支持周期长。默认终端Windows Terminal启动配置改成进入 WSL 的 Ubuntu Profile。编辑器VS Code Remote - WSL 扩展所有项目代码放在 ~/projects 下。语言环境Node 用 nvm 管理Python 用 venvGo 直接装官方包。容器Docker Desktop 开启 WSL 2 集成Redis、MySQL、Nginx 全部容器化。服务管理开启 systemdSSH 和 Docker 服务用 systemctl enable 设置开机自启。文件访问Windows 和 Linux 之间互传文件走 \wsl$\ 共享不在 /mnt/c 里跑项目。磁盘瘦身WSL 虚拟磁盘会越来越大定期用 wsl --shutdown 后执行 Optimize-VHD 或者直接重新导出导入发行版来瘦身。这些配置看起来繁琐其实都是一次性的。配完之后我每天打开电脑就是打开 Windows Terminal 进入 WSL然后 code . 开始干活Windows 本身反而变成一个图形化外壳。6.3 一个容易被忽略的细节Linux 环境也要备份很多人把 WSL 当成“临时玩具”里面放了一堆环境配置、数据库数据、SSH 密钥结果某天重装系统或者误操作 wsl --unregister所有东西瞬间清零。这种痛我经历过一次之后就养成了备份习惯。备份 WSL 发行版其实很简单一条命令就能导出成 tar 文件wsl --export Ubuntu D:\backup\ubuntu-backup.tar恢复的时候再导入wsl --import Ubuntu D:\WSL\Ubuntu D:\backup\ubuntu-backup.tar注意导出和导入之后默认用户名可能会变化需要去 /etc/wsl.conf 里配置 [user] 字段指定默认用户。备份文件建议放到 Windows 侧磁盘和 WSL 虚拟磁盘分离开这样即使 WSL 整个崩了备份也还在。我个人现在是用一个定时任务每周自动导出一次代价几乎可以忽略换来的是踏实。如果你打算长期把 WSL 作为开发主力环境这个备份习惯真的越早养成越好。它不复杂但关键时刻能救命。
返回列表