Windows WSL 详细使用指导教程
WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)是微软官方提供的、在 Windows 系统内原生运行 Linux 环境的功能。通俗地说:装了 WSL,你不需要安装虚拟机、不需要折腾双系统,直接在 Windows 里打开终端就能使用 Ubuntu 的命令行、安装 Linux 软件、运行 Linux 开发的程序,Windows 与 Linux 之间还能共享文件、互调命令。

WSL简介
WSL 2 是当前推荐版本——它是运行在轻量虚拟机里的真实 Linux 内核,兼容性远好于第一代。
- WSL 1(2016 年推出)把 Linux 的系统调用”翻译”成 Windows 调用,不需要虚拟机,但与真实 Linux 内核不兼容,很多依赖内核功能的软件(比如 Docker)无法运行;
- WSL 2(2020 年推出)改为在轻量虚拟机中运行一个由微软维护的真实 Linux 内核,兼容性大幅提升,性能也更快,代价是内存占用略高、跨系统文件访问变慢。今天安装 WSL,默认就是 WSL 2。
| 对比项 | WSL 1 | WSL 2 |
| 架构 | 系统调用翻译层 | 轻量虚拟机 + 真实 Linux 内核 |
| Linux 内核兼容性 | 不完整 | 完整(可运行 Docker) |
| Linux 文件系统内性能 | 较快 | 更快 |
| 跨系统文件访问(/mnt/c) | 较快 | 较慢(走 9P 协议) |
| 内存占用 | 较低 | 可通过 .wslconfig 限制 |
| 启动速度 | 秒级 | 秒级(按需启动) |
WSL的安装
运行 WSL 2 需要:Windows 10 版本 2004(Build 19041)及以上,或 Windows 11;64 位 CPU 并在 BIOS/UEFI 中开启了虚拟化(Intel 的 VT-x、AMD 的 SVM/AMD-V);安装时使用管理员权限。Windows 11 用户开箱即用,老版本 Windows 10 可能需要手动启用两个 Windows 功能。
以管理员身份打开 PowerShell 或命令提示符,执行下面这条命令,它会自动安装 WSL 2 所需的全部组件,并安装默认发行版 Ubuntu:
wsl --install
安装完成后按提示重启电脑。重启后首次启动 WSL,会让你设置一个 Linux 用户名和密码——注意这个账户与你的 Windows 账户无关,只用于 Linux 侧。想装别的发行版(如 Debian、Kali、openSUSE),用 wsl –install -d 发行版名:
wsl --install -d Debian
发行版管理常用命令
安装完成后,下面的命令会陪伴你的日常使用:wsl -l -v 列出所有已安装发行版及其 WSL 版本;wsl –set-version 发行版 2 把某个发行版切换到 WSL 2;wsl –set-default 发行版 设置打开终端时的默认发行版;wsl –update 更新 WSL 内核;wsl –shutdown 关闭所有正在运行的 WSL 实例(修改 .wslconfig 配置后需要执行它才会生效)。
wsl -l -v # 输出示例(NAME 与 VERSION 列为关键信息): # NAME STATE VERSION # * Ubuntu Running 2 wsl --set-version Ubuntu 2 wsl --set-default Ubuntu
为了直观理解 WSL 2 的组成,下面这张图展示了它的分层架构:最上层是 Windows 应用(终端、VS Code、资源管理器),中间是 Windows 主机系统和虚拟化平台,核心是 WSL2 轻量虚拟机(Linux 用户空间 + 真实内核),底层是物理硬件。右侧是三条与 Windows 互操作的通道。

