Windows Subsystem for Linux (WSL) 极大地改变了开发者和技术爱好者在Windows环境下使用Linux的方式。它提供了一种高效、无缝且功能强大的体验,让您无需虚拟机或双启动即可运行真正的Linux环境。本文将围绕“WSL启动Ubuntu”这一核心主题,深入探讨您可能遇到的各种疑问,从基础概念到高级配置,旨在为您提供一份详尽、实用的操作指南。

WSL与Ubuntu:基础概念

WSL是什么?

WSL,即Windows Subsystem for Linux,是微软推出的一项兼容层技术,允许开发者在Windows操作系统上直接运行GNU/Linux环境,包括大多数命令行工具、实用程序和应用程序,而无需传统的虚拟机或双引导设置。它在Windows内核之上提供了一个兼容层,将Linux系统调用实时转换为Windows系统调用,从而实现了接近原生的性能。

WSL启动Ubuntu意味着什么?

“WSL启动Ubuntu”指的是在您的Windows电脑上,通过WSL技术运行一个Ubuntu Linux发行版的实例。这为您提供了一个完整的Ubuntu命令行环境,您可以在其中执行Ubuntu特有的命令、安装包、运行脚本,甚至通过WSLg(WSL的图形界面支持)运行Ubuntu的桌面应用程序。这个Ubuntu实例与您的Windows系统紧密集成,可以方便地访问Windows文件系统,并共享网络连接。

为什么选择WSL运行Ubuntu?

  • 无缝集成:无需重启电脑,您可以同时运行Windows应用和Ubuntu命令行工具。
  • 性能接近原生:WSL2通过轻量级虚拟机技术,提供了几乎与原生Linux相同的性能体验,尤其是在文件I/O方面。
  • 开发利器:对于Web开发、数据科学、容器化(如Docker)、云计算等场景,许多工具和框架原生支持Linux环境,WSL提供了一个便捷的沙盒。
  • 资源效率高:相比传统虚拟机,WSL启动更快,资源占用更低,因为它与Windows共享内核资源,并采用动态内存分配。
  • 图形应用支持:WSLg的引入,让您可以直接在Windows桌面上运行Ubuntu的GUI应用程序,无需复杂的X服务器配置。
  • 多发行版管理:您可以同时安装和运行多个不同的Linux发行版(如Ubuntu、Debian、Kali等),并轻松切换。

准备与安装

先决条件:在何处安装以及需要什么?

要在您的Windows电脑上安装WSL和Ubuntu,您需要满足以下条件:

  • 操作系统:Windows 10版本1903或更高版本(Build 18362或更高),或者Windows 11。推荐使用最新版本的Windows以获得最佳体验和最新功能(如WSLg)。
  • 虚拟机平台功能:需要在Windows功能中启用“虚拟机平台”和“适用于Linux的Windows子系统”。通常,使用简化安装命令会自动处理。
  • 磁盘空间:WSL2的Ubuntu发行版通常会动态占用磁盘空间,初始安装可能只需要几百MB,但随着您安装更多软件,它会自动扩展其虚拟硬盘(VHDX)文件。建议预留至少10-20GB的可用空间。
  • 网络连接:在安装过程中需要连接互联网以下载WSL组件和Ubuntu发行版。

如何安装WSL?

安装WSL最简单的方式是使用一行命令:

  1. 打开管理员权限的PowerShell或命令提示符:在Windows搜索栏中输入“cmd”或“powershell”,然后右键点击“以管理员身份运行”。
  2. 执行安装命令

    输入以下命令并按回车:

    wsl --install

    此命令将自动完成以下步骤:

    • 启用“适用于Linux的Windows子系统”可选组件。
    • 启用“虚拟机平台”可选组件。
    • 下载并安装最新版WSL内核。
    • 下载并安装默认的Ubuntu发行版(通常是最新的LTS版本)。
    • (如果需要)下载并安装WSLg以支持图形界面。

    如果您想安装特定版本的WSL(如WSL 2),或者想在安装前手动指定,可以在第一次运行wsl --install后进行配置,或者使用wsl --set-default-version 2命令。

  3. 重启电脑:根据提示,您可能需要重启计算机以完成安装过程。

如何安装Ubuntu发行版?

如果您已经通过wsl --install安装了WSL,它通常会自动安装一个默认的Ubuntu发行版。如果您想安装其他版本的Ubuntu(如旧的LTS版本),或者想手动安装:

  1. 打开Microsoft Store:在Windows搜索栏中输入“Microsoft Store”并打开应用商店。
  2. 搜索Ubuntu:在Store的搜索框中输入“Ubuntu”。
  3. 选择您想要的Ubuntu版本:通常会有“Ubuntu”(最新LTS)、“Ubuntu 22.04 LTS”、“Ubuntu 20.04 LTS”等选项。选择一个,然后点击“获取”或“安装”。
  4. 等待下载和安装完成:完成后,您会看到一个“启动”按钮。

