Leo*_*313 31 windows-subsystem-for-linux
大多数人都知道,在 Microsoft Store 中,有Ubuntu 的三个版本。这意味着在 Windows 上我可以模拟 Ubuntu 并直接在 Windows 上使用 Ubuntu 命令行。
问题很简单:我不能从 Windows 中模拟的 Ubuntu 命令行执行哪些操作,而我可以在基于 Linux 的 Ubuntu 上执行此操作?下载这个 Ubuntu 应用程序、安装它并使用它而不是真正的操作系统有用吗?是否可以安装所有开发库?我可以编写(或不编写)设备驱动程序吗?换句话说:限制是什么?
Ubuntu-on-Windows 缺少哪些基于 Ubuntu Linux 的功能?
欢迎提供新的答案:我知道每个软件都在通过改进特性和功能而不断变化!
小智 21
在适用于 Linux 的 Windows 10 子系统下运行的 Ubuntu 不是完整的发行版。事实上,它根本不是 Linux——它没有 Linux 内核。所以你不能测试或尝试内核扩展,包括驱动程序,因为你没有运行 Linux。
如果你想做这样的事情,要么在虚拟机中安装 Ubuntu——Win10 包括 Hyper-V,但就我个人而言,我更喜欢 VirtualBox,它是免费的——或者双启动你的机器,在裸机上运行 Ubuntu。你几乎肯定会发现后者比运行 Windows 更快——我在我所有的机器上都这样做。部分原因是您在运行 Windows 时需要防病毒保护,这会降低性能,尤其是磁盘性能。因为你需要它,Win10 包括内置的防病毒软件。
使用 Linux,您不需要任何,因此对性能的影响较小。
Leo*_*313 13
上述每个答案都有许多有用的信息。我在这里总结了他们每个人的主要概念。
2020 年 4 月更新:此处解释了使用 WSL 的利弊。很明显为什么拥有真正的 Linux 内核是一个优势!!此外,这里有将 WSL 2 安装到 Windows 10 的指南。如果您已经安装了 WSL 1 并且想要传递到 WSL 2,您可以在此处找到执行此操作的说明。
2019 年 8 月更新:发布了新的WSL 2(阅读此处了解更多信息)。似乎您可以使用真正的 Linux 内核和 Linux 文件系统。老实说,到目前为止我还没有尝试过新版本(它在我的 TODO 列表中)。
2019 年 5 月更新:正如最近的一个答案中所指出的,WSL 正在通过使用真正的 Linux 内核并提供更多选项来发展。我已经阅读了这份文件,如果得到证实,这将是向前迈出的一大步。在这里您可以找到一篇关于“W10 上的真实 Linux 内核”主题的好文章
回答 2018 年 7 月 总结: “Windows 上的 Ubuntu 是 Linux 兼容模式下 Windows 内核之上的完整 Ubuntu 用户空间”,正如其中一条评论所指出的那样。
我不能做什么:
我可以做什么:
附加信息:
这些应用程序是免费的,可从 Windows 应用商店下载,您可以在此处找到安装和使用说明。
小智 7
在适用于 Linux 的 Windows 子系统 (WSL) 下,您无法轻松完成的一件事是运行 Linux GUI 应用程序。
为此,您必须安装不受支持的 X11 服务器,例如 VcXsrv 或 Xming。
启用 WSL 相对简单。作为 Linux 命令行用户空间,它似乎相当不错。
第一次写这个问题时,WSL2 和 WSLg 都还没有发布,所以今天的答案肯定与几年前不同。其中一些信息已在此处的答案中更新,但我觉得此处的其他答案中围绕实际的“限制”缺少很多内容。
我是 WSL 的忠实粉丝,但我首先承认 WSL 存在相当多的限制。幸运的是,其中大多数都有解决方法,但它们确实让大多数新用户措手不及。
首先,让我列出 WSL 上的 Ubuntu 与虚拟机或物理机上的传统 Ubuntu 安装之间的一些“差异”。我将在下面的“限制”部分中引用其中的一些内容:
WSL1 作为“系统调用转换层”运行,尝试将 Linux 内核 API 转换为 Windows 内核 API。
在 WSL2 中运行的 Ubuntu 更像是一个容器。它在托管虚拟机(您无法访问)中的真实 Linux 内核下运行。Ubuntu 正在该虚拟机的命名空间内运行。它本身并不直接在虚拟机中运行。
WSL 有自己的初始化系统。它的主要工作(除了一些“正常的”Linux init 任务之外)是建立 Linux 和 Windows 之间的互操作性。例如,它:
该 init 在 Ubuntu WSL 实例/命名空间/容器内以 PID 1 的身份运行,除非您启用 Systemd 支持,在这种情况下 Systemd 将变为 PID 1。
启动 WSL 与启动虚拟机或物理机不同。Ubuntu 在启动过程中通常(通常通过 Systemd)执行的许多任务要么是 WSL 不需要的,要么实际上对其正常操作有害。
启动 WSL 时没有“登录”的概念。WSL 检测默认用户并自动启动在/etc/passwd. 不需要或不需要密码。
考虑到这一点,我可以想到以下一些限制:
初始化/系统:
开箱即用时,WSL 仍然没有启用 Systemd,但它是可用的,并且现在可以在 Windows 10 和 Windows 11 上运行。您在执行各种任务(例如安装 Docker)时遇到的许多文档、博客文章等将假设 Systemd 已启用,因此您需要确保它已启用,或者学习如何在没有它的情况下进行调整。
本节中还有很多其他与 Systemd 相关的限制,但根据最近的 WSL 改进,它们已被删除。
访问物理硬件:在 WSL 上,您对硬件的访问权限有限:
串行端口: WSL1 可以在某种程度上访问串行端口,但仅限于系统调用实现。也就是说,可以在 WSL1 上运行一些使用 WSL2 上无法运行的串行端口的软件。
物理驱动器: 旧版本的 WSL 缺乏访问物理驱动器的功能,但最近的 WSL 版本现在确实包含安装物理驱动器的功能,只要 Windows 未使用它们即可。
但是,除非使用特殊内核,否则不直接支持 USB 大容量存储设备。
最常见的情况之一是在运行桌面环境中。您可以在 Ask Ubuntu 中找到围绕此主题的几个问题和答案。
GPU: 在最新的 Windows 10 版本中,可以使用直通库和Windows GPU 驱动程序来执行某些GPU 计算任务。
在 Windows 11 下,添加了一些额外的 GPU 计算任务。
USB:无法直接访问 USB 设备。但是,在 WSL2 下(在 Windows 10 和 11 中),可以使用 USB/IP从 Windows 共享它们,然后在 Ubuntu 中附加它们。
但请注意,库存 WSL2 内核不包含大多数 USB 设备的设备驱动程序。例如,甚至不包括基本的媒体捕获(即相机)驱动程序。但是,您可以为 WSL2 构建自己的内核并包含必要的驱动程序。但请注意,目前,我(和其他人)尚未成功在 WSL 中从 USB 摄像头捕获视频。请参阅Stack Overflow 上的此问题了解最新进展。
Ubuntu 引导设备: WSL 中 Ubuntu 的主引导虚拟磁盘/分区必须格式化为 ext4。尽管 WSL2 内核支持其他文件系统(例如 btrfs),但它们只能用于辅助分区。
依赖身份验证/登录的任务:由于上述 (6),某些依赖身份验证的任务在 WSL 上的行为会有所不同。例如,通常您会进行编辑/etc/security/limits.conf以提高用户的限制(例如打开文件的数量、优先级/nice 等)。然而,这是一个在用户登录期间由 PAM(“可插入身份验证模块”)处理的文件。如果没有经过身份验证的登录,则永远不会处理此文件。如果您遇到此问题,请参阅此答案中的解决方法。
网络:虽然这可能属于“硬件”部分,但它可能值得在这里单独标注。WSL2 的网络当前在 Hyper-V 内的虚拟交换机下运行,并且该交换机与网络的其余部分进行 NAT。这意味着您无法在不付出额外努力的情况下从本地网络上的其他设备(计算机、电话等)轻松访问 WSL2 中的网络服务。
最简单的解决方法是尽可能使用 WSL1。还有多种其他解决方法。
VPN:同样,当连接到某些禁用本地流量的 VPN 时,WSL2 将丢失网络,因为它是“本地”(但不是本地主机)网络流量。
笔测试: 某些渗透测试任务根本无法在 WSL1(因为系统调用转换有限)或 WSL2(因为硬件已虚拟化)下工作。这里有两个突出的领域:
无法直接访问wifi接口(仅是虚拟以太网设备),因此WLAN密码破解技术将不起作用。作为解决方法,应该可以安装辅助 USB WiFi 加密狗,通过 USB/IP 传递它(如上所述),并在 WSL2 中使用它。请注意,您需要使用适合网络适配器的驱动程序构建自己的内核。
由于 WSL2 位于与 Windows 主机(以及网络的其余部分)不同的第 2 层网络上,因此无法进行任何第 2 层扫描。上述 USB/IP 解决方法也适用于此。
性能:总体来说,WSL2 下的性能还是不错的。但是,有一些注意事项:
WSL1: WSL1 在其“pseudo-ext4/overlay”文件系统上的性能略有下降。然而,WSL2 在 ext4 文件系统上实现了接近本机的性能。
WSL2:访问 Windows 驱动器上的文件(尤其是多个小文件)时,WSL2 的性能会受到巨大影响。在 NTFS 驱动器上检查 WSL2 内核需要 10 多分钟(否则大约需要 30 秒)。强烈建议您将项目文件保留在 ext4 文件系统上或在访问 Windows 驱动器时使用 WSL1。
我保留 WSL1 实例主要是为了在需要时使用 Windows 驱动器。
我确信我会记得更多(或者也许有人会在评论中指出它们),如果需要的话我会添加它们。
同样,根据提到的解决方法,对于大多数 WSL 用户来说,其中大多数都不是严重的障碍。然而,它们是我在 Stack Exchange 站点上回答的许多问题的根源。
| 归档时间: |
|
| 查看次数: |
23852 次 |
| 最近记录: |