像这样的命令ps
带有很多参数,特别是因为它们为用户提供了在 Unix 和 BSD 风格标志之间进行选择的选项。我希望你能明白我的意思。
那么,当有这样的选项可用时,我应该选择哪个才能在所有 Linux 系统上获得最大的兼容性? (例如,最大兼容性是优先事项之一)
我知道 Unix 风格是相当明显的,但 BSD 命令由于某种原因包含更多可读信息(例如列标题、CPU 列等)。当然,如果我说得不对,请指正,但这就是我的感受。
答案1
几乎所有 Linux 都使用原始核心 Unix 命令的 GNU 版本ps
,如 ,正如您所指出的,它支持 BSD 和 AT&T 风格选项。
由于您所说的目标只是 Linux 之间的兼容性,这意味着答案是“没关系”。
嵌入式和其他非常小的 Linux 变体通常使用忙碌盒而不是 GNU 工具,但在 的情况下ps
,它确实不会影响答案,因为 BusyBox 版本是如此精简,它既不能被称为 AT&Tish也不BSDish。
随着时间的推移,其他 Unixy 系统已经减少了ps
兼容性差异。 Mac OS X — 其中间接源自 BSD Unix一般来说,其行为仍然与 BSD Unix 最相似——接受 AT&Tish 和 BSDishps
标志。
Solaris/OpenIndiana 也有这种行为,不过这并不奇怪,因为它有 BSD 和 AT&T 的混合历史。
FreeBSD、OpenBSD 和 NetBSD 仍然只坚持 BSD 风格。
Unix 机器越旧,它就越有可能只接受一种样式的标志。您可以像我们现在一样在这样的盒子上掩盖差异:安装 GNU 工具(如果尚未安装)。
也就是说,陷阱仍然存在。ps
通常不应在需要可移植的脚本中解析输出,例如,由于 Unixy 系统在可用列、操作系统愿意对非 root 用户可见的数据量等方面有所不同。
(顺便说一句,请注意,这是“BSD 与 AT&T”,而不是“BSD 与 Unix”。BSD Unix 仍然是 UNIX®。BSD Unix 有着直接的发展历史与原来的 AT&T 分支机构。这种共享也是双向的:AT&T 及其继任者在其历史上的多个阶段将 BSD 创新带回了家乡。随着时间的推移,这种统一部分归功于公开组及其前身。)
答案2
如有疑问,请使用 SysV 语法。这已经是很多人的共识,也是事实上的标准。 BSD 的东西要么可以追溯到史前时期,要么是某个不同分支的一部分(SysV 是一种通过将所有不同的线路集中到一个屋檐下来结束 Unix 战争的努力)。