第八讲——linux基本命令 前面整了一大堆命令,我都有些不太好意思继续说下去了,为了在这条成神路上走下去,我还是要坚持坚持的。 这么多命令要是记不住咋整?那不是嗝屁了? 还好,linux这个时候就很人性化了,人性化在哪里?不要着急,这就化化妆出来。 基于前面讲的内置或者说是内部命令和外部命令,要讲的这个就是基于命令划分的。 linux命令众多,我们也不可能每一个都会使用,所以开发者们考虑到了这一情况,为每一个命令都配备了一份使用说明,怎么样,很人性化吧?但是可惜的是其显示内容是英文………… 首先,我们来说一说内部命令的命令帮助(使用说明书),查看内部命令的使用说明需要使用一个命令——help,是的,救命。使用格式为 help 内置命名 是不是很简单!通常内知命令的说明书都比较简短。 外部命令的使用说明简单直接 man,是不是很暴力很直接,其使用格式 man 外部命令 外部命令就像那啥一样又长又臭,我们只需要找到自己需要的就行。这里就需要涉及翻页操作, 空格键 下一屏(同下一页) B(键盘上的按键) 上一屏(同上一页) J (键盘上的按键) 下翻一行 回车键也是可以的。 K (键盘上的按键) 上翻一行 Q (键盘上的按键) 退出说明书 我们还可以使用 命令 –(两个短横线)help 大多数命令都可以这样操作,俗话说帮人帮到底嘛。 如果我们不小心man了一个内部命令回事一个怎么样的情况? 不要怕,man会将所有的内部命令指向bash的帮助文档,所以退出help 内置命令就好。 man手册中需要注意的几个标识: NAME: 命令名称及功能简要说明 SYNOPSIS:用法说明,包括可用的选项(option) DESCRIPTION:命令功能的详细说明,包括每一个选项的意义。 OPTIONS:说明每一个选项的意义 FILES:此命令相关的配置文件,这个有意思,因为有些命令是有配置文件的,不仅有还有一定格式。 BUG:错误报告,这个就是你发现了说明错误,使用提供的联系方式上报 EXAMPLES:使用示例 SEE ALSO:另外参照 所以说要学习英语,我就不重复三遍了,累。 除了这些,man手册里还有一些符号: [] :中括号,表示其中的内容可以省略。 | 竖线,表示多选一。 <>尖括号,必须要给出的内容,非可选!!!!看清楚,这是必选项 … 省略号一样的东西,表示可以出现多次 {} 大括号,没有特殊意义,用于man手册里的分组 还没有结束,不要慌,不要急。上面说到了一个命令可能会有配置文件且还有格式,这个格式怎么查看? 要干这件事我们需要知道man是分章节的,不信可以返回去man一个命令,上面有一个你刚刚输入的命令,而且后面还跟了一个小括号,里面有一个数字!!这个数字就是章节号,这玩意儿是随便给的嘛?当然不是,是有规定的,得按规矩来。 man常见的章节有8个 1 用户命令,所有的用户都可以使用的命令,(也就是/bin,/usr/bin,/usr/local/bin下的命令) 2 系统调用(system call) 这玩意儿又出现了,但是我们用不上 3 库调用 (library call) 这玩意儿也出现了,大使我们也用不上 4 特殊文件 特殊文件是设备文件,设备文件是个什么东西?记得前面的块设备、字符设备嘛,就那玩意儿,设备文件在磁盘上没有存储任何内容,仅有元数据,只是作为设备的访问入口存在的。 5 文件格式 一些较为复杂的命令通常都有一个配置文件的文件,在这个文件中保存了可以通过选项指定的程序执行属性……有没有很打脑壳,有就对了,简单点说,就是命令配置文件的内容格式,在这里会做一个详细说明。 6 游戏 嗯,游戏都比较吊,什么推箱子贪吃蛇…… 7 杂项 Miscellaneous 8 管理命令 (/sbin,/usr/sbin,/usr/loacl.sbin)只有管理员才有权限执行的命令。 那我们怎么才能知道一个命令属于man中的哪一个章节呢?有一个命令可以实现,whatis,使用方法很简单 whatis command(命令) 有一点我们是要知道的,如果是最小化安装,man命令是需要额外的安装包才能实现命令章节的查看的,安装以后慢慢说。 好了至此我的逼逼叨叨先暂时告一段落。 给自己讲linux 2016-12-08 评论 1483 次浏览
第七讲——linux基本命令 上一节我们讲到了使用cd命令可以进行目录的切换,当然,对象是绝对路径,不过有两个目录是除外的 1 当前目录“.” ./ 表示当前目录 2 上一级目录(父目录) cd .. 可以切换到上一级目录 好了现在我们可以自由的切换并且显示目录内的内容了。那么现在是时候告诉大家文件类型在哪里显示了 我们先进入/etc 目录下,再使用ls -l 命令,请记住,在当前目录下使用ls命令参数是可以省略的。 每一行的前面有十个字符,什么短横线优势r又是w啥的,眼睛都看花了…… 好了,说正事,第一个字符就是我们之前讲的文件的类型,如果想查看当前目录的信息则使用ls -d,当然也可以ls -d -l,但是一般来讲,我们在同一个命令中一个短横线的选项是可以合并的,,比如这样用ls -dl。 这样查看文件的类型我感觉有点累,而且有些眼花缭乱,而file命令就就解决了这一繁琐的步骤,就能告诉我们想要的信息,当然是英文显示的,额……学习英语很重要、很重要、很重要。 既然我接触了命令这玩意儿,那么就得知道啥叫命令以及命令的类型。 命令是什么? 其实命令就是一个可执行的程序,我们在CLI中键入命令回车时,系统会从环境变量里定义的目录下去找这个命令,并执行。这里提到的环境变量,简单的说环境变量就是定义当前用户工作环境的,变量就会有变量名,环境变量的变量名是PATH,里面存储了以冒号为分隔符的多个路径。 命令的类型: 在linux中,命令分为内置命令,我们之前讲了shell其实是一个命令解释器,所以这些内置命令是在shell上运行起来的,换一个shell环境命令可能就不是那样的了,所以这里说的内置命令是集成在shell中的命令,我们要知道操作系统内核是不提供命令的。 外部命令: 外部命令在文件系统的某个路径下会有与之对应的的同名的可执行文件。系统为了让用户方便的使用这些命令就给我们内置了一种机制,也就是环境变量,存放命令的目录加入环境变量里后,我们就不需要在一个命令前面输入冗长的路径,这个机制大大的提高了管理员的工作效率。 我们需要知道的是,当我们执行一个命令的时候,系统就会挨个从环境变量里保存的目录下查找一个命令,直到第一次找到为止,也就是说,两个同名的命令只有一个会被执行,被执行的那个命令的存放目录通常在PATH中靠前。 难道说每一次执行命令都要去目录中查找嘛?那得浪费CPU多少时间? 在linux操作系统中,会将使用过的命令映射到一个连续的地址空间上,并以关键字记录其位置,形成一个散列,这个就比较诡异了,不论其中的数据量多少,每一个数据被找到所消耗的时间是相等的,这玩意儿叫hash,从hash中查找数据的速度为O(1),这个O(1)就是表示,在hash表中查找任何一个文件花费的时间是相等的。 我们怎么才能知道一个命令属于外部命令还是内置命令呢? type命令 解决了这一问题,type的使用方法很简单: type 命令 将相应的命令进行type,就会知道这个命令到底是哪里的,如果是内置命令则会显示一串英文字符,其大意就是这是一个内置命令,如果是外部命令,则会显示一个命令的绝对路径。 这些绕来绕去的命令很是古怪啊,感觉就不是一般人用的……是的这本来就不是给一般人用的操作系统,忍一忍,不然遍地都是高手哪还有咱的立身之处。 给自己讲linux 2016-12-07 评论 1487 次浏览
第六讲——linux基本命令 嗯……说了半天估计云里雾里的,关键是什么看到这些玩意儿。 好,开始我们的第一个命令——ls命令 在命令行中键入ls然后回车,就可以看到有一些文件显示在屏幕上,很神奇的命令,但是奇怪的是并没有什么文件类型的符号显示出来……好,这就要涉及到一个叫做命令格式的玩意儿,规矩真多,但是没有规矩不成方圆。 #command(命令) option(选项) arguments(参数) 命令格式就是这样,在使用的过程中我会慢慢解释。 首先,我么需要知道的是不同的命令选项区别很大,而常用命令好几百个,这就意味着需要记住大量的命令以及相应的选项功能。这里我们说到了功能,是的,选项就是调用命令提供的功能的,因为我们的需求各不一样,总不能一个要求开发一个命令吧?要是那样我会把大家先疯掉。 我们就先来讲一讲ls命令的选项 -l 选项前大多是需要加短横线的,因为这样命令才知道我们调用了这个功能,-l就是列出目录下的文件的详细信息 -h 以人类便于识别的单位显示(人性化显示),默认显示文件的大小单位是字节,-h就会以KB、MB、GB之类的单位显示,这个选在在大多数命令中都存在,说明了还是蛮人性化的。 -i 显示文件的iNode节点号,这个在硬盘存储的时候会将。 -r 逆序显示文件 -R 递归显示(recursive) 显示目录中子目录下的所有文件不论子目录个数,全部展开。 -d 显示目录自身属性 -a 显示目录下的隐藏文件,linux下的隐藏文件是以点“.”开头的。 -A 显示目录下除了.(当前目录)..(上一级父目录)之外的所有文件。 以上就是我们会常常用到的选项,那么问题来了,我们怎么操作才能显示我们想要查看的目录?这个就是命令参数的作用了。 ls的命令参数常常是一个目录,通常使用绝对路径 例如我们要查看/etc/目录下的所有文件的详细信息,则这么使用 ls –l /etc 然后回车即可,/etc就是命令的参数,也就是操作对象。 当然,如果ls命令不加参数,默认是显示当前目录下的文件信息, 那么我们怎么才能知道自己当前处于哪个目录?这就有了pwd命令 pwd没有任何选项和参数,其目的就是为了显示当前所处位置。 我们总不能待在一个地方不动吧?比如我还想到/etc目录下去,这个是可以完全实现的,利用cd命令我们就可以实现目录间的切换。 比如我要到/etc/inittab.d目录下去,那么我们可以 cd /etc/inintab.d 给自己讲linux 2016-12-06 评论 1545 次浏览
第五讲——linux操作系统 额……为什么不是win系统?因为我要学linux操作系统,还有什么疑问吗? 上一节我们已经能够进入一个用户的登录界面了,在linux中我们可以选择不同的shell来进行登录操作系统,前提是你得安装了相应的shell。 在linux中可以启动多个shell,而且还支持同一用户登录多次,且每一个相同用户之间互不干扰。在进入命令行后,如果有需要,可以执行startx命令进入图形界面,这个图形界面也要事先安装好才可以,当然,什么时候需要什么时候安装也是可以的。 在开始linux操作之前,我们需要知道这么几件事情。 1. 编程语言的种类,按照编译方式大概可以分为两种: 1) 静态编译,静态编译后的程序大家用的比我流畅,比如看小电影的播放器啊,游戏啊什么的。常见的静态编译语言有C语言,C++,C#等等,它们共同的特点就是需要一个集成的开发环境(IDE),当然理论上说在记事本里也是可以写程序的,但是记事本不能检查语法错误,所以程序员就迫切需要一个能检查语法错误的环境,于是就有了IDE,IDE集成了编译器,编译器的作用就是将代码转换成相应硬件能识别的二进制代码,因为CPU架构不同所以支持的二进制格式也就不同,CPU所支持的二进制格式我们称为ABI(application binary interface),也叫应用二进制接口,这玩意儿了解一下就可以,不必深究,要是还得研究CPU是怎么制造的那估计很多人都要疯了。在静态编译时需要调用很多的库调用或者系统调用,在win下库文件比较好认识.dll的文件就是,比如冷不丁就报个什么什么.dll(dayamic link library)文件缺失,就是这玩意儿,又叫动态链接库。在linux中库文件通常以.so结尾(shared object),又叫共享对象,也称为dso(dynamic shared object动态共享库),这里需要声明的是,linux中并不是靠文件后缀来区分文件类型的,这种命名仅仅是为了方便操作。 2) 动态编译,这个玩意儿就诡异了,首先它的工作原理就是你可以写一句它执行一句,也可以写完了一块儿执行,对,就是直接执行就好了,不需要编译这个过程,但是它需要一个解释器(不同于编译器),有了解释器以后,就可以按需执行,甚至你可以边修改边执行,这类语言有bash,Python,Java等等。但是解释器是一个通过静态编译得来的软件,这个很好理解,它得单独运行起来给解释性语言提供一个解释环境,这有点像GNU’s Not Unix的前期,不是Unix但是跑在Unix上,这个世界就是这么神奇。这样我们就能够理解在linux虚拟终端下的bash(命令行)为什么能敲个命令回车就能执行,那些命令就是规则,而我们输入命令只是调用其内定的规则而已。 2. 好了,还是讲讲linux操作系统,linux操作系统有这么些哲学思想。 1)一切皆文件,使得不管是硬件还是什么的在linux操作系统上体现出来的都是一个文件。 2)使用纯文本格式保存软件的配置信息,大多数情况下,管理员都是通过编辑配置文件来完成相应的工作的。 3)使用功能单一的小程序组合起来完成复杂的任务。 3. 文件类型: 在linux中文件大致有这么些类型 – 用一个短横线来表示这是一个普通文件 d 表示是一个目录文件,是的,目录也是一个文件,是不是觉得匪夷所思?不过我现在习惯了而且也是这么认为的。首先,目录是一个路径映射文件,路径就是从指定起点到达目的地所经过的具有标志性的地点位置标识。实现这一机制的叫做文件系统,文件系统提供了层次化的管理机制,所以我们进入一个目录发现里面可能还有目录。 在linux中所有的文件属于文件体统,所以它会有一个致高点,正所谓普天之下莫非王土,率土之滨莫非王臣,王就是根目录(/),从根目录开始,你所经过的每一个目录都是标志性建筑(目录节点),他们构成了直通目的地的绝对路径,有绝对路径就有相对路径,但是相对路径一定得处于绝对路径的某个标志性建筑旁边才可以,不然你还得相对来相对去的。 b 块设备文件(block) 块设备文件最常见的就是一些存储设备(硬件)的设备文件。 c 字符设备文件(charcter)这些文件往往是键盘鼠标显示器之类的字符输出输入设备的设备文件。 l 符号链接(symbolic link file) 又叫软连接,有点win下快捷方式的味道,但是有区别。 P 命令管道(pipe) s 套接字文件 给自己讲linux 2016-12-05 评论 1484 次浏览
第四讲——操作系统内部结构 要讲操作系统内部结构,先讲一讲什么是程序。 程序就是个程序,鼠标双击就可以运行了嘛,有啥好讲的?是不是? 所谓的程序就是按照人们的意愿,将计算机硬件的功能调用来完成一些特定工作的代码,当然光是代码还是不行的,因为计算机不认识啊!计算机比幼儿园的小朋友都笨,只认识0,1两个数字,其他的怎么也学不会,0,1组成的字符串叫做二进制。 所以写完代码还得将其转换成相应硬件平台能够读懂的二进制代码,为什么说是相应硬件平台呢?因为计算机硬件也是发展的,既然在发展那么就会有新旧之分,这里面起到十分重要作用的叫做CPU,人们常说的硬件架构大多数指的是CPU芯片的不同系列,比如大家耳熟能详的inter的酷睿I系列,什么I3,I5。I7,还有老一辈的奔腾系列等等,这些CPU采用的架构不一样就导致了其内部的指令集存在差异,指令集就是CPU厂商为了提高开发人员的效率所开发出来的指令,使用这些指令就能够调用CPU的功能,这玩意儿也叫汇编语言。 我们常见的CPU来自两大厂商inter和AMD,有X86或者X86_64的平台架构,有一个大家经常使用却很少关注的手机CPU,它来自移动平台的霸主ARM,这家公司比较诡异,它只生产知识产权,并不生产任何设备,好像是英国的一家公司。 程序员通过编译器将代码编译之后就能够在机器上运行,能运行的这玩意儿叫做程序。 一个程序具有局部性原理,什么叫局部性原理呢? 1. 从时间上来说,程序具有时间上的局部性:已经访问过的数据还需要用到,这让才使缓存具有意义。 2. 从空间上来说,程序具有空间上的局部性:访问一个数据时,会将它挨着的数据同时提取,这样就避免了从内存中重复读取。 另外,程序需要移植也是因为不同的机器底层硬件不尽相同。 早期的操作系统叫批处理系统,就是那种需要在纸带上打孔然后输入的那种系统,这种操作系统一次只能执行一个完整的计算过程,效率低下,后来将更长的织带打上多个程序,这样虽然快了一些但是依然一次只能执行一个程序,也叫做一个作业。因为机器的内存只有这么一段,而这段内存是完全被运行的程序霸占的,也叫做全权访问,这就造成了CPU计算能力的大量闲置,在当时计算代价是相当昂贵的,这迫使那些科学家、学者们不得不像一种办法解决这个问题。 后来就有了多用户多任务的系统的实现,在这里面引入了进程的概念。 首先,计算机的运算需要CPU和内存,实现多任务就需要将资源进行划分,CPU的运算是随着时间的流逝而完成的,是由时间而驱动,因此将CPU按时间片进行划分(slice CPU),内存引入了分段机制,对被划分的每一段来说都有自身的起始作业位置(相对位置)。 怎么对这些计算机资源进行划分,是由操作系统实现的,操作系统也是一个软件,但是操作系统只是提供一些功能,并不完成具体的工作,所以是一种通用软件。 操作系统(确切说应该是操作系统内核)提供的功能可以大致分为 1. 进程管理 2. 内存管理 3. 提供文件系统 4. 提供网络功能 5. 提供硬件驱动 6. 提供安全机制 7. 内核还负责完成一个程序的启动,停止,回收,切换等等 所以说,操作系统是运行在硬件上,负责管理硬件资源,而且将硬件资源所提供的计算能力切割分配给各个进程,并完成协调。 这里讲到了将硬件资源分配给各个进程,为什么不是程序? 我们要知道,一个程序是放在硬盘上的,不去动动手脚这个程序是不会自己动的,程序要运行起来就得先加载到内存中去,加载到内存的这个玩意儿我们称为进程,进程是有生命周期的,也就是说它不能黏在内存中不走,干完工作就得离开,不然就是占着茅坑不拉屎,浪费硬件资源。 操作系统是将计算机硬件的计算能力用软件二次模拟出来,所以其他程序看到的不是硬件,而是操作系统所提供的接口,称为system call,system call都非常低层,他们负责底层硬件的各个功能的提供,这就降低了程序员的开发难度。有了操作系统后,任何程序都不能再和硬件直接交互,要想使用硬件的功能,都必须要通过操作系统进行协调。 但是这种叫做system call(系统调用)的接口用起来还是非常麻烦,于是就有一些人,通常是系统开发人员,将系统调用进行再次封装成较为容易使用的接口,间接提供给开发人员,这个封装了系统调用的接口被称为库,为了实现多个功能,所以就有各种各样的库。 我们上面说的程序的运行,实际上任何一个程序都有一个程序入口,就像C语言里的main{}一样,比较诡异的是库是一堆程序,却没有入口,但是他可以被其他程序调用执行,库虽然不能独立执行,但是它被调用后会提供一个统一的调用机制。 库(library)只是提供接口,调用称为call。 系统调用(system call)是非常接近硬件的,所以对于开发者也是不怎么友好的,系统调用由内核(kernel)提供,操作系统除了提供内核外,还需要将内核所提供的系统调用输出出来,而这种输出是通过较为高层一点的调用接口来实现,称为库调用(library call)。 库调用简写为LIB,又称为API(应用编程接口)。 程序员就是负责调用计算机所提供的某些功能,然后开发程序的过程。 但是我们要明白,一个程序可能运行在库调用上,也可能运行在系统调用上,运行在系统调用上的程序执行的效率可能会更高,但相对也会更难,获得的权限也就越大,此处限于水平就不拓展开了。 我们需要知道,当计算机运行起来之后,内核和程序都是放在同一个物理内存里的,那么怎么保证内核的稳定性呢?要是一个恶意程序捣蛋一下那不坏菜了? 为了保护内核的安全,CPU厂商从硬件上做了限定,因为内存控制器都在CPU里面嘛,所以inter平台提供了一种四个同心圆级别,最内圈为零级别,又称为特权模式,零级别会映射到内存中某一段处于保护的空间当中,只有内核才能工作在特权模式下,而且其他的程序只能运行在最外层,中间两层没有使用。 所以在任何情况下,所有应用程序是不能访问内存中处于零级别的区域的。 现在就可以知道,当计算机运行起来之后,内存会被分为三段,第一段是开机时BIOS的映射程序,第二段就是处于零级别模式的内核,第三段则被其他应用程序所共享。 内存中的数据如果不是连续存储的,则会产生内存碎片,这个事情内核会解决的。 好了我现在已经知道了系统内核、系统调用、库调用,有了这些操作系统就可以运行了吗?其实原则上来说只要有内核计算机就能跑起来了,但是问题在于你怎么去和计算机交互?难道是吼两嗓子?显然这是行不通的。 所以我们需要计算机提一个供能够和我们交互的窗口,这个窗口就是shell。 Shell就是把计算机的功能通过人类容易理解的操作方式输出的一个接口,也称为人机交互接口。有了shell以后我们才能够去执行程序完成一些工作,才能够操作计算机看看小电影什么的。 广义上的shell有两种。 1. 图形化的shell,我们现在使用的windows系统提供的就是图形化的shell。 2. 命令行的shell,可以借鉴windows下的cmd,就是那个黑黢黢的命令行。而我们的linux大多数情况下都是在这样的窗口下运行的,有时候甚至连显示器都没有,当有需要的时候再接上显示器。当然,这一步还非常之遥远。 在linux上的图形化shell常用的有三种,称为GUI(GGraphical user interface) 1. GNOME 使用C语言开发的 2. KDE 使用c++语言开发的 3. Xface 主要应用于嵌入式轻量级桌面系统 GUI接口大多通过鼠标操作,就像玩游戏那样在屏幕上点来点去。话说鼠标是施乐公司的雷锋实验室PARK发明的。 但是linux主要工作在命令行模式下,种类很多,称为CLI(command line interface) 1. bash 最常用的,功能强大而且开源 2. csh 3. zsh 4. ksh 5. tcsh………… 我们正常登陆命令行界面通常称为虚拟终端(多个模拟的显示器),tty1-tty6,通过Ctrl+Alt+(F1-F6功能键)实现虚拟终端切换。 这里涉及到一个问题,用户的身份验证。总不能谁都可以动动你的电脑吧? 所以就有了认证的概念,认证机制可以使指纹、虹膜、密码等等等 我们的密级没有那么高,用密码就差不多了,主要是更高的防护手段代价也很高。 我们首先会创建一个标识身份的用户名,但是这个用户名可能很多人都知道,所以就有了密码作为防护手段,并且使用用户名和密码来限定使用者的权限。 认证的过程就是鉴别某个用户是否就是声称的那个人的过程,认证并不代表就是全部,之后还要完成资源访问的授权,并且系统还会做相应审计,审计就是把你干的事情都统统记录在案,以后查起来就会有依据。审计通常会以日志的形式保存在计算机中。 那么至此,我们已经能够进入一个操作系统了,可以实现看他几天几夜伟大的小电影梦想了…… 给自己讲linux 2016-12-04 评论 1827 次浏览
第三讲——讲一讲系统 说起操作系统来,大家肯定不会陌生,毕竟大多都是那么多年的资深骨灰级玩家,我这种小流氓那是肯定入不了法眼的。 我们常见的操作系统是由大名鼎鼎的微软公司开发的操作系统——Windows,不管是XP,7,8,9,10还是什么,面向的都是桌面级用户,也就是说开机之后操作系统会给你提供一个图形化的操作界面,你可以用鼠标东点点西点点,可以偷偷摸摸看点小电影啥的,这个就是windows操作系统给我们提供的与计算机交互的界面。 操作系统有很多,说成百上千一点儿也不夸张,但是按照操作系统内核来划分大致可以分为以下几类。 1.Windows NT 这就是windows操作系统的核心 2.Unix 采用这一核心的操作系统就太多了,就连前些年割肾都要去买的苹果全家桶,其核心也是基于Unix,Unix大旗下大将颇多,比如 惠普公司的 HP-UX Sun公司的 Solaris 还有一些是AIX,sco Unix,Unix wave等等 3.linux linux核心演变到今天早已无处不在,市场占有率很高的安卓手机,其核心基于linux,只是上面跑着一个Java的虚拟机,所以安卓系统与linux操作系统区别还是很大的,其安全性的差别因手机厂商的能力各有不同。 Linux旗下发行版那叫一个多,Redhat,centOS,Debian,Ubuntu,mint等等等等。 大家可能注意到了我在描述linux的时候用了“发行版”三个字,为什么用这么个词来表述? 首先,发行版这个词并不是我创造的,我只是引用一下,这个就得从linux的出生说起了。 Unix 1969年在贝尔实验室诞生,期初的时候是跑在一台PDP-7型号的计算机上,用来实现一个飞机大战的游戏,后来这个游戏没有火,运行这个游戏的操作系统火了,当时的编程语言大多都是汇编语言,汇编语言对硬件依赖性很大,不能很方便的移植到其他计算机上,这对于众多开大者来说很不方便,于是Unix的作者肯•汤姆森和另一名高手丹尼斯•里奇一起合作改写Unix,可是当时并没有合适的高级语言来给他们使用,于是两人先将一门叫做B的语言改写成了适合他们使用的语言,这个语言大家不会陌生,就是大名鼎鼎的C语言。条件具备了以后肯•汤姆森和丹尼斯•里奇用C语言将Unix操作系统重写,这使得Unix和C语言得到了迅速的发展,后来因为贝尔实验室被其他巨头收购,就收回了Unix的版权,也就是说使用Unix是要付费的,在此之前是开源的,开源使得Unix在很多大学里生根发芽,这其中最著名的就是BSD,是由加州大学和伯克利大学合作的产物。由于版权收回,使得BSD面临了一场旷日持久长达十年的官司,这十年里很多人畏于版权放弃了Unix系统,转而使用其他的操作系统,这使得Unix在市场的占有率大大受挫,Windows就是在这个时间段里发展起来的,虽然性能不好而且经常死机,但是它便宜啊,与其他操作系统绑定硬件出售的方式不同,Windows操作系统(那时还叫DOS)卖授权,就是给人家机器上安装操作系统一台几美元的价格,这在当时一个操作系统动辄上万刀来说不值一提,就算是性能差,因为没钱,所以能忍就忍!这一巨大的价格优势使得微软迅速壮大,苹果在那个时候是软硬件一起卖的,虽然性能不错但是高昂的价格让人望而却步。后来Windows迅速推出了桌面版的Windows NT,98,2000,2003,xp等等,一路势如破竹,当Unix与BSD醒悟过来的时候十年已经过去了,操作系统的江山几乎被微软的操作体统霸占。但是微软操作系统的不稳定为以后再服务器上的道路埋下了深深的隐患,谁也不想正热火朝天的赚钱,然后机器说崩溃就崩溃了。 Unix的优势在这个时候展现了出来,但是其高昂的价格依旧让人难以接受,一位大学教授为了教学需要,自己写了一个操作系统内核,但是这老头儿很固执,他决不允许 别人往里面加代码,这让一位小伙伴尤为恼火,这个小伙伴叫李纳斯,李纳斯是个富二代,家里在他生日的时候送了他一台计算机,装的是Unix的操作系统,这小伙儿觉得用着不爽,恰好在网上看到了老教授售卖的系统附带源码,于是就弄了一份,老教授的固执己见让李纳斯爆发了小宇宙,只花了几周的时间写了一个操作系统,叫做Linus,并以GNU(开源协议)协定将其放到了网上,这不打紧,这对于刚好需要一个操作系统内核的GUN组织来说简直是雪中送炭,GNU是一个递归缩写GNU’s Not Unix,但是GNU的所有软件都是跑在Unix上的,这不得不说很打脸,好几年都没有改变,知道Linus这个内核的出现,后来这个内核在全球众多志愿者高手们的努力下壮大起来,至于后来怎么就变成linux了就需要交给各位去研究了。GUN是一个提倡软件代码开放的组织,他们认为代码是全人类的共同财产,这在当时有众多大神般的人物支持,这个组织的倡导者是个很有实力的教授,gcc编译器就出自他的手,还有一款功能很强大的文本编辑软件Emace,且都是开源的。 这样一来万事俱备,东风也有了,所以作为完全开源的linux迅速的发展流行起来,但是这是在高手之间的流行使用,对于普通人来说,一大堆的源代码没法使用。 于是就出现了一些如Redhat的组织或者商业机构,他们把源代码收集起来,把内核和各类软件凑到一起,拼凑成一个可以供人安装使用的操作系统,这个操作系统称为发行版,当然这些发行版也是遵循GNU协定的,一样会公布源代码,而且这些组织或者商业机构还开发了相关的软件管理软件,例如Redhat的rmp,Debian的apt等等 解释发行版三个字整了洋洋洒洒一大片,阿弥陀佛,罪过罪过,水平有限,凑合着看吧。 给自己讲linux 2016-12-03 评论 1783 次浏览