进一步阅读

进一步阅读

我认为 BSD 工具有不同的风格,例如,BSDls工具在 FreeBSD、OpenBSD 和 NetBSD(甚至 macOS)上不是同一个工具。

请注意,“不同风格”是指它们以不同的方式工作(例如:lsFreeBSD 上的 BSD 工具可能接受该标志,而OpenBSD 上-A可能不接受该标志)。-A

但 GNU 工具是否也有多种风格?例如,GNUlsbashGNUnano工具在所有操作系统上的工作方式完全相同吗?

答案1

正如我提到的https://unix.stackexchange.com/a/506429/5132,基于 Linux 的操作系统不一定使用彼此相同的程序。众所周知,几个相当基本的程序有多种实现。

这些包括但不限于:

请注意,这不是不同类型之间的差异GNU严格来说,工具。基于 Linux 的操作系统上的工具不是完全来自 GNU 项目。此类操作系统也具有非 GNU 工具集中的工具。

此外,基于 Linux 的操作系统在其功能方面也存在差异。相同工具集,。它们都使用自己的一组变体本地修改进行构建。举些例子:

  • systemd 在 Arch Linux 上的构建方式与在基于 Linux 的操作系统的 Debian 和 Fedora 系列上的构建方式不同。特别是,它是使用配置选项构建的,该配置选项表示排除大多数(但不是全部)van Smoorenburgrc兼容性机制。 (看https://unix.stackexchange.com/a/389298/5132,https://unix.stackexchange.com/a/451966/5132, 和https://unix.stackexchange.com/a/471871/5132.)
  • 在 Debian Linux 上,GNU coreutils:
  • 在 Debian Linux 上,Bourne Again shell 附带了一个(错误打包的)clear_console命令,该命令是强制 Greg Wooledge(等人)清除 xyr 屏幕的众多机制之一。 (看https://unix.stackexchange.com/a/451150/5132.)
  • grotty在 Debian Linux 和 Arch Linux 上,从 ISO 8613-6:1994 和 ECMA-48:1976 发出“新”终端控制序列(而不是 1968 年的(非常)旧的 TTY-37 控制序列)的本机功能被禁用。在某些情况下,Arch Linux 还会导致单引号和连字符被翻译为 Latin-1 撇号和减号。
  • 不同的基于 Linux 的操作系统根据 ncurses 是“宽”还是“窄”而有所不同。
  • nano在 Debian Linux 上,由于 Debian 补丁的原因,GNU 的“微型”版本的菜单布局有所不同。
  • 在 Arch Linux 上,Heirloom/Traditionalvi通过多种方式进行了本地修补,使其与原始版本不同,包括用于保存文件的不同目录以及对编辑键盘按键的支持,而 Bill Joy 从未在他的 ADM-3A 终端上使用过这些按键(例如PgUpPgDn,请参阅https://vi.stackexchange.com/q/9313/19613)。
  • 各种基于 Linux 的操作系统以不同的方式开箱即用地配置 OpenSSH。例如,Arch Linux 会ChallengeResponseAuthentication关闭、PrintMotd关闭和UsePAM打开。 Debian Linux 适用一组广泛的补丁

等等。

进一步阅读

答案2

ls实用程序接受-A所有 BSD 上的选项。这是一个标准的 POSIX 选项。

基本的 BSD 工具由每个 BSD 项目独立开发和维护,但项目之间偶尔会共享一些实现细节(例如解决错误或实现新功能的方法,有时甚至实现 GNU 扩展)。

GNU 工具,如 coreutils、nano编辑器和bashshell(这是三个独立的项目)是作为它们自己的项目单独开发和维护的。因此,不太可能出现不同的实施方式。

然而,两者之间仍然存在差异这些工具的发布,并且您通常不能期望bash一个 Unix 上的 shell 与另一个 Unix 上的 shell 完全相同。此外,GNU 工具的修改变体可能会出现在某些环境中,这些环境并不完全支持所有功能,或者支持 Linux 上通常不实现的功能。

最明显的例子是 macOS,它附带了 3.2 版本的bashshell,而最新版本是 5.0.x。

您可以期待什么,或者应该期望,是基本实用程序,如果它们是标准 POSIX 实用程序,应该像 POSIX 标准所说的那样工作,无论它们是 GNU、BSD 还是实用程序的其他实现。再说一次,这确实不是包括这些实用程序的非标准扩展,例如大多数 GNU coreutils 实用程序支持的任何“长选项”,其他实现中可能支持也可能不支持,并且根据实用程序的版本,其行为可能有所不同。

相关内容