Windows 11 WSL 与 Ubuntu
写作背景:作为一个从 wsl 在 2016 年布时就关注,不断入坑、弃坑、折腾 Ubuntu、双系统。
爱过、狠过、伤过到再也不想碰它,到如今已经过去将近十个年头。但是由于各种原因,导致又不得不用它,现在可以说 wsl 已经成为最好的 Linux 发行版本之一。
拥有完整的 Linux 终端体验与使用最广的图形桌面 windows,是需要 Linux 开发体验 + windows 使用体验的最终解药。
WSL 是什么
WSL(Windows Subsystem for Linux)让 Windows 运行 Linux 发行版及其命令行工具。WSL 是运行环境,Ubuntu 是本章选用的发行版。
WSL 2 使用由 Windows 管理的轻量虚拟机运行 Linux 内核,无需自行配置虚拟机;Windows 与 WSL 也能互相访问文件。
WSL 更像是 Windows 给你开了一个 Linux 工作间,而不是把你的电脑变成 Linux 电脑。
WSL 适合本地学习和开发;正式部署仍需使用服务器环境。
命令行组成与执行入口
终端显示输入和输出,Shell 解释命令。Windows Terminal 可以打开不同的 Shell,本章需要区分 PowerShell 与 Ubuntu 中的 Bash:
| 名称 | 作用 | 本章中的用途 |
|---|---|---|
| Windows Terminal | 终端窗口 | 打开 PowerShell 或 Ubuntu 标签页 |
| PowerShell | Windows 的 Shell | 执行 wsl --install、wsl -l -v 等管理命令 |
| Ubuntu 中的 Bash | Linux 的 Shell | 执行 pwd、sudo apt update 等 Linux 命令 |
PS C:\...> 表示当前在 PowerShell;用户名@电脑名:~$ 表示当前在 Ubuntu。
WSL 安装与使用
在 Windows 搜索框打开 winver,确认系统为 Windows 11。
默认安装
在开始菜单搜索 PowerShell,选择“以管理员身份运行”,执行:
wsl --install命令会安装 WSL 和默认的 Ubuntu。按提示重启 Windows,再从开始菜单打开 Ubuntu,等待首次初始化。
指定安装
如果已安装 WSL,或想选择其他发行版,先在 PowerShell 查看可用列表:
wsl --list --online列表中的名称用于 -d 参数。已有 WSL 但没有 Ubuntu 时,执行:
wsl --install -d Ubuntu选择其他发行版时,将 Ubuntu 换成列表中的名称。wsl --install 默认已安装 Ubuntu,无需接着执行这条命令。
安装验收
首次打开 Ubuntu 时,按提示创建 Linux 用户名和密码。密码用于 sudo,与 Windows 密码无关;输入时不显示字符,按回车提交。
初始化完成后,在 Ubuntu 执行:
whoami
cat /etc/os-releasewhoami 应显示新建的用户名,/etc/os-release 应显示 Ubuntu。随后回到 PowerShell 检查 WSL:
wsl -l -v输出中应有 Ubuntu 且 VERSION 为 2;STATE 表示运行状态。若没有 Ubuntu,检查安装、重启和首次启动是否完成;若 VERSION 为 1,执行 wsl --set-version Ubuntu 2 后复查。
WSL 的启动与使用
在 PowerShell 中,wsl 进入默认发行版;安装了多个发行版时,用 -d 指定名称:
wsl
wsl -d Ubuntu发行版名称以 wsl -l -v 的输出为准。进入后用 cd ~ 回到 Linux 用户目录,用 exit 退出 Shell。停止整个实例的方法见“发行版管理”。
需要用 VS Code 编辑 WSL 项目时,可通过 WSL 扩展打开,不必把项目移到 Windows 盘。
文件系统与项目目录
Ubuntu 的 /home/用户名 属于 Linux 文件系统;Windows 的 C 盘在 Ubuntu 中挂载为 /mnt/c。
在 Ubuntu 中访问 C 盘:
cd /mnt/c
pwdpwd 应显示 /mnt/c。
在 Windows 文件资源管理器输入 \\wsl$,可进入 Ubuntu 的文件系统;在 Ubuntu 中执行 explorer.exe .,可用文件资源管理器打开当前位置。
| 位置 | Ubuntu 中的示例 | 适合用途 |
|---|---|---|
| Windows 盘 | /mnt/c/Users/... | 临时查看或复制 Windows 文件 |
| Linux 文件系统 | /home/用户名/projects | 存放由 Linux 工具构建和运行的项目 |
Linux 工具在 /mnt/c 下读写项目文件可能变慢,权限和文件监听行为也可能不同。用 Linux 工具开发的项目放在 /home/用户名 下;/mnt/c 适合临时访问 Windows 文件。不要直接修改 WSL 的底层虚拟磁盘。详见 Microsoft 跨文件系统使用指南。
在 Ubuntu 中创建项目目录:
mkdir -p ~/projects
cd ~/projects
pwdpwd 应显示 /home/你的Linux用户名/projects。后续 Linux 项目放在这里。
发行版管理
以下命令都在 PowerShell 中执行;发行版名称以 wsl -l -v 的输出为准。
wsl -l -v输出中的 NAME、STATE、VERSION 分别表示发行版名称、运行状态和 WSL 版本。
安装了多个发行版后,可以设置 wsl 默认进入哪一个:
wsl --set-default Ubuntu再次执行 wsl -l -v,名称前带 * 的发行版就是默认项。
停止 Ubuntu 实例:
wsl --terminate Ubuntu再次执行 wsl -l -v,可看到它的状态变为 Stopped。
wsl --shutdownwsl --shutdown 停止所有发行版和 WSL 2 虚拟机;修改 .wslconfig 后也用它重启环境。
wsl --updatewsl --update 更新 WSL 组件;Ubuntu 软件包由 apt 更新。
wsl --statuswsl --status 查看默认发行版等 WSL 配置;查看各发行版状态和版本仍用 wsl -l -v。
更多命令参数可参考 Microsoft WSL 基础命令文档。
发行版备份与恢复
重装 Windows 或换电脑前,可以导出 Ubuntu 的文件与已安装软件,再导入为新发行版。示例先备份到 Windows 用户目录;还应复制到其他磁盘。导出不包含 Windows 文件或其他发行版。
先在 PowerShell 确认发行版名称:
wsl -l -v下文以 Ubuntu 为例;名称不同就按输出替换。导出前保存文件并退出正在运行的任务。
导出发行版
在 PowerShell 中创建备份目录、停止 Ubuntu,然后导出:
New-Item -ItemType Directory -Force "$env:USERPROFILE\wsl-backup"
wsl --terminate Ubuntu
wsl --export Ubuntu "$env:USERPROFILE\wsl-backup\ubuntu.tar"
Test-Path "$env:USERPROFILE\wsl-backup\ubuntu.tar"Test-Path 应返回 True。确认文件大小不是零后,将备份复制到其他磁盘;导出不会删除原发行版。
导入发行版
先以新名称导入,保留原 Ubuntu 供核对:
New-Item -ItemType Directory -Force "$env:USERPROFILE\wsl-instances"
wsl --import Ubuntu-Backup "$env:USERPROFILE\wsl-instances\Ubuntu-Backup" "$env:USERPROFILE\wsl-backup\ubuntu.tar"
wsl -l -v--import 后依次是新名称、安装位置和备份文件。wsl -l -v 应显示 Ubuntu-Backup;迁移到其他磁盘时,替换示例路径。
恢复验证与默认用户
在 PowerShell 启动导入的发行版:
wsl -d Ubuntu-Backup进入后检查:
whoami
ls /home
ls /home/你的Linux用户名/projects将路径中的 你的Linux用户名 换成原用户名;若没有 projects,就检查其他重要文件。导入后若 whoami 显示 root,先确认 /home 中原用户仍在,再编辑默认用户配置:
nano /etc/wsl.conf保留文件原有设置,加入以下内容;若已有 [user] 段,只修改 default:
[user]
default=你的Linux用户名将 你的Linux用户名 换成原用户名。在 nano 中按 Ctrl+O、回车保存,按 Ctrl+X 退出。退出 Ubuntu 后,在 PowerShell 执行:
wsl --terminate Ubuntu-Backup
wsl -d Ubuntu-Backup再次执行 whoami,确认已切换到原用户,并检查重要文件。首次进入就不是 root 时,无需修改配置。确认恢复成功后再清理旧发行版。详见 Microsoft WSL 基础命令文档。
发行版删除与重装
注销前检查
PowerShell 中的 --unregister 会永久删除指定发行版的文件、设置和软件。先核对名称,并按上节验证备份;仅需停止运行时用 wsl --terminate Ubuntu。
wsl --unregister Ubuntu重装与恢复
确认旧发行版已经注销,并且确实要从空白环境开始,再在 PowerShell 执行:
wsl --install -d Ubuntu重新安装得到空白环境,不会自动恢复旧项目;恢复旧环境应导入备份。注销适用于重置或清理已验证迁移的旧实例,不必为了普通配置问题重装。
常见问题与可选网络配置
Ubuntu 密码与输入回显
sudo 使用首次启动 Ubuntu 时创建的 Linux 密码,与 Windows 密码无关。输入时没有字符或星号;若提示错误,检查键盘布局和输入内容。
关闭终端后实例仍在运行
在 PowerShell 用 wsl -l -v 检查;若仍在运行,用以下命令停止所有实例:
wsl --shutdown磁盘占用持续增长
先在 Ubuntu 检查空间使用情况:
df -h /
du -sh ~/projects确认占用来源后再清理。删除 Linux 文件后,WSL 2 的虚拟磁盘不一定立刻缩小;不要直接编辑磁盘文件,按 Microsoft WSL 磁盘空间指南 处理。
Windows 与 WSL 本地服务互访
需要解决本地服务互访或 VPN 问题时,可使用镜像网络。它要求 Windows 11 22H2 或更高版本;普通命令练习无需修改网络模式。
需要启用时,在 PowerShell 打开 Windows 用户目录下的 .wslconfig:
notepad $env:USERPROFILE\.wslconfig在文件中加入以下配置;如果已有 [wsl2] 段,应合并到原段落,不要重复写段名:
[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
firewall=truenetworkingMode 启用镜像网络;其余选项分别控制 DNS、代理和防火墙。保存后在 PowerShell 重启 WSL:
wsl --shutdown
wsl -d Ubuntu用 wsl -d Ubuntu hostname -I 和 Windows 的 ipconfig 对照地址;多网卡环境可能有多个地址。最终以本地服务能否通过 localhost 互访为准。详见 Microsoft WSL 网络文档。
安装停在 0% 或虚拟化错误
如果 wsl --install 下载停在 0%,可在 PowerShell 尝试:
wsl --install --web-download -d Ubuntu出现 0x80370102 等虚拟化错误时,检查 Windows“虚拟机平台”和电脑固件中的虚拟化设置,再重启。具体操作按设备厂商说明或 Microsoft 故障排查文档 执行。