最近有朋友问到想在 Windows 上跑 Linux 环境是不是必须装 VMware、VirtualBox 这样的虚拟机其实还有另一条更轻量、更现代的路线——WSLWindows Subsystem for Linux适用于 Linux 的 Windows 子系统。不需要单独划分内存、不需要完整模拟硬件也不用在开机时切换双系统就能直接在 Windows 上使用原生 Linux 终端、运行 Linux 命令、部署开发环境。本文围绕“不用虚拟机也能在 Windows 上安装使用 Linux”这个目标完整拆解 WSL 的安装、初始化、日常使用、文件互访和常见排错方法。无论你是想学习 Linux 命令、搭建后端开发环境还是需要把 Linux 工具链集成到 Windows 工作流中这篇教程都值得收藏备用。1. 为什么在 Windows 上还需要 Linux很多开发者的日常工作流是“Windows 办公 Linux 运行环境”比如在 Windows 上写代码但需要把服务部署到 Linux 服务器上本地调试时希望行为一致。学习 Linux 常用命令又不愿意专门装一台虚拟机或重装系统。使用 Docker、Redis、Nginx、Node.js、Python 等生态中常见于 Linux 环境的服务。公司内部项目运行在 Linux 服务器但个人电脑是 Windows。传统解决方案通常是安装一套 VMware Workstation 或 VirtualBox在虚拟机里安装 Ubuntu 或 CentOS。虚拟机确实能提供完整的内核和系统体验但也会带来一些麻烦占用大量磁盘和内存、启动速度慢、快照管理复杂、Windows 与 Linux 之间文件传输不方便。WSL 的设计思路完全不同。它不是模拟硬件而是由 Windows 提供一个兼容层或轻量虚拟化环境直接运行 Linux 用户态程序。对大多数开发场景来说WSL 的启动速度、内存占用和 Windows 集成度都比传统虚拟机更友好。尤其是 Windows 10/11 中预装的“Windows Terminal WSL”组合基本可以替代很多人的“虚拟机搭建 Linux 开发环境”需求。如果你需要完整的 Linux 图形桌面、内核模块开发或者对隔离性有极高要求那么传统虚拟机仍是更稳妥的选择。但如果你只是想在 Windows 上执行 Linux 命令、跑脚本、做 Web 开发、使用 Linux 工具链WSL 的性价比会高很多。2. WSL 的核心概念与版本区别2.1 WSL 是什么WSL 的全称是 Windows Subsystem for Linux由微软开发。它不是一个“Linux 发行版”而是一个兼容层和运行环境。用户可以在 Windows 应用商店或命令行中安装 Ubuntu、Debian、Kali Linux、openSUSE 等发行版镜像然后在 Windows 中像运行普通程序一样启动一个 Linux 终端。WSL 有两个主要版本WSL 1早期版本采用系统调用翻译层把 Linux 系统调用转换为 Windows 系统调用性能在磁盘 I/O 上与 Windows 文件系统打通较好但 Linux 内核兼容性有限。WSL 2目前主流推荐版本基于轻量级虚拟机技术使用真正的 Linux 内核。它增强了系统调用兼容性支持 Docker 等需要内核特性的场景但文件访问性能上访问 Windows 文件系统会比访问 Linux 内部文件系统稍慢。从 Windows 10 2004 版本开始微软逐步把 WSL 安装工具化用户可以通过wsl --install一条命令完成安装。Windows 11 上 WSL 的集成度更高使用体验也更顺畅。2.2 WSL1 与 WSL2 的区别对比项WSL 1WSL 2架构系统调用翻译层轻量级虚拟机 真正 Linux 内核内核兼容性不完整部分系统调用失败更完整支持 Docker、内核模块等启动速度非常快较快但首次启动会有VM开销跨文件系统性能访问 Windows 文件速度较好访问 Linux 文件速度快交叉访问 Windows 文件稍慢内存占用较低默认按需分配可配置上限适用场景快速执行 Linux 命令、脚本Web 开发、Docker、数据库、服务端应用在默认安装模式下新版 WSL 会优先使用 WSL 2。如果你的电脑不支持虚拟化或必须使用 WSL 1也可以在安装后手动切换具体发行版的版本wsl --set-version Ubuntu-22.04 1注意切换版本会修改发行版文件系统格式如果数据重要操作前建议先备份。2.3 WSL 与虚拟机、双系统、Cygwin/MSYS2 的区别不少新手会把 WSL 和几类方案混在一起虚拟机VMware/VirtualBox完整模拟一套硬件内部运行完整 Linux 系统隔离性最强但资源开销也最大。双系统Windows Linux开机时选择操作系统性能几乎无损但无法同时使用两个系统切换需要重启。Cygwin/MSYS2在 Windows 上编译提供 Unix 风格命令和工具并不是真正的 Linux 内核部分程序无法直接运行。WSL介于虚拟机和兼容层之间启动快、集成度好能运行大量 Linux 二进制但不是完整图形化桌面环境。选择哪个方案取决于你更看重“隔离性”还是“便利性”。对于日常开发、自动化脚本、服务端调试WSL 目前在 Windows 生态中已经是非常主流的选择。3. 环境准备与启用 WSL 功能3.1 系统要求在开始之前先确认你的 Windows 版本。不同版本对 WSL 的支持略有差异Windows 10 64 位建议 200419041及以上版本。Windows 11所有版本均支持体验最佳。Windows Server 2019/2022也可安装但部分交互命令可能不同。如果你的 Windows 版本较老可以先通过“设置 - 更新和安全 - Windows 更新”把系统更新到最新版本。后续命令会以现代 Windows 10/11 环境为例。3.2 启用 Windows 功能WSL 依赖几个 Windows 可选功能。通常安装 WSL 后会自动启用但手动确认更稳妥。在 PowerShell管理员身份中执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart如果使用 WSL 2还需要启用“虚拟机平台”和“Microsoft Hyper-V”但需要注意启用 Hyper-V 可能会与部分虚拟机软件冲突。执行dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行完成后重启系统。如果你不想用 DISM也可以在“控制面板 - 程序 - 启用或关闭 Windows 功能”中勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”。3.3 通过命令行安装 WSL现代 Windows 版本推荐直接使用 WSL 安装命令。以管理员身份打开 PowerShell 或 Windows Terminal执行wsl --install这条命令会自动完成以下事情启用 WSL 功能。启用虚拟机平台。安装默认的 Linux 发行版通常是 Ubuntu。下载并安装 WSL 内核。安装完成后重启电脑。如果是全新安装第一次启动时会弹出一个 Ubuntu 窗口要求设置用户名和密码。如果你希望安装指定发行版可以先查看可用列表wsl --list --online输出类似以下是最佳可用发行版列表可按“wsl --install -d 发行版”安装。 NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling openSUSE-42 openSUSE Leap 42 ...例如安装 Debianwsl --install -d Debian安装完成后使用wsl -l -v可以查看当前发行版列表和 WSL 版本。4. 安装并初始化一个 Linux 发行版4.1 查看当前安装状态重启系统后打开 PowerShell 或 Windows Terminal输入wsl -l -v如果已经安装好 Ubuntu输出会类似NAME STATE VERSION * Ubuntu Stopped 2如果没有输出或提示找不到发行版可以继续执行下面的安装操作。4.2 安装默认 Ubuntu最简单的安装方式wsl --install -d Ubuntu这一条命令会从微软商店通道下载 Ubuntu 镜像并在本机完成注册。安装完成后开始菜单中会多出一个“Ubuntu”或“Ubuntu 22.04.3 LTS”这样的应用图标。4.3 设置用户名和密码首次启动 Ubuntu 时系统会要求创建一个 Linux 用户。这个用户不必与 Windows 当前用户相同但通常可以使用相同名字方便记忆。大约会看到如下提示Installing, this may take a few minutes... Please create a default UNIX user account. Enter new UNIX username: dev New password: Retype new password:设置成功后会直接进入 Linux ShellWelcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2)之后每次打开 Ubuntu 应用或输入wsl命令都会直接以该用户身份进入 Linux 环境。默认用户拥有管理员sudo权限但使用sudo时需要输入密码。4.4 检查 WSL 版本在 WSL 终端中执行uname -a你会看到microsoft-standard-WSL2这样的内核信息说明当前运行在 WSL 2 上。在 PowerShell 中再次执行wsl -l -v确认VERSION列为 2。如果显示为 1可以手动升级wsl --set-version Ubuntu 2如果系统没有启用虚拟化升级到 WSL 2 可能会报错需要进入 BIOS 开启 Intel VT-x 或 AMD-V。5. WSL 日常使用与文件互访5.1 启动进入 Linux启动 Linux 环境的方式有三种直接点击开始菜单中的 Ubuntu 图标。在 Windows Terminal 的标签页下拉菜单中选择 Ubuntu。在 PowerShell 或 CMD 中输入wsl或wsl -d Ubuntu进入默认发行版。进入后你就可以使用普通 Linux 命令了pwd ls -la cat /etc/os-release free -h df -h这些命令直接运行在 Linux 环境中大部分 Linux 教程中的命令都可以直接执行。5.2 从 Windows 访问 Linux 文件WSL 把 Linux 文件系统隐藏在一个虚拟磁盘中Windows 资源管理器可以通过网络路径访问。在 Windows 资源管理器地址栏输入\\wsl$\Ubuntu或者在使用wsl命令后直接在 Windows 终端中执行explorer.exe .这条命令会用 Windows 资源管理器打开当前 Linux 目录。如果你不想用文件管理器也可以从 PowerShell 中直接访问 Linux 路径cd \\wsl$\Ubuntu\home\dev注意\\wsl$路径只在 WSL 运行时才可访问。如果 WSL 未启动第一次访问可能会自动唤醒。5.3 从 Linux 访问 Windows 文件在 WSL 内Windows 的每个盘符被挂载到/mnt目录下。例如C 盘对应/mnt/cD 盘对应/mnt/d切换目录cd /mnt/c/Users/你的Windows用户名/Desktop ls -la因此你完全可以在 Linux 终端中操作 Windows 文件比如用cp、mv、grep处理 Windows 目录里的文件。5.4 在 Windows Terminal 中整合 WSLWindows Terminal 是微软官方出品的现代终端可以在 Microsoft Store 中安装。安装后它会自动检测已经安装的 WSL 发行版并在下拉菜单中显示 Ubuntu。使用 Windows Terminal 的优势在于多标签页可以同时打开 PowerShell、CMD、Ubuntu。可自定义主题、字体、背景色。快捷键方便和现代终端体验一致。在 WSL 终端中你还可以修改标题、设置工作目录等。比如让 Ubuntu 启动时自动进入某个项目目录可以编辑 WSL 的/etc/profile.d/下的启动脚本或者在 Windows Terminal 的配置文件里设置startingDirectory。6. 系统配置与软件安装6.1 更新软件源WSL 中的系统是一个完整的 Linux 用户态环境安装软件通常使用发行版的包管理器。Ubuntu 默认使用 apt安装软件前建议先更新软件源sudo apt update sudo apt upgrade -yapt update会刷新软件包索引apt upgrade会升级现有软件包。首次使用时建议执行一次避免后续安装依赖时出现版本过旧的问题。如果你的网络环境访问官方源较慢可以更换为国内镜像源但要注意镜像源的配置方式因发行版和版本而异。常见的做法是编辑/etc/apt/sources.list或/etc/apt/sources.list.d/下的文件将archive.ubuntu.com替换为镜像地址。更换后再次执行sudo apt update使配置生效。6.2 安装常用开发工具基础开发环境一般会包含这几类编译工具链build-essential版本控制git网络调试curl、wget编辑器vim、nano数据库和中间件mysql-server、redis-server、nginx安装示例sudo apt install -y build-essential git curl wget vim安装完成后验证gcc --version git --version6.3 配置 systemd 支持WSL 历史版本默认不启动 systemd这导致一些依赖 systemd 的命令无法使用比如systemctl。新版 WSL 已经在较新的 Windows 版本中支持 systemd配置非常简单。编辑/etc/wsl.confsudo vim /etc/wsl.conf写入以下内容[boot] systemdtrue保存后在 PowerShell 中重启 WSLwsl --shutdown再次进入 WSL执行systemctl list-units --typeservice --staterunning如果能看到服务列表说明 systemd 已生效。注意/etc/wsl.conf是 WSL 的全局配置文件可以用来设置自动挂载、默认用户、网络选项等不要和 Linux 系统本身的/etc/sysctl.conf混淆。6.4 设置默认发行版和默认用户如果安装了多个发行版可以通过以下命令设置默认发行版wsl --set-default Ubuntu在/etc/wsl.conf中也可以设置默认登录用户[user] defaultdev这条配置在你使用wsl命令直接进入默认发行版时生效。7. 常见问题与排查思路7.1 安装后启动报错“适用于 Linux 的 Windows 子系统需要更新”当你启动 WSL 时看到类似提示适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 “wsl --update” 更新。这个问题的根本原因是 WSL 内核版本太旧或者系统没有正确安装 WSL 组件。解决方法是在管理员 PowerShell 中执行wsl --update如果无法联网更新也可以从微软官方渠道下载 WSL 安装包但建议优先使用命令更新。7.2 提示“请启用虚拟机平台”WSL 2 需要“虚拟机平台”功能。遇到类似错误时重新检查是否已启用dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart启用后重启系统。如果重启后仍然报错需要确认 BIOS 中虚拟化技术是否开启尤其是 Intel VT-x 或 AMD-V。7.3 WSL2 网络无法连通安装 WSL 2 后有时会遇到ping不通外网或者apt update失败的情况。常见原因包括DNS 配置问题。Windows 防火墙拦截了虚拟交换机流量。WSL 网关和路由异常。可以先在 WSL 中查看网络配置cat /etc/resolv.conf ip route show如果resolv.conf中的 DNS 地址不可达可以手动修改为公共 DNSsudo vim /etc/resolv.conf把 nameserver 修改为nameserver 8.8.8.8不过 WSL 重启后可能重新生成该文件。更好的方式是在/etc/wsl.conf中关闭自动生成[network] generateResolvConf false然后手动创建/etc/resolv.conf并设置 DNS。执行wsl --shutdown后重新进入 WSL测试网络ping -c 4 github.com7.4 文件系统性能问题WSL 2 在访问 Windows 挂载目录如/mnt/c时由于跨文件系统转换性能会明显下降。如果你在做大量文件读写操作建议把项目放在 Linux 内部文件系统中比如/home/dev/projects而不是C:\Users\...下。也尽量不要直接在 Windows 文件资源管理器里编辑 Linux 内部的文件频繁同步容易出现权限和性能问题。更合适的做法是在 WSL 内执行代码、读写项目文件。使用 VS Code Remote-WSL 插件连接到 WSL 开发。需要用 Windows 工具读取结果时再把文件复制到/mnt/c下。7.5 与 VMware/VirtualBox 冲突WSL 2 会启用 Hyper-V 底层虚拟机平台可能与 VMware Workstation 或 VirtualBox 不兼容尤其会导致虚拟机无法启动或网络异常。如果你必须同时使用 WSL 2 和 VMware/VirtualBox可以尝试以下思路更新 VMware 到支持 Hyper-V 共存的新版本。在 VirtualBox 中关闭硬件加速但性能会受影响。如果不需要所有发行版都用 WSL 2把 WSL 切换为 WSL 1wsl --set-version Ubuntu 1WSL 1 不依赖虚拟机平台也不会与大多数虚拟机软件冲突但系统调用兼容性较弱。8. 最佳实践与工程建议8.1 使用专用目录存放项目建议在 Linux 内部创建一个项目目录比如/home/dev/projects所有跨平台项目都放在这里。这样能利用 WSL 2 的本地文件系统性能也方便统一备份。如果需要备份或共享给 Windows使用tar打包即可tar -czf projects-backup.tar.gz /home/dev/projects然后在 Windows 中复制这个压缩包。8.2 不要让 Linux 直接修改 Windows 系统目录虽然 WSL 可以访问 C 盘文件但直接修改C:\Windows或系统盘下的敏感文件是高风险操作。Linux 进程以当前用户权限运行但跨系统操作 Windows 文件时权限模型并不完全一致误操作可能导致系统故障。建议规则Windows 目录只读、不轻易写入尤其是程序文件、系统目录。项目数据统一放在用户目录下。8.3 合理使用 VS Code Remote-WSLVS Code 安装了 “Remote - WSL” 扩展后可以在 Windows 的 VS Code 窗口里直接打开 WSL 中的项目终端、调试器、扩展都会运行在 Linux 环境内。这对写代码、跑服务的体验提升非常明显。使用方式code /home/dev/projects/webapp第一次执行时VS Code 会自动在 WSL 中安装服务器组件。8.4 注意 WSL 的生命周期管理WSL 默认会占用内存但可以通过.wslconfig文件控制。在 Windows 用户主目录下新建.wslconfig注意没有文件名前缀点号在资源管理器中显示为.wslconfig写入[wsl2] memory4GB processors2 swap2GB然后执行wsl --shutdown使配置生效。这样可以把 WSL 的内存限制在合理范围避免影响 Windows 本机性能。8.5 快速复制或迁移 WSL 系统如果你想把当前的 WSL 环境迁移到另一台电脑可以用导出和导入命令。导出到 tar 包wsl --export Ubuntu D:\wsl-backup\ubuntu.tar在目标机器上导入wsl --import Ubuntu-DEV D:\wsl\Ubuntu-DEV D:\wsl-backup\ubuntu.tar导入后默认使用 root 用户也需要重新设置默认用户和密码因为导入包不会保留 Windows 凭据信息。8.6 善用多发行版管理WSL 支持同时安装多个 Linux 发行版例如 Ubuntu 用于日常开发Kali Linux 用于安全测试学习。可以通过wsl -l -v查看所有发行版状态wsl -d Kali-linux指定进入某个系统。多个发行版之间互不影响但共享同一个 WSL 内核和虚拟化平台。9. 小结与下一步建议现在你已经不需要打开虚拟机软件也能在 Windows 上获得一个真正可用的 Linux 终端。安装了 WSL、配置了 Ubuntu、掌握了文件互访和基础软件安装还能处理 WSL 2 运行过程中常见的报错。接下来可以继续深入的方向包括学习 Linux 常用命令并把它们在 WSL 中反复练习。在 WSL 中搭建 Docker 环境体验容器化开发。使用 VS Code Remote-WSL 构建完整的远程开发工作流。结合 Windows 计划任务或 PowerShell 脚本把 WSL 中的命令自动化串联起来比如每日定时备份、日志分析等。如果这篇文章对你有帮助可以先收藏备用。等你第一次用curl -I example.com从 WSL 终端发出请求并看到返回 HTTP 状态码时很多之前觉得复杂的 Linux 开发环境问题都会变得比想象中简单得多。