Linux系统管理员工具集
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

01 Linux操作系统和常用软件

1.1 软件基础知识

软件是按照特定顺序组织在一起的一系列计算机数据和指令的集合。而计算机中的软件,不仅指运行的程序,也包括各种关联的文档。根据计算机软件的用途,可以将其分为两大类,即系统软件和应用软件。

1.1.1 系统软件

系统软件的作用是协调各部分硬件的工作,并为各种应用软件提供支持,使计算机用户和其他软件将计算机当作一个整体,不需要了解计算机底层的硬件工作内容,即可使用这些硬件实现各种功能。系统软件主要包括操作系统和一些基本的工具软件,如各种编程语言的编译软件、硬件检测与维护软件以及其他一些针对操作系统的辅助软件等。

1.操作系统

在系统软件中,操作系统(Operating System,OS)是负责直接控制和管理硬件的系统软件,也是一系列系统软件的集合。其功能通常包括处理器管理、存储管理、文件管理、设备管理和作业管理等。当多个软件同时运行时,操作系统负责规划以及优化系统资源,并将系统资源分配给各种软件。

操作系统是所有软件的基础,可以为其他软件提供基本的硬件支持。常用的操作系统主要有以下几种。

(1)Windows家族

● Windows XP

Windows XP操作系统,是微软公司于2001年推出的一款基于Windows NT内核的单用户、多任务图形操作系统。它结合了Windows 9X和Windows NT等两大系列操作系统的优点,相对之前的Windows操作系统,具有更高的安全性和更强的易用性。Windows XP系统是目前国内应用最广泛的操作系统。相对上一代的Windows 2000系统,它具有更快的休眠和激活响应速度;自带了大量(据说超过1万种)不同硬件的驱动;提供更加友好的用户界面;快速用户切换(可保存当前用户的状态,然后切换到另一个用户);字体边缘平滑技术(ClearType,用于液晶显示器);远程协助功能,允许远程控制计算机;增加了对PPP_oE协议的支持,允许用户直接使用DSL等网络连接。Windows XP一改之前Windows系统使用灰色作为各种任务栏、窗口的风格,首次使用了彩色的3D主题,并提供了3个色彩方案供用户选择。在界面上也进行很大的创新。随着Windows XP发布,微软公司不断为Windows XP提供各种升级和更新。大约每2~3年,微软公司都会发布一个集合了过去数年针对Windows所有修补和增强的升级文件包(被称作服务包Service Packs,简称SP)。迄今为止,微软公司共为Windows XP发布了3个服务包,即SP1~SP3。

● Windows Vista

Windows Vista是微软公司Windows操作系统家族的重要成员,于2005年7月22日正式公布。2006年11月8日开始提供给MSDN(微软开发网络,一个微软创办的程序员开发组织)、计算机制造商和企业用户,2007年1月30日开始销售和提供下载。相对上一版本的Windows XP操作系统,Windows Vista包含了上百种新的功能。例如,再一次针对数年来硬件的发展,提供了多达28000种的自带驱动;新的多媒体创作工具Windows DVD Maker;重新设计的网络、音频、输出(打印)和显示子系统;Vista也使用点对点技术(Peer-to-Peer)提升了计算机系统在家庭网络中的通信能力,让不同计算机或设备之间分享文件与多媒体内容变得更简单。Windows Vista在界面设计上比Windows XP又前进了一大步,它提供了名为Windows Aero的用户界面。

● Windows 7

2009年7月14日Windows 7 RTM(Build 7600.16385)正式上线,2009年10月22日微软于美国正式发布Windows 7。Windows 7可供家庭及商业工作环境、笔记本电脑、平板电脑、多媒体中心等使用。

● Windows 8

Windows 8是具有革命性变化的操作系统。该系统旨在让人们的日常计算机操作更加简单和快捷,为人们提供高效易行的工作环境。Windows 8不仅支持Intel和AMD,还支持ARM的芯片架构。微软表示,这一决策意味着Windows系统开始向更多平台迈进,包括平板电脑和个人计算机。

Windows Phone 8将采用和Windows 8相同的内核。2011年9月14日,Windows 8开发者预览版发布,宣布兼容移动终端,微软将苹果的IOS、谷歌的Android视为Windows 8在移动领域的主要竞争对手。

(2)UNIX家族

