Moh*_*ani 24 command-line syntax
我见过许多接受“BSD 语法”及其标准语法的命令。以ps
命令为例:
To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely
To see every process on the system using BSD syntax:
ps ax
ps axu
Run Code Online (Sandbox Code Playgroud)
那么这两条路线有什么区别呢?一般来说,当他们在 BSD 语法中说我应该记住哪些元素时?这种语法是否也仅适用于它们在 BSD 中的那些命令?
Gil*_*il' 21
这可以追溯到的有些曲折历史的Unix(维基百科有一个简图,这是远 从完成)。尤其是有一段时间,有两大潮流:AT&T 开发的System V和加州大学伯克利分校开发的BSD。那是在 1980 年代初期,早在 Linux(1991)之前,更不用说 Ubuntu(2004)了。通常这两种潮流会做出不同的决定,即使在今天,您也会偶尔发现对“System V”和“BSD”变体或特性的提及。
该ps
命令可以追溯到 Unix 的第一个版本(它不在版本 1 中,我可以在网上找到的最早的手册页来自1974 年的版本 5(第 94 页))。当时,ps
只有几个选项,例如ps a
显示所有进程而不是仅显示用户的ps x
进程,以及显示不附加终端的进程。您会注意到选项不是以-
:开头的,当时使用-
for options的约定不像今天那样近乎系统,它主要用于将文件名作为普通参数的命令。
随着时间的推移,Unix 的各个分支扩展ps
了更多的选项。该变种BSD选择保留原来的语法,没有领导-
,并a
和x
今天仍然存在。System V 变体选择采用-
for 选项的语法约定,并使用不同的字母(例如ps -e
显示所有进程)。Oracle(以前称为 Sun)Solaris是 System V 变体的一个示例(Solaris 还提供了一个单独的ps
可执行文件,位于非默认目录中PATH
,用于使用 BSD 编写的应用程序)。
在 Linux 出现时,使用它的人通常对一种或多种 Unix 变体有过经验。Linux 有时以 System V 方式做事,有时以 BSD 方式做事,有时以自己的方式做事,要么基于技术考虑,要么基于实现该功能的人的经验和品味。Linux 的ps
命令以类似 BSD 的选项开始,例如ps ae
显示所有进程并在列表中包含环境变量。随着时间的推移(在 1990 年代后期,我不记得具体是什么时候),Linux 的作者ps
为习惯了 System V 的人添加了选项。 所以今天要么ps ax
或ps -e
将列出 Linux 下的所有进程,甚至还有一个环境变量( PS_PERSONALITY
) 使ps
为了旧脚本和有固定习惯的人,它们的行为更像是各种 Unix 旧 Unix 变体。
使用多个 Unix 变体的人不喜欢他们在从一种 Unix 变体切换到另一种时必须修改他们的程序和习惯。因此,人们努力标准化功能的一个子集。这导致了POSIX标准(由IEEE领导),Ubuntu 基本上遵循该标准。ps
1992 年发布了第一版,其范围包括命令;这个在网上没有,但1997 版是。对于ps
命令,就像在许多其他情况下一样,POSIX 采用了 System V 的做事方式。
该ps
命令的标准语法是一种与 System V 和 POSIX 兼容的语法。此外,该语法可以说是标准的,因为它-
默认用于引入选项。某些选项仅存在于两种语法之一中;幸运的是,它们可以混合在同一个调用中。
一般来说,“BSD”与“System V”没有任何技术含义。它指的是历史:“BSD”是 BSD 在 1980 年代及其前后所做的任何选择,“System V”是 AT&T 及其合作伙伴(尤其是 Sun)所做的任何选择。“POSIX”是 IEEE 标准化委员会做出的任何选择。
Oli*_*Oli 19
MS Office 和 LibreOffice 之间有什么区别?在 Firefox 和 Chrome 之间?
他们做的事情大致相同,但他们是由不同的人完成的,目的略有不同。
也许更好的问题是为什么 BSD、Linux、OSX 和 Unix 发行版共享这么多命令?这归结为POSIX合规性。POSIX 基本上是一套类 Unix 操作系统的标准;它规定了核心 API、命令以及这些命令应该如何工作。
在ps
(POSIX 规定的命令)的情况下,需要某些参数。这些包括这些 BSD 的。所有 POSIX 派生的命令都有自己的手册页,但它们需要单独安装。对于ps
:
sudo apt-get install manpages-posix
man 1posix ps
Run Code Online (Sandbox Code Playgroud)
那么为什么 BSD 不使用我们的ps
(反之亦然)呢?
ps
包(procps
见:dpkg -S $(which ps)
)是一个叉的另一个procps
包。这两个都是 GPL 许可的。这与 BSD 的许可证不兼容,因此不能包含在那里。(我们可以包括 BSD,但不需要)。ps
是相当内核特定的。我认为它们在技术上不兼容。其他应用呢?
大多数 POSIX 合规性命令来自 Ubuntu 的coreutils
软件包。这个包代表了 GNU/Linux 中的 GNU,它也是 GPL 许可的。BSD 提供了自己的 BSD 兼容许可版本,这些版本遵循 POSIX,但不一定与 GNU 版本完全相同。
正如我所领导的,他们为什么要这样?他们在很长一段时间内由不同的人组成。这是这里的简短答案。
归档时间: |
|
查看次数: |
16486 次 |
最近记录: |