对“ps”命令的 Unix 与 BSD 标志格式的含义感到困惑

use*_*188 7 linux ps

我已经读过该ps命令可以采用两种格式的标志:

  • 在 Unix 格式中,您应该在标志前加一个破折号。
  • 在 BSD 格式中,您不应在标志之前使用破折号。

现在,相同的标志可以用于两种格式,例如,执行以下命令的含义相同:

ps -x
ps x
Run Code Online (Sandbox Code Playgroud)

或者 Unix 格式有自己的一组标志,而 BSD 格式有一组完全不同的标志吗?

Ste*_*itt 10

手册页回答您的问题:

不同类型的选项可以自由混合,但可能会出现冲突。由于与许多标准和ps实现ps兼容,因此存在一些功能相同的同义选项。

请注意,这ps -aux与 不同ps aux。POSIX 和 UNIX 标准要求ps -aux打印名为“x”的用户拥有的所有进程,以及打印-a选项将选择的所有进程。如果名为“x”的用户不存在,则此 ps 可能会将命令解释为ps aux代替并打印警告。此行为旨在帮助转换旧的脚本和习惯。它是脆弱的,可能会发生变化,因此不应依赖它。

标志不同,但可以组合。通常你会选择一个虽然,例如,无论是ps auxps -ef看到的所有进程,而不是一个混合的细节。

唯一的x标志是BSD之一,所以ps xps -x产生相同的结果; 但这不适用于两种变体中定义的标志。

所有这些都特定于procpsprocps-ng。的等价ps xps -x一个“第二次机会”,如果第一遍没有完全解析所有的参数被调用分析阶段的结果; 这在联机帮助页中没有记录,但在源代码HACKING文件中提到:

除非个性强制 BSD 解析,否则 parser.c 尝试将命令行解析为混合的 BSD+SysV+Gnu 混乱。失败时,尝试进行 BSD 解析。如果在尝试 SysV 解析BSD 解析失败,则错误消息来自原始 SysV 解析。

  • @Kusalananda:最初,POSIX 是由 IEEE 和国际标准机构开发的一组标准。UNIX 是一个经过多方处理的商标,目前归属于 Open Group;曾经有一套与您是否被允许使用该商标相关的标准。Open Group 是一个行业联盟。他们有不同的哲学:POSIX 是规定性的(它指定了 POSIX 系统*必须是*),UNIX 是描述性的(它描述了常见的 Unix 系统*是什么)。POSIX 开发了新的 API(例如 POSIX 线程、POSIX ACL)、UNIX ... (3认同)
  • ...仅描述了*已经存在的*用法。在 90 年代后期,不同的团体成立了 The Austin Group,以开发由 IEC、IEEE、ISO 和 The Open Group 作为 POSIX 和 The Single Unix Specification (SUS) 相同发布的*单一*规范(尽管Open Group 的 SUS 比其他的要大,并且包括 POSIX 未涵盖的部分)。SUS 是保守的,因为它试图只描述已经存在的广泛使用、经过实战测试的 API。唯一的例外是开发的“pax”便携式存档实用程序和便携式存档格式,因为它们不能 (3认同)
  • 弄清楚如何统一`tar`和`cpio`,因此他们决定开发一个全新的规范,一个名为`pax`的实用程序,主要基于(更多POSIXy)`cpio`命令(而不是`tar` 的神秘选项格式)和基于 POSIX `tar` 的存档格式,几乎支持您想要的所有功能(ACL、XATTR、非常长的文件名、稀疏文件等) (3认同)