Richard Stallman建立了GNU项目,要创建一个能够自由发布的类UNIX系统。二十年来,这个项目不断发展壮大,包含了越来越多的内容。现在,GNU项目开发的产品,比如Emacs、GCC等已经成为各种其他自由发布的类UNIX产品中的核心角色。1990年,Linus Torvalds决定编写一个自己的Minix内核,初名为Linus’Minix,意为Linus的Minix内核,后来改名为Linux,此内核于1991年正式发布,并逐渐引起人们的注意。当GNU软件与Linux内核结合后,GNU软件构成了这个POSIX兼容操作系统GNU/Linux的基础。今天GNU/Linux已经发展成为最为活跃的自由/开放源码的类UNIX操作系统。1994年,BSD UNIX走上了复兴的道路。BSD的开发也走向了几个不同的方向,并最终导致了FreeBSD、OpenBSD和NetBSD的出现。图1-1是UNIX进化史。

图1-1 UNIX进化史

图1-2绘出了UNIX系统的高层次的体系结构。图中心的硬件部分向操作系统提供基本服务。操作系统直接与硬件交互,向程序提供公共服务,并使它们同硬件特性隔离。当我们把整个系统看成层的集合时,通常将操作系统称为系统内核,或简称内核,此时强调的是它同用户程序的隔离。因为程序是不依赖于其下面的硬件的,所以,如果程序对硬件没做什么假定的话,就容易将它们在不同硬件上运行的UNIX系统之间迁移。比如,那些假定了机器字长的程序就比没假定机器字长的程序更难以搬到其他机器上。外层的程序,诸如shell及编辑程序(vi),是通过引用一组明确定义的系统调用而与内核交互的。这些系统调用通知内核为调用程序做各种操作,并在内核与调用程序之间交换数据。图1-2中出现的一些程序属于标准的系统配置,就是大家所知道的命令。但是由名为a.out的程序所指示的用户自有程序也可以存在于这一层。此处的a.out是被C编译程序产生的可执行文件的标准名字。其他应用程序能在较低的程序层次之上构筑而成,因此它们存在于图1-2的最外层。比如,标准的C编译程序gcc就处在图1-2的最外层,它引用C预处理程序、两次编译程序、汇编程序及装入程序(称为连接-编译程序),这些都是彼此分开的底层程序。虽然图1-2对应用程序只描绘了两个级别的层次,但用户能够对层次进行扩充,直到级别的数目适合自己的需要。确实,为UNIX系统所偏爱的程序设计风格鼓励把现存程序组合起来去完成一个任务。

图1-2 UNIX系统的高层次的体系结构

一大批提供了对系统的高层次看法的应用子程序及应用程序,诸如shell、编辑程序、SCCS(Source Code Control System)及文档准备程序包等,都逐渐变成了“UNIX系统”这一名称的同义语。然而,它们最终都使用由内核提供的底层服务,并通过系统调用(System Call)的集合利用这些服务。系统调用的集合及其实现系统调用的内部算法形成了内核的主体。简言之,内核提供了UNIX/Linux系统全部应用程序所依赖的服务,并且内核定义了这些服务。下面我们将进一步介绍内核,对内核的体系结构提出一个总的看法,勾画出它的基本概念和结构,这将帮助读者更好地学习以后的内容。

图1-3给出了内核结构的框图,显示出了各种模块及它们之间的相互关系,它特别指出了内核的两个主要成分:左边的文件子系统和右边的进程控制子系统。虽然实际上,由于某些模块同其他模块的内部操作进行交互而使内核偏离该模型,但该图仍可以作为观察内核的一个有用的逻辑观点。在图1-3中我们看到了三个层次:用户、内核及硬件。系统调用与库接口体现了图1-3中描绘的用户程序与内核间的边界。系统调用看起来像C程序中普通的函数调用,而库把这些函数调用映射成进入操作系统所需要的源语。然而,汇编语言程序可以不经过系统调用库而直接引用系统调用。程序常常使用像标准I/O库这样一些其他的库程序以提供对系统调用的更高级的使用。由于在编译期间会把这些库连接到程序上,因此,以这里的观点来说,这些库是用户程序的一部分。

图1-3 UNIX系统内核结构

图1-3把系统调用的集合分成与文件子系统交互作用的部分及与进程控制子系统交互作用的部分。文件子系统管理文件,其中包括分配文件空间、管理空闲空间、控制对文件的存取,以及为用户检索数据。进程通过一个特定的系统调用集合,比如通过系统调用open、close、read、write、stat、chown及chmod等与文件子系统交互。文件子系统使用一个缓冲机制存取文件数据,缓冲机制调节在核心与二级存储设备之间的数据流。缓冲机制同块I/O设备驱动程序交互作用,以便启动往核心去的数据传送及从核心来的数据传送。设备驱动程序是用来控制外围设备操作的核心模块。块I/O设备是随机存取存储设备,或者说,它们的设备驱动程序使得它们对于系统的其他部分来说好像是随机存取存储设备。