WSL2 由”应用层 → Windows 主机 → 轻量虚拟机(用户空间 + 真实内核)→ 物理硬件”四层组成,文件与命令通过三条通道与 Windows 交换。
文件系统与 Windows 互操作
记住一条原则:项目文件放在 Linux 侧(/home 下),通过 /mnt/c 和 \\wsl$ 两个通道与 Windows 交换文件。WSL 里有两套文件系统:一套是 Linux 本身的文件系统(发行版被安装在一个虚拟磁盘 vhdx 里),另一套是自动挂载进来的 Windows 磁盘。搞清楚它们的访问方式,就能在两边自如穿梭。
从 Windows 访问 Linux 文件
在资源管理器地址栏输入 \\wsl$\Ubuntu\home\你的用户名 或 \\wsl.localhost\Ubuntu\home\你的用户名,就能像浏览普通文件夹一样看到 Linux 侧的文件。更快的办法是在 WSL 终端里直接运行 explorer.exe .,会用资源管理器打开当前目录——这就是 WSL 的”命令互调”能力,下面会细说。
cd ~ explorer.exe .
从 Linux 访问 Windows 文件
Windows 的每个盘符都被自动挂载到 /mnt 下:C 盘对应 /mnt/c,D 盘对应 /mnt/d,以此类推。在 Linux 里访问 Windows 桌面文件,就是切换目录的事:
cd /mnt/c/Users/你的Windows用户名/Desktop ls -lah
文件应该放在哪边?
这是新手最容易踩的坑:跨系统访问(如 WSL 里读写 /mnt/c 下的文件)走 9P 协议,速度明显慢于纯 Linux 侧读写。数据库、npm 依赖、项目代码这类有大量小文件读写的场景,放在 /mnt/c 下会明显变慢。正确姿势是:代码和项目放 Linux 侧(/home/你的用户名/),需要分享给 Windows 的内容(比如文档、截图)再放到 /mnt/c 或通过 \\wsl$ 拿出去。
| 场景 | 推荐位置 | 原因 |
| 项目代码、数据库、npm 依赖 | Linux 侧 /home/用户名 | 访问速度快,跨系统协议开销大 |
| 与 Windows 软件共享的文档/图片 | /mnt/c/… 或 \\wsl$ 取回 | 需要 Windows 侧软件直接打开 |
| Windows 上已有的工作目录 | 继续留在 /mnt/c | 避免两边各存一份造成混乱 |
命令互调:Windows ↔ Linux 双向执行
WSL 最强的体验是”互调”:在 Windows 终端里,可以用 wsl 命令 直接执行 Linux 命令而不进入交互界面;在 Linux 终端里,可以调用 .exe 程序(Windows 的可执行文件默认加入 Linux 的 PATH)。几个高频用法:
# 在 Windows PowerShell 里执行 Linux 命令 wsl ls -la /home wsl bash -c "echo '来自 Linux 的输出'" # 在 WSL 里调用 Windows 程序 notepad.exe 笔记.txt # 用 Windows 记事本打开文件 explorer.exe . # 用资源管理器打开当前目录 /mnt/c/Windows/System32/ipconfig.exe # 查看 Windows 网络配置 # 管道互传:把 Linux 输出复制到 Windows 剪贴板 ls -lah | clip.exe
剪贴板与图形程序
WSL 与 Windows 的剪贴板默认互通:Linux 里复制的内容可以粘贴到 Windows 程序,反之亦然。Windows 11 还内置了 WSLg,在 WSL 里直接运行带界面的 Linux 程序(比如 gedit、firefox),窗口会像普通 Windows 程序一样弹出来,无需额外配置。
日常使用与高频命令
日常使用就三件事:用 apt 装软件、用 ls/cd 管理文件、用 systemd 管理服务,建议把 Windows Terminal 设为默认终端。WSL 里的 Linux 环境与一台真实的 Linux 服务器没有区别,下面按使用频率介绍最常用的一组命令。
包管理器 apt(Ubuntu / Debian)
apt 是 Ubuntu 系的软件包管理器,语法为 sudo apt 子命令 [选项] 包名。sudo 表示以管理员权限执行,首次使用会要求输入你设置的 Linux 密码。核心子命令如下:
| 子命令 | 作用 | 示例 |
| update | 刷新软件源索引(安装前先执行) | sudo apt update |
| upgrade | 升级所有已安装软件 | sudo apt upgrade |
| install | 安装一个或多个软件包 | sudo apt install git |
| search | 按关键词搜索软件包 | apt search python3 |
| remove | 卸载软件包(保留配置文件) | sudo apt remove vim |
| autoremove | 清理不再需要的依赖 | sudo apt autoremove |
一条命令安装多个包,用空格分隔即可;安装前习惯先 update 再 install,避免装到过期版本:
sudo apt update sudo apt install git curl wget # 搜索再安装:先确认包名 apt search python3 | head -20 sudo apt install python3-pip python3-venv
文件与目录操作
最常用的文件命令与 Windows 的对应关系:ls(列目录,相当于 dir)、cd(切换目录)、pwd(显示当前路径)、cp(复制)、mv(移动/重命名)、rm(删除)、mkdir(新建目录)。特别提醒:Linux 的删除不可逆,rm -rf 会把目录连同内容一起永久删除,没有回收站,使用前务必三思。
ls -lah # 列出所有文件,-l 显示详情,-a 含隐藏文件,-h 人性化大小 cd /home/你的用户名 # 进入指定目录;cd .. 返回上级;cd ~ 回到家目录 mkdir -p 项目/子目录 # 递归创建多层目录 cp -r 项目 项目备份 # -r 递归复制整个目录 mv 旧名.sh 新名.sh # 重命名 rm -rf 临时目录 # 危险!永久删除目录及内容
systemd 服务管理
较新版本的 WSL 默认启用 systemd(Linux 的服务管理器),意味着可以像管理真实服务器一样管理后台服务。常用操作:systemctl status 服务名 查看状态,start/stop/restart 启停,enable 设置开机自启(WSL 里指每次启动发行版时自动运行)。例如让 SSH 服务随 WSL 启动:
sudo systemctl enable --now ssh systemctl status ssh # 查看所有正在运行的服务 systemctl list-units --type=service --state=running | head -20
终端、用户与权限
微软官方推荐的终端是 Windows Terminal(Microsoft Store 免费安装),它可以同时开多个标签页,每个标签页进入不同发行版,还支持自定义配色。在 WSL 里,whoami 查看当前用户,sudo su – 切换到 root,exit 退出当前会话。权限方面,Linux 用”读 r / 写 w / 执行 x”三位权限位控制访问,普通场景只需会用 chmod +x 文件 给脚本添加执行权限:
whoami chmod +x 我的脚本.sh ./我的脚本.sh # 直接运行脚本
网络与代理
WSL2 使用 NAT 网络模式:Linux 侧访问外网默认没问题;Linux 里访问 Windows 主机上运行的服务(如 3306 端口的 MySQL),可用网关 IP(ip route | grep default 查看),或利用 WSL 的 localhost 转发特性——Windows 侧访问 WSL 里的服务直接填 localhost 即可。如果 Windows 开了代理软件,Linux 侧需要手动指定代理变量:
# 查看默认网关(即 Windows 主机在 WSL 网络中的地址) ip route | grep default # 为当前会话设置代理(端口以你的代理软件为准,常见 7890 / 10809) export http_proxy=http://127.0.0.1:7890 export https_proxy=http://127.0.0.1:7890
搭建开发环境
开发环境四件套——Git、Python、Node.js、Docker——全部装进 WSL,再用 VS Code 的 Remote 扩展连接,就是一套完整的 Linux 开发环境。下面按”装好就能用”的顺序逐步来。
Git 与 SSH 密钥
Git 是代码版本管理工具,也是和 GitHub/Gitee 等平台交互的基础。安装后先配置用户名和邮箱,再生成 SSH 密钥并添加到代码托管平台,实现免密推送。
sudo apt update sudo apt install git # 配置身份(换成你的信息) git config --global user.name "你的名字" git config --global user.email "你的邮箱@example.com" # 生成 SSH 密钥并查看公钥 ssh-keygen -t ed25519 -C "你的邮箱@example.com" cat ~/.ssh/id_ed25519.pub # 把输出的公钥粘贴到 GitHub → Settings → SSH and GPG keys → New SSH key # 测试连接(GitHub 返回 Hi 你的名字 即成功) ssh -T git@github.com
Python
Ubuntu 自带 Python 3,再补上 pip(包安装器)和 venv(虚拟环境)即可。强烈建议每个项目建一个虚拟环境,避免依赖互相污染:
sudo apt install python3 python3-pip python3-venv # 进入项目目录,创建并激活虚拟环境 cd ~/my-project python3 -m venv .venv source .venv/bin/activate pip install requests pandas # 退出虚拟环境 deactivate
Node.js(用 nvm 管理版本)
不推荐直接用 apt 装 Node.js(版本往往偏旧),更优雅的方式是用 nvm(Node 版本管理器)按需安装任意版本。安装 nvm 后需要重新打开终端或执行 source ~/.bashrc 使其生效:
# 安装 nvm(版本号以 nvm 官方仓库最新版为准) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 安装并使用 LTS 版 Node.js nvm install --lts nvm use --lts node -v npm -v
Docker
Docker 是运行容器化应用的标准工具,WSL2 对它有官方支持,两种装法任选。方式一(省事):在 Windows 侧安装 Docker Desktop,设置里勾选”Use the WSL 2 based engine”并打开 WSL Integration,之后在 WSL 里直接使用 docker 命令。方式二(纯 Linux 工作流):在 WSL 内安装 docker engine:
# 方式二:WSL 内安装 docker engine(Ubuntu) sudo apt install docker.io sudo systemctl enable --now docker # 验证安装 docker run hello-world docker ps -a
数据库与常用服务
MySQL、PostgreSQL、Redis 等服务用 Docker 容器跑最省心,一条命令启动、一条命令删除,不污染系统。以 MySQL 8 为例(把密码换成你自己的):
docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORD=你的密码 \ -p 3306:3306 \ -d mysql:8 # 查看容器状态;进入容器内的 mysql 命令行 docker ps docker exec -it mysql8 mysql -uroot -p
VS Code 无缝连接
在 Windows 侧安装 VS Code 后,再安装官方扩展”WSL”(在扩展市场搜索 WSL,属于 Remote Development 系列)。之后在 WSL 终端里进入项目目录执行 code .,VS Code 会以”远程”模式重新打开,编辑、调试、终端全部跑在 Linux 环境里,体验与本地开发完全一致。
cd ~/my-project code .
性能调优与常见问题排查
大多数”卡顿、内存吃满、启动失败”问题,都能靠 .wslconfig 限流和 wsl –shutdown 重置解决。WSL2 默认按需分配内存(上限约为物理内存的 50%)并自动回收,但如果你同时跑数据库和容器,可能希望手动限制资源,此时就需要 .wslconfig。
用 .wslconfig 限制内存与 CPU
在 Windows 侧创建文件 C:\Users\你的Windows用户名\.wslconfig(注意没有扩展名),写入以下内容后保存,再执行 wsl –shutdown 并重新打开 WSL 即生效:
[wsl2] memory=4GB processors=4 swap=2GB localhostForwarding=true
磁盘瘦身(vhdx 膨胀)
WSL 的虚拟磁盘(ext4.vhdx)只增不减:装过的软件、删掉的文件不会真正释放磁盘空间,需要手动压缩。步骤是先 wsl –shutdown 关闭 WSL,再用 Windows 自带的 diskpart 压缩虚拟磁盘。vhdx 的默认位置形如 C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu*\LocalState\ext4.vhdx(发行版不同路径略有差异,可全盘搜索 ext4.vhdx 定位)。较新版本的 WSL 还支持直接启用稀疏磁盘:wsl –manage 发行版 –set-sparse true,之后删除的文件会真正释放空间。
# 第一步:在 PowerShell 中关闭所有 WSL 实例 wsl --shutdown # 第二步:在 diskpart 中压缩 vhdx(交互式命令,逐行输入) diskpart select vdisk file="C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu*\LocalState\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit
常见错误速查表
| 错误 / 症状 | 原因 | 解决办法 |
| 0x80370102 | BIOS 中未开启虚拟化 | 重启进 BIOS/UEFI,开启 VT-x 或 SVM,保存重启 |
| 0x800701bc | WSL 内核缺失或过旧 | 运行 wsl –update 更新内核,必要时重启 |
| WSL 未安装(command not found) | wsl.exe 不可用 | 以管理员运行 wsl –install,重启电脑 |
| 忘记 Linux 密码 | — | PowerShell 中运行 wsl -u root,进入后执行 passwd 你的用户名 |
| C 盘空间被占满 | vhdx 只增不减 | 按 5.2 压缩磁盘,或迁移发行版到其他盘 |
| WSL 启动失败 / 发行版损坏 | 配置或文件损坏 | wsl –unregister 发行版 重置(先备份数据,重置会删除该发行版全部内容) |
| 中文显示乱码 | locale 未配置中文 | sudo apt install language-pack-zh-hans,再执行 sudo update-locale LANG=zh_CN.UTF-8 |
备份与迁移
WSL 支持把整个发行版导出为 tar 文件,方便备份或迁移到其他电脑/磁盘。导出时发行版需处于关闭状态:
# 导出(备份) wsl --shutdown wsl --export Ubuntu D:\backup\ubuntu-backup.tar # 导入(恢复到新位置;注意导入后默认用户可能变为 root) wsl --import Ubuntu D:\wsl\ubuntu D:\backup\ubuntu-backup.tar
几个提升体验的小技巧
打开 WSL 时直接进入家目录:wsl –cd ~。如果你不希望 Windows 的 PATH 自动注入 Linux(有时会导致命令冲突),在 Linux 侧编辑 /etc/wsl.conf 关闭它:
[interop] appendWindowsPath = false [boot] systemd = true
保存后执行 wsl –shutdown 再重新进入即可生效。另外,WSL 官方提供 wsl –version 查看 WSL 自身版本,升级 WSL 本体用 wsl –update。
参考文献 / 扩展阅读
- 微软官方文档《适用于 Linux 的 Windows 子系统文档》
- 微软官方文档《Windows Terminal 文档》
- 微软官方 WSL GitHub 仓库(问题反馈与版本发布)
- nvm(Node Version Manager)官方仓库





