标准语法和BSD语法有什么区别?


21

我已经看到许多接受“ 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

那么这两条路线有什么区别?通常,当他们用BSD语法说时,我应该记住哪些元素?这种语法是否仅适用于BSD中的那些命令?


要探究系统通过时间实现的psoptargs 之间的历史差异,就要站在深渊的边缘。

Answers:


18

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

那么BSD为什么不使用我们的ps(反之亦然)呢?

  • 我们的ps包(procps见:dpkg -S $(which ps)是一个叉另一个procps。这两个都是GPL许可。这与BSD的许可证不兼容,因此不能包含在其中。(我们可以包括BSD,但不必这样做)。
  • ps是特定于内核的。我认为它们在技术上是不兼容的。

那其他应用程序呢?

符合POSIX的大多数命令来自Ubuntu的coreutils软件包。该软件包代表GNU / Linux中的GNU,并且它也是GPL许可的。BSD附带了自己的BSD兼容许可版本,该版本遵循POSIX,但不一定与GNU对应版本完全相同。

ps不是唯一不是GNU的POSIX命令。他们有很多。

在我的带领下,为什么要这样?他们是在很长很长的时间内由不同的人组成的。这是简短的答案。


20

这可以追溯到的有些曲折历史的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进程,并且将显示未连接终端的进程。您会注意到选项不是以-:开头的,当时,-用于选项的约定并不像今天这样系统化,对于以文件名作为常规参数的命令来说,这主要是一件事情。

随着时间的流逝,Unix的各个方面都扩展ps了更多的选择。该变种BSD选择保留原来的语法,没有领导-,并ax今天仍然存在。System V变体选择采用-for选项的语法约定,并使用不同的字母(例如ps -e,显示所有进程)。Oracle(以前是Sun)Solaris是System V变体的示例(对于考虑到BSD编写的应用ps程序,Solaris还在默认目录中没有提供单独的可执行文件PATH)。

在Linux出现之时,使用Linux的人通常会先有一个Unix变体或另一个变体的经验。Linux有时以技术上的考虑或实施该功能的人的经验和喜好为基础,以System V方式,BSD方式,有时以自己的方式进行操作。Linux的ps命令从类似BSD的选项开始,例如ps ae显示所有进程并在清单中包含环境变量。随着时间的推移(20世纪90年代末,我不记得什么时候),Linux的的作者ps谁被用于系统V.所以今天无论是对人的补充选项ps axps -e将列出Linux下的所有进程,甚至还有一个环境变量(PS_PERSONALITY)使ps 由于旧的脚本和有习惯的人,其行为更像各种Unix旧的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)做出的选择。IEEE标准化委员会可以选择“ POSIX”。


2

您所指的“标准”语法实际上是1980年代开发的GNU操作系统。基于GNU的实用程序和原理与Linux内核相结合,以开发最现代的Linux发行版(包括Ubuntu)。

BSD操作系统是在1970年代后期开发的,独立于GNU,后来又分支到了现代版本,例如FreeBSD或OpenBSD。

GNU和BSD都受到Unix的启发,它们的哲学,语法等略有不同。


0

Ubuntu的coreutils是GNU维护的应用程序的集合,其中包含全部内容(请参阅apt-cache show coreutils)。BSD具有自己的版本(GNU与BSD许可证不兼容)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.