例如,一个磁带驱动程序可以允许核心把一个磁带装置作为一个随机存取存储设备看待。文件子系统可以在没有缓冲机制干预的情况下直接与“原始”I/O设备驱动程序交互作用。原始设备,有时也被称为字符设备,包括所有非块设备。进程控制子系统负责进程同步、进程间通信、存储管理及进程调度。当要执行一个文件而把该文件装入存储器中时,文件子系统与进程控制子系统交互:进程控制子系统在执行可执行文件之前,把它们读到内存中。输入/输出存储管理模块控制存储分配。

在任何时刻,只要系统没有足够的物理存储供所有进程使用,核心就在内存与二级存储之间对进程进行交换,以便所有的进程都得到公平的执行机会。调度程序模块把CPU分配给进程。该模块调度各进程依次运行,直到它们因等待资源而自愿放弃CPU,或者知道它们最近一次的运行时间超出一个时间量,从而核心抢占它们。于是调度程序选择最高优先权的合格进程投入运行;当原来的进程成为最高优先权的合格进程时,还会再次投入运行。进程间通信有几种形式,从时间的异步软中断信号到进程间消息的同步传输等。

1969年,在AT&T的Bell Labs以及Ken Thompson和Dennis Ritchie(他们曾是大型操作系统Multics的两名开发者,Multics太庞大了最终没有成功)为了一项名为太空旅游的实验计划,需要一个操作系统。他们找了一台闲置的PDP-7机器,在上面写了个Multics的改编版,于1971年正式发布。这个就是后来名扬天下的UNIX了。1973年,Dennis Ritchie用他自己开发的C语言重写了一遍UNIX,奠定了UNIX普及化的基础。1976年他们首次将第六版的UNIX流传到AT&T以外的地方。UC Berkeley的人以UNIX 7.0为基础,发表了称作BSD的系统,并且开发到1992年的4.4版;而AT&T也不断改进他们的系统,发表了商业化的System Ⅲ直到System Ⅴ。以后UNIX的发展都是围绕这两大主流展开的。UNIX的设计目标是小而美:希望能在任何小系统上执行,而核心只提供必不可少的一些功能,其他的则根据需要加上去。这已经成为操作系统的一种设计哲学。现在许多公司都有了自己的UNIX版本,但它们的基本特性是一致的:开放性、多用户、多任务、功能强、实现高效、网络功能丰富。为了克服UNIX版本差异对可移植性的损害,1990年ISO制定了ISO/IEC 9945-1-1990标准,这是整个可移植操作系统界面(POSIX)的第一部分,系统应用程序界面即POSIX.1。这就是常说的UNIX操作系统的界面标准。

● BSD系列

目前的x86 平台上的BSD系统大多基于Berkeley的4.4 BSD Lite,这是去掉了那些来自AT&T的代码后公开发布的一个不完整的系统。其中最有名的当属FreeBSD,其他还有NetBSD和OpenBSD等版本,都是免费的,可以从相应的官方网站下载。

● Linux系列

芬兰学生Linus Torvalds开始使用MINIX时,对MINIX提供的功能不满意。于是他自己写了一个类UNIX操作系统(尽管还是用MINIX编译的)并放到网上让人们自由下载,取名为Linux。Linux刚出现的时候是被Tanenbaum所鄙视的,因为它是集成化内核,不是MINIX采用的代表先进思想的微内核,但由于遵循GPL协议,Linux仍得到了蓬勃发展。1994年,Linux的第一个商业发行版Slackware问世。1996年,NIST的计算机系统实验室确认Linux 1.2.13版符合POSIX标准。Linux的核心的最新稳定版是Linux 2.6.X系列,可去官方网站下载。而它的发行版比比皆是,知名的有Red Hat、Mandrake等,国内发行版也有,相应官方网站可以找到这些发行版的下载。

● Solaris系列

Solaris是Sun公司开发和发布的企业级操作环境,有运行于Intel平台的Solaris x86系统,也有运行于SPARC CPU结构的系统。它起源于BSD UNIX,但逐渐转移到了System Ⅴ标准。在服务器市场上,Sun的硬件平台具有高可用性和高可靠性,Solaris是当今市场上处于支配地位的UNIX类操作系统。目前比较流行的运行于x86架构的计算机上的Solaris有Solaris 10 x86版本。当然Solaris x86也可以用于实际生产应用的服务器。