提示:您可以使用命令wsl --list --online查看所有可用的WSL发行版列表,然后使用wsl --install -d <DistroName>来安装特定的发行版,例如:wsl --install -d Ubuntu-20.04

启动与基本操作

如何启动Ubuntu?

有几种方式可以启动您的WSL Ubuntu实例:

  • 通过Windows开始菜单:在Windows开始菜单中找到“Ubuntu”图标(或您安装的特定Ubuntu版本,如“Ubuntu 22.04 LTS”),点击即可启动一个Ubuntu终端窗口。
  • 通过运行命令

    • 打开命令提示符 (cmd)PowerShell

    • 直接启动默认发行版:输入wsl并按回车。这会启动您的默认WSL发行版(通常是您安装的第一个Ubuntu)。

      wsl
    • 启动特定发行版:如果您安装了多个Ubuntu或其他Linux发行版,可以使用wsl -d <发行版名称>命令。例如,要启动名为“Ubuntu-22.04”的发行版:

      wsl -d Ubuntu-22.04

      您可以使用wsl --listwsl -l来查看所有已安装发行版的名称。

    • 通过发行版名称的快捷命令:许多发行版安装后会在系统路径中创建一个对应的可执行文件,如ubuntu.exeubuntu2204.exe。直接在运行对话框(Win+R)或命令提示符中输入并运行它。

首次启动:用户设置

当您首次启动新安装的Ubuntu发行版时,系统会提示您创建一个Unix用户账户。这是您在Ubuntu环境中的默认用户,并会拥有sudo权限。

  1. 输入新的Unix用户名

    Enter new UNIX username: YourUserName

    (请替换YourUserName为您想要的用户名)

  2. 设置密码:系统会要求您输入并确认密码。请注意,在Linux终端中输入密码时,通常不会显示任何字符(包括星号),这是正常现象。

    New password:
    Retype new password:
  3. 完成设置:设置完成后,您将进入Ubuntu的命令行提示符。

如何管理多个Ubuntu实例?

如果您安装了多个Ubuntu版本或不同的Linux发行版,可以使用以下命令进行管理:

  • 列出所有已安装的发行版

    wsl --list --verbose

    或简写:

    wsl -l -v

    这将显示每个发行版的名称、状态(Running/Stopped)和WSL版本(WSL 1/WSL 2)。

  • 设置默认启动的发行版

    wsl --set-default <发行版名称>

    例如:wsl --set-default Ubuntu-22.04

如何终止Ubuntu实例?

当您关闭Ubuntu终端窗口时,WSL发行版通常不会完全关闭,而是进入“Stopped”状态,以便下次快速启动。要完全终止一个或所有运行中的WSL实例:

  • 终止特定发行版

    wsl --terminate <发行版名称>

    例如:wsl --terminate Ubuntu-22.04

  • 终止所有运行中的发行版

    wsl --shutdown

    这个命令会关闭所有正在运行的WSL发行版以及WSL 2轻量级虚拟机。

文件系统交互

Ubuntu如何访问Windows文件?

WSL Ubuntu发行版会自动将您的Windows硬盘驱动器挂载到/mnt目录下。

  • 访问C盘:您可以在Ubuntu终端中通过/mnt/c路径访问Windows的C盘。

    cd /mnt/c/Users/YourWindowsUserName/Documents

    (请替换YourWindowsUserName为您的Windows用户名)

  • 访问其他盘符:如果您的Windows有D盘、E盘等,它们会分别挂载到/mnt/d/mnt/e等路径下。

Windows如何访问Ubuntu文件?

在Windows中访问WSL Ubuntu的文件也非常方便:

  • 通过文件资源管理器

    • 打开Windows文件资源管理器。
    • 在地址栏输入\\wsl.localhost并按回车。
    • 您会看到已安装的WSL发行版列表,双击您想访问的Ubuntu发行版(例如“Ubuntu-22.04”)。
    • 然后您可以像访问网络共享文件夹一样浏览Ubuntu的文件系统,例如进入home/YourUserName目录。
  • 直接路径访问:您也可以直接在文件资源管理器地址栏输入完整的UNC路径,例如:

    \\wsl.localhost\Ubuntu-22.04\home\YourUserName\myproject
  • 通过VS Code等工具:许多现代开发工具(如Visual Studio Code)都内置了对WSL的良好支持。您可以在VS Code中直接打开WSL文件夹,并在Ubuntu环境中进行开发。

