终端命令的非 GNU 版本有哪些?

eyh*_*394 21 linux version terminal gnu command

我认为 GNU 是(唯一)其开源代码为 Linux 发行版提供支持的基本工具的供应商。然而,在浏览 unix.se 时,我看到一些问题明确指出它们正在处理 GNU ,例如有关解析 GNU 的安全性的问题ls。这一定意味着lsGNU 没有提供某些版本,对吧?这些版本是什么,谁制作的以及在哪里可以找到它们?

Aus*_*arn 41

采用更直接的方法,以下是 GNU 实用程序之外的主要选项:

\n
    \n
  • BSD 用户区实用程序:起源于 Berkely Unix 的早期版本,其中它们只是具有一些额外功能的常规 Unix 工具,到 SVR4 时,它们已经发生了显着差异。如今,FreeBSDOpenBSDNetBSDDragonflyBSDMINIX 3(使用 NetBSD 用户区)和 macOS(使用 FreeBSD 用户区,进行一些修改)以各种形式使用,以及 PS3 上的系统软件(复杂的衍生版本) FreeBSD 和 NetBSD)、PS4(FreeBSD 的衍生品),可能还有 PS5 和 PS Vita,以及相当有趣的Chimera Linux
  • \n
  • Busybox:设计简约且大部分符合 POSIX 标准。默认情况下由Alpine Linux使用(因此在大量Docker 镜像中,因为 Alpine 是它们的流行基础),并被许多运行 Linux 的嵌入式系统用作专有用户区,包括绝大多数使用Linux 作为他们的操作系统。从安装数量来看,这是类 UNIX 系统上排名前几的用户区之一,主要是由于嵌入式使用。
  • \n
  • Toybox:与 Busybox 类似的概念,但更简约(并且在一些地方更符合 POSIX)。源于有关 busybox 的许可分歧。这就是 Android(实际上是 Linux)所使用的,但我\xe2\x80\x99m 不知道任何其他 Linux 平台默认使用它。这是类 UNIX 系统上的其他顶级用户区之一,因为 Android无处不在
  • \n
  • Heirloom 项目:原始 UNIX 用户空间的最低限度的现代化副本,主要基于 Caldera 和 Sun 发布的源代码。这些主要是 SVR4 派生的,有趣的是许多命令都提供 \xe2\x80\x98classic\xe2\x80\x99 版本和 POSIX 版本。据我所知,没有任何主要平台使用过。
  • \n
  • 9base :贝尔实验室 Plan 9提供的用户态实用程序的最小移植副本。据我所知,没有任何主要平台使用过。
  • \n
  • sbaseubase:一个更小的、在某些情况下更简约但通常更符合 POSIX 标准的 busybox 替代品。据我所知,没有任何主要平台使用过。
  • \n