2.程序设计语言

用户用程序设计语言编写程序,输入计算机,然后由计算机将其翻译成机器语言,在计算机上运行后输出结果。程序设计语言的发展经历了5代——机器语言、汇编语言、高级语言、非过程化语言和智能化语言。

● 机器语言:计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机语言的基础。

● 汇编语言:为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定指令的二进制串,比如,用“ADD”代表加法,“MOV”代表数据传递等。这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言。

● 高级语言:这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。

● 非过程化语言:第三代语言是过程化语言,它必须描述问题是如何求解的。第四代语言是非过程化语言,它只需描述需求解的问题是什么。例如,需要将某班学生的成绩按从高到低的次序输出。用第四代语言只需写出这个要求即可,而不必写出排序的过程。

● 智能化语言:主要是为人工智能领域设计的,如知识库系统、专家系统、推理工程、自然语言处理等。

3.语言处理程序

计算机只能直接识别和执行机器语言,因此要在计算机上运行高级语言程序就必须配备程序语言翻译程序,即编译程序。编译软件把一个源程序翻译成目标程序的工作过程分为5个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码生成。编译主要是进行词法分析和语法分析,又称为源程序分析,分析过程中若发现有语法错误,给出提示信息。

4.数据库管理程序

数据库管理程序是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。

5.系统辅助处理程序

系统辅助处理程序也称为软件研制开发工具、支持软件、软件工具,主要有编辑程序、调试程序、装备和连接程序等。

1.1.2 Linux下的应用软件分类

应用软件(Application Software)是用户可以使用的各种程序设计语言,以及用各种程序设计语言编制的应用程序的集合,分为应用软件包和用户程序。应用软件包是利用计算机解决某类问题而设计的程序的集合,供多用户使用。用户程序是为满足用户不同领域、不同问题的应用需求而提供的那部分软件,它可以拓宽计算机系统的应用领域,放大硬件的功能。

1.办公软件

办公软件是指在办公应用中使用的各种软件,这类软件的用途主要包括文字处理、数据表格的制作、演示动画制作、简单数据库处理等。在这类软件中,最常用的办公软件套装就是Office系列软件,包括Openoffice和LibreOffice。

2.网络软件

网络软件是指支持数据通信和各种网络活动的软件。随着互联网技术的普及以及发展,产生了越来越多的网络软件。例如,各种网络通信软件、下载上传软件、网页浏览软件等。

常见的网络通信软件主要包括Gaim、QQ等;常见的下载上传软件包括FTP等;常见的网页浏览软件包括Mozilla FireFox等。

3.安全软件

安全软件是指辅助用户管理计算机安全性的软件程序。广义的安全软件用途十分广泛,主要包括防止病毒传播、防护网络攻击、屏蔽网页木马和危害性脚本,以及清理流氓软件等。

常用的安全软件很多,如防止病毒传播的avast! Linux Home Edition 、防护网络攻击的Iptable防火墙等。

4.图形图像软件

图形图像软件是浏览、编辑、捕捉、制作、管理各种图形和图像文档的软件。其中,既包含有供各种专业设计师开发使用的图像处理软件,如gimp等,也包括图像浏览和管理软件,如

gdksee等,以及捕捉桌面图像的软件,如Shutter等。

5.多媒体软件

多媒体软件是指对视频、音频等数据进行播放、编辑、分割、转换等处理的相关软件。例如,在网络中经常使用XMMS来播放网络歌曲,通过VLC Media Player来播放网络视频等。

6.行业软件

行业软件是指针对特定行业定制的、具有明显行业特点的软件。随着办公自动化的普及,越来越多的行业软件被应用到生产活动中。常用的行业软件包括各种股票分析软件、列车时刻查询软件、科学计算软件、辅助设计软件等。

行业软件的产生和发展,极大地提高了各种生产活动的效率。尤其计算机辅助设计的出现,使工业设计人员从大量繁复的绘图中解脱出来。最著名的计算机辅助设计软件是CAD类。

7.桌面工具

桌面工具主要是指一些应用于桌面的小型软件,可以帮助用户实现一些简单而琐碎的功能,提高用户使用计算机的效率或为用户带来一些简单而趣味的体验。例如,帮助用户定时清理桌面、进行四则运算、即时翻译单词和语句、提供日历和日程提醒、改变操作系统的界面外观等。

在Linux Gonme桌面和KDE桌面中已经内置了一些常用的附件,包括计算器、画图、记事本等。