有关适用于 Linux 的 Windows 子系统的常见问题解答

常规

什么是适用于 Linux 的 Windows 子系统 (WSL)?

适用于 Linux 的 Windows 子系统 (WSL) 是 Windows 操作系统的一项功能,通过它可以直接在 Windows 上运行 Linux 文件系统以及 Linux 命令行工具和 GUI 应用,并可以运行传统的 Windows 桌面和应用。

请参阅“关于”页了解更多详细信息。

WSL 面向哪些用户?

这主要是一种面向开发人员的工具,尤其是 Web 开发人员,他们从事开源项目,或者部署到 Linux 服务器环境。 WSL 适用于任何喜欢使用 Bash、常见 Linux 工具(sedawk 等) 和 Linux 优先框架(Ruby、Python 等), 但也喜欢使用 Windows 生产力工具的人

WSL 有哪些作用?

通过 WSL,可使用选择的发行版(Ubuntu、Debian、OpenSUSE、Kali、Alpine 等)在 Bash shell 中运行 Linux。 使用 Bash 可以运行命令行 Linux 工具和应用。 例如,键入 lsb_release -a 并按 Enter 后,将会看到当前正在运行的 Linux 分发版的详细信息:

分发版详细信息的屏幕截图

还可以从 Linux Bash shell 内部访问本地计算机的文件系统 - 你会发现本地驱动器装载在 /mnt 文件夹下。 例如,你的 C: 驱动器装载在 /mnt/c 下:

装载的 C 驱动器的屏幕截图

你能否描述一下整合了 WSL 的典型开发工作流?

WSL 面向开发人员受众,旨在用作内部开发流程的一部分。 假设何石要创建一个 CI/CD 管道(持续集成和持续交付),而且他想先在本地计算机(笔记本电脑)上测试它,然后再将它部署到云中。 何石可启用 WSL(和 WSL 2 来提高速度和性能),然后在本地(在笔记本电脑上)将正版 Linux Ubuntu 实例与所需的任何 Bash 命令和功能搭配使用。 在本地验证开发管道后,何石可将该 CI/CD 管道向上推送到云中(也就是 Azure 中),方法是将它放入 Docker 容器并将该容器推送到云实例,使其在生产就绪的 Ubuntu VM 上运行。

什么是 Bash?

Bash 是一个流行的基于文本的 shell,并且是一种命令语言。 它是包含在 Ubuntu、其他 Linux 分发版和 macOS 中的默认 shell。 用户在 shell 中键入命令,即可执行脚本和/或运行命令与工具来完成许多任务。

WSL 的工作原理是怎样的?

请查看 Windows 命令行博客上的这篇文章:深入探究 WSL 如何允许 Windows 访问 Linux 文件,其中详细介绍了基础技术。

在 VM 中为何要使用 WSL 而不是 Linux?

WSL 所需的资源(CPU、内存和存储)少于完整虚拟机所需的资源。 WSL 还允许结合 Windows 命令行、桌面和 Store 应用运行 Linux 命令行工具与应用,并允许从 Linux 内部访问 Windows 文件。 这样,你便可以根据需要针对相同的文件集使用 Windows 应用和 Linux 命令行工具。

举例而言,我为何要在 Linux(而不是 Windows)上使用 Ruby?

生成某些跨平台工具时,已假设其运行环境的行为类似于 Linux。 例如,某些工具假设它们能够访问很长的文件路径,或者特定的文件/文件夹存在。 这通常会在 Windows 上导致出现问题,因为 Windows 的行为通常与 Linux 不同。

许多语言(例如 Ruby 和 Node.js)通常已移植到 Windows,并且可以在 Windows 上非常顺利地运行。 但是,并非所有 Ruby Gem 或 Node/NPM 库所有者都会移植其库来支持 Windows,而许多库都与 Linux 之间存在特定的依赖关系。 这经常导致使用此类工具和库生成的系统在 Windows 上遭遇到生成错误(有时是运行时错误),或者出现不需要的行为。

这只是导致许多人要求 Microsoft 改进 Windows 命令行工具的一部分问题,也正是这些问题促使我们与 Canonical 展开合作,使得本机 Bash 和 Linux 命令行工具能够在 Windows 上运行。

这对于 PowerShell 而言意味着什么?

处理 OSS 项目时,在很多情况下,从 PowerShell 提示符切换到 Bash 极其有用。 Bash 支持是互补性的,可以增强 Windows 上的命令行的价值,使 PowerShell 和 PowerShell 社区能够利用其他流行技术。

请参阅 PowerShell 团队博客了解详细信息 -- Bash for Windows:Why it’s awesome and what it means for PowerShell(为何它如此出色,它对 PowerShell 而言意味着什么)

WSL 支持哪些处理器?

WSL 支持 x64 和 ARM CPU。

如何访问我的 C: 驱动器?

系统会自动为本地计算机上的硬盘驱动器创建装入点,通过这些装入点可以轻松访问 Windows 文件系统。

/mnt/驱动器号>/

示例用法:运行 cd /mnt/c 访问 c:\

