Unix与Linux操作系统是同一个操作系统吗?是,也不是。或许这个答案有自相矛盾的地方,但是却是一个比较合理的答案。笔者在后续的文章中,将陆续对Unix与Linux这两个操作系统的差异进行分析。若各位读者对这个话题感兴趣的话,请关注笔者后续的文章。
一、Unix与Linux操作系统的源代码是不同的。
虽然Unix与Linux操作系统有不少的命令是相同的,但是他们的源代码则是不同的。也就是说,在Linux操作系统开发过程中,采用了很多Unix系统的设计理念,并遵循Unix操作系统的POSIX规范。但是其并没有采用Unix操作系统的源代码,并没有采用Unix操作系统的运行方式。从这一点来说,他们两个是不同的操作系统。
现在Unix操作系统走的是商业化的道理,其源代码是受到保护的。这也就是说,任何社会团体与个人都不能够抄袭或者随意修改Unix操作系统的源代码。而Linux在开发过车观念中,源代码都是重新书写的,所以就没有版权上面的限制。无论是个人还是商业团体,只要遵循一定的规范,就可以对Linux的源代码进行更改或者复制。不会涉及到版权的问题。 故Linux操作系统才是一个真正的开源操作系统。
二、Unix与Linux采用相同的系统调用为此就是同一种操作系统。
Unix从发展到现在,有了很多种版本。如BSD或者HP-Uinx操作系统等等。他们都是Unix操作系统。为什么这么说呢?并不是说他们的源代码的起源是相同的,而是说他们都采用了一样的系统调用。在Unix操作系统中,最出色的特点就是通过命令来完成相关的操作。在Unix系统中,具有1000多个命令。但是令人惊奇的是,这么多的命令却是通过少数几个函数调用与系统内核进行通信,这些函数调用就称之为系统调用。
这就好像一个写字楼,其大门可能只有前后两个。但是通往这两个大门的道路却有成千上百条。那么各个应用程序只需要遵守这两扇大门的通信规则,就可以跟写字楼内部人员进行沟通。如在Unix内核中有一个Write函数,主要是往文件中保存相关的信息。而很多应用程序需要往硬盘的文件中保存信息,如文本处理文件、数据库系统等等。但是这些应用系统的话最终都会调用Write函数往文件中保存信息,所以这些应用程序开发者只需要了解Write函数,就可以顺利往硬盘中保存文件。可见,真是因为大家都采用了相同的系统调用,所以应用程序才能够在不同的Unix版本中顺利移植。
而Linux操作系统采用的系统调用跟Unix操作系统是相同的,都遵循POSIX的规范。从这一点上来说,Linux操作系统就是Unix操作系统,只是他们的开发者不同而已。为此即时他们的源代码不同,但是并不影响这个定性。由于两个操作系统采用了相同的系统调用,则在Unix操作系统上开发的应用软件,可以很方便的移植到另一个Linux操作系统上。
所以说,Unix操作系统与Linux操作系统即是同一个操作系统(系统调用相同),又不是相同的操作系统(源代码不同)。这个答案看起来自相矛盾,但是真实的反映出了这两个操作系统相互之间的关系。
三、内核文件与外壳不同。
无论是Unix操作系统还是Linux操作系统,其基本上是有内核、外壳和应用程序三部分组成。毋庸置疑,内核是操作系统中最重要的部分,其直接跟计算机硬件打交道。负责外壳与系统硬件之间的信息交流。为此也有专家说,内核才算是真正意义上的操作系统。
Unix操作系统与Linux操作系统内核文件是不同的。如Unix操作系统其内核程序对应的文件往往是/stand/unix文件;在SUNOS的Unix操作系统中对应的是/kernel./genuix。操作系统在启动的时候会把这个内核程序加载到系统内存中。而Linux操作系统的内核程序与Unix操作系统有比较大的区别。Linux操作系统采用的内核文件为/boot/vlinuz。无论是系统工程师还是程序员必须要知道这个最基本的区别。如在对系统内核进行升级的时候,就需要知道所采用的内核文件。
Unix操作系统与Linux操作系统不仅内核文件不同,所采用的外壳也是不同的。当目前为止,Unix操作系统主要支持四种外壳,分别为SH、CSH、KSH和BASH。当用户登录到操作系统之后,就会启动一个外壳程序。通常情况下,在同一个时刻只能够启动一个外壳。系统工程师就是通过外壳同系统内核与硬件进行通信。而Linux操作系统目前为止只支持三种外壳程序,分别为BASH(默认采用的外壳程序)、CSH、KSH,比Unix操作系统少一种。这个差异对于普通用户来说,可能没有什么影响。但是对于系统工程师进行一些特定工作的话,就可能会带来比较大的不方便。
四、命令参数的表示方式不同。
在Unix操作系统与Linux操作系统其大部分命令都是相同的。但是在一些参数的表示方法上有所差异。如ls命令都是用来查看当前目录下文件、子目录相关信息的。这个命令时两个操作系统中使用的频率最高的命令,都带有比较多的参数。但是在一些参数的具体表述上会有所差别。
如在这两个操作系统中命令后面可以加一类比较特殊的参数,即可有可无的参数。在Unix系统中利用单横杆夹一个英文字母表示。如ls –l等等。这个可选项也是Unix命令中的一个参数。这些参数往往是系统中预先定义好的,用来实现一些比较特殊的功能。通常情况下,一个命令可以带许多类型的参数,如文件名参数与可选项参数等等,用来提高命令的灵活性,让命令可以在多个方式下运行。另外需要注意的一个问题是,一般情况下命令与参数之间必须要有空格来进行区分。如果在命令与参数之间有多个空格的话,外壳程序中有一个叫做命令解释器的工具会对其进行压缩,最后只剩下一个空格。当然有些情况下系统工程师可能不喜欢系统这种“自作聪明”的方法,则也可以通过一些措施阻止操作系统这么做。
而在Linux操作系统中虽然也可以支持可选项,但是其表示的方法有所差异。在Unix操作系统中,主要通过单横杆来表示可选项参数。但是在Linux操作系统中,则其可选项的表示方式不统一,有的是需要一个单横杆,而有些命令则需要使用双横杆来表示这个参数为可选项参数。另外在Unix操作系统中,这些可选项参数为单个的英文字母;而在Linux操作系统中,则其可能用的是具有一定含义的英文单词,如ls –all等等。由于在Linux操作系统中这种不统一的情况,所以其命令的记忆量要比Unix操作系统要多。特别是像笔者这样,既要负责Unxi系统的维护,平时可能又要参与Linux相关的项目时,这个就特别容易搞混。所以有时候就不得不查看系统的联机帮助来判断命令的正确格式。
还好在两个操作系统中,都有一个在线帮助文档。如在Unix操作系统与Red Hat 9操作系统中都可以通过man命令来查看命令的帮助说明,如man ls系统就会显示ls命令的相关帮助,并且还会带出这个命令下面的所有可用参数,包括可选参数。其实到底是采用单横杆还是双横杆都会有具体的指明。所以说很多像笔者这样的系统工程师都要感谢这个在线帮助文档,让我们能够同时胜任Unix操作系统与Linux操作系统的维护与开发工作。虽然命令之间有一些格式上的差异,但是毕竟大部分命令的名字都相同的。所以通过这个在线帮助文档的支持,可以在最短时间内确认这个差异。
以上这些差异只是Unix操作系统与Linux操作系统差异中的部分内容。笔者日后会陆续整理这方面的差异。正如上面所说的,Unix与Linux操作系统其实是同一个操作系统。为此只要系统工程师掌握这些差异,那么他们必定可以同时胜任Linux与Unix操作系统的工作。希望笔者的这些差异总结能够给大家在这方面带来一定的帮助,让大家可以在管理Unix操作系统的同时,成为一名合格的Linux工程师。