\n

  • 有关 HP/UX 的问题很少见,但我们确实看到[每月都会出现一些有关 AIX 或 Solaris 的问题](https://unix.stackexchange.com/questions/tagged/aix+or+solaris)。Solaris 的一些开源衍生产品仍在维护,例如 Illumos(它确实使用 ksh93,ast 的 shell 作为其 sh,就像 Solaris 11 现在使用的那样)。 (2认同)

Mar*_*ler 29

\n

我认为 GNU 是(唯一)其开源代码为 Linux 发行版提供支持的基本工具的供应商。

\n
\n

一点都不。Stallman 和他的同事确实喜欢将这种情况描绘成“GNU/Linux 加上一些非 GNU 可选软件”,但事实并非如此。

\n
\n

这一定意味着 ls 的某些版本不是由 GNU 提供的,对吗?

\n
\n

嗯,从严格意义上来说,数学含义并不存在,但是是的,你是对的。

\n

首先:所有非 Linux 系统也有可移植用户区,对吧?FreeBSD、OpenBSD、DragonflyBSD、Minix、MacOS\xe2\x80\xa6 它们都不提供 GNU 工具。因此,必须存在另一个工具王朝,至少是一个。

\n

所以,是的,有 BSD 工具(当然有各种分支)。有些比 GNU 同类产品更酷,有些更差,有些只是不同。我不知道有哪个 Linux 发行版完全依赖 libbsd/BSD 工具,而其他发行版却有 gnulib/GNU coreutils,但至少我更喜欢 bsdtar,更喜欢与 GNU Bash\xe2\x80\xa6 不同的 shell,你明白了。

\n

那么,到目前为止,运行Linux 的最实际的物理设备将不会有 GNU 用户区:

\n
    \n
  • 目前活跃的Android 设备超过 36 亿台。Android 是一个 Linux 发行版,它使用toybox(0-BSD 许可)作为标准工具的集合,以及修改后的 Korn shell。
  • \n
  • 有数十亿个 DSL/电缆/光纤“路由器/接入点”盒子运行某些 Linux 发行版。它们中的绝大多数都在 Busybox (GPL) 下运行,并使用它sh附带的。
  • \n
\n

与我猜测的大约 60 亿台带有非 GNU 基础工具集的 Linux 设备相比,我认为这几百万台台式机/笔记本电脑 Linux 并没有那么普遍。

\n

但到目前为止,运行的大多数 Linux 内核实例可能都在 Hyperscaler 云提供商(Amazon、Alibaba、Microsoft、Oracle\xe2\x80\xa6)的数据中心中运行。很难给出具体数字,但将达到数十亿。\xe2\x80\x93 这些正在运行什么很难猜测。但特别是对于云计算来说,像 Alpine Linux 这样的发行版很受欢迎,而且它不是随 GNU Coreutils 一起提供的,而是随 Busybox 一起提供的。但这里我们计算的是虚拟机,而不是物理机。正如我所说,在 Google 数据中心中,“设备”是服务器机架,而不是单个主板,因此物理设备的数量相对较多。

\n

(个人对此的看法:强 Copyleft 用户空间的比例越来越少,这并不是一件好事,特别是因为供应商确实没有停止侵犯内核的强 Copyleft 要求,并且没有 FSF 管理的代码对于发现这一点。然而,FSF 的 GPL 执行并没有像我希望的那样发挥作用、有针对性并取得成果。)

\n

  • 很难根据数字本身来反对“更多的非 GNU Linux 系统”的论点,但我不禁认为它并不像数字所暗示的那么相关,因为这更多是一个系统问题_CLI 所在的系统经常使用的工具,而不仅仅是系统的原始数量。我猜想,即使交互式使用一次 CLI 的 Android 系统或网络设备的数量也远远低于这数十亿。统计此类系统的开发人员数量可能更具代表性。(桌面系统也是如此,但我认为比率有很大不同。) (8认同)
  • 我认为这个论点是非常公平的!但是,虽然 `ls` 当然([?](https://unix.stackexchange.com/q/128985/106650))是一个纯粹的交互式命令,但 `cat`、`cp`、`stat` 可能是这些系统的大部分操作都是在幕后进行的。所以,实际上,问题是我们是否在问自己“如果我坐在一个专为我设计的任意 Linux *控制台*前,我对 GNU 的期望是多少?” 或者“如果我看看任意 Linux *设备*如何启动、处理日志文件等,我期望多少 GNU?”。 (3认同)
  • 根据我的经验,Alpine 对于容器来说非常受欢迎,但对于超大规模云中的虚拟机,Ubuntu 和 Red Hat 等传统发行版似乎仍然是最受欢迎的。主要原因是 Canonical 和 Red Hat 确实是唯一具有支持大型企业规模和覆盖范围的商业 Linux 支持提供商,如果您在 VM 上运行某些内容,节省几百兆字节基本上只是一个小问题。舍入误差。 (2认同)

jes*_*e_b 16

一般来说,GNU Coreutils并不是大多数这些工具的原始版本。通常它们由操作系统提供,并且由于大多数 Linux 版本都是 GNU/Linux,因此您最熟悉的是 GNU Coreutils。然而,在 Linux 出现之前,就已经存在 BSD 工具和各种风格的 UNIX 工具,这些工具今天仍然存在于仍在使用的各种风格的 UNIX 上。另外,某些版本的 Linux 不是 GNU,可能使用Busybox之类的东西(例如 Alpine Linux)。

无论是谁制造它们,重要的是它们遵循POSIX 标准,但情况并非总是如此,尤其是对于 GNU 实用程序而言。

您可以找到几乎任何命令的 OpenBSD、FreeBSD、UNIX、GNU、Busybox 等版本。

许多正在使用的 UNICES 至少在某种程度上起源于 UNIX 版本 6,因此它们可能共享一些相同的实用程序,或者它们可能在此过程中对这些实用程序进行了独特的修改。

  • 从 1970 年起,`ls` 就已经存在于 Unix 版本 1 中。 (7认同)
  • 研究 Unix 的历史有详细记录,您可以在线找到手册和代码(也许不是所有 V1 的内容,而是在 PDP11 汇编程序中,C 之前的版本中)。甚至 [wikipedia](https://en.wikipedia.org/wiki/Research_Unix) 也有 V1 的命令列表。甚至还有一个关于 V1 `ls` 的众所周知的轶事:名称以 `.` 开头的文件被隐藏(最初在 `ls` 中,但后来传播并成为一个功能)的事实是因为 `ls` 中的一个错误尝试仅隐藏“.”和“..”(根据记忆,我可能有错误的细节)。 (2认同)
  • 请参阅 [v1 `ls` 代码](https://github.com/jserv/unix-v1/blob/master/src/cmd/ls.s),所有名称以 `.` 开头的文件可能隐藏在[第 120 行](https://github.com/jserv/unix-v1/blob/master/src/cmd/ls.s#L120) (2认同)
  • 看起来甚至 PDP7 Unix(1969 年,前身)[可能有一个 ls 命令](https://github.com/DoctorWkt/pdp7-unix/blob/master/src/cmd/ls.s)。 (2认同)

sle*_*man 5

这一定意味着 ls 的某些版本不是由 GNU 提供的,对吗?这些版本是什么,谁制作的以及在哪里可以找到它们?

是的。最初的实现是ls在旧的 AT&T Unix 许可证下进行的。

至于 的现代实现ls,所有由各种 BSD 分发的实现(与 Linux 不同,它实际上源自原始的 AT&T Unix)。

您可能认为 BSD 是一个非常少数的操作系统,用户很少,但它们确实存在。还有一个拥有大量用户的 BSD 发行版:Apple 的 Mac OS。

值得记住的是 GNU 项目是什么。GNU 是 GNU 而非 Unix。这是一个制作 Unix 工具(例如ls)的干净副本的项目,但绝对不是 Unix。因此,您可以将 GNU 视为lsUnix 原始ls. 事实上,GNU 工具的功能已经激励其他开发人员使用 GNU 功能更新他们的工具。多年来,GNU 和 Unix 世界的其他部分之间进行了大量的异花授粉。