我认为 BSD 工具有不同的风格,例如,BSDls
工具在 FreeBSD、OpenBSD 和 NetBSD(甚至 macOS)上不是同一个工具。
请注意,“不同风格”是指它们以不同的方式工作(例如:ls
FreeBSD 上的 BSD 工具可能接受该标志,而OpenBSD 上-A
可能不接受该标志)。-A
但 GNU 工具是否也有多种风格?例如,GNUls
和bash
GNUnano
工具在所有操作系统上的工作方式完全相同吗?
答案1
正如我提到的https://unix.stackexchange.com/a/506429/5132,基于 Linux 的操作系统不一定使用彼此相同的程序。众所周知,几个相当基本的程序有多种实现。
这些包括但不限于:
ifconfig
有 2 个实现,其中之一是GNU inetutils另一个在NET-3 网络工具。现在有 3 个,第三个是我的。 (看https://unix.stackexchange.com/a/504084/5132.)su
有 2 个实现,其中之一是实用程序Linux另一个在阴影。 Debian 在 2018 年从一种切换到另一种,导致该 WWW 站点上的几个旧问题和答案出现错误。 (看https://unix.stackexchange.com/a/460769/5132举个例子,“su 与 su - (在 Debian 上):为什么 PATH 相同?”。)- 似乎有无数(在 Debian/Ubuntu 上实际上有 4 个)可能的地方可以获取该
mailx
命令:GNU Mailutils、BSD mailx、NMH 和 s-nail。它们的不同之处在于命令行语法。 (看https://unix.stackexchange.com/a/489510/5132.) vi
可以是不同的 Heirloom/Traditionalvi
(最初的 Bill Joy 版本,这是vi
Arch Linux 上的默认版本,但相比之下,在 Debian Linux 上根本无法作为软件包使用)、Bram Moolenaar 的兼容模式下的 STEVIE 衍生 VIM,甚至是 Keith Bostic 的 VIM源自 Elvis 的 nvi。
请注意,这不是不同类型之间的差异GNU严格来说,工具。基于 Linux 的操作系统上的工具不是完全来自 GNU 项目。此类操作系统也具有非 GNU 工具集中的工具。
此外,基于 Linux 的操作系统在其功能方面也存在差异。相同工具集,也。它们都使用自己的一组变体本地修改进行构建。举些例子:
- systemd 在 Arch Linux 上的构建方式与在基于 Linux 的操作系统的 Debian 和 Fedora 系列上的构建方式不同。特别是,它是使用配置选项构建的,该配置选项表示排除大多数(但不是全部)van Smoorenburg
rc
兼容性机制。 (看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:
--ips
该命令有一个附加选项who
。 (看https://unix.stackexchange.com/a/24279/5132.)- 强制要求
conv=notrunc
何时dd
发出命令oflag=append
。
- 在 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/Traditional
vi
通过多种方式进行了本地修补,使其与原始版本不同,包括用于保存文件的不同目录以及对编辑键盘按键的支持,而 Bill Joy 从未在他的 ADM-3A 终端上使用过这些按键(例如PgUp和PgDn,请参阅https://vi.stackexchange.com/q/9313/19613)。 - 各种基于 Linux 的操作系统以不同的方式开箱即用地配置 OpenSSH。例如,Arch Linux 会
ChallengeResponseAuthentication
关闭、PrintMotd
关闭和UsePAM
打开。 Debian Linux 适用一组广泛的补丁。
等等。
进一步阅读
- 斯文·古克斯(2017-08-07)。 ”
vi
克隆和主页”。vi
页数。 guckes.net。 - 乔纳森·德博因·波拉德 (2016)。nosh 用户空间虚拟终端上手册页中的斜体和颜色。小吃包。
答案2
该ls
实用程序接受-A
所有 BSD 上的选项。这是一个标准的 POSIX 选项。
基本的 BSD 工具由每个 BSD 项目独立开发和维护,但项目之间偶尔会共享一些实现细节(例如解决错误或实现新功能的方法,有时甚至实现 GNU 扩展)。
GNU 工具,如 coreutils、nano
编辑器和bash
shell(这是三个独立的项目)是作为它们自己的项目单独开发和维护的。因此,不太可能出现不同的实施方式。
然而,两者之间仍然存在差异这些工具的发布,并且您通常不能期望bash
一个 Unix 上的 shell 与另一个 Unix 上的 shell 完全相同。此外,GNU 工具的修改变体可能会出现在某些环境中,这些环境并不完全支持所有功能,或者支持 Linux 上通常不实现的功能。
最明显的例子是 macOS,它附带了 3.2 版本的bash
shell,而最新版本是 5.0.x。
您可以期待什么,或者应该期望,是基本实用程序,如果它们是标准 POSIX 实用程序,应该像 POSIX 标准所说的那样工作,无论它们是 GNU、BSD 还是实用程序的其他实现。再说一次,这确实不是包括这些实用程序的非标准扩展,例如大多数 GNU coreutils 实用程序支持的任何“长选项”,其他实现中可能支持也可能不支持,并且根据实用程序的版本,其行为可能有所不同。