适用于 Linux 的 Windows 子系统和 Windows 上的 Ubuntu 上的 bash 有什么区别?

Mil*_*ill 15 linux bash ubuntu windows-10

  1. 它们的功能有什么区别?其中之一更兼容还是其他什么?为什么微软要开发这两个看起来相同的东西?
  2. 文件位置。Windows 上 Ubuntu 上的 bash 文件位于 . C:\Users\<username>\AppData\Local\lxss,但是 WSL 的文件在哪里?有一个答案声称他们在C:\Users\<username>\AppData\Local\Lxss\rootfs,但我发现它是空的。
  3. WSL 有“.exe”吗?对于 Windows 上 Ubuntu 上的 bash,它是"C:\Windows\sysnative\bash.exe". WSL 有没有类似的东西,所以我可以在 Visual Studio Code 中使用它?

mur*_*uru 15

“Bash on Ubuntu on Windows”基于适用于 Linux 的 Windows 子系统。WSL 是 Windows NT 内核上 Linux 系统调用的一种实现,它允许您运行未经修改的 Linux 可执行文件(就像 Wine 对 Ubuntu 所做的那样)。“Bash on Ubuntu on Windows”只是 WSL 的一种应用。其他 Linux 发行版,如 openSUSE 或 Fedora 要么可用,要么很快可用

WSL 有“exe”。原来有bash.exe,后来来了wsl.exe,现在有了ubuntu.exeopenSUSE-42.exe。估计fedora.exe很快就会出现。来自 MSDN 帖子Manage multiple Linux Distributions in WSL

可以通过三种方式启动和运行 WSL:

  • wsl.exe 或者 bash.exe
  • wsl -c [command] 或者 bash -c [command]
  • [distro], 即, ubuntu-- 这与从 Windows 菜单启动已安装的应用程序相同。

在前两种情况下,WSL 必须选择要运行的发行版 - 默认发行版。如果您没有明确设置默认值,它将是第一个安装的。

WSL 的文件在哪里取决于发行版,现在它们是从商店安装的应用程序:

您通过商店安装的每个发行版都安装到该应用程序的 appdata 目录中。例如: C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState

  • 有趣的是,运行`bash.exe` 或(更准确地说,`C:\Windows\System32\bash.exe`)仍然“有效”,但是它提供了与`[ubuntu|&lt;distro&gt;] 不同的环境.exe`,这使事情复杂化了很多。坦率地说,我不知道为什么 `bash.exe` 仍然存在,或者为什么它不只是路由到首选发行版。**编辑:** 使用 cmd 中的 `wslconfig`。 (6认同)
  • 这也是微软在引入多个 WSL 发行版后就停止使用“Windows 上的 Ubuntu 上的 Bash”的原因之一。该功能正式称为 WSL,代表“Windows 子系统 Linux”。`Bash on Ubuntu on Windows` 来自在 Windows 上的 Ubuntu 内核中运行 (Linux) bash 脚本的能力。 (2认同)