Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的[Red Hat Enterprise Linux](https://baike.baidu.com/item/Red Hat Enterprise Linux/10770503)、SUSE、[Oracle Linux](https://baike.baidu.com/item/Oracle Linux/6876458)等。
众所周知,计算机由一堆硬件组成,为了有效地控制这些硬件资源,于是乎就有了操作系统的诞生。操作系统不仅为有效控制硬件资源的分配提供了便利,还提供了一系列系统调用接口便于开发人员使用。
那么在日常生活中常见的操作系统一般有Windows、Linux、MacOS。
需要注意的是:Linux和MacOS本质上都是属于类Unix操作系统,而Windows则与两者相比有所不同,Windows系统是由DOS(Disk Operating System)系统演变而来的图形化操作系统。(MacOS也是一种图形化操作系统。)
那么Linux呢?答案是也不是。因为Linux的代码是开源的,它的内核代码是开放给开发者使用的。那么大家就可以在内核源代码的基础上依据自己的需求添加一些专属的定制化的内容,但是需要遵循某些协议。(后续说明)
说到Linux,那可不得不说,这是一个大家庭,可以说是遍历开“花”,即拥有许多不同的发行版。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8unOtzC-1650385067051)(Linux概述.assets/各大Linux发行版.jpeg)]
常见的有OpenSUSE、RedHat、Debian、ArchLinux、Ubuntu、Centos 等等。
总的来说,Linux就是一个类Unix操作系统,并且应用十分广泛,并且家族十分庞大,用途遍布我们日常生活的方方面面。
在聊Linux之前,我觉得非常有必要说一下Unix。因为Unix十分强大。
道生一、一生二、二生三、三生万物………
与人类的历史相比,软件发展的历史很短,如果说要给软件的历史找一个奇点,那么这个奇点就是Unix。Unix是什么?它是计算机历史上的一座丰碑,一种文化。
如果没有它,谷歌、脸书、亚马逊将不复存在,Office办公软件也要晚很多年才会出现,苹果电脑也不再优雅,因为没有了MacOS,再到现在的智能家居、物联网,可以说Unix已经成为了这个时代的不可磨灭的基因。
那么说了这么多,我们给Unix下一个比较客观的定义:那就是Unix是一个多用户、多任务的操作系统,遵循简洁至上、提供机制而非原则的策略。
如果说到Unix的发展历史,不得不提到两位大佬:他们就是B语言的发明者肯 汤姆森和C语言之父丹尼斯 里奇。
在说Unxi如何创造之前,我们需要先对自人类历史上第一台计算机诞生开始的计算机发展过程有一个大致的了解。
在早期,计算机并不像现在一样,广泛的平民化,任何人都有能力购买。早期的计算机一般是用作军事或者科技用途,一般人根本买不起,也用不起。不仅如此,早期的计算机运行速度也不快,操作方式单一。
那个时候的操作系统被称为批处理操作系统,即那个时候的输入设备只有读卡机,输出设备只有打印机,用户无法与操作系统进行交互。那么这个时候就会出现一个问题,某个机构或者学校只有一台主机,多人等待使用,那怎么提高效率呢?
于是兼容分时操作系统应运而生,它可以通过大型主机通过提供数个终端以连接进入主机,利用主机资源进行运算工作。
示意图如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-57RrHpKF-1650385067052)(Linux概述.assets/兼容分时操作系统.png)]
此时虽然减少了等待的时间,但是在空间方面,往往大型的先进的主机也就大概能够提供30个终端左右,这明显无法满足日益增长的运算需求。再加之,这些终端也就只有输入与输出这些单一的功能,并不能够安装软件与进行相关的计算。
为了强化这种操作系统的功能,以便让主机资源能够更好地提供给更多的用户使用。1969年前后,MIT(麻省理工学院)打算研制一种新型的计算机,叫做Multics。考虑到这项工作的复杂性,MIT拉上了当时的贝尔实验室、通用电气这两家。一个是软件界抗把子,一个是硬件大佬。三者共同发起了Multics计划。
也许是因为名字取得不好,又或者是工程师们太看中Multics了,什么功能都想往Multics上面加,导致研究到一半。发现Multics成为了一个巨大的“四不像”。功能太过复杂,加上计划落后,资金短缺等原因。贝尔实验室率先退出了该项目。
虽然贝尔实验室率先退出了Multics计划,但是原本参与计划的肯 汤姆森却有了一些自己的想法。大佬汤姆森因为自身的需要,就准备在公司的一台PDP-7上针对主机进行操作系统内核的编写。汤姆森说:这个系统内核的组成主要包括三个部分:
要是一周写一个,三周就能完成。经过三个星期的奋斗,他终于以汇编语言写出了一组内核程序,同时包括一些内核工具程序,以及一个小小的文件系统,这个就是Unix的原型系统(或者叫雏形系统)。
1969年末。第一版具有明确Unix特征的操作系统已可以正常运行。
值得注意的是汤姆森的这个文件系统有两个重要的概念:
这对后来Linux的发展有着举足轻重的影响。
由于汤姆森的那个操作系统实在是太好用了,所以在贝尔实验室内广为流传。但由于汤姆森是使用汇编语言来书写的操作系统,由于汇编语言具有专一性,再加上当时的计算机架构都不太相同,所以每次使用都需要安装到不同的机器都需要重新编写汇编语言,极其不方便。
于是汤姆森与里奇两人就想着合作把Unix的雏形操作系统用高级语言来编写。当时现成的高级语言有B语言,但是由于B语言编写的内核性能并不高,后来里奇将B语言重新改写,成为了C语言(据说当时给C取了个新名字叫new B,这么看来取名也是一种哲学,C语言确实NB)。再将C语言重新改写并编译了那个系统的内核,最后命名并发行了Unix的正式版。
此处需要特别强调的是,由于Unix是以高级语言C语言来编写的,相对于汇编语言来说,C语言与硬件的相关性没有那么大。所以这个改变使得Unix很容易被移植到不同的机器上面。
虽然贝尔实验室中诞生了Unix,但是由于其母公司对于Unix采取开放态度,再加上由于是以C语言这一高级语言编写内核的,理论上是具有可移植性的。即只需要取得Unix的源代码,并且针对大型主机的特性加以定制原有的源代码,就可能将Unix移植到另一台主机上,所以1973年之后,Unix便得以与学术界合作开发,其中最重要的接触就是与加州伯克利大学的合作。
这就要说到Unix的一个重要分支BSD的创造者,比尔 乔伊,当时的他是加州大学的一名研究生。他在取得源码之后,便着手修改了Unix的内核源代码,将其修改成为适合自己机器的版本,并同时增加了许多的工具软件和编译器。最终将其命名为“Berkeley Software Distribution”(BSD)。值得一提的是比尔 乔伊就是后来的Sun公司的创办者(Sun公司最突出的一个成就就是发明了Java这门语言。但后来因为各种原因,Sun最终被Oracle收购)。Sun公司就是以BSD开发的内核进行自己的商业Unix版本的开发。
由于Unix高度的可移植性与强大的性能,加上当时并没有很多的版权纠纷,一时之间,很多的商业公司都开始了Unix操作系统的开发,如果System V,IBM的AIX等都推出了自家的主机搭配自己的Unix操作系统。
但是由于操作系统的内核必须要与硬件配合,与提供及控制硬件的资源进行良好的工作。在早期各家商业公司都没有所谓的协议的概念,导致各家虽然都有自己的操作系统,但是都无法在其他公司的硬件上良好地运行。并且就与如今的个人计算机相比,由于早期的厂商并没有针对个人计算机设计Unix系统,所以当时是没有支持个人计算机的Unix操作系统的。
尽管如此,虽然每家公司自己的操作系统与其他公司的系统在架构上大同小异,但是却仅仅是只能支持自身的硬件。
到了1979年,AT&T(贝尔实验室隶属于该公司)退出System V第七版Unix后,这样的情况有了很大的改善,这一版最重要的特色在于可以支持X86架构的个人计算机。(即System V可以在个人计算机上安装与运行)
出于商业的考虑,AT&T想将Unix的版权收回,因此在1979年发布的第七版中特别注明了不可对学生提供源代码的严格限制,这也为后来的Minix系统的诞生埋下了伏笔。
就目前而言,纯种的Unix指的就是System V与BSD这两套软件。
由于1979年的版权问题,毫无疑问,影响最大的就是学校教授Unix内核源代码相关知识的教授了。因为如果Unix的源代码被限制了,如何才能让学生认识Unix呢?
这一切对于安德鲁塔嫩鲍姆教授(Minix创造者)来说真的是个头疼的问题。不过大学的课程并不会因为困境而就停滞。安德鲁教授想,既然1979年的新版本可以移植到X86架构的计算机上,那么是否意味着Unix也可以移植到X86架构的机器上呢?于是安德鲁教授便完全不参照Unix源码(据说是为了避免版权纠纷问题),动手自己写了一个Unix-like的内核程序。并强调该程序可以与Unix兼容,于是Minix正式诞生!
这个Minix比较有趣的是并不是完全免费的,并且无法在网络上提供下载,必须要通过磁带或者磁盘购买才行。并且由于诞生的背景,MInix主要用于教育,并不适用于商业用途,也就没有之前的那些操作系统那么出名,甚至只有很少的一部分人知道。
GNU计划,有译为“革奴计划”,是由理查德·斯托曼在1983年9月27日公开发起的自由软件集体协作计划。它的目标是创建一套完全自由的操作系统GNU。
这个计划的目的是:建立一个自由、开放的操作系统
但是建立一个操作系统又谈何容易呢?聪明的斯托曼想到了可以先编写在Unix上运行的小程序,并且这个小程序的源代码绝对必须是原创的,避免吃上官司。后来很多的人知道了免费的GNU软件,并且实际使用之后的效果与付费软件相差不大,于是很多都转向了GNU软件了。于是GNU逐渐打开了知名度
虽然GNU计划打开了知名度,但是能见度仍然不够,并且不论是什么软件都必须编译成二进制文件之后才可以执行。于是斯托曼想到可以编写一个不错的编译器,这就是GCC(GNU C Compiler),这款编译器不仅功能强大,并且免费,这更加扩大了GUN计划的知名度。
后来托斯曼凭借自己编写的编辑器出售挣了点钱,进而开始全力编写其他的软件,进而建立了自由软件基金会(FSF),请更多的工程师与志愿者编写软件。并最终完成了GCC。此外他还编写了很多的可以被调用的C函数库和可以被用来运行操作系统的基本接口Bash Shell
到1985年,为了避免GNU所开发的自由软件被其他人利用而成为专利软件,所以托斯曼与律师共同起草了有名的通用公共许可证(GPL)。这里需要特别指出的是由GNU开发出来的几个重要的软件:
其中最重要的一点就是后续的很多的软件开发者可以利用这些基础工具来进行程序开发,进一步壮大了自由软件团体。
鉴于图形用户接口(Graphical User Interface)的需求日益高涨,1984年由MIT和其他第三方首次发表了X Window System(注意要区别于微软的Windows)。并在1988年成立了非营利组织XFree86这个组织。所谓的XFree86是X Window System+Free+X86的整合名称
好了,了解完Unix与开源软件协议,现在我们来说说Linux。
Linux的作者是Linus Torvalds,不过他当时是以玩的心态设计了这一套系统,就连Linus本人也曾说自己原本做着玩的东西竟然会变得这么流行。
接下来说说Linux的主要特性:
Linux由众多微内核组成,其源代码完全开源;
Linux继承了Unix的特性,具有非常强大的网络功能,其支持所有的因特网协议,包括TCP/IPv4、TCP/IPv6和链路层拓扑程序等,且可以利用Unix的网络特性开发出新的协议栈;
Linux系统工具链完整,简单操作就可以配置出合适的开发环境,可以简化开发过程,减少开发中仿真工具的障碍,使系统具有较强的移植性;