第1章Linux系统概述和安装Linux系统是一种类UNIX完整的操作系统。它不仅功能强大、运行稳定,而且用户可免费使用,分析其源代码。Linux系统支持x86、ARM等大多数常见硬件架构和TCP/IP等主流网络协议,有良好的跨平台性能,应用面极其广阔。本章将介绍Linux系统的基本概念,并演示如何安装一套带有Xwindow图形操作界面的Linux系统发布版。1.1引言计算机系统由硬件系统和软件系统所组成,软件系统中最为重要的是操作系统.。Linux作为操作系统管理着计算机内所有的硬件资源和软件资源,仿佛是计算机的灵魂。Linux系统基于GPL协议发布,该协议是GNU项目所创立开放源代码的公共许可证。要理解Linux系统并以一种全新的方式开发和发布软件,首先则需要了解GNU项目和Linux系统的渊源。1.1.1GNU项目简介GNU项目在1983年由理查德·斯托曼(RichardStallman)所创立,最初的目标是通过使用必要的工具从源代码开始创建一个自由的类UNIX操作系统。此前的软件均以源代码的形式发布,用户可以根据自己需要修改源代码,但自从那时起,软件厂商为了保护自己的商业利益,开始使用编译所得的二进制文件发布软件,从而使软件的源代码变为“商业秘密”。1.1.2Linux起源安德鲁·塔能鲍姆(AndrewTanenbaum)出于教学目的编写了名为Minix的类UNIX操作系统。1991年8月,林纳斯将自己新设计的操作系统内核通过网络发布,命名为Linux系统。不久之后,Linux系统陆续推出了多个版本,并且吸引了更多开发者加入Linux系统开发的行列。1.1.3Linux发展现状如今,Linux系统内核版本已发布到2.6版,它代表着当前操作系统技术的最前沿,并依然保持数周内一次的版本更新。更多的开发者进入到Linux系统开发的行列中,因此基于Linux系统的软件资源也十分丰富,而且这些资源同样能免费使用。Linux系统进入我国的时间较早,我国的工程师对Linux系统的发展也做出了巨大贡献。所以,Linux系统在我国拥有一定的用户基础和大量中文资源。1.1.4免费软件与开源软件免费软件与开源软件概念并不相同,免费软件通常以二进制文件形式发布,用户虽然可以免费使用,但无权对软件进行任何修改。开源软件是将软件以源代码形式发布,并遵循GPL等开源协议,用户不仅能使用,而且还可对软件进行改进。Linux系统是开源软件,所以基于Linux系统开发必须遵循开源规则。这种开发方式最大的优势是,开发者能最大限度的利用现有代码,从而避免重复工作。1.2Linux内核与版本Linux内核是该操作系统的核心程序文件,通过与其他程序文件组合,Linux又构成了许多版本。每种Linux版本都有其特点,例如嵌入式Linux版本专门用于较小的电子设备操作,而我们的计算机中常用的是Linux桌面版和Linux企业版。1.2.1Linux内核介绍内核是操作系统的心脏,系统其他部分必须依靠内核这部分软件提供的服务,内核由中断服务程序、调度程序、内存管理程序、网络和进程间通信等系统程序共同组成。1.2.2Linux所支持的硬件平台Linux系统支持当前所有主流硬件平台,能运行在各种架构的服务器,如Intel的IA64、Compaq的Alpha、Sun的Sparc/Sparc64、SGI的Mips、IBM的S396;也能运行在几乎全部的工作站,如Intel的x86、APPLE的PowerPC。更吸引人的是支持嵌入式系统和移动设备,如ARM,Linux内核短小精湛且功能全面,可根据特定硬件环境裁剪出具备适当功能的操作系统。另外,无论是32位指令集系统还是64位指令集系统,都能高效稳定运行。1.2.3常用Linux版本Linux系统拥有多个发行版,它可能是由一个组织、公司或者个人发行。通常一个发行版包括Linux内核、将整个软件安装到计算机的安装工具、适用特定用户群的一系列GNU软件。常用的Linux发行版本如下:1.Fedora桌面版2.Ubuntu桌面版3.RedHat服务器版4.OpenSUSE5.Debian1.3系统安装Linux系统安装是将安装介质内的系统文件复制到设备的硬盘上。安装前需要对硬盘进行分区,Linux系统拥有专门的分区结构。安装过程中Linux系统还会进行各种程序的配置,本节将讲解Linux发行版的安装与配置。1.3.1安装前准备安装Linux系统前,首先可根据用途和硬件平台选择一个Linux发布版本,若读者具备丰富的Linux知识亦可从内核开始编译一个全新的Linux版本。获得Linux发布版本可在因特网上直接下载,也可通过其他途径获得Linux发布版的拷贝,这是GPL协议中的合法行为。安装前需详细了解该版本对系统的需求,以及安装设备的硬件环境。Linux系统可自动识别大多数硬件设备,并为其找到合适的驱动程序,但难免有些不常见的设备需要额外准备驱动程序。1.3.2系统需求各种Linux版本有不同的系统需求,具体需求可在官方网站的安装说明内看到。得到系统需求列表后,可与安装设备的硬件列表进行对比,通常设备供应商会提供设备上的具体硬件型号列表。下面是当前流行的Linux桌面版本最低系统需求:CPU:IntelPentium兼容CPU,主时钟频率在400MHz以上。内存:256MB以上。硬盘:至少3G空余空间。显卡:VGA兼容或更高分辨率显卡。其他:有鼠标、键盘、光驱等设备。1.3.3硬盘分区硬盘是常见的存储设备,大多数计算机上都以硬盘作为主要的外储存器。为了便于管理,Linux系统允许将一块硬盘划分为多个分区,或者将多块硬盘划分为一个分区。分区的类型有三种,主分区(primary-partition)和扩展分区(extended-partition)是顶层的分区体系,逻辑分区(logical-partition)是扩展分区下的子结构。同一块硬盘上最多允许存在4个主分区和一个扩展分区,扩展分区以下的逻辑分区数量并无限制。1.3.4图形方式安装Linux图形化Linux安装程序为用于提供了多种安装语言的选择和更简单易懂的安装信息。本节介绍以Fedora10LiveCD为媒介安装Linux系统的过程。LiveCD是Linux系统最新的发布形式,它不但能直接以CD启动计算机进入到Linux系统,还提供了图形化安装程序。1.3.5升级最新内核为了使用Linux系统最新的特性,可在安装完成后对Linux内核进行升级。各个发行版的Linux系统都有软件管理器提供自动升级服务,但也可以根据需要手动升级内核。Fedora和RedHat企业版可使用YUM软件管理器升级内核,在终端输入下列命令:su//获取根用户权限,将提示输入根用户密码yumupdatekernel//升级内核1.3.6安装中文支持大多数的Linux发行版都提供了多语言支持,并根据用户选择自动安装中文支持。中文支持通常包括中文字符编码、中文字库、软件的中文UI包和中文输入法。如果Linux安装完成后没有安装中文支持,可手动安装。中文支持的安装信息可查阅该发行版的中文社区。1.4小结本章介绍了Linux系统的基本概念和安装方法,Linux系统是一个开放的操作系统,理解了GNU项目后可快捷的开发各种软件。在学习后面的章节前,读者可根据自身需要安装一套Linux操作系统,以便实践各种开发技能。第2章Linux基本操作Linux系统有两种操作方法,一种是使用鼠标键盘等输入设备直接在图形界面Xwindow上操作,另一种是通过输入文本命令方式在控制台上操作。各种Linux发行版的操作遵循同样的原则,所以操作方法非常相似。2.1登录安装有图形界面的Linux系统启动后会直接进入到Xwindow中,并提示输入用户名和密码登录。第一次登入可能需用创建一个新用户,该用户只是一个普通用户,不能直接进行系统配置。有些时候需要在控制台上登录,则直接输入用户名和密码即可。2.1.1shell程序shell是一种具备特殊功能的程序,也是介于用户和Linux内核间的一个接口。Linux系统拥有多种shell,发行版中常用的是名为bash的shell。这种shell不但能执行简单的命令,还能将多个命令、条件和参数编写为程序执行。2.1.2控制台Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统,该账号的名称就是登录名。Linux系统通常有多个控制台,进入控制台后可使用shell程序操作计算机。2.1.3终端终端是Xwindow里访问shell程序的接口。在GNOME桌面上打开终端的方式为,选择“应用程序”|“系统工具”|“终端”命令。2.2文件和目录文件系统是在物理存储设备中存放数据的索引格式,文件和目录是数据的逻辑划分形式。在Linux系统中,文件的准确定义是不包含任何其他结构的数据流。Linux系统的文件类型概况起来可分为五种,分别是:普通文件、目录文件、链接文件、设备文件和管道文件。2.2.1文件系统文件系统是磁盘及其逻辑分区的目录结构,一个磁盘设备可包含一个或多个文件系统,但每个文件系统必须占据硬盘中单独的一个分区,如图2.3所示。2.2.2文件名Linux系统的文件名由字符和数字组成,其中字符可以是大小写英文字母或其他Unicode编码的文字和符号。但不能包括“*”、“?”和“[]”文件名通配符。Linux系统的文件名也有类似其他操作系统的扩展名,在文件名最后一个“.”后的内容即是扩展名。例如,C语言源文件的扩展名是以“.c”,头文件的扩展名是“.h”。2.2.3路径名Linux文件系统采用带链接的树形目录结构,即只有一个根目录。根目录可含有下级子目录或文件;子目录中又可含有更下级的子目录或者文件。这样一层一层地延伸下去,构成一棵倒置的树,如图2.4所示。2.2.4工作目录控制台或终端在某个时刻总是对应着一个目录,该目录即工作目录。在控制台或终端执行命令或程序,对某个没有指定路径的文件或子目录进行操作,控制台或终端会自动在文件或子目录前加入当前工作目录的路径。例如,执行“ls”命令会将工作目录下的文件和子目录名称显示出来,除非在“ls”命令后输入某一具体的路径名称。工作目录可用“.”表示,工作目录上层父目录用“..”表示。“cd”命令用于改变工作目录。2.2.5起始目录用户通过控制台或终端登录时,起始目录为用户的主目录。默认情况下,起始目录是用户主目录,通常是“/home”目录中与用户的登录名相同的一个子目录。起始目录可用“~”符号表示。例如,无论当前工作目录为何处,下列命令都能用于显示起始目录下的文件或主目录:ls~//显示起始目录下所有的文件名与子目录名控制台或终端会将“~”符号替换成用户起始目录的绝对路径,该符号也被认为是环境变量,Linux系统会自动维护“~”符号的值。2.3输入和输出Linux系统的输入和输出功能由Linux内核提供,内核管理着所有的输入与输出设备,这些设备以设备文件的形式存在,保存在“/dev”目录中。所有运行在Linux系统上的应用程序必须通过Linux内核进行输入与输出操作,本节简单介绍Linux内核的输入和输出概念。2.3.1文件描述符文件描述符是一个小的非负整数,内核用以标识某一特定进程正在存访的文件。当内核打开一个现存文件或创建一个新文件时,它会返回一个文件描述符给该进程,这样该进程就能通过内核访问目标文件。2.3.2标准输入、标准输出和标准错误按惯例,每当运行一个新程序时,所有的shell都为其打开三个文件描述符:标准输入、标准输出以及标准错误。如果像简单命令ls那样没有做什么特殊处理,则这三个描述符都连向终端。大多数shell均提供同一种描述方法,这样可以使任何一个或所有这三个描述符都能重新定向到某一个文件,例如:#lsfile.list执行ls命令,其标准输出重新定向到名为file.list的文件上。2.3.3标准输入输出函数标准输入输出函数提供一种对不用缓存的输入输出