最佳实践:避免直接修改WSL文件系统

重要提示强烈建议不要在Windows文件系统(如C:\Users\YourUserName\AppData\Local\Packages\...)中直接修改WSL发行版的文件。 这样做可能导致权限问题、文件损坏或WSL环境不稳定。请始终通过WSL环境本身或使用\\wsl.localhost路径从Windows访问和操作WSL中的文件。

网络与端口转发

WSL的网络配置

WSL 2使用一个轻量级虚拟机,每个WSL 2发行版都有一个自己的虚拟网卡,拥有一个独立的IP地址(通常是内部NAT网络)。然而,WSL会自动处理大部分网络配置,使得从Windows访问WSL内部服务,或从WSL访问外部网络都非常透明。

  • WSL内部IP地址:您可以在Ubuntu终端中运行ip aifconfig来查看其内部IP地址。这个地址通常是动态的。
  • DNS解析:WSL通常会继承Windows的DNS设置。

如何在Windows上访问WSL内部服务?

这是WSL最方便的功能之一。如果您在Ubuntu中运行了一个Web服务器(如Apache、Nginx)、数据库(如MySQL、PostgreSQL)或API服务,它们监听在默认端口上,您可以直接在Windows浏览器或应用程序中通过localhost127.0.0.1访问它们。

  • 自动端口转发:WSL 2的一个重要特性是自动端口转发。这意味着如果您在Ubuntu中启动了一个服务并监听在某个端口(例如80、3000、8080),Windows会自动将流量转发到WSL中的相应端口。
  • 示例

    1. 在Ubuntu中,启动一个简单的Python HTTP服务器:
      python3 -m http.server 8000
    2. 在Windows浏览器中,直接访问:http://localhost:8000。您应该能看到Python服务器提供的内容。

图形界面应用(GUI)

WSLg:原生GUI支持

WSLg是WSL 2中一个令人兴奋的功能,它允许您在Windows桌面上直接运行Linux GUI应用程序,而无需手动配置X服务器或VNC。WSLg是Windows 11的内置功能,对于Windows 10用户,通常在WSL更新后也会自动安装。

WSLg提供了一个完整的图形栈,包括Wayland、Xserver、PulseAudio和RDP,它们都自动集成到您的Windows桌面体验中。

如何运行Ubuntu的GUI应用?

一旦WSLg安装并运行,运行Ubuntu的GUI应用就和运行命令行应用一样简单:

  1. 在Ubuntu中安装GUI应用

    例如,安装流行的图片编辑软件GIMP:

    sudo apt update
    sudo apt install gimp

    或者安装一个简单的文本编辑器gedit:

    sudo apt install gedit
  2. 启动GUI应用

    • 通过Ubuntu终端:在您的Ubuntu终端中直接输入应用程序的命令,然后按回车。例如:

      gimp

      或者

      gedit

      应用程序窗口将直接弹出在您的Windows桌面上。

    • 通过Windows开始菜单:安装WSLg后,许多Linux GUI应用程序的快捷方式会自动添加到Windows的开始菜单中,您可以在“Ubuntu”文件夹下找到它们并直接点击启动。

注意:首次启动GUI应用可能需要一点时间,因为WSLg环境需要初始化。

高级配置与故障排除

WSL版本(1 vs 2)

WSL有两个主要版本:WSL 1和WSL 2。它们之间的底层架构有显著差异,影响着性能和功能。

  • WSL 1

    • 基于翻译层,将Linux系统调用实时转换为Windows系统调用。
    • 没有真正的Linux内核,共享Windows内核。
    • 文件I/O性能在跨Windows和Linux文件系统时较慢。
    • 不完全支持所有Linux应用程序(例如Docker)。
    • 启动速度快。
  • WSL 2

    • 基于轻量级虚拟机(VM),运行一个真实的Linux内核。
    • 文件I/O性能在Linux文件系统内部(如~/home)表现出色,但在跨Windows文件系统(如/mnt/c)时可能稍慢于WSL 1。
    • 提供完整的系统调用兼容性,支持更多Linux应用程序(包括Docker Desktop)。
    • 支持WSLg。
    • 启动速度比WSL 1稍慢,但仍远快于传统虚拟机。

推荐:强烈建议使用WSL 2以获得最佳性能和功能。新的安装默认就是WSL 2。

