手记

Linux主要特性

Linux主要特性

Linux优点

模块化程度高

Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分;其独特的模块机制可根据用户的需要,实时地将某些模块插入或从内核中移走,使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要

跨平台的硬件支持

由于Linux 的内核大部分是用C 语言编写的,并采用了可移植的Unix标准应用程序接口,所以它支持如i386、Alpha、AMD和Sparc等系统平台,以及从个人电脑到大型主机,甚至包括嵌入式系统在内的各种硬件设备

丰富的软件支持

与其他的操作系统不同的是,安装了Linux系统后,用户常用的一些办公软件、图形处理工具、多媒体播放软件和网络工具等都已无需安装。而对于程序开发人员来说,Linux更是一个很好的操作平台,在Linux 的软件包中,包含了多种程序语言与开发工具,如gcc、cc、C++、Tcl/Tk、Perl、Fortran77 等

可靠的安全性

Linux系统是一个具有先天病毒免疫能力的操作系统,很少受到病毒***。
对于一个开放式系统而言,在方便用户的同时,很可能存在安全隐患。不过,利用Linux自带防火墙、***检测和安全认证等工具,及时修补系统的漏洞,就能大大提高Linux系统的安全性,让***们无机可乘

良好的稳定性。

Linux 内核的源代码是以标准规范的32 位(在64 位CPU上是64 位)的计算机来做的最佳化设计,可确保其系统的稳定性。正因为Linux 的稳定,才使得一些安装 Linux 的主机像Unix 机一样常年不关而不曾宕机

免费/少许费用

linux是基于GPL(GUN项目)授权下的产物,开源。稳定,不像微软需要不断更新系统,缴纳高额费用

安全性、漏洞的快虚修补

由于linux的免费开源属性,让linux拥有大量的用户,因此获得最新的安全信息共享相对简单些

多任务、多用户

和Unix系统一样,Linux系统是一个真正的多用户多任务的操作系统。多个用户可以各自拥有和使用系统资源,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响,同时多个用户可以在同一时间以网络联机的方式使用计算机系统。多任务是现代计算机的最主要的一个特点,由于Linux系统调度每一个进程是平等地访问处理器的,所以它能同时执行多个程序,而且各个程序的运行是互相独立的

用户和用户组的规划

在linux系统里,文件属性分为可读可写可执行来定义一个文件的适用性,此外,这些属性又可以分三个种类(文件所有者,文件所属用户组,其他用户)。有很好的保密性

相对不消耗系统资源

运行环境对硬件的要求比其他系统相对来说没那么高,当然如果要搭建大型服务器除
###完善的网络功能
Linux 内置了很丰富的免费网络服务器软件、数据库和网页的开发工具,如Apache、Sendmail、VSFtp、SSH、MySQL、PHP和JSP 等。近年来,越来越多的企业看到了Linux 的这些强大的功能,利用Linux 担任全方位的网络服务器

##Linux缺点

没有特定的支持厂商

在linux上的所有套件几乎都是自由软件,自由软件的开发者大部分都不是盈利型的团体。所以在linux上面的软件如果发生问题,只能自己寻找解决方案

游戏支持度不足

现在游戏的风靡程度超乎想像,但在Linux上开发的大型游戏几乎没有,这也间接让linux很难进入一般家庭。

专业软件支持度不足

很多专业型软件在linux上无法运行(例如很多市面上的专业绘图软件)

图形界面不够好

这恐怕是影响Linux桌面端普及的最重要原因了。但随着时间的流逝,X-window也变得越来越好用,越来越优秀了。目前各大Linux发行版,都能很好地做为桌面端计算机使用

Linux开发语言

说到在 Linux 下的编程,很多人会想到用C语言,Linux 的内核、shell、基础命令程序,也的确是用C语言编写的,这首先证明了一点,C语言很强很通用。

到目前为止,C语言依然垄断着计算机工业中几乎所有的系统编程,而且也正因为是C语言,才使得 Unix 以及后来的 Linux 能够这么广泛地被人们去研究、去改进、去制作自己的分支,以至于我们能在各种硬件平台上使用它们。

但是细心的人会发现,Linux 启动过程中所涉及的各种程序,很少有C语言的痕迹。它们大多是脚本程序。不单单在启动过程中是这样,那些用于安装软件的工具 yum、apt-get,甚至是 configure 和 Makefile 也都是脚本程序。而且你可能还没注意到,那些用于系统管理的工具,如配置 ADSL 拨号上网的工具、配置守护进程的工具等,很多也都是脚本程序。

大量使用脚本程序,是所有类 Unix 系统不同于其他系统的一个显著特征,催生人们在 Linux 中大量使用脚本来编写程序,并不仅仅是因为脚本对人直观、容易修改这种显著特性所决定的。另外一个主要的原因就是 Linux 所支持的脚本语言种类十分丰富。

所有类 Unix 系统所必备的 shell,其本身就是一个强大的脚本解释器。所以从 shell 诞生的那一天起,shell 就是那些不懂 C 语言,又必须在 Unix 上编写程序的用户们的首选工具。

这就给了人们一种新的选择,使用 shell 编程不用去理会让人头晕的指针;shell 程序可以直接利用系统命令来完成一些需要用大量 C 代码的功能;shell 编程不用去理会数据类型,不用考虑烦人的数值和字符数据的转换问题;shell 程序同样提供顺序、选择分支和循环这三种能够构建任意算法的基础设施。因此,shell 很快就能够被非专业用户所接受、掌握,并编写出非常实用的程序。