如何设置 Git 凭据管理器? (如何在 WSL 中使用我的 Windows Git 权限?)

请参阅开始在适用于 Linux 的 Windows 子系统上使用 Git 这一教程,其中有一个关于设置 Git 凭据管理器和在 Windows 凭据管理器中存储身份验证令牌的部分。

如何在 Linux 应用中使用 Windows 文件?

WSL 的优势之一是可以通过 Windows 和 Linux 应用或工具访问文件。

WSL 将计算机的固定驱动器装载到 Linux 分发版中的 /mnt/<drive> 文件夹下。 例如,你的 C: 驱动器装载在 /mnt/c/

例如,使用装载的驱动器,可以使用 C:\dev\myproj\VS Code 编辑 C:\dev\myproj\ 中的代码,并通过 访问相同的文件,在 Linux 中生成/测试该代码。

有关详细信息,请参阅跨 Windows 和 Linux 文件系统工作一文。

Linux 驱动器中的文件是否不同于装载的 Windows 驱动器中的文件?

  1. Linux 根目录(即 /)下的文件由符合 Linux 行为的 WSL 控制,控制的内容和操作包括但不限于:

    • 包含无效 Windows 文件名字符的文件
    • 为非管理员用户创建的符号链接
    • 通过 chmod 和 chown 更改文件属性
    • 文件/文件夹的区分大小写状态
  2. 装载的驱动器中的文件由 Windows 控制,并具有以下行为:

    • 支持区分大小写
    • 设置的所有权限可以最好地反映 Windows 权限

如何卸载 WSL 分发版?

要从 WSL 中删除一个发行版并删除与该 Linux 发行版相关的所有数据,请运行 ,其中 <distroName> 是你的 Linux 发行版的名称,可从 wsl -l 命令的列表中查看发行版的名称。

此外,可以像卸载任何其他应用商店应用程序一样,在计算机上卸载 Linux 发行版应用。

若要详细了解 wsl 命令,请参阅 WSL 的基本命令一文。

如何运行 OpenSSH 服务器?

OpenSSH 作为可选功能随 Windows 一起提供。 请参阅安装 OpenSSH 文档。在 WSL 中运行 OpenSSH 需要拥有 Windows 中的管理员特权。 若要运行 OpenSSH 服务器,请以管理员身份运行 WSL 发行版(如 Ubuntu)或 Windows 终端。 有几个资源涵盖了使用 WSL 的 SSH 场景。 请查看 Scott Hanselman 的博客文章:如何从 Linux 或 Windows 或任何位置通过 SSH 连接到 Windows 10 计算机如何从外部计算机通过 SSH 连接到 Windows 10 上的 WSL2从外部机器通过 SSH 连接到 Windows 10 上的 Bash 和 WSL2 的简单方法,以及如何使用 Windows 10 的内置 OpenSSH 自动通过 SSH 连接到远程 Linux 计算机

如何更改 WSL 的显示语言?

WSL 安装会尝试自动更改 Ubuntu 区域设置,使之与 Windows 安装的区域设置相匹配。 如果你不希望出现此行为,可以在安装完成后,运行此命令来更改 Ubuntu 区域设置。 必须重启 WSL 发行版才能使此更改生效。

以下示例将区域设置更改为 en-US:

sudo update-locale LANG=en_US.UTF8

为何无法从 WSL 进行 Internet 访问?

某些用户已报告特定的防火墙应用程序会阻止 WSL 中的 Internet 访问的问题。 报告的防火墙包括:

  1. Kaspersky
  2. AVG
  3. Avast
  4. Symantec Endpoint Protection
  5. F-Secure

在某些情况下,关闭防火墙即可进行访问。 在某些情况下,只需让安装的防火墙在表面上阻止访问。

如何从 Windows 中的 WSL 访问某个端口?

WSL 共享 Windows 的 IP 地址,因为它在 Windows 上运行。 因此,你可以访问 localhost 上的任何端口。例如,如果你在端口 1234 上提供 Web 内容,可以在 Windows 浏览器中输入 https://localhost:1234 。 有关详细信息,请参阅访问网络应用程序

如何备份我的 WSL 发行版,或者如何将它们从一个驱动器移到另一个驱动器?

Windows 版本 1809 和更高版本中提供了备份或移动发行版的最佳方式:执行 export/import 命令。 可以使用 wsl --export 命令将整个分发版导出到 tarball。 然后,可以使用 wsl --import 命令(该命令可以指定一个新的驱动器位置,以用于导入)将此发行版导入回 WSL,从而可以备份和保存 WSL 发行版的状态或者移动 WSL 发行版。

请注意,用于备份 AppData 文件夹中的文件的传统备份服务(例如 Windows 备份)不会损坏 Linux 文件。

WSL 2

WSL 2 是否使用 Hyper-V? 它是否可用于 Windows 10 家庭版?

WSL 2 在可使用 WSL 的所有桌面 SKU 上都可使用,包括 Windows 10 家庭版。

