1、Multics计划
上个世纪六十年代,那个时期的计算机还没有很普及,只有少数人才能用,而且当时的计算机系统都是批处理的,就是把一批任务一次性提交给计算机,然后就等待结果,并且中间不能和计算机交互。往往准备作业都需要很长世间,并且这个时候别人也不能用,导致了计算资源的浪费。
为了改变这种情况,在1965年前后,贝尔实验室(Bell),麻省理工学院(MIT)以及通用电气(GE)联合起来准备研发一个分时多任务处理系统,简单来说就是实现很多人同时使用的梦想,并把系统取名Multics(多路信息计算系统,从名字多路就能看出来目标是什么了),但是由于目标太宏大,项目太复杂,加上其他原因导致了项目进展缓慢,1969年左右贝尔试验室觉得这个项目可能不会成功,于是就退出不玩了。想想大天朝这么多年连个像样的操作系统都没有,你就能知道这个项目当时是多么艰巨了。
2、Unix的诞生
Bell退出Multics计划之后,Bell试验室的那批科学家就没什么事做了,其中有一个叫做Ken Thompson的人在研发Multics的时候,写了一个叫做太空大战(Space Travel)的游戏,大概就是一个很简单的打飞机的游戏,但是这个游戏运行在Multics上。当Bell退出了Multics后,Thompson就没有了Multics的使用环境了,为了能够继游戏,于是他花了一个月时间写了一个小型的操作系统,用于运行Space Travel ,当完成之后,Thompson怀着激动的心情把身边同事叫过来了,让他们来玩他的游戏,大家玩过之后纷纷表示对他的游戏不感兴趣,但是对他的系统很感兴趣。因为MULTICS是"Multiplexed Information and Computing Service"的缩写(多路信息计算系统),于是他们叫这个系统是:"UNiplexed Information and Computing Service",缩写为"UNICS"(没路信息计算系统,与Multics相反),后来,大家取其谐音,就称其为"UNIX"了。
这个时候已经是1970年了,
于是就将1970年定为Unix元年,因此计算机上的时间就是从这一年开始计算的。
后来Unix这个小操作系统就在Bell实验室内部流行开,并经过不断的改良最终在1974年7月Unix发展到第5个版本,Bell实验室公开了Unix, 结果引起了学术界的广泛兴趣并对其源码索取,所以,Unix第五版就以“仅用于教育目的”的协议,提供给各大学作为教学之用,成为当时操作系统课程中的范例教材。 各大学公司开始通过Unix源码对Unix进行了各种各样的改进和扩展。1978年学术界的老大柏克利大学,推出了一份以第六版为基础,加上一些改进和新功能而成的Unix。 并命名为BSD(Berkeley Software Distribution伯克利分发版),开创了Unix的另一个分支:BSD 系列。
于是乎Unix就有了两个分支,一个就是BSD系列的分支,一个就是Bell本身发放的分支,当时因为Bell属于AT&T,AT&T受到了美国《谢尔曼反托拉斯法》的影响,不能销售除了电话机电报机等之外的商品,因此Unix都是免费发放供大学使用的,后来AT&T分解,Bell可以卖Unix了,Unix就走向了商业化,如果想继续使用就需要购买授权,一份授权4万美元,在昂贵的授权费用下,很多大学不得不停止对其研究,导致上课都不知道讲什么了。
3、Minix以及Linux的诞生
Unix开始收费之后,结果就导致了大学上课老师都不知道讲啥了,于是在1987年荷兰有个大学教授安德鲁写了一个Minix,类似于Unix,但是比他小的多,专用于教学,当Minix流传开来之后,世界各地的黑客们纷纷开始研究使用并改进,希望把改进的东西合并到Minix中,但是安德鲁觉得他的系统是用于教学的,不能破坏纯净性,于是拒绝了。
在1991年,Linus Torvalds(林纳斯·托瓦兹)在互联网上公布了自己写的Linux,可能是表达对安德鲁的不满吧(为什么不接受大家的好意呢?你让大家的满腔热情往哪里放呢?),于是Linus发布了一个帖子,大概就是说:我写了一个操作系统的内核,但是还不够完善,你们可以使用任何姿势使用,不收钱,也可以帮助我一起完善。帖子发出来之后引起了强烈的反响,并在大家的努力下,于1994年Linux的1.0版本正式发布。
为什么Linux会引起这么强烈的反应呢,这要从另外一个人说起,那就是Richard Stallman,Stallman是一个非常“激进”的人,因为Unix商业化的影响,他就越来越认为软件是全人类的智慧结晶,不应该专为某一家公司服务,于是在八十年代的时候他发起了自由软件运动,吹起了共产主义的号角(GUN运动),并发布了共产主义宣言(GPL协议),并且这一运动得到了很多人的认同。
所谓
自由软件就是指:自由使用;自由学习和修改;自由分发;自由创建衍生版;
GUN是一个递归缩写,就是GUN IS NOT UNIX,就是说UNIX是流氓,我不是,但是很有意思的是,GUN运动是上个世纪八十年代开始的,而那个时候Linux还没有诞生呢,所以StallMan宝宝心里那个苦啊,虽然说想摆脱Unix,但是软件还是要运行在Unix上,就在大家逐渐失去信心的时候,1991年Linus Torvalds带着他的Linux闪亮登场了,给GUN运动画上了一个完美的句号。
你说Linux是不是很容易引起了强烈的反响,因为Unix是有版权的,哪些爱好编程的狂热份子在研究Unix说不定哪天就吃上官司了,而Linux是遵循GPL协议的,可以免费使用,让黑客们尽情的施展(这里的黑客指技术大牛,不是指那些做坏事的人)。于是Linux提供内核(Kernel),GUN提供外围软件,就这样GUN/Linux诞生了。
所以,当你看到这里的时候,你只要大致了解Unix是1970年出现的,Linux就是仿照Unix来的,并且因为Unix开始收费,有人反对他,于是有了GUN运动,并且GUN运动的党章就是GPL协议。
4、操作系统的基本概念
上面主要介绍了Linux以及Unix的一些历史故事,下面将进入正题了。在进入正题之前,我们得先简单了解一下操作系统。
我们都知道,
CPU是由运算器和控制器组成的,程序在运行的时候,就是调用CPU的指令进行一些运算操作,例如加减乘除。CPU能够调用的指令集合,就是指令集。但是不幸的是CPU的生产厂家不止一家,例如Intel的,以及AMD的。即便是同一家厂商生产CPU,不同平台之间指令集也不一样。那么程序员在编写程序的时候就会面临一个尴尬的局面,就是当你在某一个平台上编码的时候,如果想将程序移到另外一个平台上,就需要重新编码,重新编码还不是最可怕的,可怕的是你得学习对应的新平台的指令集。
一般而言,我们称直接在硬件层面上进行编程是硬件规格层的编程(hardware specifiacation),例如,调用CPU提供的指令等,你需要知道的不同硬件提供的API各不相同,如果程序员要编程,还得学习硬件,那得多难,所以我们需要一个通用软件,能够屏蔽底层硬件的差异化,由这个通用软件提供统一的接口,那么这个通用软件就是操作系统。
操作系统将底层硬件提供的接口进行一次封装,程序员直接调用操作系统提供的封装好的接口就是系统调用。
但是系统封装的接口会很多吗?显然不会很多,因为如果操作系统提供几万个接口,程序员还不学的累出血,一般而言,系统提供的接口都是短小精悍,我们需要像搭积木一样,将其组装起来提供更为丰富的功能,并且将组装好的代码做成库,供别人使用,这样一来,就是库调用,在Windows上库一般都是dll(Dynamic Link Library)而在Linux或者Unix上我们一般称之为so(shared object),就是共享的代码,大家都可以调用。
所以当你看到这里的时候,你只需要知道原来操作系统的其中一个功能就是将硬件提供的功能进行封装,我们调用操作系统提供的封装好的接口就是系统调用(system call),然后将系统提供接口组合起来提供更丰富的形成库,在调用就是库调用。当然操作系统还有其他的功能,例如cpu的时间分片,安全保障等。
5、Linux的发行版本
我们知道Linux或者Unix是一个操作系统,1991年的Linus Torvalds公布的其实是Linux的内核(Kernel),但是你得知道的是,公布的是源码,并不是编译好的直接可以安装的操作系统,我们如何安装一个操作系统呢?很简单啊,就是先下载一份源码,然后进行编译安装,但是编译的时候编译程序需要运行在操作系统上啊,操作系统呢?还没编译呢。于是就陷入了一个死循环中,就是我们要安装操作系统,就需要编译,编译的时候就需要操作系统,这样就是鸡生蛋,蛋生鸡啊。
这里就需要引入交叉编译了,
具体做法就是假设我们要在电脑A上安装Linux,我们把A的硬盘拆下来,放到已经安装了操作系统的电脑B上,然后编译,将编译好的操作系统放到硬盘上,再把硬盘装回去,开机启动,这就是交叉编译安装操作系统。
这得有多难啊,入门难度实在是太高了,所以我们迫切需要一种简单的方式来安装。于是就出现了这么一种公司,他将已经公开好的Kernel(内核)在加上一些开源的周边软件收集起来编译成二进制文件放到网上供别人使用,其中ReadHat(红帽)就是其中著名的一家。我们知道Linux是遵循GPL协议的,也就是不能用来卖钱的,那么他们怎么挣钱呢?既然不能卖软件,那么就卖服务呗,比如说,发现了Linux漏洞,然后ReadHat修复,如果你买了我们的服务,我们就将补丁程序给你,并指导你安装,你有啥解决不了的问题,我们给你解决,毕竟大牛还是比较少的,所以服务似乎也挺赚钱的。
世界上总是不缺少好事者的,ReadHat既然可以这么做,为什么就不能有好心人免费做呢?是的,有一个社区,他们把ReadHat的源码拿过来,然后编译成操作系统放出去,这就是CentOS,就是社区版的ReadHat,所以基本上ReadHat的补丁包出来一个月之后,CentOS就出现对应得补丁包了。这对于ReadHat是好事,还是坏事呢?说不准,个人觉得是好事,因为在2014年年初传来消息,ReadHat收编了CentOS的团队。就像 MSDN I TELL YOU上面都是微软的正版软件,可以随便下载,但是他却变相的为微软做了宣传不是吗。
所以当别人说Linux的版本时,一般来说有两个版本,一个是内核的版本,一个是发行版的版本。例如登陆终端执行命令
[root@localhost ~]# uname -a
Linux localhost.localdomain
2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# more /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
从上面可以看出,uname -a 查看了内核的版本,是2.6.32的版本,而more /etc/issue就是查看发行版的版本,表示了我安装的这个是CentOS的 6.5的发行版。
目前最新的内核更新到4.10。具体可以到官网查看: https://www.kernel.org/
6、Linux的哲学思想
1、一切皆文件,把几乎所有的资源都组织成文件的格式,我们只需要一个文本编辑工具,就可以修改工作特性了,很方便。
2、组合小程序,完成复杂任务,例如将系统调用组合行成库(在Linux上就是so结尾的文件)
3、尽量避免和用户交互,windows上就是弹框,让你点确定。在linux上,如果执行一个程序之后没有任何提示,那就是最好的提示。
4、使用纯文本文件保存配置信息,这个在第一点中就可以看出。
7、如何获取CentOS的发行版本
国内有很多 开源镜像站点可以下载,还可以登陆官网。
官网: https://www.centos.org/
阿里云: http://mirrors.aliyun.com
搜狐: http://mirrors.sohu.com
网易163: http://mirrors.163.com
下载方式就是找到对应centos,点击想要下载的版本号,点击isos文件夹,点击想要下载的对应得操作版本32位的还是64位的,然后下载iso结尾的文件就行了,支持迅雷下载哦。
minimal版本就是迷你版本,常见的工具没有整合进来,我一般用这个。DVD1 DVD2就是完整版本了,不过DVD2是对1的补充,其实有1就足够了。还有其他的各种版本具体百度问问就行了。
8、总结
这篇是Linux运维的第一篇,就是一些基础常识需要了解的,总的来说就是看完之后能大致知道Linux,Unix关系,ReadHat与CentOS关系,以及GUN运动,GPL大致是什么,以及系统调用,库调用什么的大致什么意思,什么是内核版本,发行版本,如何获取操作系统。简单知道这些就行了,下一篇将介绍如何安装Linux,以及VMware的使用。