随着时间的推移,这些非专业用户想往更高的方向发展,遇到了一些 shell 处理起来会很“蹩脚”的问题,比如分析文本和修改文本(别忘了“万般皆文本”)。这个时候他们会发现 有 awk 和 sed。也只需要写几行脚本就能将这些问题处理得很好。而且它们也跟 shell 配合得天衣无缝。或许这个时候会觉得加入了 awk 和 sed 的 shell 脚本有些难看,不过没关系,还有 Perl 和 TCL。Perl 天生就是为处理文本而存在的,TCL 也不含糊。

如果觉得这些语言都太老气了,有些过时了,不要紧,还有 Python、Ruby 等这些现代脚本语言,它们除了不能写操作系统内核之外,几乎什么都能干,而且还是面向对象的。

不管怎样,在 Linux 下能够选择的脚本语言都是极其丰富的。它们最大的特点就是简单、好学且资料丰富。简单就意味着容易维护,好学就容易吸引用户,资料丰富就不会在解决 bug 上出现障碍。即便是专业的程序员,也会因为这些特点而特别偏好脚本语言,导致的一个结果就是脚本程序在 Linux 中的大爆发。

有读者可能会问,为什么不选择 C 语言呢?

C语言并不是最佳选择

C语言是 Unix 的母语,这是毋庸罝疑的。前面也说过,正是因为有了C语言,才使得 Unix 有了今天的成就。但为什么在 Linux 中有这么多程序,甚至是关键程序,不用C语言编写呢?

脚本程序由于是解释执行的,在执行效率上自然是会有很大损失的。并且大家都知道,C语言所编写的程序又是以效率著称的。但是C语言是一种编译型语言,要想让C语言的程序能够运行,必须经过编译和链接这两个步骤。

要知道,能够将由几十个源代码文件构成的C语言程序,有条不紊地编译完成并能最终链接成一个可执行程序,本身就是一件费时又费力的事情,如果一旦程序有问题,还必须使用专门的调试工具一点点地去跟踪判断,修正之后再重复那些复杂的编译和链接步骤,这又是一个极需技巧的事情。积累并掌握技巧又是一件费时又费力的事情。

在早些年,计算机性能不佳的时候,这些付出或许是值得的。但是放到现在,处理器的速度至少快了几千倍,内存大了几千倍,硬盘甚至大了几万倍,而价格却更低了。从经济角度分析,机器的时间成本早己远远低于人的时间成本了。那么C语言在机器效率上的优势根本没有任何意义。脚本程序能够给人节省下来的时间成本,则更具经济效益。
要论机器效率,汇编语言比C语言要好上几十倍,但是目前还有谁在用汇编语言编程呢?

C语言在设计的时候,最主要的一个目标就是能够让程序员自己处理内存管理的问题。这使得C语言很强大但又太过于灵活,导致了很多陷阱的出现。稍微一不注意,程序中就会存在难以发觉的 Bug,甚至是严重的安全漏洞。程序员们大多是要以时间或失败为代价去积累经验,才能尽量避免这些问题的发生。而且效率在大多数应用中根本就不是问题,首要的是正确。脚本程序的简单和直观正是正确的起点,C语言的灵活却是错误的根源。

但是,C语言并不是一无是处,也是 Unix 的精华。C语言作为通用程序设计语言是所向无敌的。C语言本身也非常简洁和紧凑,资料丰富且容易学习。C语言之后的少数语言设计,为了不被C语言所吞并,不得不进行大的改动,比如引进垃圾回收机制等,以和C语言能够在功能上保持足够距离。也正是因为这样,C语言始终没有消失,只是它的光辉在 Linux 中稍稍地被脚本程序所遮挡了一下。

脚本语言也有不足

虽然效率并不是脚本程序的缺点,但是种类过于丰富却是一个极大不足。编写一个复杂的应用,往往很难使用一种脚本语言包杆到底,因为脚本语言都有自己适用的场景,为了能够快速有效地完成某个应用,就需扬长避短,利用多种脚本语言混合编程。

多脚本语言的混合编程是一种知识密集型的编程方法,但不是编码密集型的(这是能够被普遍接受的原因)。为了能够良好地使用这种方法,就要求程序员不仅仅要具备相当数量的多种语言知识,还必须具备能够判断这些语言的适用场景、以及如何将它们有效地组合在一起的经验。

实际上,混合编程并不是脚本语言的专利,任何编程语言都行,只要你能找准那些语言的特点。比如笔者就曾经使用过 Basic 和 C 进行混合编程,去完成一个 DOS 版万年历程序。为了支持鼠标点击操作,用 C 完成了鼠标中断的处理。余下的部分都用 Basic 来完成。

在 Linux 中大量应用脚本程序的场景,好多都是这种混合编程的典范。比如 Linux 的启动过程,主程序 init 是用 C 语言写的,具体到启动流程的各个环节则是 shell 脚本程序。

Linux VS Windows

目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows。主要区别如下

比较 Windows Linux
界面 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致。
驱动程序 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛。 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解。
使用 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利 。 图形界面使用简单,容易入门。文字界面,需要学习才能掌握。
学习 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难。 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易。
软件 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权。 大部分软件都可以自由获取,同样功能的软件选择较少。
0人推荐
随时随地看视频
慕课网APP