AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 755950
Accepted
Maaverik
Maaverik
Asked: 2016-04-11 08:02:54 +0800 CST2016-04-11 08:02:54 +0800 CST 2016-04-11 08:02:54 +0800 CST

新的“Windows 10 上的 Bash”如何真正发挥作用?

  • 772

我在网上读到 Ubuntu 和 Bash 即将进入 Windows 10。我还读到它不是在 Windows 之上运行的模拟器或虚拟机,而是其他东西。那么这一切究竟是如何结合在一起的呢?它真的会像 Ubuntu 中的 Bash 一样稳定和用户友好吗?

windows-subsystem-for-linux
  • 4 4 个回答
  • 10670 Views

4 个回答

  • Voted
  1. Best Answer
    Jo-Erlend Schinstad
    2016-04-11T10:04:45+08:002016-04-11T10:04:45+08:00

    它不是模拟器,就像 WINE 不是模拟器一样。也就是说,他们在 Windows 内核中添加了 Linux 内核接口。当应用程序尝试使用 Linux 内核时,它会被转换为 Windows 本机系统调用,并且来自内核的任何响应都会被转换为本机 Linux 响应。所以应用程序认为它在 Linux 内核上运行,因此不需要修改。

    但是,这纯粹是一种 Windows 技术,因此如果您需要更多详细信息,您应该从 Windows 支持小组或其他机构获得它们。Windows 仍然是一个专有操作系统,所以我希望细节有限。

    它真的会像 ubuntu 中的 bash 一样稳定且用户友好吗?

    从 Ubuntu 的角度来看,我们只是在原始 Linux 内核上运行,相当于在原始 X 服务器上运行现代桌面。如果您只使用假内核支持的功能,那么它将是稳定且用户友好的。如果您使用不受支持的功能,它将不稳定。

    它不会很快接近完整的 Ubuntu 体验。

    • 21
  2. Rich Turner
    2016-08-24T12:34:06+08:002016-08-24T12:34:06+08:00

    对于那些对 Linux 的 Windows 子系统 (WSL) 如何工作以及它如何运行本机 Linux ELF-64 二进制文件感到好奇的人,我们发布了一系列博客文章和随附的视频,解释 WSL 架构、进程、系统调用和文件系统支持.

    Scott Hanselman 还做了一个很棒的演练视频,介绍了安装过程以及如何在 Windows 上的 Ubuntu 上配置 Bash:

    高温高压

    • 21
  3. NotTheDr01ds
    2021-09-03T13:06:38+08:002021-09-03T13:06:38+08:00

    我今天遇到了一个很老的问题,当时有人问这里某处是否存在一般的“什么是 WSL”问题。这可能是这里最接近(也是第一个)这种性质的。

    但我确实相信它需要在 2021 年在这里得到更新的答案才能相关。

    所以一些历史让我们了解最新情况:

    • 当这个问题被问到时,并且该功能最初宣布时,它被称为“ Windows 上的 Ubuntu 上的 Bash和 Linux 的底层 Windows 子系统”。Canonical 和 Microsoft 密切合作开发该功能。

      @Jo-ErlendSchinstad 上面的出色回答说明了原始 WSL(现在称为“WSL1”)通过将 Linux 内核/API 调用“转换”为(紧密)相应的 Windows API/内核调用来工作。

      WSL 团队的@RichTurner(我对他和他们的工作深表感谢)当时提供了一些包含更多信息的链接。恕我直言,他真正感兴趣的是 WSL 允许直接在 Linux shell 中执行Windows二进制文件(通常是或 等)中的任何命令,将其通过管道传输到 Linux (或等),并显示结果。不幸的是,我在这里提出了可怕的过度简化的例子,这些例子并没有表现出这个特性真正的用处。.exeipconfig.exepowershell.exegrepawk

      您甚至可以从 WSL/Linux shell启动Windows图形应用程序。最近,Microsoft 已使用此功能从 WSL 中提供集成的 Visual Studio Code 启动。您可以code .在 (Windows) VSCode 中打开当前 (Linux) 目录。或者code ~/.bashrc编辑您的启动配置。还有更多。

      默认情况下,WSL 会自动挂载任何 Windows 驱动器/mnt/c /mnt/d,等等。因此您可以使用 Linux 中的“Windows”文件。(但不是,直到后来,反过来。)

      当时,它是启动 WSL 和进入 Bash shell 的主要方式bash.exe。ubuntu.exe在这一点上(好吧,在过去的几年里),那些已经降级为“历史”命令(根据微软文档),推荐的方法是更灵活的wsl.exe命令。

    • 历史课的另一个注意事项 - 一个混淆点(尤其是在 Stack 网站上发布的问题中)是 Canonical 将此功能称为“Ubuntu 终端”(即使在今天仍然可用的文档中),并且......嗯......当人们将“Ubuntu”称为“终端”时,这里的一些人会非常沮丧。只是不要责怪您看到使用此术语的用户。这是,恕我直言,Canonical 的错误选择是错误的。

      也许“终端”绰号是为了通知用户 WSL 是“仅限命令行”。没有内置的 X 服务器,因此无法在 WSL 中开箱即用地运行图形 Linux 应用程序。也就是说,可以在 Windows 中安装第三方 X 服务器。

      一个相关的“术语争议”是,如今,Ubuntu 作为“应用程序”从 Microsoft Store 安装。因此,如果您看到有人称它为“Ubuntu 应用程序”,请不要感到惊讶,即使您和我都知道它是“操作系统/OS”。;-)

    • 随着时间的推移,在最初的发布之后,除了 Ubuntu 之外,更多的发行版开始可用。而且,当然,人们意识到您不仅限于 Bash(我当时是 Zsh 用户,现在是 Fish 用户)。因此,这个问题最初询问的功能本身现在真正被称为“Linux 的 Windows 子系统”(WSL),其中安装了“Ubuntu”发行版。

      所以现在谈论 Windows 上的 Ubuntu Bash 有点用词不当,但你仍然看到它被使用,因为它是原始名称。即使是最流行的 WSL subreddit 仍然是历史上命名的r/bashonubuntuonwindows,尽管它通常涵盖了所有 WSL(任何发行版,任何 shell)。

    • 一般来说,WSL 的另一个进步是 WSL 文件系统在伪网络共享中的暴露。因此,例如,“Ubuntu”发行版的文件可以在 Windows 中通过\\wsl$\Ubuntu. 这很好,但它有时会混淆新用户,他们可能会~/.bashrc在 Windows 中使用记事本进行编辑(也称为“损坏”),这会创建Windows行尾 (CRLF) 而不是 Unix/Linux 标准的 LF-only。

    • 我敢肯定,在此期间,我正在掩饰其中的一些发展,但 WSL 的下一个重要里程碑发生在团队准备并(在 2020 年)发布“WSL2”时。 这是一个很好的差异比较。

      最大的区别在于,与最初的 WSL(现在的 WSL1)不同,WSL2确实使用真正的 Linux 内核虚拟化运行(可在此处获得源代码)。这开启了许多附加功能,但最大的功能之一是直接在 WSL2 中运行容器(例如 Docker)的能力。

      虽然内核是真实的,但大多数硬件(例如网络接口)是虚拟化的。因此,虽然您可以执行创建 TAP/TUN 网络设备之类的操作,但您需要将这些设备连接到虚拟 NIC。例如,您将无法在 WSL2 中使用brctl.

      WSL2 的速度提升也相当可观,尽管我个人从未在与“WSL2”相同的硬件上对“真正的 Ubuntu”进行任何直接比较。因为 WSL2 在虚拟 HDD ( ext4.vhdx) 上的 ext4 文件系统上运行,所以在该文件系统上的文件操作特别高效。

      也就是说,/mnt/c在 WSL2 下使用挂载类型(使用 9P 协议)比 WSL1慢得多。因此,建议将您要在WSL2 中编辑的所有文件保留。要么,要么保留 WSL1 安装的副本(这很容易)来完成 Windows 文件系统工作。

    • 目前,Windows 11 中计划的“下一件大事”是WSLg,它允许执行 Linux 图形应用程序。

      Windows 11 的 WSL 目前也计划有:

      • 更轻松地支持 WSL 安装和升级 ( wsl --install)
      • 能够在实例中安装额外的物理和虚拟驱动器
      • GPU 支持,因此 CUDA 类型的应用程序可以在 WSL 中运行。

    那之后呢?我自己也不知道,但我个人希望得到某种程度的 Systemd 支持。WSL 目前使用它自己的/init来设置 Windows 和 Linux 之间的互操作,例如我之前提到的那些网络接口和挂载。不幸的是,相当多的 Linux 应用程序(尤其是文档)假定 Systemd 支持。也就是说,如果您了解自己要做什么,则完全有可能解决缺少 Systemd 的问题。但它确实让很多新的 WSL 用户陷入了困境。

    • 4
  4. WinEunuuchs2Unix
    2018-02-07T17:49:21+08:002018-02-07T17:49:21+08:00

    bash 部分在 WSL 中运行良好。

    内核部分不存在。例如,/sys/class/backlight/intel_backlight/brightness您无法访问设置屏幕亮度。如果您不介意 COBOL 样式的非常长的字段名称,则可以轻松调用 Powershell 命令来执行此操作。可以从 bash 中直接调用 MS Powershell。因此,您可以说强大的 Windows 功能现在已内置到 bash 中。同样,我相信 MS Powershell 可以调用 bash。因此,如果真正的 Powershell 可以访问诸如grep、awk、head、tail等函数。

    geditUbuntu 桌面 ( ,nautilus等)的 GUI仅在安装VcXsrv或类似的东西后才能工作。

    在 Linux 和 Windows WSL 之间共享文件设置起来很复杂。在共享 WSL+Linux NTFS 文件夹之间移动文件时,由于我的无知或软件缺陷,我有一些文件权限“奇怪”。

    WSL 的速度比 Ubuntu 慢很多。运行时,您实际上可以逐个字符地看到屏幕绘制cal或toilet:windows bash 和 cygwin 之间有什么区别?

    我认为 WSL 是一个很好的产品,我喜欢在双引导进入 Windows-World 时对其进行修改。由于 MS 缺乏资金,它永远不会成为一个伟大的产品,而且他们真的不想拥有一个伟大的 Linux Free-Ware Distro。如果你有足够的内存,你可能会更喜欢虚拟机。直到 2019 年年中左右,我自己只有 8 GB 和 RAM 价格上涨,我很乐意坚持使用 WSL 并暂时放弃 32 GB RAM 升级。

    我访问了一些 MS 论坛,我必须说 Rich Turner 和他的 WSL 团队成员是我见过的最好的专业人士。

    • 3

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve