跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

在 Windows 里养一只 Linux:WSL 完整指南

一、它是什么

WSL 的全称是”适用于 Linux 的 Windows 子系统”(Windows Subsystem for Linux)。微软官方定义很直接:一项让你在 Windows 计算机上运行 Linux 环境的功能,无需单独的虚拟机,也无需双系统启动。你可以在 Windows 的窗口里直接敲 Linux 命令、跑 Linux 程序、用 Linux 的包管理器装软件。

它最早在 2016 年随 Windows 10 周年更新亮相,2019 年推出 WSL 2,2025 年 5 月正式开源,代码托管在 GitHub 的 Microsoft/WSL 仓库。如今的 WSL 已经从 Windows 内置组件演变为通过 Microsoft Store 独立分发的包,更新节奏更快,社区也能直接向代码提交贡献。

二、架构:那个”看不见的虚拟机”

WSL 2 的核心是一个由微软管理的轻量级虚拟机,你不需要打开任何虚拟化软件去启动或关闭它,它随 WSL 的调用在后台运行,用完也不需要手动清理。

你的每一个 Linux 发行版(Ubuntu、Debian、Kali 等)都作为独立容器跑在这个虚拟机里。这些容器共享同一个 Linux 内核、同一个网络命名空间、同一套 CPU 和内存资源,但各自拥有独立的 PID、挂载和用户命名空间——你在 Ubuntu 里启动的进程和 Debian 里的进程互相看不见,文件系统也彼此隔离。这就是为什么你可以同时装好几个发行版而不会互相打架。

那个 Linux 内核由微软基于 kernel.org 最新稳定分支编译,针对 WSL 场景做了尺寸和性能优化,通过 Windows 更新推送安全补丁。你不需要像维护真服务器那样管内核版本,但代价是更新节奏跟着 Windows 走,而不是跟着上游发行版走。

三、WSL 1 与 WSL 2 的取舍

能力WSL 1WSL 2
Windows 与 Linux 集成支持支持
快速启动支持支持
完整 Linux 内核不支持支持
完整系统调用兼容性不支持支持
跨 OS 文件系统性能(Windows 侧文件)更好较差
systemd 支持不支持支持
与 VirtualBox 共存支持不支持

WSL 1 本质上是一层系统调用翻译层:把 Linux 程序发出的请求实时转换成 Windows 内核能理解的操作。这种做法的优势在于文件系统访问——Linux 程序读写 Windows 盘上的文件时不需要跨虚拟机边界。但它无法完整模拟 Linux 内核行为,Docker 这类依赖深层内核特性的工具基本跑不起来。

WSL 2 用真内核换来了完整的系统调用兼容性,代价是跨操作系统文件系统的性能下降。微软官方数据:解压 tarball 时 WSL 2 比 WSL 1 快最多 20 倍,git clone、npm install、cmake 等操作快 2 到 5 倍——但前提是文件在 Linux 自己的文件系统里。把项目放在 /mnt/c/Users/... 下然后用 WSL 2 工具去编译,速度会明显慢于放在 ~/projects 里。这不是 bug,是架构决定的:每次文件访问都要跨越虚拟机边界。

WSL 2 与 VirtualBox 的兼容性问题也源于此。VMware 15.5.5 及以上版本可与 WSL 2 共存,但 VirtualBox 微软官方标注为不支持。如果同时依赖 VirtualBox 跑其他虚拟机,需要提前确认版本搭配。

四、安装与日常使用

在管理员权限的 PowerShell 里运行:

wsl --install

这条命令做了四件事:启用 WSL 和虚拟机平台两个 Windows 可选组件、下载 Linux 内核、把 WSL 2 设为默认版本、安装 Ubuntu 发行版。重启之后,Ubuntu 要求你创建一个 Linux 用户名和密码。

这个账号和 Windows 账号没有任何关系,它是该发行版的管理员,拥有 sudo 权限。密码在输入时屏幕上不显示任何字符——这是正常的盲打,不是键盘失灵。每个发行版有独立的账号体系,重装或重置发行版需要重新设置。

几个常用命令:

  • wsl --list --verbose:查看所有已安装发行版及其运行的 WSL 版本
  • wsl --set-default-version 2:把新装发行版的默认版本锁定在 2
  • wsl -u root:以 root 身份进入默认发行版(忘记密码时用,然后 passwd <用户名> 重置)

发行版内部的软件更新需要你自己管,Windows 不会自动帮你 apt upgrade。定期跑 sudo apt update && sudo apt upgrade 是基本习惯。

五、它能做什么,边界在哪

能跑的东西比很多人以为的多:

  • 命令行工具链:Bash、grep、sed、awk、vim、emacs、tmux 直接可用
  • 语言环境:Node.js、Python、Ruby、Rust、Go 都有成熟安装路径
  • 服务端软件:MySQL、PostgreSQL、Apache、MongoDB 可装在 WSL 里做本地开发和测试
  • 图形界面:通过 WSLg 组件,Linux 图形应用可直接显示在 Windows 桌面上,无需额外配置 X 服务器
  • GPU 加速:有独立显卡时,WSL 可用它加速 Linux 环境里的机器学习任务

它不适合什么:

  • 替代生产环境的 Linux 服务器
  • 需要完整硬件直通或自定义内核模块的场景
  • 与 VirtualBox 同时使用的场景

六、一句话总结

WSL 解决的核心问题很具体:当一个开发者同时生活在 Windows 和 Linux 两个生态里时,怎样让切换成本尽可能接近零。它保留了隔离性,但砍掉了”完整操作系统”的冗余——不用配置虚拟机、不用手动启停、内存动态借还。在这个定位内,它做得相当彻底。

用之前只需记住一条铁律:把项目放在 Linux 自己的文件系统里(~/ 下),用 Linux 的工具处理它。跨到 /mnt/c/ 去操作,性能会惩罚你。

作者

老丹

关注我
其他文章
上一个

Paho MQTT C 与 C++ 客户端库完全指南:从概念到 Ubuntu 26.04 下的编译、安装与使用

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • 在 Windows 里养一只 Linux:WSL 完整指南 2026年10月24日
  • Paho MQTT C 与 C++ 客户端库完全指南:从概念到 Ubuntu 26.04 下的编译、安装与使用 2026年10月23日
  • Mosquitto $SYS 主题详解:Broker 自监控指南 2026年10月23日
  • 应用级 MQTT 服务搭建完全指南:Mosquitto + 宿主机 Nginx 2026年10月22日
  • OpenWrt 固件签名三剑客:usign、ucert 与 fwtool 深度解析 2026年10月21日

文章分类

  • C/C++开发 (22)
  • Docker容器 (5)
  • Linux工具包 (21)
  • Linux服务配置 (53)
  • Linux系统 (16)
  • MQTT技术 (6)
  • OpenWrt路由 (5)
  • Shell脚本 (3)
  • 代码管理 (1)
  • 安防技术 (4)
  • 数据安全 (36)
  • 网络协议 (25)
  • 计算机理论 (23)
  • 问题解决 (3)
  • 防火墙 (6)
  • 音视频技术 (6)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号