如何检查和切换WSL版本

  • 查看发行版的WSL版本

    wsl --list --verbose

    wsl -l -v
  • 将特定发行版设置为WSL 1或WSL 2

    wsl --set-version <发行版名称> <版本号>

    例如:wsl --set-version Ubuntu-22.04 2

  • 设置所有新安装发行版的默认WSL版本

    wsl --set-default-version 2

WSL的默认发行版设置

您可以通过以下命令设置在执行wsl命令时不带参数时启动哪个发行版:

wsl --set-default <发行版名称>

例如:wsl --set-default Ubuntu-22.04

磁盘空间管理

WSL 2发行版的根文件系统存储在一个虚拟硬盘(VHDX)文件中。这个文件位于您的Windows用户文件夹下的隐藏目录中。WSL 2的VHDX是动态扩展的,这意味着它只会占用实际使用的空间,但它不会自动收缩。

  • 查看VHDX文件大小

    wsl du -sh /

    这个命令将在Ubuntu内部查看根目录已使用的大小。要在Windows中查看实际的VHDX文件大小,您需要前往:

    C:\Users\<YourWindowsUserName>\AppData\Local\Packages\<UbuntuDistroPackageName>\LocalState\ext4.vhdx

    <UbuntuDistroPackageName>通常以“CanonicalGroupLimited.Ubuntu”开头)

  • 收缩VHDX文件(释放未使用的空间):如果您的Ubuntu实例占用了大量磁盘空间,但您删除了很多文件,VHDX文件可能不会自动缩小。您可以手动收缩它:

    1. 终止WSL实例
      wsl --shutdown
    2. 打开PowerShell作为管理员
    3. 查找VHDX文件路径
      Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss\ | ForEach-Object { (Get-ItemProperty -Path $_.pspath).BasePath + "\ext4.vhdx" }

      这将列出所有WSL发行版的VHDX文件路径。

    4. 优化VHDX文件
      Optimize-VHD -Path "<VHDX文件完整路径>" -Mode Full

      请将<VHDX文件完整路径>替换为上一步找到的实际路径。例如:

      Optimize-VHD -Path "C:\Users\YourUserName\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx" -Mode Full

常见问题与解决方案

  • “WSL 2 requires an update to its kernel component”错误

    解决方案:在管理员权限的PowerShell中运行wsl --update,然后重启电脑。

  • 网络连接问题(无法访问外部网络)

    解决方案:尝试重启WSL:wsl --shutdown,然后重新启动Ubuntu。检查Windows防火墙设置,确保WSL组件没有被阻止。

  • 文件权限问题(在Windows中编辑WSL文件导致)

    解决方案:不要在Windows中直接修改WSL文件系统(C:\Users...\Packages下的文件)。如果已发生,可能需要重置或重新安装发行版。始终通过\\wsl.localhost访问或在WSL内部编辑文件。

  • WSLg应用启动失败或显示异常

    解决方案:确保您的Windows和WSL都已更新到最新版本(wsl --update)。尝试重启WSL:wsl --shutdown。检查Ubuntu内部的X服务器相关日志。

更新与卸载

如何更新WSL和Ubuntu?

  • 更新WSL平台本身

    为了获取最新的WSL功能和性能改进,您应该定期更新WSL平台。在管理员权限的PowerShell或命令提示符中执行:

    wsl --update

    然后检查版本:

    wsl --version
  • 更新Ubuntu发行版内部的软件包

    在Ubuntu终端中,您应该定期更新其内部的软件包和系统:

    sudo apt update
    sudo apt upgrade

    第一个命令会刷新可用软件包列表,第二个命令会安装所有已安装软件包的新版本。有时也需要运行sudo apt dist-upgrade来处理依赖关系变化较大的升级。

如何卸载Ubuntu发行版?

如果您不再需要某个Ubuntu发行版,可以将其卸载以释放磁盘空间。

  1. 终止发行版(如果正在运行)

    wsl --terminate <发行版名称>
  2. 注销发行版

    这将从WSL中删除该发行版的文件系统,并删除所有数据。请谨慎操作,数据将无法恢复。

    wsl --unregister <发行版名称>

    例如:wsl --unregister Ubuntu-22.04

  3. (可选)从Microsoft Store卸载应用

    完成注销后,您还可以选择从Windows的“设置” -> “应用” -> “应用和功能”中找到对应的Ubuntu应用,然后将其卸载,就像卸载其他Windows应用一样。

通过本文的详细指导,您应该已经对如何在WSL中启动和管理Ubuntu有了全面而深入的理解。无论是日常开发、系统管理还是学习Linux,WSL Ubuntu都将成为您Windows工作流中不可或缺的一部分。

wsl启动ubuntu