最新版本的 WSL 使用 Hyper-V 体系结构来实现其虚拟化。 此体系结构将在“虚拟机平台”可选组件中提供。 此可选组件在所有 SKU 上都将可用。 当我们更深入地了解 WSL 2 版本时,可以看到有关此体验的更多详细信息。

WSL 1 将发生什么情况? 它是否将被弃用?

我们目前没有计划弃用 WSL 1。 你可以并行运行 WSL 1 和 WSL 2 发行版,还可以随时升级和降级任何发行版。 将 WSL 2 添加为新的体系结构为 WSL 团队提供了一个更好的平台来提供一些特性,使 WSL 成为在 Windows 中运行 Linux 环境的一种令人惊叹的方式。

我是否能够运行 WSL 2 和其他第三方虚拟化工具(例如 VMware 或 VirtualBox)?

当使用 Hyper-V 时,某些第三方应用程序无法工作,这意味着当启用了 WSL 2 时,这些应用程序(如 VMware 和 VirtualBox)将无法运行。 但最近,VirtualBox 和 VMware 都发布了支持 Hyper-V 和 WSL2 的版本。 在此处了解有关 VirtualBox 的更改的详细信息,并在此处了解有关 VMware 的更改的详细信息。 若要解决问题,请查看 GitHub 上 WSL 存储库中的 VirtualBox 问题讨论

我们一直在开发解决方案以支持 Hyper-V 的第三方集成。 例如,我们向第三方虚拟化提供商公开了一组称为虚拟机监控程序平台的 API,可以用来使其软件与 Hyper-V 兼容。 这使得应用程序可以将 Hyper-V 体系结构用于其模拟,例如,现在都与 Hyper-V 兼容的 Google 安卓模拟器和 VirtualBox 6 及更高版本。

有关 VirtualBox 6.1 的 WSL 2 问题的更多背景和讨论,请参阅 WSL 问题存储库。

*如果要查找 Windows 10 虚拟机,可在 Windows 开发人员中心下载 VMWare、Hyper-V、VirtualBox 和 Parallels VM。

是否可以在 WSL 2 中访问 GPU? 是否计划增加硬件支持?

我们发布了相关支持,可在 WSL 2 发行版内访问 GPU! 这意味着,在涉及到大数据集时,现在可以更轻松地将 WSL 用于机器学习、人工智能和数据科学应用场景。 请查看 GPU 支持入门教程。 从现在开始,WSL 2 不包括串行支持和 USB 设备支持。 我们正在研究添加这些功能的最佳方法。

WSL 2 是否能够使用网络应用程序?

是的,通常情况下,网络应用程序会更快,并且工作性能更好,因为我们有完全的系统调用兼容性。 但是,新的体系结构使用虚拟化的网络组件。 这意味着,在初始预览版本中,WSL 2 的行为将更类似于虚拟机,例如:WSL 2 将具有与主机不同的 IP 地址。 我们正致力于让用户感觉 WSL 2 与 WSL 1 一样,这包括改进我们的网络情况。

是否可以在虚拟机中运行 WSL 2?

可以! 你需要确保虚拟机已启用嵌套虚拟化。 可以在父 Hyper-V 主机中在 PowerShell 窗口中使用管理员权限运行以下命令来启用此功能:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

请确保将“<VMName>”替换为你的虚拟机的名称。

是否可以在 WSL 2 中使用 wsl.conf?

WSL 2 支持 WSL 1 使用的同一 WSL 文件。 这意味着,你在 WSL 1 发行版中设置的任何配置选项(例如自动装载 Windows 驱动器、启用或禁用互操作、更改将装载 Windows 驱动器的目录等)在 WSL 2 中都可以工作。 还可以在发行版管理页面中详细了解 WSL 中的配置选项。 若要详细了解对装载驱动器、磁盘、设备或虚拟硬盘 (VHD) 的支持,请参阅在 WSL 2 中装载 Linux 磁盘一文。

可以在何处提供反馈?

借助 WSL 产品存储库问题,可进行以下操作:

  • 搜索现有问题,查看是否存在任何与遇到的问题相关的问题。 请注意,在搜索栏中可以删除“is:open”,以便在搜索中包括已解决的问题。 请考虑对任何希望优先处理的未解决问题发表评论或点赞。
  • 提交新问题。 如果发现 WSL 存在问题,并且该问题不像是已有的问题,你可以选择绿色的“新问题”按钮,然后选择“WSL - Bug 报告” 。 需要在其中提供以下信息:问题的标题、Windows 内部版本号(运行 cmd.exe /c ver 查看当前的内部版本号)、运行的是 WSL 1 还是 2、当前的 Linux 内核版本号(运行 wsl.exe --statuscat /proc/version)、发行版的版本号(运行 lsb_release -r)、涉及的任何其他软件版本、重现步骤、预期行为、实际行为和诊断日志(如果可用且适当)。 有关详细信息,请参阅参与 WSL 工作
  • 提交功能请求,方法是选择绿色的“新问题”按钮,然后选择“功能请求” 。 需要回答几个描述你的请求的问题。

也可执行以下操作:

如果想要随时了解最新的 WSL 新闻,可以访问: