Linux入门学习大全(超详细)

上传人:新** 文档编号:590799447 上传时间:2024-09-15 格式:PPT 页数:1507 大小:6.33MB
返回 下载 相关 举报
Linux入门学习大全(超详细)_第1页
第1页 / 共1507页
Linux入门学习大全(超详细)_第2页
第2页 / 共1507页
Linux入门学习大全(超详细)_第3页
第3页 / 共1507页
Linux入门学习大全(超详细)_第4页
第4页 / 共1507页
Linux入门学习大全(超详细)_第5页
第5页 / 共1507页
点击查看更多>>
资源描述

《Linux入门学习大全(超详细)》由会员分享,可在线阅读,更多相关《Linux入门学习大全(超详细)(1507页珍藏版)》请在金锄头文库上搜索。

1、LinuxLinux操作系统操作系统 第第1 1章章 LinuxLinux入门及安装入门及安装 第第2 2章章 LinuxLinux命令命令 第第3 3章章 vivi编辑器的使用编辑器的使用 第第4 4章章 用户和组的管理用户和组的管理 第第5 5章章 设备管理设备管理 第第6章章文件系统管理文件系统管理第第7 7章章 ShellShell编程编程 目目 录录 LinuxLinux操作系统操作系统 第第8 8章章 网络文件系统网络文件系统NFSNFS第第9 9章章 动态主机配置协议动态主机配置协议DHCP DHCP 第第1010章章 SambaSamba 第第1111章章 域名系统域名系统 第

2、第1212章章 ApacheApache 第第1313章章 FTP FTP 第第1414章章 防火墙防火墙 LinuxLinux操作系统操作系统 第第1章章Linux入门及安装入门及安装1.1Linux入门入门1.2红旗红旗Linux的安装的安装1.3LILO的配置和使用的配置和使用习题习题LinuxLinux操作系统操作系统 1.1Linux入入门门1.1.1什么是什么是LinuxLinux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intelx86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的,其目的是建立不受任何商品化软件的版权制约且全世界都能

3、自由使用的Unix兼容产品。LinuxLinux操作系统操作系统 Linux的出现,最早开始于一位名叫LinusTorvalds的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生,他的目的是设计一个代替Minix(是由一位名叫AndrewTannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的全部功能,这就开始了Linux雏形的设计。Linux以其高效性和灵活性著称,它能够在PC计算机上实现全部的Unix特性,具有多用户、多任务的能力。Linux是在GNU公共许可权限下免费获得的,是一个符合PO

4、SIX标准的操作系统。LinuxLinux操作系统操作系统 所谓GNU,是Stallman在1984年提出的一个计划,它的思想是“源代码共享,思想共享”,目的是开发一个完全自由的,与Unix类似但功能更强的操作系统,以便为所有的计算机使用者提供一个功能齐全、性能良好的基本系统。在其他人的协作下,他创作了通用公共许可证(GeneralPublicLicense,GPL),这对推动自由软件的发展起了重要的作用。与传统的商业软件许可证不同的是,GPL保证任何人有共享和修改自由软件的自由,任何人都有权取得、修改和重新发布自由软件的源代码,并且规定在不增加费用的条件下得到源代码(基本发行费用除外)。Li

5、nuxLinux操作系统操作系统 这一规定保证了自由软件的总体费用很低,而在使用Internet的情况下则是免费的。GPL条款还规定自由软件的衍生作品继续保持自由状态,并且用户在扩散GNU软件时,必须让下一个用户也有获得源代码的权利。这些工作为后来Linux操作系统的迅速发展奠定了坚实的基础。Linux操作系统软件包不仅包括完整的Linux操作系统、文本编辑器、高级语言编译器等应用软件,还包括带有多个窗口管理器的XWindow图形用户界面,如同我们使用Windows一样,允许我们使用窗口、图标和菜单对系统进行操作。LinuxLinux操作系统操作系统 1994年,Linux的第一个产品版Lin

6、ux1.0问世,如今Linux家族已经有了近140个不同的版本,所有这些版本都基于最初的免费的源代码。不同的公司可以推出不同的Linux产品,但是它们都必须承诺对初始源代码的任何改动皆公布于众。LinuxLinux操作系统操作系统 1.1.2Linux的优点的优点Linux之所以受到广大计算机爱好者的喜爱,主要原因有如下几个:(1)为我们提供了学习、探索以及修改计算机操作系统内核的机会。操作系统是计算机必不可少的系统软件,是整个计算机系统的灵魂。每个操作系统都是一个复杂的计算机程序集,它提供操作过程的协议或行为准则;没有操作系统,计算机就无法工作,就不能解释和执行用户输入的命令或运行简单的程序

7、。LinuxLinux操作系统操作系统 大多数操作系统都是一些主要的软件公司支持的商品化程序,用户只能有偿使用。如果用户购买了一个操作系统,他就必须接受供应商所要求的一切条件。因为操作系统是系统程序,用户不能擅自修改或试验操作系统的内核,这对于广大计算机爱好者来说无疑是一种束缚。LinuxLinux操作系统操作系统 要想发挥计算机的作用,仅有操作系统还不够,还必须要有各种应用程序的支持。应用程序是用于处理某些工作(如字处理)的软件包,通常它也只能有偿使用。每个应用程序的软件包都为特定的操作系统和机器编写,使用者无权修改这些应用程序。由于Linux是一套自由软件,用户可以无偿地得到它及其源代码,

8、可以无偿地获得大量的应用程序,而且可以任意地修改和补充它们,无约束地再传播,这对用户学习和了解Unix操作系统的内核非常有益。LinuxLinux操作系统操作系统 (2)可以节省大量的资金。Linux是目前惟一可免费获得的、为PC机平台上的多个用户提供多任务、多进程功能的操作系统,这是人们喜欢使用它的主要原因。就PC机平台而言,Linux提供了比其他任何操作系统都要强大的功能,Linux还可以使用户远离各种商品化软件提供者促销广告的诱惑,再也不用承受每过一段时间就花钱去升级之苦,因此可以节省大量用于购买或升级应用程序的资金。LinuxLinux操作系统操作系统 (3)丰富的应用软件。Linux

9、不仅为用户提供了强大的操作系统功能,而且还提供了丰富的应用软件。用户不但可以从Internet上下载Linux及其源代码,而且还可以从Internet上下载许多Linux的应用程序。可以说,Linux本身包含的应用程序以及移植到Linux上的应用程序包罗万象,任何一位用户都能从有关Linux的网站上找到适合自己特殊需要的应用程序及其源代码,这样用户就可以根据自己的需要下载源代码,以便修改和扩充操作系统或应用程序的功能。这对Windows2000、Windows98、MS-DOS或OS/2等商品化操作系统来说是无法做到的。LinuxLinux操作系统操作系统 (4)使我们的工作更加方便。Linu

10、x为广大用户提供了一个在家里学习和使用Unix操作系统的机会。尽管Linux只是由计算机爱好者们开发的,但它在很多方面还是相当稳定的,从而为用户学习和使用目前世界上最流行的Unix操作系统提供了便利的机会。现在有许多CD-ROM供应商和软件公司(如RedHat、红旗和TurboLinux等)支持Linux操作系统。Linux成为Unix系统在个人计算机上的一个代用品,并能用于替代那些较为昂贵的系统。因此,如果一个用户在公司上班时在Unix系统上编程,或者在工作中是一位Unix的系统管理员,他就可以在家里安装一套Unix的兼容系统,即Linux系统,在家中使用Linux就能够完成一些工作任务。L

11、inuxLinux操作系统操作系统 (5)提供功能强大而稳定的网络服务。Linux最优秀的功能莫过于其网络功能。首先,它可以支持众多的网 络 协 议 , 比 如 TCP/IP协 议 、 SPX/IPX协 议 、NETBEUI协议、X.25协议等;其次,Linux可以提供非常广泛的网络服务,比如WWW、FTP、E-mail、Telnet、NFS、DHCP、Samba、防火墙以及企业的群组服务等,这些功能为Linux提供了无与伦比的网络亲和性。LinuxLinux操作系统操作系统 1.1.3Linux操作系统的架构操作系统的架构Linux一般有四个主要部分:内核、Shell、文件结构和实用工具。1

12、.内核内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。LinuxLinux操作系统操作系统 2.ShellShell是系统的用户界面,它提供了用户与内核进行交互操作的一种接口。实际上Shell是一个命令解释器,它解释由用户输入的命令并把它们送到内核去执行。不仅如此,Shell有自己的用于对命令进行编辑的编程语言,它允许用户编写由Shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。有关Shell更详细的内容,我们将在第7章中讨论。LinuxLinux操作系

13、统操作系统 Linux提供了像MicrosoftWindows那样的可视的命令输入界面XWindow的图形用户界面(GUI)。它提供了很多窗口管理器,其操作就像Windows一样,有窗口、图标和菜单,所有的管理都通过鼠标控制。现在比较流行的窗口管理器是KDE和GNOME。每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。同Linux本身一样,Shell也有多种不同的版本。LinuxLinux操作系统操作系统 3.文件结构文件结构是文件存放在磁盘等存储设备上的组织方法,主要体现在对文件和目录的组织上。目录提供了管理文件的一个方便而有效的途径,我们

14、不但能够从一个目录切换到另一个目录,而且可以设置目录、文件的权限及文件的共享程度。Linux目录采用多级树形结构,用户可以浏览整个系统,可以进入任何一个已授权进入的目录,并访问那里的文件。LinuxLinux操作系统操作系统 文件结构的相互关联性使共享数据变得容易,几个用户可以访问同一个文件。Linux是一个多用户系统,操作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录。内核、Shell和文件结构一起形成了基本的操作系统结构,它们使得用户可以运行程序,管理文件以及使用系统。此外,Linux操作系统还有许多被称为实用工具的程序,辅助用户完成一些特定的任务。LinuxLin

15、ux操作系统操作系统 4.实用工具标准的Linux系统都有一套叫做实用工具的程序,它们是专门的程序,例如编辑器、执行标准的计算操作等。另外,用户也可以产生自己的工具。LinuxLinux操作系统操作系统 一般来讲,实用工具可分为以下三类。(1)编辑器:用于编辑文件。Linux的编辑器主要有vi、emacs、pico等。(2)过滤器:用于接收并过滤数据。Linux的过滤器(Filter)读取从用户文件或其他地方输入的数据,经检查和处理后输出结果。从这个意义上说,它们过滤了经过它们的数据。Linux有不同类型的过滤器,一些过滤器用行编辑命令输出一个被编辑的文件;另外一些过滤器是按模式寻找文件并以这

16、种模式输出部分数据;LinuxLinux操作系统操作系统 还有一些执行字处理操作,检测一个文件中的格式,输出一个格式化的文件。过滤器的输入可以是一个文件,也可以是用户从键盘键入的数据,还可以是另一个过滤器的输出。过滤器可以相互连接,因此,一个过滤器的输出可能是另一个过滤器的输入。在有些情况下,用户可以编写自己的过滤器程序。LinuxLinux操作系统操作系统 (3)交互程序:允许用户发送信息或接收来自其他用户的信息。交互程序是用户与机器的信息接口。Linux是一个多用户系统,它必须和所有的用户保持联系。信息可以由系统上的不同用户发送或接收。信息的发送有两种方式:一种方式是与其他用户一对一地进行

17、对话,另一种方式是一个用户对多个用户同时进行通讯,即所谓广播式通讯。LinuxLinux操作系统操作系统 1.1.4Linux与其他操作系统的比较与其他操作系统的比较Linux可以与MS-DOS、OS/2、Windows等其他操作系统共存于同一台机器上,它们既具有一些共性,相互之间又各有特色,有所区别。LinuxLinux操作系统操作系统 目前运行在PC机上的操作系统主要有Microsoft的MS-DOS、Windows,IBM的OS/2等。早期的PC机用户普遍使用MS-DOS,因为这种操作系统对机器的硬件配置要求不高,但是随着计算机硬件技术的飞速发展,硬件设备价格越来越低,人们可以相对容易地

18、提高计算机的硬件配置,于是开始使用Windows等具有图形界面的操作系统。Linux是新近被人们所关注的操作系统,它正逐渐为PC机的用户所接受。那么,Linux与其他操作系统的主要区别是什么呢?下面从两个方面加以论述。LinuxLinux操作系统操作系统 1.Linux与MS-DOS的区别在同一系统上运行Linux和MS-DOS已很普遍,但它们之间还是有较多区别的。就发挥处理器功能来说,MS-DOS没有完全发挥x86处理器的功能,而Linux完全在处理器保护模式下运行,并且发挥了处理器的所有特性。Linux可以直接访问计算机内的所有可用内存,提供完整的Unix接口,而MS-DOS只支持部分Un

19、ix的接口。LinuxLinux操作系统操作系统 就使用费用而言,Linux和MS-DOS是两种完全不同的实体。与其他商业操作系统相比,MS-DOS价格比较便宜,而且在PC机用户中有很大的占有率,任何其他PC机操作系统都很难达到MS-DOS的普及程度,因为其他操作系统的费用对大多数PC机用户来说都是一个不小的负担,而Linux是免费的,用户可以从Internet上或者其他途径获得它的版本,而且可以任意使用,不用考虑费用问题。LinuxLinux操作系统操作系统 就操作系统的功能来说,MS-DOS是单任务的操作系统,一旦用户运行了一个MS-DOS的应用程序,它就独占了系统的资源,用户不可能再同时

20、运行其他应用程序,而Linux是多任务的操作系统,用户可以同时运行多个应用程序。LinuxLinux操作系统操作系统 2.Linux与OS/2、Windows的区别从发展的背景看,Linux与其他操作系统区别在于:Linux是从一个比较成熟的操作系统发展而来的,而其他操作系统(如WindowsNT、Windows2000等)都是自成体系,无对应的相依托的操作系统。这一区别使得Linux的用户能大大地从Unix团体贡献中获利。因为Unix是当今世界上使用最普遍、发展最成熟的操作系统之一,它是20世纪70年代中期发展起来的微机和巨型机的多任务系统,虽然有时接口比较混乱,并缺少相对集中的标准,但还是

21、逐步发展壮大成为最广泛使用的操作系统之一。LinuxLinux操作系统操作系统 无论是Unix的作者还是Unix的用户,都认为只有Unix才是一个真正的操作系统,许多计算机系统(从个人计算机到超级计算机)都存在Unix版本,Unix的用户可以从很多方面得到支持和帮助。因此,Linux作为Unix的一个克隆,它的用户同样会得到相应的支持和帮助,Linux将直接拥有Unix在用户中建立的牢固地位。LinuxLinux操作系统操作系统 从使用费用上看,Linux与其他操作系统的区别在于:Linux是一种开放、免费的操作系统,而其他操作系统都是封闭的系统,需要有偿使用。这一区别使得我们不用花钱就能得到

22、很多Linux的版本以及为其开发的应用软件。当我们访问Internet时,会发现几乎所有可用的自由软件都能够运行在Linux系统上,不同软件商对这些软件有不同的Unix实现方法。Unix的开发、发展商以开放系统的方式推动其标准化,但却没有一个公司来控制这种设计。LinuxLinux操作系统操作系统 因此,任何一个软件商(或开拓者)都能在某种Unix中实现这些标准。而OS/2和Windows等操作系统是具有版权的产品,其接口和设计均由某一公司控制,而且只有这些公司才有权实现其设计,它们都是在封闭的环境下发展的。LinuxLinux操作系统操作系统 1.1.5如何得到如何得到Linux的最新消息的

23、最新消息有关Linux的站点现在到处都是,这里向大家推荐一些。(1)。这是一个关于Linux核心最新消息的网站,从中可以得到核心(Kernel)发展情况的最新信息。(2)。这是一个非常著名的讨论组。(3)。AKA是一个非常好的自由软件团体,里面有许多很实用的信息。LinuxLinux操作系统操作系统 (4)。LinuxAid技术支持中心是国内首家专门从事Linux技术支持服务的网站,以专业的技术支持和服务为核心,来满足个人及企业用户对Linux技术的需求。(5)。“Linux伊甸园”,是一个不错的Linux专业网站,特别是Linux下的自由软件非常的丰富。LinuxLinux操作系统操作系统

24、1.2红旗红旗Linux的安装的安装1.2.1红旗红旗Linux简介简介红旗Linux是Linux的一个发展产品,由中科红旗软件技术有限公司开发研制,以Intel和Alpha芯片为CPU构成的服务器平台,它是第一个国产的操作系统版本。它的研发成功标志着我国在发展国产操作系统的道路上迈出了坚实的一步。LinuxLinux操作系统操作系统 相对于Windows操作系统及Unix操作系统来讲,Linux凭借其开放性及低成本优势,已经在服务器操作系统的市场获得了巨大发展。但由于其操作界面复杂,一时难以让普通PC用户接受。GNOME是GNU组织中专门开发桌面环境的项目,GNOME作为开放源代码的软件开发

25、成果,基于兼容性良好的CORBA技术,与Linux系统相辅相成,带给用户更加友好的界面,更多的使用,检查,修改及分发自由。与同是开放源代码图形用户界面的KDE相比较,GNOME表现得更能减轻其他公司创建Linux桌面应用的劳动。GNOME已经成为业内人士普遍看好的一个趋势性软件。LinuxLinux操作系统操作系统 目前市场上使用最多的是红旗服务器3.0和桌面3.2,最近将推出新产品红旗服务器4.0,采用的内核为2.4。红旗软件已在中国市场上奠定了坚实的基础,成为新一代的操作系统先锋。特别是在中文处理方面,红旗Linux预装了炎黄中文平台和方正TrueType字库,支持大字符集(GBK),实现

26、了在Linux上的TrueType显示和打印功能。LinuxLinux操作系统操作系统 红旗Linux的优点如下:(1)安装简便,智能化程度高,而且支持1024柱面以上硬盘的安装;(2)界面友好,更简便,更适合初学者;(3)中文输入时,具有光标跟随的功能,可以用【Ctrl】+【Space】组合键方便地进行中、英文切换,支持多种中文字库和五笔、拼音等多种输入法;LinuxLinux操作系统操作系统 (4)图形化的Linuxconf可以方便地对整个系统进行配置和管理;(5)具有完整的在线手册和帮助文档。全中文的在线手册可以快速查到系统中每条指令的详细用法;(6)带有炎黄中文KDE环境(启动命令为“

27、yh”),启动炎黄中文KDE环境后,就可以利用Linux提供的工具进行中文的阅读和输入。LinuxLinux操作系统操作系统 总之,红旗Linux的推出,将对中国的计算机产业产生巨大的影响。操作系统的多元化带动着软件的多元化发展,同时对硬件发展也有推动作用。有了国产操作系统后,许多优秀的应用软件就能不受微软捆绑软件的束缚,而在自己的操作系统上一展身手了。LinuxLinux操作系统操作系统 1.2.2安装前的准备安装前的准备虽然Linux发展了很长时间,但是其安装过程不像安装Windows那样容易。在安装前,我们必须做好如下的准备工作。LinuxLinux操作系统操作系统 1.收集系统硬件信息

28、虽然Linux可以自动识别许多硬件设备,但其在这方面的功能还是太简单了,特别是对于显卡和声卡的支持。为了完成安装,我们可能需要手动输入一些信息,所以第一步就是收集所有硬件的信息(生产厂商以及型号)及其配置信息。如果你使用的是Windows 95、Windows98或WindowsNT,最简单的就是将设备管理器中的信息打印出来。需要收集的硬件信息主要包括:LinuxLinux操作系统操作系统 (1)主机名和主机的网络设置(包括本机的IP地址、网络掩码、网关和DNS等);(2)CPU类型;(3)内存容量;(4)显卡、网卡及声卡类型。LinuxLinux操作系统操作系统 2.规划磁盘由于捆绑的应用程

29、序不同,各种Linux发行版需要的硬盘空间也不一样。Linux必须安装在其独有的分区中。如果只有一个分区并且被Windows使用着,那么就需要备份你全部的数据,并且创建新的分区。还可以使用某些第三方工具来改变现有分区的大小,比如PowerQuest的PartitionMagic4.0,对于红旗Linux3.0,最好规划出2GB以上的空间。LinuxLinux操作系统操作系统 3.备份数据由于Linux需要独立的分区,所以我们一定要备份打算安装Linux分区的内容以及完整的系统分区表。如果是升级安装,还需要备份/etc和/home两个目录的内容。4.制作启动盘对于不能从光驱启动的计算机,我们需要

30、从软驱启动,首先应该制作一张启动盘,具体步骤如下:(1)运行红旗光盘上的/dosutils/rawwrite.exe,如图1-1所示。LinuxLinux操作系统操作系统 图1-1制作启动盘LinuxLinux操作系统操作系统 (2)输入源文件的位置“g:imagesboot.img”,其中“g”是计算机光驱的提示符。(3)输入目标文件的位置“a:”。(4)回车确认。LinuxLinux操作系统操作系统 1.2.3安装红旗安装红旗Linux服务器服务器3.0现在开始安装Linux,请确认能够从光驱启动红旗Linux3.0或已经生成了Linux启动软盘,并且为Linux腾出了空间。本章我们用一个

31、具体的安装实例来讲述红旗Linux3.0的安装过程。1.选择安装方式从光驱启动后,系统会询问采用哪种安装方式,如图1-2所示。LinuxLinux操作系统操作系统 图1-2安装方式选择LinuxLinux操作系统操作系统 红旗LinuxServer3.0有四种安装方式可供选择,对于一般用户来讲,第一种(图形方式)和第二种(文本方式)比较常用。现将这两种安装方式分别介绍如下:(1)图形方式。图形方式安装Linux的优点是比较直观、方便和简单;缺点是它屏蔽了一些信息,不利于了解整个安装过程。另外,图形方式对系统内存的要求稍微高一些,一般要在128MB以上,否则安装速度较慢。如果选择该方式安装,直接

32、回车即可。LinuxLinux操作系统操作系统 (2)文本方式。文本方式安装Linux的优点是安装过程比较迅速,安装选项比较灵活,可定制范围大,而且可以避免由于显卡问题而导致安装失败现象的发生;缺点是安装过程麻烦,需要用户参与的选项多一些。对Linux有一定的基础,而又想了解Linux安装更为详细的信息的用户,可以选择该方式。如果选择该方式安装,需要在“boot:”后面输入“text”,再按回车键即可。LinuxLinux操作系统操作系统 2.同意软件协议选择安装方式后,接下来就是欢迎画面,然后提示用户是否同意软件协议,如图1-3所示。LinuxLinux操作系统操作系统 图图1-3红旗红旗L

33、inux软件协议软件协议LinuxLinux操作系统操作系统 3.选择计划安装方式这一步用户可以选择是安装或是升级。我们选择安装,如图1-4所示。4.选择安装类型安装类型有四种选择,如图1-5所示。LinuxLinux操作系统操作系统 图图1-4计划安装方式计划安装方式LinuxLinux操作系统操作系统 图1-5安装类型LinuxLinux操作系统操作系统 (1)典型安装:此种安装不仅包括最基本的Linux,而且包含XWindowSystem、KDE桌面环境等众多软件包,大约需要800MB左右的磁盘空间;(2)KDE开发工作站:在典型安装的基础上增加了开发工具,大约需要1000MB左右的磁盘

34、空间;LinuxLinux操作系统操作系统 (3)安装最小服务器系统:最基本的Linux(文本式)不包括XWindowSystem,大约需要400MB左右的磁盘空间;(4)定制软件包:用户可以定制自己所需要的软件包。选择定制软件包,可以根据自己的实际需要来选择想要安装的组件。LinuxLinux操作系统操作系统 5.选择软件包组件红旗LinuxServer3.0下的软件包组件非常丰富,包括桌面环境、图形工具、网络工具、多媒体工具、软件开发工具和实用程序等,用户可以根据自己的需要选择相应的组件。为了大家学习方便,我们选择最后一项,即“全部选中”,如图1-6所示。LinuxLinux操作系统操作系

35、统 图图1-6选择软件包组件选择软件包组件LinuxLinux操作系统操作系统 6.选择分区工具红旗LinuxServer3.0下可以使用的分区工具有定制分区和Fdisk工具两种,如图1-7所示。LinuxLinux操作系统操作系统 图图1-7选择分区工具选择分区工具LinuxLinux操作系统操作系统 (1)定制分区(DiskDruid)。这是一个图形化分区工具,具有直观、易操作的特点,对初学者来说是一个理想的分区工具。我们就选择它作为分区工具。(2)Fdisk工具。这是一个很好的分区工具,最可靠,功能也比较强大。但对初学者来说可能会有一些困难,不过启动Fdisk后,利用m命令可以获得在线帮

36、助。以下列出了Fdisk的主要命令:LinuxLinux操作系统操作系统 m:提供所有可用命令和列表;p:提供当前分区信息的列表;n:添加新的分区;t:设置或改变分区的类型;l:提供不同分区类型及它们ID号的列表;w:保存信息并退出Fdisk;q:退出但不保存。LinuxLinux操作系统操作系统 7.分区在Linux中至少应该有根分区和交换分区,当然可以划分更多的分区,如果作为服务器的用途,建议将/usr、/usr/local、/home、/var、/boot单独放在一个分区内。分区大小建议如下:/boot:100MB;/usr:大于800MB;/usr/local:用于系统安装新的软件,可

37、以根据硬盘的实际情况来预留空间;/home:该空间的大小可以根据下面的公式计算:50MB用户数目+FTP服务预留空间LinuxLinux操作系统操作系统 /var:大于1GB;swap交换空间:一般取1.52倍物理内存。因为我们只是实验的目的,所以只划分了根分区、/home分区和交换分区,分区工具采用DiskDruid。LinuxLinux操作系统操作系统 (1)根分区。根分区的大小可以根据磁盘的具体情况来设置,本例中根分区的大小为2GB,分区类型为LinuxNative文件系统,装载点为“/”。所谓装载点是指分区在Linux目录中的位置,如图1-8所示。LinuxLinux操作系统操作系统

38、图图1-8设置根分区设置根分区LinuxLinux操作系统操作系统 DiskDruid最下面一排是它的功能按钮,这些按钮控制DiskDruid的行为,它们用来增加和删除分区,或者修改分区的属性。另外,还有按钮用来接受你所做的改变或者退出DiskDruid,最为常用的是下面五个:Add:用来申请一个新的分区。选择后,会出现一个对话框,包含一些你必须输入的区域。Edit:用来修改当前激活的分区的属性。选择后,将出现一个对话框,根据分区信息是否已经写到硬盘上,你可以修改“EditPartition”对话框中的某些或全部信息。LinuxLinux操作系统操作系统 Delete:用来删除“Current

39、DiskPartitions”区域中当前激活的分区。选择这个按钮会出现一个对话框,提示你确认删除。Save:将把你所做的任何修改写入硬盘。在DiskDruid重写到你的硬盘分区表之前会要求你确认所做的修改。另外,你所定义的载入点也会传给安装程序,Linux系统会使用这些系统来定义文件系统的规划。Reset:使DiskDruid不保存你做的任何修改而退出。当选择这个按钮时,安装程序会退到前一个屏幕,重新开始。LinuxLinux操作系统操作系统 (2)交换分区。Linux需要一个专门的交换分区。它是在物理内存用尽时操作系统要利用的虚拟内存。分区类型设置为LinuxSwap,不指定装载点,大小则设

40、置为512MB,如图1-9所示。/home的分区方法和根分区的方法大致相同,三个分区添加完之后我们就完成了分区,如图1-10所示,保存后可进入下一步。LinuxLinux操作系统操作系统 图1-9设置交换分区LinuxLinux操作系统操作系统 图1-10Linux分区图LinuxLinux操作系统操作系统 8.选择要格式化的分区对于第一次安装Linux的用户来讲,所有的分区都需要格式化后才能够使用,如图1-11所示。LinuxLinux操作系统操作系统 图1-11选择要格式化的分区LinuxLinux操作系统操作系统 9.配置账户红旗LinuxServer3.0在安装过程中需要设置root密

41、码(大小写敏感)和至少一个用户名,如图1-12所示。一个好的用户口令至少要有6个字符长,不要使用个人信息,例如:生日、名字等。普通的英文单词也比较危险,这种口令可用字典攻击法在极短的时间内破解。用户的口令中最好有一些非字母(如数字、标点符号、控制字符等),同时还要易于记忆。LinuxLinux操作系统操作系统 选择用户的口令时,一个好的方法是将两个不相关的词用一个数字或控制字符相连,下面的口令可以认为是好的口令:thank_do12%fas3q虽然口令可以任意长,但只有前面8个字符有效。LinuxLinux操作系统操作系统 图图1-12配置账户配置账户LinuxLinux操作系统操作系统 10

42、.配置高级选项配置高级选项包括LILO、XWindow和Network,其中LILO最为重要。LILO的配置结果如图1-13所示。LinuxLinux操作系统操作系统 图图1-13配置配置LILOLinuxLinux操作系统操作系统 LILO是Linux的启动装载器,要让系统顺利启动,就要配置和安装LILO。LILO提供了双引导特性,可以在引导时选择启动哪个操作系统,这样就可以访问Linux和现有的DOS与Windows系统。屏幕会询问我们是否安装以及安装到哪里,我们当然选择安装LILO。LILO安装的位置可以是主引导记录(MBR),也可以是启动分区的第一个扇区。我们选择LILO安装在主引导记

43、录(MBR)(这是最为简单的一种方法)。接下来设置启动卷标(启动计算机时用来选择所启动操作系统的名称),我们设为“Linux”。最后,把Linux设置为默认的引导映像(在启动菜单上默认的选项)。必须指出的是,LILO配置不当会带来非常大的麻烦。LinuxLinux操作系统操作系统 11.检查安装选项当上面的步骤完成后,安装选项会显示一张表格让用户确认,如图1-14所示。LinuxLinux操作系统操作系统 图图1-14检查安装选项检查安装选项LinuxLinux操作系统操作系统 12.安装软件包安装软件包的过程如图1-15所示,这一过程大约持续2030分钟,不需要人工干预。LinuxLinux

44、操作系统操作系统 图1-15Linux安装软件包LinuxLinux操作系统操作系统 13.创建引导盘在软件包安装完以后,系统会提示是否创建引导盘。如果创建,插入空白软盘即可;如果不创建,可以选择跳过。LinuxLinux操作系统操作系统 14.重新引导系统最后,程序提示取下计算机上的软盘并重新引导系统。如果Linux是缺省操作系统,则系统引导到Linux,在“boot:”提示下有5秒钟时间,允许选择另一种操作系统。如果你选择另一种操作系统作为缺省引导系统,则在“boot:”提示下要输入Linux分区的引导卷标,这样才能引导到Linux。如果一切顺利,则可以看到RedFlag登录屏幕,用roo

45、t用户名和前面安装时设定的口令登录,画面如图1-16所示。LinuxLinux操作系统操作系统 RedflagLinuxrelease3.0Kernel2.4.17-1oni686localhostlogin:rootPassword:Lastlogin:WedApr2316:10:49ontty1rootlocalhost/root#图图1-16红旗红旗Linux启动画面启动画面LinuxLinux操作系统操作系统 Linux允许多次登录,即使在初始字符方式下也可以。利用【Ctrl】+【Alt】+【F1】到【Ctrl】+【Alt】+【F6】的组合键,可以在最多六个虚拟控制台之间切换。每个虚拟

46、控制台应分别登录,可以登录为不同用户,进行不同工作,或作为同一用户登录不同虚拟控制台,这种Unix和Linux特性使其能在灵活的环境中工作。LinuxLinux操作系统操作系统 1.3LILO的配置和使用的配置和使用1.3.1LILO简介简介LILO(LinuxLoader)是Linux自带的一个优秀的引导管理器,使用它可以很方便地引导一台机器上的多个操作系统。与其他常用的引导加载程序相比,LILO引导方式显得更具有艺术性,对其深入的理解,将有助于我们方便地处理多操作系统、网络引导、大硬盘及大内存等诸多棘手的问题。LILO的优点如下:LinuxLinux操作系统操作系统 (1)作为操作系统的装

47、载程序,LILO独立于任何操作系统,它只使用了计算机的基本输入输出系统BIOS。也就是说,即使不安装Linux操作系统,用户仍然可以在DOS、Unix、OS/2和Windows系统环境下使用LILO,完成多个操作系统的启动任务。(2)可以覆盖硬盘的主引导分区。(3)可以同时支持16个不同的系统内核映像。(4)为每个系统内核映像提供了密码保护。(5)支持位于不同磁盘和分区中的引导扇区、映像文件和启动映像。LinuxLinux操作系统操作系统 1.3.2LILO配置配置一般地,LILO使用一个文本文件/etc/lilo.conf作为其配置文件。LILO读取lilo.conf,按照其中的参数将特定的

48、LILO写入系统引导区,任何时候修改了/etc/lilo.conf,都必须重新运行lilo命令,以保证LILO正常运行。lilo.conf使用的配置参数很多,配置起来也相当复杂。LinuxLinux操作系统操作系统 lilo.conf文件中的配置参数分为两部分,一部分是全局参数,另一部分是引导映像参数。与Linux系统中其他的配置文件一样,“#”号后的一行文字表示注释。全局参数是全程有效的,它可以出现在文件lilo.conf中的任何地方。引导映像参数作用于每一个引导映像区。如果某一引导映像参数(如password)与全局参数的定义相抵触,则以该引导映像参数的定义为准,但仅限于该引导映像区。Li

49、nuxLinux操作系统操作系统 下面我们用一个具体的实例来讲述LILO的配置。某台主机安装了Linux和Windows2000操作系统,/etc/lilo.conf的内容如下(为了方便大家的学习和理解,我们采用逐行注释):boot=/dev/hda#指定装有启动扇区的设备名,如果省略该项,则使用默认作为根文件系统的设备。map=/boot/map#指定LILO使用的映像文件,如果不指定,则该项默认使用/boot/map。LinuxLinux操作系统操作系统 install=/boot/boot.b#指定使用的启动文件为boot.b。LBA32prompt#迫使LILO程序进入提示符状态,如果

50、不设置该项,则需要按【Alt】、【Shift】或【Ctrl】键,LILO程序才进入提示符状态;如果设置该项,但不设置timeout项,LILO程序将一直停留在提示符状态下。LinuxLinux操作系统操作系统 timeout=50#超时时长为5秒,单位为0.1秒。如果为系统内核设置了密码,那么在这段时间内应完成密码的输入。default=linux#缺省引导label为Linux的操作系统。image=/boot/vmlinuz-2.4.17-1#设置Linux核心引导映像。label=LinuxLinuxLinux操作系统操作系统 #标识为Linux。read-only#LILO以只读方式载

51、入根文件系统。root=/dev/hda7#指定内核映像文件存在的分区。restricted#与“password”联用,使“password”仅作用于在LILO提示后有命令行输入的时候。password=linuxLinuxLinux操作系统操作系统 #为LILO设置口令保护,每次重新启动计算机时提示用户输入口令。设置了口令后,建议将lilo.conf的文件属性改为600,以免让非root用户看到口令。other=/dev/hda1#DOS分区为第一个IDE硬盘的第一分区。label=dos#标识为dos。LinuxLinux操作系统操作系统 1.3.3LILO提示信息LILO在运行时会给出

52、一些提示信息,了解它的含义对我们正确配置lilo.conf或查找硬件错误是有帮助的。当LILO装入它自己的时候,显示单词“LILO:”,每完成一个特定的过程显示一个字母。如果LILO在某个地方失败了,屏幕上就停留几个字母,以指示错误发生的地方。LinuxLinux操作系统操作系统 注意,如果磁盘发生瞬间故障,可能会在第一个字母“L”后插入一些十六进制数字(磁盘错误码)。除非LILO停在那里并不停地产生错误码流,否则并不说明有严重问题。以下是LILO运行时常见的一些提示信息及其含义。(1)L错误码:LILO的第一部分已经被装入并运行了,但它不能装入第二部分的引导程序。两位数字的错误码指示问题的类

53、型,这种情况通常是介质访问失败或硬盘参数错误。LinuxLinux操作系统操作系统 (2)LI:LILO第一部分正确但是第二部分执行时出错。这一般是硬盘参数有误或/boot/boot.b被移动后没有重新运行map安装程序。(3) LIL:LILO第二部分开始执行,但是不能从“map”文件中读取描述符表(descriptortable)。这通常是由介质错误或磁盘参数有误引起的。(4)LIL?:LILO在错误的地方加载。原因与“LI”大致相同。LinuxLinux操作系统操作系统 (5)LIL-:描述符表(descriptortable)错误。典型原因是硬盘几何参数的不匹配或/boot/boot.

54、b被移动而没有运行map安装程序。(6)LILO:LILO执行正确。LinuxLinux操作系统操作系统 习习题题1.Linux核心1.0发布时间为_。A.1991B.1993C.1992D.19942.Linus最早是由_人LinusTorvalds编写的。A.芬兰B.荷兰C.法国D.美国3.炎黄中文KDE环境下,启动输入法的程序是_。A.yhB.rfinputC.finputD.abcLinuxLinux操作系统操作系统 4.一般来说,使用Fdisk命令的最后一步是使用_选项命令将改动写入硬盘的当前分区表中。A.pB.rC.xD.w5.如果我们需要在Windows或DOS环境下制作Linu

55、x的启动盘,这时应该利用红旗LinuxServer光盘上的_文件。A.auto.batB.boot.img C.config.sys D.pcmcia.imgLinuxLinux操作系统操作系统 6. LILO启动的时候,出现如下的信息“LI”,说明_。A.LILO第二部分已经加载B.LILO在第二部分出错的地方加载C.用户的分区情况改变,没有重新安装LILOD.第一部分加载,第二部分出错LinuxLinux操作系统操作系统 7.GPL指的是_。A.通用公共许可证B.对推动自由软件发展起了重要的作用C.保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件的源代码,并且规

56、定在不增加附加费用的条件下得到源代码D.规定自由软件的衍生作品继续保持自由状态,并且用户在扩散GNU软件时,必须让下一个用户也有获得源代码的权利LinuxLinux操作系统操作系统 8.通常Linux的安装至少需要两个分区,分别是_。A.根分区B./homeC./usrD.交换分区9.在安装红旗Linux时可以使用的分区工具包括_。A.fdiskB.diskdruid C.fsckD.mkfs10.Linux操作系统的架构包括_。A.内核B.ShellC.文件结构 D.实用工具LinuxLinux操作系统操作系统 第第2章章常用的常用的Linux命令命令2.1文件和目录操作命令文件和目录操作命

57、令2.2显示命令显示命令2.3进程管理和作业控制进程管理和作业控制2.4文件压缩和备份文件压缩和备份2.5网络命令网络命令2.6其他命令其他命令习题习题LinuxLinux操作系统操作系统 2.1文件和目录操作命令文件和目录操作命令2.1.1pwd、cd1.pwd显示(打印)用户当前所处的目录这是再常用不过的命令了,如果不知道自己当前所处的目录,就必须使用它。这个命令和DOS下的不带任何参数的cd命令的作用是一样的。其用法如下:LinuxLinux操作系统操作系统 testredflagtest$pwd/home/test说明当前目录是/home/test。LinuxLinux操作系统操作系统

58、 2.cd目录名改变当前所处的目录或处理绝对目录和相对目录如果用户当前处于/bin目录,想进入/etc目录,可以键入:testredflag/bin$cd/etcLinuxLinux操作系统操作系统 2.1.2ls、tree1.ls参数路径或文件名列出文件或子目录的信息参数选项:-a:显示所有的文件,包括以“.”开头的文件(即隐含文件)。-l:以长格式显示文件或子目录的信息。-i:显示每个文件的索引(节点)号。LinuxLinux操作系统操作系统 执行命令testredflagtest$ls-a显示当前目录下的所有文件,输出:bakchap1.txtDesktoptxtLinux系统用颜色来区

59、分文件类别。缺省时,蓝色代表目录,绿色代表可执行文件,红色代表压缩文件,浅蓝色代表链接文件,灰色代表其他文件。LinuxLinux操作系统操作系统 2.tree目录名以树的形式显示指定目录下的内容testredflagtest$tree这是不带任何参数的tree命令,以树的形式显示当前目录下的文件和子目录,会递归到各子目录。例如:testredflagtest$tree/etc/rc.d以树的形式显示目录/etc/rc.d下的文件和子目录。LinuxLinux操作系统操作系统 2.1.3mkdir、rmdir1.mkdir参数目录名建立目录目录可以是绝对路径,也可以是相对路径。参数选项:-p:

60、建立目录时,如果父目录不存在,则此时可以与子目录一起建立。LinuxLinux操作系统操作系统 例如:testredflagtest$mkdirdir1在当前目录下建立dir1目录。testredflagtest$mkdir-pdir2/bak在dir2目录下建立bak目录,如果dir2目录不存在,那么同时建立dir2目录。LinuxLinux操作系统操作系统 2.rmdir参数目录名删除目录目录同样可以是绝对路径,也可以是相对路径。参数选项:-p:一起删除父目录时,父目录下应无其他目录。例如:rootredflag/root#rmdirtestLinuxLinux操作系统操作系统 删除当前目

61、录下的test目录。删除目录时,被删除的目录下应无文件或目录存在。rootredflag/root#rmdir-plongkey/test删除当前目录下的longkey/test目录。删除目录test时,如果父目录longkey下无其他内容,则一起删除longkey目录。LinuxLinux操作系统操作系统 2.1.4cp、rm、mv、ln1.cp参数源文件目标文件拷贝文件或目录相当于DOS下的copy命令。参数选项:-f:如果目标文件或目录存在,先删除它们再拷贝(即覆盖),并且不提示用户。-i:如果目标文件或目录存在,提示是否覆盖已有的文件。-R:递归复制目录,即包含目录下的各级子目录。Li

62、nuxLinux操作系统操作系统 2.rm参数文件名或目录名删除文件或目录相当于DOS下的del命令。参数选项:-f:删除文件或目录时不提示用户。-i:删除文件或目录时提示用户。-R:递归删除目录,即包含目录下的文件和各级子目录。LinuxLinux操作系统操作系统 例如:testredflagtest$rm*删除当前目录下的所有文件,但子目录和以“.”开头的文件(即隐含文件)不删除。testredflagtest$rmiRbak删除当前目录下的子目录bak,包含其下的所有文件和子目录,并且提示用户确认。LinuxLinux操作系统操作系统 3.mv参数源文件或目录目标文件或目录移动文件或目录

63、相当于DOS下的move命令。参数选项:-i:如果目标文件或目录存在时,提示是否覆盖目标文件或目录。-f:不论目标文件或目录是否存在,均不提示是否覆盖目标文件或目录。值得注意的是,mv可以用来更改文件名或目录名。LinuxLinux操作系统操作系统 例如:testredflagtest$mv1.txt2.txt这里移动文件时并不改变文件的目录,如果2.txt原来不存在,则实际上是1.txt更名为2.txt。testredflagtest$mv/txtbak/bak把个人主目录下的目录txtbak移动到/bak目录下。LinuxLinux操作系统操作系统 4.ln参数源文件或目录链接名建立链接参

64、数选项:-s:建立符号链接(即软链接),不加该项时建立的是硬链接。例如:testredflagtest$lntelno.txttelno2.txtLinuxLinux操作系统操作系统 给源文件telno.txt建立一个硬链接telno2.txt,这时telno2.txt可以看作是telno.txt的别名,它和telno.txt不分主次。telno.txt和telno2.txt实际上都指向硬盘上的相同位置,使用telno.txt作为文件名所做的更改,会在telno2.txt得到反映。硬链接有局限性,不能建立目录的硬链接。LinuxLinux操作系统操作系统 2.1.5chmod、chown、ch

65、grp1.chmod模式文件或目录名改变文件或目录的访问权限Linux系统是个多用户系统,应该能做到不同的用户能同时访问不同的文件,因此一定要有文件权限控制机制。Linux系统的权限控制机制和Windows的权限控制机制有着很大的差别。Linux的文件或目录都被一个用户拥有时,这个用户称为文件的拥有者(或所有者),同时文件还被指定的用户组所拥有,这个用户组称为文件所属组。LinuxLinux操作系统操作系统 要说明的是,一个用户可以是不同组的成员,这可以由管理员控制,我们将在用户管理这一章介绍如何控制的问题。文件的权限由权限标志来决定,权限标志决定了文件的拥有者、文件的所属组、其他用户对文件访

66、问的能力。可以使用“lsl”命令来显示权限标志。例如:testredflagtest$ls-l-rw-rw-r-1longkeyroot1620A2422:23chap1.txtLinuxLinux操作系统操作系统 本例中,文件chap1.txt的拥有者是longkey,所属组是root。这里我们特别关心的是输出行前面的第110个字符。第1个字符代表文件类别,第24个字符“rw-”是文件拥有者的权限,第57个字符“rw-”是文件所属组的权限,第810个字符“r-”是其他用户(即除了root用户和longkey用户组里的用户之外的用户)文件拥有者的权限。而权限均用三个字符表示,依次为读(r)、写

67、(w)、执行(x),如果某一位为“-”,则表示没有相应的权限,例如:“rw-”表示有读、写的权限,没有执行的权限。在本例中,文件拥有者longkey用户对文件有读、写的权限,root组的所有用户对文件也有读、写的权限,而其他用户对文件只有读的权限。LinuxLinux操作系统操作系统 设定文件权限时,在模式中常用以下的字母代表用户或用户组:u文件的拥有者;g文件的所属组;o其他用户;a代表所有用户(即u+g+o)。权限用以下字符表示:r读权限;w写权限;x执行权限;最后要指明是增加(+)还是减少(-)权限,或是绝对权限(=)。LinuxLinux操作系统操作系统 【实例2.2】rootredf

68、lag/root#chmodo+wchap1.txtchap1.txt的权限由原来的“rw-rw-r-”变为“rw-rw-rw-”,表示增加其他用户对文件的写权限。LinuxLinux操作系统操作系统 【实例2.3】rootredflag/root#chmodu=rw,g=rw,o=rchap1.txtchap1.txt的权限变为“rwxrw-r-”,不论原来的权限是什么,这表示拥有者对文件有读、写的权限,所属组的用户对文件也有读、写的权限,而其他用户只有读的权限。LinuxLinux操作系统操作系统 我们在以上设置权限时,用字符表示权限和用户,实际上我们也经常使用八进制来表示。读、写、执行依

69、次各自对应一个二进制位“?”,如果某位为“0”,则表示无权限;如果某位为“1”,则表示有权限。例如:文件权限为r-w-x时,用二进制表示为100010001,用八进制可以表示为421。例如:rootredflag/root#chmod664chap1.txt等同于:rootredflag/root#chmodu=rw,g=rw,o=rchap1.txtLinuxLinux操作系统操作系统 2.chown用户名文件或目录名改变文件(或目录)的拥有者或所属组例如:rootredflag/root#chownlongkeychap1.txt把文件chap1.txt的拥有者改为longkey用户。ro

70、otredflag/root#chownlongkey:rootchap1.txt把文件的拥有者改为longkey用户,同时文件的所属组改为root组。LinuxLinux操作系统操作系统 3.chgrp组文件或目录改变文件或目录的所属组chown可以同时改变文件拥有者和所属者,chgrp只具有改变所属组的功能。例如:rootredflag/root#chgrprootchap1.txt文件chap1.txt的所属组设为root组。LinuxLinux操作系统操作系统 2.1.6find、grep1.find路径匹配表达式查找文件所在的目录路径可以是多个路径,路径之间用空格隔开。查找时,会递归

71、到子目录。匹配表达式:-name:指明要查找的文件名,支持通配符“*”和“?”。-userusername:查找文件的拥有者为username的文件。-groupgrpname:查找文件的所属组为grpname的文件。LinuxLinux操作系统操作系统 -atimen:指明查找前n天访问过的文件(仅第n天这一天)。-atime+n:指明查找前n天之前访问过的文件。-atime-n:指明查找前n天之后访问过的文件。-sizen:指明查找文件大小为n块(block)的文件。-print:搜索结果输出到标准设备。LinuxLinux操作系统操作系统 例如:rootredflag/root#find

72、/-namepasswd-print从根目录起查找名为passwd的文件,并把结果输出到标准设备。rootredflag/root#find/home/etc-userlongkey-print在目录/home和目录/etc中查找longkey用户所拥有的文件。LinuxLinux操作系统操作系统 2.grep参数要查找的字符串文件名查找文件中包含有指定字符串的行参数选项:-num:输出匹配行前后各num行的内容。-b:显示匹配查找条件的行距离文件开头有多少字节。-c:显示文件中包含有指定字符串的行的个数,但不显示内容。LinuxLinux操作系统操作系统 例如:rootredflag/roo

73、t#grep-2Hello!chap.txt在文件chap1.txt中查找所有含有字符串“Hello!”的行,如果找到,显示该行及该行前后各2行的内容。文件名可以使用通配符*和?,如果要查找的字符串带空格,可以使用单引号或双引号括起来。LinuxLinux操作系统操作系统 例如:rootredflag/root#grep-2Hello!chap.txt在文件chap1.txt中查找所有含有字符串“Hello!”的行,如果找到,显示该行及该行前后各2行的内容。文件名可以使用通配符*和?,如果要查找的字符串带空格,可以使用单引号或双引号括起来。LinuxLinux操作系统操作系统 2.diff参数

74、源文件目标文件比较两个文件内容的不同参数选项:-q:仅报告是否相同,不报告详细的差异。-i:忽略大小写的差异。diff命令的输出表示文件有哪些差别,如果要使文件相同,应该采取怎样的动作。由于其输出常常太复杂,以致于diff命令不太实用。我们不详细介绍输出的含义,有兴趣的读者可以用“diff-help”命令来获得详细的说明。LinuxLinux操作系统操作系统 2.1.8stat、touch1.stat文件名显示文件或目录的各种信息例如:testredflagtest$stat/etc/passwdFile:/etc/passwdSize:1323Blocks:8RegularFileDevic

75、e:301h/769dInode:111261Links:1Access:(0644/-rw-r-r-)Uid:( 0/root)Gid:(0/root)LinuxLinux操作系统操作系统 Access:Thu Feb2723:18:002003Modify:Mon Feb2422:22:282003Change:Mon Feb2422:22:282003显示文件passwd的被访问时间、修改时间、变更时间、文件大小、文件所有者、所属组、文件权限等项内容。LinuxLinux操作系统操作系统 2.touch参数文件或目录名修改文件的存取和修改时间参数选项:-dyyyymmdd:把文件的存取/

76、修改时间改为yyyymmdd。-a:只把文件的存取时间改为当前时间。-m:只把文件的修改时间改为当前时间。LinuxLinux操作系统操作系统 例如:testredflagtest$touch*把当前目录下的所有文件的存取和修改时间改为当前系统的时间。testredflagtest$touch-d20030224chap1.txt把文件chap1.txt的存取和修改时间改为2003年2月24日。testredflagtest$touchtest.txtLinuxLinux操作系统操作系统 把test.txt的存取和修改时间改为当前系统的时间,如果test.txt文件不存在,则生成一个空文件(即

77、0字节的文件)。touch还有另外一种形式:touchMMDDhhmmYY文件名例如:testredflagtest$touch0102120099chap1.txt把chap1.txt文件的存取和修改时间改为1999年01月02日12:00。LinuxLinux操作系统操作系统 2.2显显示示命命令令2.2.1cat、more、less1.cat文件名1文件名2显示文件的内容相当于DOS下的type命令。例如:testredflagtest$catchap1.txtchap2.txt把文件chap1.txt、chap2.txt在标准的输出设备(通常是显示器)上显示出来。LinuxLinux操

78、作系统操作系统 2.more文件名逐页显示文件中的内容如果文件太长,用cat命令只能看到文件的最后一页,而用more命令时可以一页一页地显示。执行more命令后,进入more状态,用【Enter】键可以向后移动一行;用【Space】键可以向后移动一页;用“q”键可以退出。在more状态下还有许多功能,可用manmore命令获得。LinuxLinux操作系统操作系统 3.less文件名逐页显示文件中的内容less实际上是more的改进版,其命令的直接含义是more的反义。less的功能比more更灵活。例如:用【Pgup】键可以向前移动一页,用【Pgdn】键可以向后移动一页,用向上光标键可以向前

79、移动一行,用向下光标键可以向后移动一行。“q”键、【Enter】键、【Space】键的功能和more类似。LinuxLinux操作系统操作系统 2.2.2head、tail1.head参数文件名显示文件的前几行参数选项:-nnum:显示文件的前num行。-cnum:显示文件的前num个字符。缺省时,head显示文件的前10行。例如:testredflagtest$head-n20chap1.txt显示文件chap1.txt的前20行。LinuxLinux操作系统操作系统 2.tail参数文件名显示文件的末尾几行参数选项:-nnum:显示文件的末尾num行。-cnum:显示文件的末尾num个字符

80、。tail命令和head命令相反,它显示文件的末尾。缺省时,tail命令显示文件的末尾10行。例如:testredflagtest$tail-n20chap1.txt显示文件chap1.txt的末尾20行。LinuxLinux操作系统操作系统 2.2.3sort、uniq1.sort参数文件列表将文件中的内容排序输出参数选项:-r:反向排序。-o:把排序的结果输出到文件。如果文件a.txt的内容为LinuxLinux操作系统操作系统 bcada则执行sorta.txt命令后的显示结果为aabcdLinuxLinux操作系统操作系统 例如:testredflagtest$sort-oc.txta

81、.txt把a.txt文件的内容排序,并输出到文件c.txt。testredflagtest$sorta.txtb.txtc.txt把文件a.txt、b.txt、c.txt的内容联合排序输出。LinuxLinux操作系统操作系统 2.uniq文件名比较相邻的行,显示不重复的行如b.txt文件的内容为bccadaLinuxLinux操作系统操作系统 则执行uniqb.tx命令后的显示结果为bcadaLinuxLinux操作系统操作系统 2.2.4file、locate、which1.file文件名或目录显示文件或目录的类型例如:rootredflag/root#则可能输出:/etc/passwd:

82、ASCIItext说明passwd是个ASCII文本文件。LinuxLinux操作系统操作系统 2.locate字符串查找绝对路径中包含指定字符串的文件例如:testredflagtest$locatechap1则可能输出:/etc/longkey/chap1.txt/usr/share/doc/qt-devel-2.3.0/html/designer/chap10_1.html/usr/share/doc/qt-devel-2.3.0/html/designer/chap1_1.html/home/longkey/chap1.txt/root/home/longkey/chap1.txtLi

83、nuxLinux操作系统操作系统 3.which命令确定程序的具体位置例如:testredflagtest$whichfind则输出find命令所处的位置:/usr/bin/findLinuxLinux操作系统操作系统 2.3进程管理和作业控制进程管理和作业控制Linux是个多用户、多任务的操作系统。多用户系统是指多个用户可以同时使用同一计算机,而多任务是指系统可以同时执行多项任务。Linux操作系统将负责管理多个用户的请求和多个任务。用户运行一个程序,就会启动一个或多个进程。用户的感觉是一个人独占系统,实际上并非如此。LinuxLinux操作系统操作系统 大多数系统只有一个CPU或有限的内存

84、资源,一个CPU在一个时刻实际上只能运行一个进程,造成用户一个人独占系统的感觉是操作系统的功劳。操作系统控制着每一个运行着的程序(即进程),给每一进程分配一个合适的时间片,大约有几十毫秒,每个进程轮流被CPU运行一段时间,然后被挂起,系统去处理另外一个进程,经过一段时间后这个进程又被运行。LinuxLinux操作系统操作系统 所谓的程序是指程序员编写的计算机指令集,其实就是一个保存在磁盘上的文件。运行一个程序,就会在系统中创建一个或多个进程,进程可以看成是在计算机里正在运行的程序。Linux系统启动后,就已经创建了许多进程。本节将介绍Linux这一多任务系统提供的关于进程管理的命令。Linux

85、Linux操作系统操作系统 2.3.1进程的启动进程的启动进程的启动有两种方式:手工启动和调度启动。手工启动又分为前台启动和后台启动。前台启动是最常用的方式,用户直接运行一个程序或执行一个命令时就启动了前台进程。例如:用户执行“ls-l”命令就启动了一个新的前台进程,只不过这个进程可能很快就结束了。前台进程的一个特点是进程不结束,终端不出现“#”或“$”提示符,所以用户不能再执行别的任务。后台进程的启动是用户在输入命令行后加上“&”字符,例如:LinuxLinux操作系统操作系统 rootredflag/root#find/-namemy/root/test&这就启动了一个后台进程。后台进程常

86、用于进程耗时长、用户不着急得到结果的场合。用户启动一个后台进程后,终端会出现“#”或“$”提示符,而不必等待进程的结束,用户又可以接着执行别的任务。至于调度进程,是指用户事先设定好(如在某个时间),让系统自行启动进程的方法。有关调度进程的方法将在本节稍后介绍。LinuxLinux操作系统操作系统 2.3.2查看系统的进程查看系统的进程要管理进程,首先要知道系统里有哪些进程存在及进程的状况如何。可以使用下面的命令:ps参数查看系统的进程。参数选项:a:显示当前控制终端的进程(包括其他用户的)。u:显示进程的用户名和启动时间等信息。-w:宽行输出,不截取输出中的命令行。-l:按长格式显示输出。Li

87、nuxLinux操作系统操作系统 x:显示没有控制终端的进程。-e:显示所有的进程。-tn:显示第n个终端的进程。ps命令的输出,含义如下:USER:启动进程的用户名。PID:进程号。PPID:父进程的进程号。TTY:启动进程的终端号。LinuxLinux操作系统操作系统 STAT:进程的状态,R表示进程正在运行,S表示进程在睡眠,T表示进程僵死或停止,D表示进程处于不能中断的睡眠(通常是输入输出)。START:进程开始的时间。TIME:进程已经运行的时间。COMMAND/CMD:进程的命令名。%CPU:进程占用CPU总时间的百分比。%MEM:进程占用系统内存总量的百分比。NI:nice的优先

88、级。PRI:进程的优先级。LinuxLinux操作系统操作系统 例如:testredflagtest$psauUSER PID %CPU %MEM VSZ RSS TTY STAT START TIMECOMMANDroot11100.00.423721236pts/0S23:170:00login-testtest11110.00.527881360pts/0S23:170:00-bashroot11440.00.427921060pts/0S23:170:00surootroot11450.00.527921364pts/0S23:170:00bashroot11920.00.226247

89、60pts/0R23:230:00psauLinuxLinux操作系统操作系统 以上显示当前控制终端的进程。testredflagtest$ps-elw以上以长格式显示所有的进程。【技巧】ps常和重定向、管道命令一起使用,用于查找出所需的进程,例如:testredflagtest$ps-eu|greptest查找test用户启动的进程。testredflagtest$ps-e|grephttpd查找httpd(Web服务守护进程)进程的信息,如进程号等。LinuxLinux操作系统操作系统 2.3.3进程的控制进程的控制1.kill命令给进程发送信号前台进程在运行时,可以用【Ctrl-c】来终

90、止它。但后台进程无法用这种方法来终止,这时候可以使用kill命令向进程发送强制终止信号来达到目的。LinuxLinux操作系统操作系统 例如:rootredflag/root#kill-l显示kill命令所能够发送的信号种类,每个信号都有一个数值对应,例如:SIGKILL信号的值是9,而SIGTERM的值是15,SIGTERM信号是kill命令默认的信号。kill命令的格式为:kill参数进程1进程2LinuxLinux操作系统操作系统 参数选项:-ssignal:signal是信号类别,如:SIGKILL。例如:rootredflag/root#psPIDTTYTIME CMD835tty1

91、 00:00:00login843tty100:00:00bash1212tty100:00:00psrootredflag/root#killsSIGKILL835则系统退到登录界面,以上命令也可以用以下命令代替:rootredflag/root#kill9835LinuxLinux操作系统操作系统 2.killall-ssignal命令名根据进程名来发送信号参数选项:-ssignal:signal是信号类别,如:SIGKILL。用kill命令时要先用ps命令查出进程号,这样不是很方便。killall可以根据进程名来发送信号。例如:rootredflag/root#killall9vim终止

92、所有vi会话。LinuxLinux操作系统操作系统 3.nice命令以指定的优先级运行程序Linux系统有两个与进程有关的优先级。用“psl”命令可以看到两个域:PRI和NI。PRI是进程实际的优先级,它是由操作系统动态计算的,这个优先级的计算机和NI值有关。NI值可以被用户更改,其值范围为2020。NI值越高,优先级越低。一般用户只能加大NI值(即降低优先级),只有超级用户可以减小NI值(即提高优先级)。NI值被改变后,会影响PRI。优先级高的进程被优先运行,缺省时进程的NI为0。nice命令的用法如下:LinuxLinux操作系统操作系统 nice-n程序名以指定的优先级运行程序n:NI值

93、,正值代表NI值增加,负值代表NI值减小。例如:rootredflag/root#nice-15ps-l则输出:LinuxLinux操作系统操作系统 FSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD100S0126112600700-593wait4pts/000:00:00login000S0129512620730-698wait4pts/000:00:00su100S0129612950760-698wait4pts/000:00:00bash100R013181296078-15-769-pts/000:00:00ps可以看到ps命令以NI值为-15的优先

94、级运行。LinuxLinux操作系统操作系统 4.renice命令改变进程的优先级运行中的进程的优先级可以被调整,注意只有root用户可以提高进程的优先级,一般用户只能降低优先级。renice命令就是用来改变进程的优先级的,其用法如下:renicen进程号n为期望的进程NI值。LinuxLinux操作系统操作系统 rootredflag/root#ps-lFSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD100S0126112600690-593wait4pts/000:00:00login000S0129512620690-698wait4pts/000:00:0

95、0su100S0129612950730-698wait4pts/000:00:00bash100R013731296075-15-769-pts/000:00:00psrootredflag/root#renice-61261LinuxLinux操作系统操作系统 rootredflag/root#ps-lFSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD100S012611260069-6-593wait4pts/000:00:00login000S0129512620690-698wait4pts/000:00:00su100S0129612950750-698

96、wait4pts/000:00:00bash100R0138012960770-769-pts/000:00:00ps检查进程号为1261的进程优先级是否发生了改变。LinuxLinux操作系统操作系统 5.top命令实时监控进程程序和ps命令不同,top命令可以实时监控进程状况。top屏幕自动每5秒刷新一次,也可以用“topd20”,使得top屏幕每20秒刷新一次。top的屏幕输出如下:11:50pmup1:06,4users,loadaverage:0.02,0.01,0.0050processes:49sleeping,1running,0zombie,0stoppedCPUstates

97、:0.0%user,0.0%system,0.0%nice,99.9%idleLinuxLinux操作系统操作系统 Mem:255212Kav,167244Kused,87968Kfree,92Kshrd,42504KbuffSwap:771112Kav,0Kused,771112Kfree31712KcachedPIDUSERPRINISIZERSSSHARESTAT%CPU%MEMTIMECOMMAND1root80536536464S0.00.20:04init2root90000SW0.00.00:00keventd3root90000SW0.00.00:00kapm-idled4ro

98、ot1919000SWN0.00.00:00ksoftirqd_CPU0LinuxLinux操作系统操作系统 579snort90545254441176S0.02.10:00snort606named90383638362176S0.01.50:00namedLinuxLinux操作系统操作系统 top屏幕前五行的含义如下:第一行:正常运行时间行。显示系统当前时间,系统已经正常运行的时间,系统当前用户数,最近1分钟、5分钟、15分钟准备运行的进程平均数。第二行:进程统计数。显示当前的进程总数,睡眠的进程数,正在运行的进程数,僵死的进程数,暂停的进程数。LinuxLinux操作系统操作系统 第

99、三行:CPU统计行。包括用户进程,系统进程,修改过NI值的进程,空闲进程各自使用CPU的百分比。第四行:内存统计行。包括内存总量,已用内存,空闲内存,共享内存,缓冲区的内存总量。第五行:交换区和缓冲区统计行。包括交换区总量,已使用的交换区,空闲交换区,高速缓冲区总量。输出的其他行的含义和ps的输出类似,这里不再介绍。在top屏幕下,用“q”键可以退出,用“h”键可以显示top下的帮助。LinuxLinux操作系统操作系统 6.bg、jobs、fg在手工启动前台进程时,如果进程没有执行完毕,则可以使用【Ctrl-z】键暂停进程的执行。例如:rootredflag/root#du-a/|sort-

100、rn/root/test.out按【Ctrl-z】1+Stoppeddu-a/|sort-rn/root/test.outLinuxLinux操作系统操作系统 表示du命令被暂停,这时候我们可以把暂停的进程放到后台继续运行,我们在前台还可以运行别的命令。bg命令用于把进程放到后台。rootredflag/root#bgdu或bg%11+du-a/|sort-rn/root/test.out&使用jobs命令可以看到在后台运行的进程。rootredflag/root#jobs1+Runningdu-a/|sort-rn/root/test.outLinuxLinux操作系统操作系统 这说明了du

101、程序在后台运行。在上面例子中,我们把被暂停的进程放到后台运行,如果我们想直接在后台运行它,在命令行后加“&”字符,不必用【Ctrl-z】键先把它暂停再用bg命令把它放到后台。例如:rootredflag/root#du-a/|sort-rn/root/test.out&用bg命令可以把进程放到后台,用fg命令则可以把在后台运行的进程放到前台。rootredflag/root#du-a/|sort-rn/root/test.out&rootredflag/root#jobs查出在后台运行的进程的进程号,我们假设是1,则rootredflag/root#fg%1LinuxLinux操作系统操作系统

102、 7.nohup命令一般来说,当一个进程的父进程被终止时,该进程也会被终止。用“psl”命令可以看到进程的父进程。例如:LinuxLinux操作系统操作系统 FSUIDPIDPPIDCPRINIADDRSZWCHANTTYTIMECMD100S0155215510690-593wait4pts/000:00:00login000S0158615530690-698wait4pts/000:00:00su100S0158715860740-698wait4pts/000:00:00bash100R0264215870760-770-pts/000:00:00psLinuxLinux操作系统操作系

103、统 其中,进程2642的父进程是1587,1587实际上是Shell进程。在Shell下启动的进程的父进程大多是Shell进程,而Shell进程的父进程又是login进程,所以当你logout时,由login进程衍生出的进程就会被终止。如果你希望logout后自己的进程仍然能在后台继续运行,可以使用nohup命令。nohup的用法如下:rootredflag/root#nohup命令&LinuxLinux操作系统操作系统 【实例2.4】root redflag /root#nohup du -a / | sort -rn /root/test.out&命令du-a/|sort-rn/root/

104、test.out不会在用户logout后终止。LinuxLinux操作系统操作系统 2.3.4作业控制作业控制有时我们需要把费时的工作放在深夜进行,这时候我们可以事先进行调度安排,即调度启动进程,系统会自动启动我们安排好的进程。LinuxLinux操作系统操作系统 1.at、atq、atrm我们可以使用at命令将要执行的命令安排成队列,例如:rootredflag/root#at8:40atduatest.outattree/test.outLinuxLinux操作系统操作系统 按【Ctrl-d】退出。很明显,我们安排系统在8:40执行两个命令,注意这些命令只执行一次。使用at命令时,可以使用

105、不同的时间格式,例如:20:40、8:00am、8:40amfeb23、10am+5days、12:30pmtomorrow、midnight、noon等。如果执行如下命令:rootredflag/root#atfmywork9:45am+2days则安排系统于两天后的上午9:45执行文件mywork里的作业。用at命令设定好作业后,atd守护进程将负责运行它们。我们可以使用atq命令查看已经安排好的作业。LinuxLinux操作系统操作系统 rootredflag/root#atq142003-02-2807:45aroot132003-02-2708:40aroot输出行中依次是作业号、作

106、业的启动时间、用户名,遗憾的是这里不能知道作业的内容。如果想知道作业的内容,请到/var/spool/at目录里去找(类似a00011010a2548这样的文件)。LinuxLinux操作系统操作系统 2.crontab命令at命令用于安排运行一次的作业比较方便,但如果要重复运行程序,则使用crontab更为简捷。crontab的用法如下:crontab参数-e|-l|-r参数选项:-uusername:用户username的作业,不指定时指当前用户。LinuxLinux操作系统操作系统 -e:编辑用户cron作业。-l:显示用户cron作业。-r:删除用户cron作业。例如:rootredf

107、lag/root#crontab-e进入编辑cron作业状态,编辑器采用的是vi编辑器。关于vi的使用请参见第3章。一个cron作业的格式如下:分小时日月星期命令LinuxLinux操作系统操作系统 如果用户不需要指定其中的几项,可以用“*”代替,例如:0,10,20*updatedb每逢0、10、20分运行一次命令updatadb。*date/root/crontest.out表示每分钟往/root/crontest.out文件添加一行关于时间的行。rootredflag/root#crontab-lLinuxLinux操作系统操作系统 列出当前用户的cron作业:#DONOTEDITTHI

108、SFILE-editthemasterandreinstall.#(/tmp/crontab.1106installedonThuFeb2723:17:232003)# (Cron version - $Id: crontab.c,v 2.13 1994/01/17 03:20:37vixieExp$)*date/root/crontest.outLinuxLinux操作系统操作系统 2.4文件压缩和备份文件压缩和备份2.4.1压缩和解压命令压缩和解压命令使用压缩文件不仅可以减小文件占用的磁盘空间,也可以减小文件在网络传输时所带来的传输流量。Linux的压缩和解压工具很多,下面我们介绍常用的几

109、个工具。LinuxLinux操作系统操作系统 press参数文件名(压缩文件命令)/uncompress参数文件名(文件解压命令)参数选项:-v:显示被压缩的文件的压缩比或解压时的信息。例如:rootredflag/root#compress-vtesttest:-replacedwithtest.ZCompress:53.56%LinuxLinux操作系统操作系统 文件test被压缩成“test.Z”,压缩比为:53.56%。rootredflag/root#uncompress-vtest或uncompress-vtest.Ztest.Z:-replacedwithtest解压文件是“te

110、st.Z”。LinuxLinux操作系统操作系统 2.gzip-v文件名(压缩文件)/gunzip-v文件名(解压文件)gzip、gunzip和compress、uncompress类似,不过压缩后的文件的文件名是以“.gz”结尾而已。LinuxLinux操作系统操作系统 3.zip压缩文件名(压缩文件)/unzip被解压文件名(解压文件)zip生成的文件是以“.zip”为文件名的结尾,这种文件是我们在Windows等系统中最常见的压缩文件。zip命令的功能非常强大,可以创建自解压的文件、设置文件的保护口令等。常用manzip命令来获得zip命令的详细帮助。zip命令并不替换原文件。Linux

111、Linux操作系统操作系统 例如:rootredflag/root#ziptest.ziptestadding:test(deflated66%)把文件test压缩到文件“test.zip”。rootredflag/root#unziptest.zipArchive:test.zipinflating:test如果test已经存在,unzip命令会提示是否覆盖test文件。LinuxLinux操作系统操作系统 2.4.2文件备份文件备份任何计算机系统都可能出现问题,从而导致数据的丢失,因此备份是系统维护中不可缺少的一个环节。备份应做到系统崩溃后能快速、简单、完整地恢复系统。针对要备份的内容,备

112、份可以分为两类:系统数据备份和用户数据备份。系统数据是指Linux系统要正常运行所需的文件(如/bin和/boot目录)、系统配置(如/etc目录)等;而用户数据是指计算机用户创建的文件(如/home目录)等,相对于系统数据来说,用户数据的变化要频繁得多。LinuxLinux操作系统操作系统 备份系统数据时,可以不备份不必要的数据(如/proc/core),它是当前物理内存的一个映像,并且系统备份常在系统有变化后进行,例如安装了新的补丁。LinuxLinux操作系统操作系统 备份有两种策略:完全备份和增量备份。完全备份是把要备份的数据完完全全备份出来,一旦系统发生故障,可以使用备份的数据把数据

113、恢复到备份前的状态;增量备份则是备份最后一次备份以后发生了变化的数据,因此被备份的数据量要少得多。实际工作中,完全备份和增量备份常常是结合起来使用的。LinuxLinux操作系统操作系统 例如:一周(例如在星期一)进行一次完全备份,而每天进行一次增量备份,如果系统于星期四出现故障,恢复系统时先用完全备份恢复系统,然后再顺序用周二、周三的增量备份恢复系统。Linux中的tar工具是最常用的备份和恢复工具,同时tar也是软件商发布补丁、新软件的常用工具,所以掌握tar的使用是非常重要的。我们把备份产生的文件称为文档文件(或文档)。格式如下:tar参数文件或目录名LinuxLinux操作系统操作系统

114、 参数选项:-c:创建一个新的文档。-r:用于将文件附加到已存在的文档后面。-u:仅仅添加比文档文件更新的文件,如原文档中不存在旧的文件,则追加它到文档中,如存在则更新它。-x:从文档文件中恢复被备份的文件。LinuxLinux操作系统操作系统 -t:用于列出一个文档文件中的被备份出的文件名。-z:用zip命令压缩或用unzip解压。-f:使用档案文件或设备,这个选项通常是必选的。-v:列出处理过程中的详细信息。-Cdirectory:把当前目录切换到directory。LinuxLinux操作系统操作系统 例如:rootredflag/root#tar-cvflongkey.tar/home

115、/longkey把/home/longkey目录下的文件和子目录(包括隐含文件和目录)备份到longkey.tar文档中。备份产生的文档文件的文件名最好用“.tar”结尾,以示区别。以上是一个完全备份。rootredflag/root#tar-uvflongkey.tar/home/longkey把/home/longkey目录中比文档文件longkey.tar还新的文件添加到longkey.tar中。rootredflag/root#tar-czvflongkey.tar.gz/home/longkeyLinuxLinux操作系统操作系统 以gzip压缩文件的形式把/home/longkey

116、的内容备份到longkey.tar.gz中。备份产生的文档是压缩过的,这样可 以 减 小 文 档 文 件 的 大 小 。 注 意 , 文 件 是 以“.tar.gz”结尾的。rootredflag/root#tar-xzflongkey.tar.gzLinuxLinux操作系统操作系统 从longkey.tar.gz文档中恢复数据。注意,恢复出来的数据是放在当前目录下的,而不是恢复到原来的目录。rootredflag/root#tar-xzflongkey.tar.gz-C/home可以把文件恢复到指定的目录/home下。tar命令的参数还有很多,而且它常常和其他的命令如find等一起使用,以

117、实现完全备份和增量备份,用户甚至还常写脚本来实现自己备份的策略。LinuxLinux操作系统操作系统 2.5网网络络命命令令Linux系统也是一个网络操作系统,其网络功能也相当强大。目前Linux系统大多是被用来提供网络服务的,Linux系统可以提供各种各样的网络服务,例如:Web服务、FTP服务、DNS服务。这些内容将放在以后的章节介绍,我们先介绍基本的网络命令。LinuxLinux操作系统操作系统 2.5.1hostname、ping、host1.hostname主机名显示或设置系统的主机名例如:rootredflag/root#hostnameredflag表示本人的系统主机名是“red

118、flag”。rootredflag/root#把主机名设置为“”。LinuxLinux操作系统操作系统 2.ping参数主机名(或IP地址)测试本主机和目标主机连通性参数选项:-ccount:共发出count次信息,不加此项,则发无限次信息。-iinterval:两次信息之间的时间间隔为interval,不加此项,间隔为1秒。LinuxLinux操作系统操作系统 例如:rootredflag/root#ping-c10-i0.5192.168.0.1PING192.168.0.1(192.168.0.1)from192.168.0.10:56(84)bytesofdata.Warning:ti

119、meofdaygoesback,takingcountermeasures.64 bytes from 192.168.0.1: icmp_seq=0 ttl=128 time=648usec64 bytes from 192.168.0.1: icmp_seq=1 ttl=128 time=578usec.LinuxLinux操作系统操作系统 64bytesfrom192.168.0.1:icmp_seq=8ttl=128time=569usec64bytesfrom192.168.0.1:icmp_seq=9ttl=128time=576usec-192.168.0.1pingstatis

120、tics-10packetstransmitted,10packetsreceived,0%packetlossround-tripmin/avg/max/mdev=0.544/0.575/0.648/0.028ms以上命令共发出10次信息,信息之间的间隔为0.5秒。LinuxLinux操作系统操作系统 3.host主机名或IP地址IP地址查找工具例如:rootredflag/root#host.hasaddress66.77.9.79DNS查找出“”的IP地址为“66.77.9.79”。rootredflag/root#host202.96.134.133133.134.96.202.in-

121、.LinuxLinux操作系统操作系统 这是反向IP地址解析。rootredflag/root#hostmylinux192.168.0.10Usingdomainserver:Name:192.168.0.10Address:192.168.0.10#53Aliases:.hasaddress192.168.0.1LinuxLinux操作系统操作系统 以上指明了从DNS服务器192.168.0.10上查找主机mylinux的IP地址,如果没有指明DNS服务,则系统使用本机网络设置中设定的DNS服务器。有关IP地址的查找请进一步参见本书有关DNS的章节。LinuxLinux操作系统操作系统 2

122、.5.2ifconfigifconfig是用于配置网卡和显示网卡信息的工具。例如:rootredflag/root#ifconfig-aeth0Linkencap:EthernetHWaddr00:E0:4C:30:03:F7inetaddr:192.168.0.10Bcast:192.168.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:1257errors:0dropped:0overruns:0frame:0LinuxLinux操作系统操作系统 TXpackets:558errors

123、:0dropped:0overruns:0carrier:0collisions:0txqueuelen:100RXbytes:138072(134.8Kb)TXbytes:48879(47.7Kb)Interrupt:5Baseaddress:0xc000loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.0.0UPLOOPBACKRUNNINGMTU:16436Metric:1LinuxLinux操作系统操作系统 RXpackets:14errors:0dropped:0overruns:0frame:0TXpackets:14err

124、ors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:1046(1.0Kb)TXbytes:1046(1.0Kb)显示本主机有一个网卡eth0。lo是本地环路(虚拟的)网卡,不是物理上实实在在的网卡。在以上的输出中有几个重要的信息:IP地址、网卡MAC地址、网卡的配置以及网卡的一些统计数(如接收和发送包的总量)。LinuxLinux操作系统操作系统 2.5.3traceroute目标主机名或目标主机名或IP地址地址该命令显示本机到达目标主机的路由路径,例如:rootredflag/root#traceroutetrac

125、erouteto(66.77.9.79),30hopsmax,38bytepackets1*2211.162.65.62(211.162.65.62)1.116ms1.010ms0.945ms3211.162.78.201(211.162.78.201)1.061ms1.053ms1.030msLinuxLinux操作系统操作系统 18 svl-core- (205.171.8.242) 1250.125 ms 1265.016 ms 1255.987ms19 svc-cntr- (205.171.14.2) 1255.304 ms 1254.937 ms 1249.087ms20msfc-(

126、66.77.106.98)1247.149ms1271.762ms1267.991ms2166.77.9.79(66.77.9.79)1250.633ms1253.705ms1260.267msLinuxLinux操作系统操作系统 2.5.4Telnet、FTP1.Telnet主机名或IP地址远程登录客户程序例如:rootredflag/root#telnet192.168.0.200远 程 登 录 到 服 务 器 192.168.0.200。 服 务 器192.168.0.200应开启Telnet服务,否则会连接失败。如果成功连接Telnet,程序会提示输入用户名和口令,登录成功后就可以远程

127、管理或使用服务器。LinuxLinux操作系统操作系统 2.FTP主机名或IP地址FTP客户程序例如:rootredflag/root#FTP到远程FTP服务器192.168.0.10,同样服务器192.168.0.10要开启FTP服务。连接成功后,FTP程序会提示输入用户名和口令。如果连接成功,将得到“ftp”提示符。现在可以自由使用FTP提供的命令,可以用help命令或“?”取得可供使用的命令清单,也可以在help命令后面指定具体的命令名称,获得这条命令的说明。LinuxLinux操作系统操作系统 最常用的命令有:ls:列出远程机的当前目录。cd:在远程机上改变工作目录。lcd:在本地机上

128、改变工作目录。ascii:设置文件传输方式为ASCII模式。binary:设置文件传输方式为二进制模式。close:终止当前的FTP会话。hash:每次传输完数据缓冲区中的数据后就显示一个“#”号。get(mget):从远程机传送指定文件到本地机。LinuxLinux操作系统操作系统 put(mput):从本地机传送指定文件到远程机。open:连接远程FTP站点。quit:断开与远程机的连接并退出FTP。?:显示本地帮助信息。!:转到Shell中。LinuxLinux操作系统操作系统 下面简单将FTP常用命令作以介绍。(1)启动FTP会话。open命令用于打开一个与远程主机的会话。该命令的一般

129、格式是:open主机名/IP(2)终止FTP会话。close、disconnect、quit和bye命令用于终止与远程机的会话。close和disconnect命令用于关闭与远程机的连接,但是仍没有退出FTP程序。quit和bye命令都用于关闭用户与远程机的连接,然后退出用户机上的FTP程序。LinuxLinux操作系统操作系统 (3)改变目录。“cd目录”命令用于在FTP会话期间改变远程机上的目录,lcd命令可改变本地目录,使用户能指定查找或放置本地文件的位置。(4)远程目录列表。ls命令列出远程目录的内容,就像使用一个交互Shell中的ls命令一样。ls命令的一般格式是:ls目录如果指定了

130、目录作为参数,那么ls就列出该目录的内容。LinuxLinux操作系统操作系统 (5)从远程系统下载文件。get和mget命令用于从远程机上获取文件,get命令的一般格式为:get源文件名目标文件名源文件名是要下载的文件名,目标文件名是文件下载后在本地机上保存时的文件名。如果不给出目标文件名,那么就使用源文件的名字。mget命令一次可获取多个远程文件。mget命令的一般格式为:mget文件名列表使用用空格分隔的或带通配符的文件名列表来指定要获取的文件。LinuxLinux操作系统操作系统 (6)向远程系统上载文件。put和mput命令用于向远程机发送文件,put命令的一般格式为:put文件名m

131、put命令一次发送多个本地文件,mput命令的一般格式为:mput文件名列表使用用空格分隔的或带通配符的文件名列表来指定要发送的文件。LinuxLinux操作系统操作系统 (7)改变文件传输模式。默认情况下,FTP按ASCII模式传输文件,用户也可以指定其他模式。ascii和brinary命令的功能是设置传输的模式。用ASCII模式传输纯文本文件是非常好的,而二进制文件以二进制模式传输更为可靠。(8)切换“#”提示。hash命令使FTP在每次传输完数据缓冲区中的数据后,就在屏幕上打印一个“#”字符。本命令在发送和接收文件时都可以使用。hash命令是一个开关。LinuxLinux操作系统操作系统

132、 【实例2.5】以下是下载一个文件的过程:rootredflag/root#ftpftpopen192.168.0.10C(Versionwu-2.6.1-16)ready.530PleaseloginwithUSERandPASS.530PleaseloginwithUSERandPASS.KERBEROS_V4rejectedasanauthenticationtypeLinuxLinux操作系统操作系统 Name(192.168.0.10:test):test331Passwordrequiredfortest.Password:230-230-Thisiswanglongjies230

133、-230-230Usertestloggedin.RemotesystemtypeisUNIX.LinuxLinux操作系统操作系统 Usingbinarymodetotransferfiles.ftppwd257/home/testiscurrentdirectory.ftpls227EnteringPassiveMode(192,168,0,10,249,113)150 Opening ASCII mode data connection for directorylisting.total9963LinuxLinux操作系统操作系统 lrwxrwxrwx1rootroot12Feb182

134、0:29Desktop-.Desktop_gb/-rw-rw-r-15035030Mar110:46a.zip-rw-r-r-15035035044297Feb2823:59aaadrwxr-xr-x2rootroot80Feb1923:08public_htmldrwxrwxr-x2503503288Feb2613:59ttt226Transfercomplete.ftpgeta.zip/root/1.ziplocal:/root/1.zipremote:a.zip227EnteringPassiveMode(192,168,0,10,20,213)150OpeningBINARYmoded

135、ataconnectionfora.zip(0bytes).LinuxLinux操作系统操作系统 226Transfercomplete.ftpclose221-Youhavetransferred0bytesin1files.221-Totaltrafficforthissessionwas783bytesin1transfers.221T.ftpbyerootredflag/root#LinuxLinux操作系统操作系统 2.5.5wall、write、mesg1.wall向任何用户终端发送字符消息例如:rootredflag/root#wall表示进入消息输入状态,可以输入一行或多行消息

136、,按【Ctrl-d】键结束。在进行系统管理时,如果有紧急消息要通知所有在线用户,wall命令十分有用。LinuxLinux操作系统操作系统 2.write用户名终端向用户发送字符消息例如:rootredflag/root#writeuser1表示进入消息输入状态,可以输入一行或多行消息,按【Ctrl-d】键结束。write命令和下面介绍的mesg命令也有关。LinuxLinux操作系统操作系统 3.mesg参数控制他人向自己的终端发送消息的能力参数选项:y:允许他人往自己的终端发送消息。n:不允许他人往自己的终端发送消息,但无法阻止root用户向自己发送信息。LinuxLinux操作系统操作系

137、统 例如:rootredflag/root#mesgn表示其他用户用wall命令发送消息时,不会对自己的终端产生影响。rootredflag/root#mesgisn显示当前终端是否允许他人往自己的终端发送消息,以上表示不允许。LinuxLinux操作系统操作系统 2.5.6mailmail用户名或E-mail地址SMTP客户端程序。可以使用这个程序在系统内发送和接收邮件,也可以往Internet上的主机发送邮件或从Internet的主机接收邮件。例如:rootredflag/root#maillongkeySubject:ThisisatestmailHello,longkey!Cc:Lin

138、uxLinux操作系统操作系统 输入时按【Ctrl-d】键可以结束输入,把邮件发出。当longkey用户登录时,系统会提示“Youhavemail”。这时longkey用户可以直接使用mail命令来接收邮件和回复邮件。键入该命令时,出现“&”提示符,用“?”命令可以得到mail的帮助。mail的使用较为复杂,这里就不详细讨论了。LinuxLinux操作系统操作系统 2.5.7fingerfinger用户名主机显示主机系统中用户的信息。例如:rootredflag/root#fingerLoginNameTtyIdleLoginTimeOfficeOfficePhonerootroottty12

139、Mar1 09:44testtty24Mar1 11:08testpts/0Mar1 11:13()LinuxLinux操作系统操作系统 显示用户当前登录的主机上的所有登录用户的信息。finger命令要求主机要提供finger服务,否则会连接失败。rootredflag/root#fingerLogin:longkeyName:(null)Directory:/home/longkeyShell:/bin/bashLastloginSatMar108:32(EST)ontty3Nomail.NoPlan.LinuxLinux操作系统操作系统 2.5.8netstat参数选项参数选项netsta

140、t命令显示网络连接、路由表、网卡统计数等信息。参数选项:-i:显示网卡的统计数。-r:显示路由表。-a:显示所有信息。例如:rootredflag/root#netstati表示显卡的统计数。LinuxLinux操作系统操作系统 以下是网卡的各种统计数据,如:接收错误的包的数量。KernelInterfacetableIfaceMTUMetRX-OKRX-ERRRX-DRPRX-OVRTX-OKTX-ERRTX-DRPTX-OVRFlgeth015000460000320000BMRUlo1643605400054000LRULinuxLinux操作系统操作系统 2.6其其他他命命令令2.6.

141、1clear、dmesg、uname1.clear清除屏幕该命令相当于DOS下cls命令。2.dmesg显示内核引导时的状态信息该命令对于内核引导出现故障时查找问题十分有用。LinuxLinux操作系统操作系统 3.uname-a显示系统的信息例如:rootredflag/root#uname-aL2.4.7-2#1一8月2714:04:34CST2001i686unknown说明主机名是,Linux的内核是2.4.7-2,CPU是i686结构。LinuxLinux操作系统操作系统 2.6.2date、cal1.date时间显示或设置系统的时间格式如下:时间:MMDDhhmmCCYY.SSro

142、otredflag/root#date三2月2617:04:44EST2003当前系统的时间为2003年2月26日17:04:44,星期三。LinuxLinux操作系统操作系统 2.cal月年显示指定年月的月历如未指明年月,则显示当月的月历。rootredflag/root#cal32003三月2003日一二三四五六12345678910111213141516171819202122232425262728293031LinuxLinux操作系统操作系统 2.6.3help、man1.help内置命令用于查看Linux内置命令的帮助例如:rootredflag/root#help输出全部内置

143、命令。我们曾介绍Linux命令有内部命令和外部命令之分,如果读者不能区别命令是哪类,通过这一命令就可以区别它们了。rootredflag/root#helpalias输出内置命令alias的帮助。LinuxLinux操作系统操作系统 2.man命令名命令的帮助手册Linux的命令不仅多,而且每个命令的功能都十分强大,其参数也多如牛毛,幸运的是它有一个帮助系统能够帮助我们。例如:rootredflag/root#manls获得ls的帮助。LinuxLinux操作系统操作系统 典型的man手册包括以下几个部分:NAME:命令的名字。SYNOPSIS:名字的概要,简单说明命令的使用方法。DESCRI

144、PTION:详细描述命令的使用,如各种参数选项的作用。SEEALSO:列出可能要查看的其他有关的手册页条目。AUTHOR,COPYRIGHT:作者和版权等信息。LinuxLinux操作系统操作系统 2.6.4init、shutdown、halt、reboot、poweroff关闭Linux系统要采取正确的步骤,否则会引起文件系统损坏。由于Linux系统使用磁盘缓冲技术,Linux并不把数据立即写到磁盘上,因此不能直接用关闭电源来关机。正确的步骤应是执行如下指令:rootredflag/root#sync;sync;syncrootredflag/root#shutdownhnow(或下面我们介

145、绍的关闭系统指令)LinuxLinux操作系统操作系统 这三个sync可确保磁盘缓冲的内容全部写到磁盘中。此外,缺省时按【Ctrl】+【Alt】+【Del】键可以重新启动系统,用户可以禁止这一功能,方法是先找到/etc/inittab文件,把以下行屏蔽即可:ca:ctrlaltdel:/sbin/shutdown-t3-rnowLinuxLinux操作系统操作系统 1.initn改变系统的运行等级n:指定的系统运行等级。0停止系统。1单用户。2多用户,但不支持NFS。3全多用户模式,即系统正常的模式。5进入X11(即窗口模式)。6重启系统。LinuxLinux操作系统操作系统 例如:rootr

146、edflag/root#init6重新启动系统。rootredflag/root#init0关闭系统。LinuxLinux操作系统操作系统 2.shutdown参数时间警告消息在指定时间关闭系统参数选项:-r:系统关闭后重启。-h:关闭后停机。时间可以有以下几种形式:now:表示立即。hh:mm:指定绝对时间,hh表示小时,mm表示分钟。+m:表示m分钟以后。LinuxLinux操作系统操作系统 例如:rootredflag/root#shutdown-r+5“Systemwillrebootin5minutes.”该命令警告用户5分钟后系统重启。3.halt立即停止系统该命令不自动关闭电源,

147、需要人工关闭电源。4.reboot立即重启系统相当于命令:shutdownrnowLinuxLinux操作系统操作系统 5.poweroff立即停止系统,并且关闭电源该命令要求计算机支持关机功能。相当于命令:shutdownhnowLinuxLinux操作系统操作系统 2.6.5alias、unalias、history1.alias命令别名=“命令行”创建命令的别名例如:rootredflag/root#aliasLinuxLinux操作系统操作系统 显示已有的命令别名,读者在其中可以发现ls=ls-color,这就是用户执行ls命令后为什么会用颜色表示不同的文件类别的原因了。用户可以把自己

148、常用的长命令通过定义别名来用短命令替代。rootredflag/root#aliasmydir=ls-color创建自己的命令mydir代替“lscolor”。LinuxLinux操作系统操作系统 2.unalias命令别名删除已创建的别名例如:rootredflag/root#unaliasmydir删除之前已经定义的别名mydir。LinuxLinux操作系统操作系统 3.history显示用户最近执行的命令可以保留的历史命令数和环境变量HISTSIZE有关。只要在编号加“!”,很容易地就可以重新运行history中的显示出的命令行。例如:rootredflag/root#!25表示重新运

149、行第25个历史命令。LinuxLinux操作系统操作系统 2.6.6susu用户名改变用户的ID或成为超级用户。su可以让用户在一个登录的Shell中不退出就改变成为另一用户。如果su命令不跟用户名,则su命令缺省地成为超级用户。执行su命令后系统会要求输入密码。su之后,当前所有的用户变量都会传递过去。su命令在远程管理时相当有用,一般情况下超级用户(即root用户)不被允许远程登录。这时候,可以用普通用户Telnet到主机,再用su成为超级用户后进行远程管理,例如:testmylinuxtest$surootredflagtest#LinuxLinux操作系统操作系统 2.6.7who、w

150、hoami、w、last1.who显示谁登录系统例如:rootredflag/root#whoroot tty1 Mar1 12:17test tty2 Mar1 12:17longkeytty3 Mar1 12:17test pts/0 Mar1 11:35输出表示有4个用户登录系统,输出行中分别是用户名、登录的终端号和登录时间。LinuxLinux操作系统操作系统 2.whoami显示当前登录的用户名例如:rootredflag/root#whoamiroot表示当前用户是root。LinuxLinux操作系统操作系统 3.w显示谁登录系统并且在做什么例如:rootredflag/root

151、#w12:18pmup44min,4users,loadaverage:0.06,0.03,0.00USERTTYFROMLOGIN IDLEJCPUPCPUWHATroottty1-12:17pm 1:070.04s0.03s-bashtesttty2-12:17pm1:040.10s0.03s-bashtestpts/011:35am0.00s0.13s0.01swLinuxLinux操作系统操作系统 4.last显示过去有多少用户在本机登录last命令显示的是直到/var/log/wtmp文件创建以来有多少用户在本机登录。LinuxLinux操作系统操作系统 2.6.8rpm安装软件包安

152、装软件包以前的Linux软件几乎都是源程序代码的形式,要安装时必须先取得压缩文件,解压得到源程序,再编译成可执行的文件,然后将相关的文件放到正确的目录中。RPM系统(RedHatPackageManager)就是为了解决软件的安装问题而开发的,有了RPM就可以用一条命令完成软件的安装,RPM自动地帮我们完成了复杂的安装步骤。LinuxLinux操作系统操作系统 软件开发人员将软件源程序代码、补丁(Patch)及安装指示包装成一个RPM套件(也就是一个rpm文件)。安装软件包只要一个rpm文件,执行rpm命令就可以轻松安装了。系统的RPM数据库记载了所有的以RPM方法安装的数据,因此可以非常方便

153、地删除、查询和升级软件。rpm命令非常复杂,其格式如下:rpm参数选项我们这里以实例来说明常用参数选项的使用。LinuxLinux操作系统操作系统 【实例2.6】rootredflag/root#rpm-qaglibc-common-2.2.3-12htmlview-1.1.0-2mailcap-2.1.4-2rhl-gsg-6.1en-3sash-3.4-8basesystem-7.0-3LinuxLinux操作系统操作系统 chkconfig-1.2.22-1db2-2.4.14-4e2fsprogs-1.27-8finger-0.17-9gdbm-1.8.0-3hdparm-5.2-1i

154、sapnptools-1.22-2libattr-2.0.8-2LinuxLinux操作系统操作系统 【实例2.7】rootredflag/root#rpm-qnfs-utilsnfs-utils-0.3.1-8查询某一特定软件包,用“-q”参数,如果要显示软件包的完整信息,加“-i”参数。rootredflag/root#rpm-qinfs-utilsName:nfs-utilsRelocations:(notrelocateable)Version:0.3.1Vendor:RedFlagSoftWareLinuxLinux操作系统操作系统 Release:8BuildDate:2001年0

155、8月03日星期五14时05分15秒Installdate:2003年03月19日星期三08时56分43秒BuildHost:xiejue.redflag-Group:SystemEnvironment/DaemonsSourceRPM:nfs-utils-0.3.1-8.src.rpmSize:520527License:GPLPackager:RedFlagSoftWareLinuxLinux操作系统操作系统 Summary:NFSutlilitiesandsupportingdaemonsforthekernelNFSserver.Description:Thenfs-utilspacka

156、geprovidesadaemonforthekernelNFSserverandrelatedtools,whichprovidesamuchhigherlevelofperformancethanthetraditionalLinuxNFSserverusedbymostusers.LinuxLinux操作系统操作系统 Thispackagealsocontainstheshowmountprogram.Showmountqueriesthemountdaemononaremote host for information about the NFS (Network )serveront

157、heremotehost.Forexample,showmountcandisplaytheclientswhicharemountedonthathost.LinuxLinux操作系统操作系统 【实例2.8】#rpm-qlnfs-utils/etc/rc.d/init.d/nfs/etc/rc.d/init.d/nfslock/sbin/rpc.lockd/sbin/rpc.statd/sbin/rpcdebug/usr/sbin/exportfsLinuxLinux操作系统操作系统 /usr/sbin/nfsstat/usr/sbin/nhfsstone/usr/sbin/rpc.moun

158、td查询nfs-utils软件包包含的文件。LinuxLinux操作系统操作系统 【实例2.9】用rpm命令安装软件包时,软件包要求是以“.rpm”结尾的文件。把红旗3.0的光盘安装在/mnt/cdrom目录后,这些软件包就在/mnt/cdrom/RedFlag/RPMS目录下。rootredflagRPMS#rpm-ivhzsh-4.0.1-1.i386.rpmPreparing.#100%1:zsh#100%LinuxLinux操作系统操作系统 以上命令安装了zsh软件包。可以看到安装是多么轻松的一件事。如果要安装的软件已经安装了,系统会出现提示信息:Preparing.#100%pack

159、agezsh-4.0.1-1isalreadyinstalledLinuxLinux操作系统操作系统 【实例2.10】删除软件包使用“-e”参数。例如:rootredflag/root#rpm-ezsh表示如果成功删除就没有输出。rootredflag/root#rpm-eapacheerror:removingthesepackageswouldbreakdependencies:LinuxLinux操作系统操作系统 apacheisneededbyapacheconf-0.7-2webserverisneededbymod_perl-1.24_01-2webserverisneededby

160、mod_ssl-2.8.10-1webserverisneededbyauth_ldap-1.6.0-5表示如果一个软件包和其他软件包依存时,就无法删除它,这样就避免了许多错误。LinuxLinux操作系统操作系统 【实例2.11】要升级软件包时用“-U”参数。例如:#rpm-Uvhzsh-4.0.1-1.i386.rpmRPM会自动删除旧版,安装新版,而旧版的配置保留。如果旧版不存在,就会自动安装新版软件包。“-F”参数则会要求RPM把系统中的旧版和要升级的版本进行比较,只有升级版比旧版新时才进行安装。如果系统中不存在旧的版本,RPM也不会安装软件包。LinuxLinux操作系统操作系统 【

161、实例2.12】要确认软件包的完整性,可以使用“-V”参数。rootredflag/root#rpm-Vnfs-utils.Tc/var/lib/nfs/etabS.5.Tc/var/lib/nfs/rmtab.Tc/var/lib/nfs/xtabLinuxLinux操作系统操作系统 RPM比较系统现有软件包和原有软件包的所有的文件数据,如果完全一样,就不会有任何输出。有输出说明文件被改动,文件名前的“c”表示是设置文件。其余的表示如下:S为文件大小,L为符号连接,5为MD5checksum,T为文件修改时间,D为设备,U为拥有者,G为所属组,M为模式(包括文件权限等)被改变。LinuxLin

162、ux操作系统操作系统 习习题题1.使用“ls-l”命令有以下的输出:-rw-rw-r-1longkeylongkey1620A2422:23chap1.txt请解析各输出部分的含义。2.命令chmod664test.txt的结果是什么?3.增加所有用户对test.txt文件的读权限应使用什么命令?LinuxLinux操作系统操作系统 4.find命令和grep命令各用于什么目的?5.建立软链接和硬链接后,用“lsl”命令显示链接,有何差别?6.用crontab命令,如果要每星期一12时执行命令echohello|mailroot,作业应如何书写?7.网上有一软件包soft.tar.gz,下载后

163、应首先如何处理?8.测试自己的主机和某一主机是否通信正常,通常使用命令。A.telnetB.hostC.pingD.ftpLinuxLinux操作系统操作系统 第第3章章vi编辑器的使用编辑器的使用3.1vi的工作模式的工作模式3.2vi的启动和退出的启动和退出3.3vi长指令和短指令长指令和短指令3.4vi高级应用高级应用习题习题LinuxLinux操作系统操作系统 3.1vi的工作模式的工作模式在使用vi之前,首先应该了解一下vi的工作模式。vi有两种工作模式:编辑模式和指令模式。在vi中用户可以在这两种模式间切换。编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释

164、为命令执行,而是作为文本写到用户的文件中。LinuxLinux操作系统操作系统 指令模式:用来编辑、存盘和退出文件的模式。运行vi后,首先进入指令模式。此时输入的任何字符都被视为指令对待,键入的命令不会在屏幕上显示。状态行:屏幕底部一行,通常是第24行,被vi编辑器用来反馈编辑操作结果。错误消息或者提供信息的消息会在状态行中显示出来。vi还会在24行显示那些以冒号(:)或者问号(?)开头的命令。LinuxLinux操作系统操作系统 如果从指令模式切换到编辑模式,则可以按【Insert】键;如果从编辑模式切换到指令模式,则可以按【Esc】键。如果不能断定目前处于什么模式,则可以多按几次【Esc】

165、键,这时系统会发出蜂鸣声,证明已经进入指令模式。【注意】Linux下的命令是大小写敏感的。LinuxLinux操作系统操作系统 3.2vi的启动和退出的启动和退出1.启动vi要进入vi,可以直接在系统提示字符下键入vi,按空格,然后再输入文件名(本例中以test.txt作为文件名),像下面一行:vitest.txt图3-1显示了用vi新建文件test.txt的初始画面。LinuxLinux操作系统操作系统 “test.txt”newfile0lines0characters图图3-1进入进入vi的初始化画面的初始化画面LinuxLinux操作系统操作系统 vi可以自动帮你载入所要编辑的文件或是

166、开启一个新文件。如果test.txt文件已存在,vi就会在屏幕上显示文件的第一页(前23行)。如果test.txt是一个新文件,vi就会清屏,光标会出现在屏幕的左上角,屏幕左方会出现波浪符号“”,凡是列首有该符号就表示此列目前是空的。LinuxLinux操作系统操作系统 2.退出vi要离开vi可以在指令模式下键入“:q”,“q!”或“:wq”离开(注意冒号)。(1):q如果用户只是读文件的内容而未对文件进行修改,可以使用“:q”退出vi;如果用户对文件的内容作了修改,则用“:q”退出vi,那么vi在屏幕的底行会提示下面的信息,vi编辑器还保留在屏幕上:Nowritesincelastchang

167、e(:q!overrides).LinuxLinux操作系统操作系统 (2):q!如果用户对文件的内容作了修改,然后决定要放弃对文件的修改,可以使用“:q!”强行退出vi,在这种情况下文件的内容不变。(3):wq在大多数情况下,用户在编辑结束时,用“:wq”命令保存文件,然后退出vi。(4):n,mw该指令将第nm行的文本保存到指定的文件中。LinuxLinux操作系统操作系统 (5)ZZ该指令表示快速保存文件的内容,然后退出vi,功能和“:wq”一样。(6):w!vi编辑器通常防止覆盖一个已存在的文件。比如用户键入“:wtest.txt”并按回车键,而test.txt文件已存在时,vi会显示

168、如下的信息提出警告:test.txtuse:w!tooverwriteLinuxLinux操作系统操作系统 3.3vi长指令和短指令长指令和短指令vi的指令分为两种:长指令和短指令。长指令以冒号开头,键入冒号后,在屏幕的最末尾一行会出现冒号提示符,等待用户键入指令,输入完指令后回车,vi就会执行该指令。短指令和快捷键相似,键入短指令之后,vi不会给任何提示就直接执行。接下来我们以分组的形式来介绍vi常用的指令。LinuxLinux操作系统操作系统 (1)输入输出命令的作用如表3-1所示。表3-1输入输出命令命令作用a在光标后输入文本A在当前行末尾输入文本i在光标前输入文本I在当前行开始输入文本

169、o在当前行后输入新一行O在当前行前输入新一行LinuxLinux操作系统操作系统 (2)光标移动命令的作用如表3-2所示。表3-2光标移动命令命令作用B移动到当前单词的开始e移动到当前单词的结尾w向后移动一个单词h向前移动一个字符j向下移动一行k向上移动一行l向后移动一个字符LinuxLinux操作系统操作系统 (3)删除操作命令的作用如表3-3所示。表3-3删除操作命令命令作用x删除光标所在的字符dw删除光标所在的单词d$删除光标至行尾的所有字符D同d$dd删除当前行LinuxLinux操作系统操作系统 (4)改变与替换命令的作用如表3-4所示。表3-4改变与替换命令命令作用r替换光标所在的

170、字符R替换字符序列cw替换一个单词ce同cwcb替换光标所在的前一字符c$替换自光标位置至行尾的所有字符C同c$cc替换当前行LinuxLinux操作系统操作系统 (5)查询命令的作用如表3-5所示。表3-5查询命令命令作用/abc向后查询字串“abc”?abc向前查询字串“abc”n重复前一次查询N重复前一次查询,但方向相反LinuxLinux操作系统操作系统 (6)拷贝与粘贴命令的作用如表3-6所示。表3-6拷贝与粘贴命令命令作用yw将光标所在单词拷入剪贴板y$将光标至行尾的字符拷入剪贴板Y同y$yy将当前行拷入剪贴板p将剪贴板中的内容粘贴在光标后P将剪贴板中的内容粘贴在光标前LinuxL

171、inux操作系统操作系统 (7)文件保存及退出命令的作用如表3-7所示。表3-7文件保存及退出命令命令作用:q不保存退出:q!不保存强制性退出:w保存编辑:w存入文件中:w!强制性存入文件中:wq保存退出:x同:wqZZ同:wqLinuxLinux操作系统操作系统 (8)其他命令的作用如表3-8所示。表3-8其他vi命令命令作用u取消上一次的操作U可以恢复对光标所在行的所有改变J把两行连接到一起:set用来设置或浏览vi系统当前的选项:X对所编辑的文件进行简单加密LinuxLinux操作系统操作系统 3.4vi高级应用高级应用3.4.1设置设置vi环境环境vi编辑器的行为可以通过设置编辑参数来

172、定义,并且有许多种方法可以进行这种设置。最直接的方法是使用vi的set命令进行设置。这种情况下,vi在进行设置前必须处于指令状态。使用这种方法的用户可以设置任何选项,但是选项的改变是临时的,并且只在用户当前编辑会话下有效。当用户退出vi编辑器时,设置会被丢弃。LinuxLinux操作系统操作系统 本小节介绍一些有用的vi参数,表3-9对它们进行了汇总(按字母顺序列出)。大多数选项名有缩写形式,用户进行设置时既可以使用选项名的全称,也可以使用缩写。LinuxLinux操作系统操作系统 表3-9vi选项选项缩写功能autoindentai将新行与前一行的开始对准ignorecaseic在搜索选项下

173、,忽略大小写magic在搜索时,允许使用特殊字符numbernu显示行号report告知用户最后一个命令作用行的行号scroll设定使用Ctrl-d命令翻滚的行数shiftwidthsw设定缩进空格数,一般与autoindent一同使用showmodesmd在屏幕右角显示vi编辑器模式terse缩短错误信息wrapmarginwm将右边界设定为一定的字符个数LinuxLinux操作系统操作系统 1.autoindent选项autoindent选项将用户键入的每个新行与前一行的开始对齐。该选项对于使用C等其他结构化程序设计语言编写程序时十分有用。使用【Ctrl-d】可减少一级缩进,每次执行【Ct

174、rl-d】,会增加一个由shiftwidth选项指定的数值。本选项的默认值为noai。LinuxLinux操作系统操作系统 2.ignorecase选项vi编辑器提供大小写敏感的搜索,也就是说它区分大写字母和小写字母。要使vi忽略大小写,键入“:setignorecase”并按回车键。要返回大小写敏感状态,键入“:setnoignorecase”并按回车键。3.magic选项某些符号(如方括号)在用于搜索时有特殊的含义。当用户将这些符号开头置为nomagic时,这些符号不再有特殊含义。LinuxLinux操作系统操作系统 4.number选项vi编辑器一般情况下不显示每行的行号。显示行号可以使

175、用户对自己文件的大小及自己正在编辑文件的哪一部分等心里有数。要显示行号,键入“:setnumber”,然后按回车键。如果不希望显示行号,键入“:setnonumber”并按回车键。LinuxLinux操作系统操作系统 5.report选项vi编辑器对用户的编辑工作并不给予任何反馈。例如,如果用户键入“dd”,vi删除当前行文本,但不会在屏幕上显示任何确认消息。如果希望在屏幕上看到自己编辑的反馈信息,用户可以使用report选项来实现。该参数被设为使vi编辑器报告发生变化的行的最小行数。LinuxLinux操作系统操作系统 要将report选项设为2行时有效,键入“:setreport=2”并按

176、回车键。于是,当用户的编辑工作作用两行时,vi显示相应报告。例如,删除两行并复制两行,将在屏幕底部产生类似下面的报告信息:2linesdeleted2linesyankedLinuxLinux操作系统操作系统 6.scroll选项scroll选项用于设定用户在使用【Ctrl-d】时希望滚动的行数。例如,要想使屏幕滚动5行,键入“:setscroll=5”并按回车键。7.shiftwidth选项该选项设定在设置了自动缩进时,使用【Ctrl-d】时的空格数。该选项的默认设置为“sw=8”。例如,要把该设置改为10,键入“:setsw=10”并按回车键。LinuxLinux操作系统操作系统 8.sh

177、owmode选项vi编辑器并不显示任何可见的反馈信息来告知当前是处于文本输入模式还是指令模式,这可能导致混淆,尤其是对于新手。用户可以设置showmode选项来提供可见的反馈到屏幕,或者说showmode选项在状态行上指示你所处的模式。LinuxLinux操作系统操作系统 要打开showmode选项,键入“:setshowmode”并按回车键。接着,根据用户需要在文本输入和指令模式之间切换,而vi在屏幕的右下角显示不同的信息。如果用户键入“a”或“A”切换到编辑模式,vi显示APPENDMODE;如果用户键入“i”或“I”,vi将显示INSERTMODE;如果用户键入“O”或“o”,vi显示O

178、PENMODE等等。这些信息将一直显示在屏幕上,直到用户按【Esc】键切换到指令模式。当屏幕上没有信息时,vi处于指令模 式 。 要 关 闭 showmode选 项 , 键 入 “: setnoshowmode”并按回车键。LinuxLinux操作系统操作系统 9.terse选项该选项使vi编辑器显示缩短的错误消息。该选项默认值为noterse。10.wrapmargin选项该选项定义右边距。用户的终端屏幕通常为80列。当键入到行的末尾时(超过第80列),屏幕即开始一个新行,这就是所说的行回绕。在用户按回车键时,屏幕同样开始一个新行。因此,屏幕上一行的长度可以为180个字符之间的任何长度。Li

179、nuxLinux操作系统操作系统 但是,vi编辑器只在用户按回车键时,才在用户文件中生成一个新行。如果用户在按回车键前键入了120个字符,这时键入的文本看起来是在2行,但实际在文件中,这120个字符只在1行中。过长的行在文件打印时可能会出现问题,并且屏幕显示的行号与实际文件中的行号相对应时容易产生混淆。最简单的限制行长度的方法是在到达屏幕行末尾前按回车键。另一种方法是设定wrapmargin参数以使vi编辑器自动插入回车。LinuxLinux操作系统操作系统 例如,要将wrapmargin设为10(10是从屏幕右边界计数的字符的个数),键入“wm=10”并按回车键。于是当用户键入到第70列时,

180、vi编辑器强迫回车,开始一个新行,以便留出右边距。如果用户正在键入一个字时超过第70列,vi编辑器将把该字整个移至新行。这也意味着右边界可能会对不齐。wrapmargin选项的默认值是0,要关闭这个选项,键入“:setwrapmargin=0”并按回车键即可。LinuxLinux操作系统操作系统 3.4.2缩写与宏缩写与宏vi编辑器为用户提供一些捷径,以使用户的输入更快速、更简单。“:ab”和“:map”是两个用于该目的的命令。1.缩写操作符缩写操作符“:ab”(缩写)命令使得用户给任何字符串指定缩写,该功能可以帮助用户提高输入速度。用户可以为自己经常输入的文本选择一个易记的缩写,在vi编辑器

181、中设置缩写后,就可使用该缩写代替原来的文本。例如,要缩写本书中常用的文本UnixOperatingSystem,键入“:abunoUnixOperatingSystem”并按回车键。LinuxLinux操作系统操作系统 在这个例子中,“uno”是赋给UnixOperatingSystem的缩写,因此,当vi处于文本输入模式时,任何时间用户键入“uno”接着键入一个空格时,vi都将uno变为UnixOperatingSystem。如果uno是另一个字的一部分,如unofficial,则并不会发生改变。vi通过uno前后的空格来识别出uno是一个缩写,并把它扩展。要取消一个缩写,用户可以使用“:u

182、nab”(未缩写)操作符。例如,要取消uno缩写,键入“:unabuno”并按回车键即可。LinuxLinux操作系统操作系统 【实例3.1】(1)键入“:ablclinuxcourse”并按回车键,将lc指定为linuxcourse的缩写。(2)键入“:ab123one,two,three,etc.”并按回车键,将123指定为one,two,three,etc.的缩写。(3)键入“:ab”并按回车键,显示所有指定的缩写:lclinuxcourse123one,two,three,etc.(4)键入“:unab123”并按回车键,取消123缩写。LinuxLinux操作系统操作系统 2.宏操作

183、符宏操作符(map)使用户能将一系列键指定给某一键。如同缩写操作符给用户一个文本输入模式下的捷径一样,map给用户一个在指令模式下的捷径。例如,将指令dd指定为q,键入“:mapqdd”并按回车键。此后,当vi处于指令模式时,每当用户键入q时,vi应删除光标所在的行。要取消一个map指定,用户可以使用“:unmap”操作符。键入“:unmapq”并按回车键。LinuxLinux操作系统操作系统 要查看map键的列表和它们指定的内容,键入“:map”并按回车键。用户也可以使用map指令为自己的终端指定功能键。在这种情况下,用户键入“#n”作为键名,n代表功能键号。例如,要指定dd到【F2】,键入

184、“:map#2dd”并按回车键即可。此后,如果用户在vi的指令模式下按【F2】键,vi应删除光标所在的行。LinuxLinux操作系统操作系统 【实例3.2】下面例子显示部分指定键。(1)键入“:mapV/linux”并按回车键,将V键指定为搜索linux的搜索指令。(2)键入“:map#3yy”并按回车键,将【F3】指定为拷贝一行。(3)键入“:map”并按回车键,显示已经指定的键:V/linux#3yyLinuxLinux操作系统操作系统 【实例3.3】假设用户希望在文件中查找“linux”,并将它替换为“LINUX”。进行下面的操作:(1) 键 入 “:/linux”并 按 回 车 键

185、, 查 找 单 词“linux”。(2) 键 入 “cwLINUX”, 然 后 按 【 Esc】 键 , 将“linux”改为“LINUX”并返回vi指令模式。LinuxLinux操作系统操作系统 在映射键指定中,命令行中按【Ctrl-v】【Return】来代表回车,用【Ctrl-v】【Esc】来代表【Esc】键。这样,要映射前面的命令到一个键中,比如说V键,键入“:mapv/linux”,接着按【Ctrl-v】【Return】,然后键入“cwLINUX”,再按【Ctrl-v】【Esc】。该命令行中使用了不可打印字符【Ctrl-v】和【Esc】,所以用户看到的屏幕如下所示::mapv/linu

186、xMcwLINUXLinuxLinux操作系统操作系统 3.4.3“.exrc”文件文件用户在vi编辑器中所设置的所有选项都是临时的,当用户退出vi时,它们都会失效。要使这些设置成为永久的,而不需在每次使用vi时重新设置,可以将选项的设置保存到文件“.exrc”中。LinuxLinux操作系统操作系统 【注意】以“.”(点)开头的文件被称为隐藏文件。当用户打开vi编辑器时,它自动查看用户当前工作目录中的“.exrc”文件,并根据在文件中找到的内容设 置 编 辑 环 境 。 如 果 vi没 有 在 当 前 目 录 中 发 现“.exrc”文件,它将查找用户的主目录,并根据在那里发现的“.exrc

187、”文件设置编辑环境。如果vi一个“.exrc”文件也没有找到,则它对选项使用默认值。LinuxLinux操作系统操作系统 vi检查“.exrc”文件存在的方式给用户提供了强大的工具,用户可以根据自己的不同的编辑需要定义“.exrc”文 件 。 例 如 , 可 以 创 建 一 个 通 用 的“.exrc”文件存在主目录。用户可以用vi创建一个“.exrc”文件,或修改现有的“.exrc”文件。LinuxLinux操作系统操作系统 【实例3.4】创建一个“.exrc”文件,键入“vi.exrc”并按回车键,然后输入用户想要的set和其他命令。下面是一个具体的例子:setreport=0setsho

188、wmodesetnumberseticLinuxLinux操作系统操作系统 setwm=10setscroll=5abuopUNIXOperatingSystemmapqddLinuxLinux操作系统操作系统 3.4.4运行Shell命令用户可以在vi的命令行运行LinuxShell命令。这一方面的特性使用户可以临时抛弃vi来运行Shell命令。“!”通知vi后面是一个Shell命令。例如,要在vi编辑器中运行date命令,键入“:!date”后按回车键。vi编辑器将清除屏幕,执行date命令,我们可以看到类似如下的屏幕显示:SatFeb814:00:52EDT2003Hitanykeyto

189、continueLinuxLinux操作系统操作系统 按任意一个键即可返回vi编辑器,并可在前面离开的地方继续编辑。如果用户希望,也可以将Shell命令执行的结果读进来并加到用户文本中。使用“:r”(读取)命令,后面紧跟“!”和相应的Shell命令来将命令的结果写到用户的文本中。LinuxLinux操作系统操作系统 【实例3.5】要读取系统的时间和日期,键入“:r!date”后按回车键,vi响应,将当前系统日期和时间放在当前行下面。vi编辑器保持在文本输入模式。Thisisatest!WearefromShenzhen.ThedateandtimeisSatFeb814:00:52EDT200

190、3LinuxLinux操作系统操作系统 【实例3.6】下列命令说明了!的使用。(1)键入“:!ls”后按回车键,列出目录中的文件。(2)键入“:!who”后按回车键,显示谁当前登录到系统上。(3)键入“:!date”后按回车键,显示当前日期和系统时间。(4)键入“:!pwd”后按回车键,显示当前工作目录的路径。LinuxLinux操作系统操作系统 (5)键入“:r!date”后按回车键,读取date命令的结果,并将其放置在正在编辑文本的光标后边。(6)键入“:r!cal32003”后按回车键,读取2003年3月的日历,并将其放置在正在编辑文本的光标后边。(7)键入“:!vitest.txt”后

191、按回车键,调用另一个vi来编辑test.txt文件。LinuxLinux操作系统操作系统 习习题题1从编辑模式切换到指令模式可以使用_键。A.F2 B.ShiftC.TabD.Esc2.vi中,命令_从光标所在行的第一个非空白字符前面开始插入文本。A.iB.I C.a D.SLinuxLinux操作系统操作系统 3.删除整行文本的指令是_。A.dB.yyC.ddD.q4.存盘并退出vi的指令是_。A.q!B.qC.wD.wq5.对所编辑的文件进行简单加密的指令是_。A.UB.xC.XD.yLinuxLinux操作系统操作系统 第第4章章用户和组的管理用户和组的管理4.1用户的管理用户的管理4.

192、2组的管理组的管理4.3磁盘配额磁盘配额习题习题LinuxLinux操作系统操作系统 4.1用户的管理用户的管理4.1.1Linux下的用户下的用户Linux下的用户可以分为三类:超级用户、系统用户和普通用户。超级用户的用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。系统用户是Linux系统正常工作所必需的内建的用户,主要是为了满足相应的系统进程对文件属主的要求而建立的,系统用户不能用来登录,例如:bin、daemon、adm、lp等用户。LinuxLinux操作系统操作系统 而普通用户是为了让使用者能够使用Lin

193、ux系统资源而建立的,我们的大多数用户属于此类。每个用户都有一个数值,称为UID。超级用户的UID为0,系统用户的UID一般为1499,普通用户的UID为50060000之间的值。LinuxLinux操作系统操作系统 4.1.2账号系统文件账号系统文件不像Windows2000那样有专门的数据库用来存放用户的信息,Linux系统采用纯文本文件来保存账号的各种信息,其中最重要的文件有/etc/passwd、/etc/shadow、/etc/group这几个。因此账号的管理实际上就是对这几个文件的内容进行添加、修改和删除记录行的操作。我们可以使用vi或其他编辑器来更改它们,也可以使用专门的命令来更

194、改它们。不管以哪种形式管理账号,了解这几个文件的内容十分必要。Linux系统为了自己的安全,缺省情况下只允许超级用户更改它们。LinuxLinux操作系统操作系统 1./etc/passwd文件/etc/passwd文件是账号管理中最重要的一个文件,它是一个纯文本文件。每一个注册用户在该文件都有一个对应的记录行,这一记录行记录了此用户的必要信息。LinuxLinux操作系统操作系统 【实例4.1】rootredflag/root#cat/etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:daemon:x:2:2:daemon

195、:/sbin:adm:x:3:4:adm:/var/adm:LinuxLinux操作系统操作系统 sshd:x:74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nolrpc:x:32:32:PortmapperRPCuser:/:/bin/falserpcuser:x:29:29:RPCServiceUser:/var/lib/nfs:/bin/falsemailnull:x:47:47:/var/spool/mqueue:/dev/nulltest:x:500:500:/home/test:/bin/bashpasswd文件中的每一行由7

196、个字段的数据组成,字段之间用“:”分隔,其格式如下:账号名称:密码:UID:GID:个人资料:主目录:ShellLinuxLinux操作系统操作系统 字段说明:账号名称:用户登录Linux系统时使用的名称。密码:这里的密码是经过加密后的密码(一般是采用MD5加密方式),而不是真正的密码,若为“x”,说明密码经过了shadow的保护(我们随后就介绍)。UID:用户的标识,是一个数值,Linux系统内部使用它来区分不同的用户。GID:用户所在基本组的标识,是一个数值,Linux系统内部使用它来区分不同的组,相同的组具有相同的GID。LinuxLinux操作系统操作系统 个人资料:可以记录用户的完整

197、姓名、地址、办公室电话、家庭电话等信息。主 目 录 : 类 似 Windows 2000的 个 人 目 录 , 通 常 是/home/username,这里username是用户名,用户执行“cd”命令时当前目录会切换到个人主目录。Shell:定义用户登录后激活的Shell,默认是BashShell。从passwd文件中可以看到,第一行是root用户,紧接的是系统用户,普通用户通常在文件的尾部。当然它们所在的顺序并不是很重要的。LinuxLinux操作系统操作系统 2./etc/shadow在passwd文件中,有一个字段是用来存放经过加密的密码。我们先来看以下passwd文件的权限:root

198、redflag/root#ls-l/etc/passwd-rw-r-r-1rootroot10923月1218:00/etc/passwdLinuxLinux操作系统操作系统 可以看到任何用户对它都有读的权限。如果不让所有的用户对它有读的权限,Linux系统会出现一些问题。虽然密码已经经过加密,但还是不能避免别有用心的人轻易地获取加密后的密码后进行解密(如:字典法、穷举法等)。于是Linux系统对密码提供了更多一层的保护,即把加密后的密码重定向到另一个文件/etc/shadow。rootredflag/root#ls-l/etc/shadow-r-1rootroot7583月1218:00/e

199、tc/shadowLinuxLinux操作系统操作系统 现在只有超级用户能够读取shadow的内容,密码显然安全多了,因为其他人即使想获得加密后的密码也不容易了。红旗Linux3.0缺省采用shadow文件。密码如果经过shadow保护,在/etc/passwd文件中,每一记录行的密码字段会变成“x”,并且在/etc目录下存在文件shadow。LinuxLinux操作系统操作系统 【实例4.2】rootredflag/root#cat/etc/shadowroot:12123:0:99999:7:bin:*:12123:0:99999:7:daemon:*:12123:0:99999:7:ad

200、m:*:12123:0:99999:7:LinuxLinux操作系统操作系统 sshd:!:12123:0:99999:7:rpc:!:12123:0:99999:7:rpcuser:!:12123:0:99999:7:mailnull:!:12123:0:99999:7:test:12123:0:99999:7:和passwd文件类似,shadow文件中的每行由9个字段组成,格式如下:LinuxLinux操作系统操作系统 用户名:密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志字段说明:用户名:和/etc/passwd文件中相对应的用户名。密码:存放加

201、密后的口令(密码)。最后一次修改时间:用户最后一次修改口令的时间(从1970-1-1起计的天数)。最小时间间隔:两次修改口令允许的最小天数。LinuxLinux操作系统操作系统 最大时间间隔:口令保持有效的最多天数,即多少天后必须修改口令。警告时间:从系统提前警告到口令正式失效的天数。不活动时间:口令过期多少天后,该账号被禁用。失效时间:指示口令失效的绝对天数(从1970-1-1开始计算)。标志:未使用。shadow文件中,密码字段为“*”表示用户被禁止登录,为“!”表示密码未设置,为“!”表示用户被锁定。LinuxLinux操作系统操作系统 3.pwconv和pwunconv安装Linux系

202、统时,系统缺省采用shadow来保护密码。如果安装Linux时未启用shadow,可以使用pwconv命令启用shadow。注意用root用户登录来执行该命令。rootredflag/root#pwconv执行的结果是/etc/passwd文件中的密码字段被改为“x”,同时产生/etc/shadow文件。相反,如果要取消shadow功能,使用pwunconv命令。LinuxLinux操作系统操作系统 【实例4.3】rootredflag/root#pwunconvrootredflag/root#cat/etc/passwdroot:$1$HgZ5TnjG$1lE4Umcmpx0s9ESNHB

203、0By0:0:0:root:/root:/bin/bashtest:$1$dm5d2WCQ$6RUCGuCRAz9RUAOytwbk3/:500:500:/home/test:/bin/bashLinuxLinux操作系统操作系统 4.1.3创建新的用户创建新的用户创建新的用户要完成以下几个工作:(1)在/etc/passwd(和/etc/shadow)中添加一行新的记录;(2)创建用户的个人主目录,并赋权限;(3)在用户的个人主目录设置默认的配置文件;(4)设置用户的初始口令。LinuxLinux操作系统操作系统 创建用户可以用手工创建或使用专门的命令创建。手工创建就是管理员一步一步完成以上

204、的工作;使用专门的命令,则是由Linux提供的命令来完成以上的工作。使用后者效率较高,如果不是创建有特殊要求的用户,建议使用后者。创建用户的命令为useradd或adduser,一般来说这两个命令是没有差别的,先用root用户登录后,再执行它们。useradd命令的格式如下:LinuxLinux操作系统操作系统 useradd参数用户名参数选项:-ccomment:注释行,一般为用户的全名、地址、办公室电话、家庭电话等。-ddir:设置个人主目录,默认值是/home/用户名。-eYYYY-MM-DD:设置账号的有效日期,此日期后用户将不能使用该账号。要启用shadow才能使用此功能。Linux

205、Linux操作系统操作系统 -fdays:指定密码到期后多少天永久停止账号,要求启用shadow功能。-ggroup:设定用户的所属基本组,group必须是存在的组名或组的GID。-Ggroup:设定用户的所属附属组,group必须是存在的组名或组的GID,附属组可以有多个,组之间用“,”分隔开。-kShell-dir:和“-m”一起使用,将Shell-dir目录中文件复制到主目录,默认是/etc/skel目录。LinuxLinux操作系统操作系统 -m:若用户主目录不存在,创建主目录。-sShell:设置用户登录后启动的Shell,默认是BashShell。-uUID:设置账号的UID,默认

206、是已有用户的最大UID加1。例如:rootredflag/root#useradduser1在/etc/passwd文件中会看到增加了一行:LinuxLinux操作系统操作系统 user1:x:501:501:/home/user1:/bin/bash系统自动指定用户user1的UID为501,同时还自动创建组名为user1的用户组(其名称和用户名相同,其GID值也和UID值相同),在/home目录下还创建了目录user1,用户的登录Shell是BashShell。LinuxLinux操作系统操作系统 rootredflag/root#ls-l/homedrwx-9user1user14723

207、月1323:06user1user1对/home/user1目录有所有权限,其他用户无任何权限。同时在/etc/shadow文件中也会增加一行:LinuxLinux操作系统操作系统 user1:!:12125:0:99999:7:注意密码字段的内容为“!”,表示密码没有设置。root redflag /root#useradd -g user1 -c “user2,-755-123456”user2以上命令创建user2用户,并把它加入到组user1中,同时加上用户的注释。LinuxLinux操作系统操作系统 4.1.4修改用户的属性修改用户的属性1.修改用户的密码(1)passwd用户名修改

208、用户的密码。修改用户的密码需要两次输入密码确认。密码是保证系统安全的一个重要措施,在设置密码时,不要使用过于简单的密码。密码的长度应在8位或8位以上,由数字和英文组合而成,不要采用英文单词等有意义的词汇。一个便于记忆并且有效的密码“wabjtam!”,是“我爱北京天安门!”的汉字拼音首字母组合。密码的更改间隔天数不要太大,并且不得重复使用。LinuxLinux操作系统操作系统 用户的密码也可以自己更改,这时使用不带用户名的passwd命令。rootredflag/root#passwd修改root用户自己的密码。LinuxLinux操作系统操作系统 (2)passwd-d用户名删除用户的密码。

209、【实例4.4】rootredflag/root#passwd-duser2Changingpasswordforuseruser2Removingpasswordforuseruser2passwd:Success以上命令删除了用户user2的密码。LinuxLinux操作系统操作系统 2.修改用户的Shell设置如果用户的默认Shell不合适,可以把它改成任何已经加入到/etc/Shells文件中的Shell。使用chsh命令改变用户的Shell,格式如下:chsh用户名LinuxLinux操作系统操作系统 【实例4.5】rootredflag/root#chshuser2ChangingS

210、hellforuser2.NewShell/bin/bash:/bin/cshShellchanged.指定的Shell一定要在/etc/Shells中存在,否则会导致用户无法登录。也可以使用下面要介绍的命令usermod来改变用户的Shell设置。LinuxLinux操作系统操作系统 3.usermod参数用户名改变用户的属性参数选项:-ccomment:改变用户的注释,如:全名、地址、办公室电话、家庭电话等。-ddir:改变用户的主目录,如果同时使用“-m”选项,原来主目录的内容会移动到新的主目录。-eYYYY-MM-DD:修改用户的有效日期。LinuxLinux操作系统操作系统 -fda

211、ys:在密码到期的days天后停止使用账户。-gGID或组名:修改用户的所属基本组。-GGID或组名:修改用户的所属附加组,组之间用“,”分隔。-lname:更改账户的名称,必须在该用户未登录的情况下才能使用。-m:把主目录的所有内容移动到新的目录。-p密码:修改用户的密码。-sShell:修改用户的登录Shell。LinuxLinux操作系统操作系统 -uUID:改变用户的UID为新的值,改变用户的UID时主目录下所有该用户所拥有的文件或子目录将自动更改UID,但对于主目录之外的文件和目录只能用chown命令手工进行设置。例如:rootredflag/root#usermod-d/home2

212、/user2user2该命令把用户user2的主目录改为/home2/user2。LinuxLinux操作系统操作系统 4.chfn用户名修改用户的个人信息【实例4.6】rootredflag/root#chfnuser2Changingfingerinformationforuser2.NameBom:BOM#修改姓名。Officexilishenzhen:XiLiShenZhen#修改办公室地址。LinuxLinux操作系统操作系统 OfficePhone:#修改办公室电话。HomePhone:#修改家庭电话。Fingerinformationchanged.LinuxLinux操作系统操

213、作系统 4.1.5停止用户停止用户将用户停用有几个不同的程度:(1)暂时停止用户登录系统的权利,日后再恢复。(2)从系统中删除用户,但保留用户的文件。(3)从系统中删除用户,并删除用户所拥有的文件。LinuxLinux操作系统操作系统 1.暂停用户暂停用户常常用于某用户在未来较长的一段时间内不登录系统的情形(如出差)。只需要利用编辑工具将passwd文件中的密码字段加上“*”即可(如果采用了shadow文件,就编辑shadow文件)。恢复时,把“*”删除即可。也可以使用带“-l”参数的passwd命令来暂停用户。LinuxLinux操作系统操作系统 【实例4.7】rootredflag/roo

214、t#passwd-luser1Changingpasswordforuseruser2Lockingpasswordforuseruser2passwd:Success被锁定的账户其在passwd文件或shadow文件中的记录行的密码字段会加上“!”,如下(这里是shadow):LinuxLinux操作系统操作系统 user2:!$1$UKp9vz4X$BIf3RyDs9hkveDqwiosFt.:12126:0:99999:7:-1:-1:134523744恢复时,使用带“-u”参数的passwd命令,如下:rootredflag/root#passwd-uuser2Changingpass

215、wordforuseruser2Unlockingpasswordforuseruser2passwd:SuccessLinuxLinux操作系统操作系统 2.删除用户删除一个账户可以直接将passwd文件中的用户记录整行删除(如采用shadow,还要删除shadow文件中的记录)。也可以使用userdel命令:userdel参数用户名参数选项:-r:删除用户时将用户主目录下的所有内容一并删除,同时删除用户的邮箱(在/var/spool/mail下)。例如:rootredflag/root#userdel-ruser1表示删除user1,且将user1下的内容删除。LinuxLinux操作系统

216、操作系统 3.完全删除Linux系统并不提供完全删除用户所有文件的命令,带“-r”参数的userdel命令只能删除用户主目录下的文件和邮箱,对于用户在别的目录下所拥有的文件只能手工删除。LinuxLinux操作系统操作系统 4.1.6默认新用户的设置默认新用户的设置使用useradd建立新用户时,新建的用户有一定的默认设置,这个设置来自/etc/default/useradd文件,文件中的内容如下:#useradddefaultsfileGROUP=100HOME=/homeINACTIVE=-1EXPIRE=SHELL=/bin/bashSKEL=/etc/skelLinuxLinux操作系

217、统操作系统 文件中的含义如下:GROUP=100:指定默认的组为100,该设置只有在使用“-u”选项禁止了默认私有组(也就是和新用户同名的组)时才有效,该值必须在/etc/group文件中存在。HOME=/home:指定新用户主目录所在的目录。INACTIVE=-1:只有启用了shadow功能后才有效,指定用户密码过期后该账户将在多长时间后无效(以天数计),-1代表永远不过期。LinuxLinux操作系统操作系统 EXPIRE=:只有启用了shadow功能后才有效,指定账户被禁止的时间。SHELL=/bin/bash:指定默认登录的Shell。SKEL=/etc/skel:指定保存用户各种配置

218、文件的目录,创建新用户时,该目录下的文件将被拷贝到用户的主目录下。如果启用shadow功能,建立用户账户时还将使用另一配置文件/etc/login.defs。LinuxLinux操作系统操作系统 【实例4.8】我们把有关的说明用“#”进行标注,以示和文件原有内容的区别。rootredflag/root#cat/etc/login.defs#*REQUIRED*# Directory where mailboxes reside, _or_ name of file,relativetothe#homedirectory. Ifyou_do_defineboth,MAIL_DIRtakespre

219、cedence.#QMAIL_DIRisforQmail#LinuxLinux操作系统操作系统 #QMAIL_DIRMaildirMAIL_DIR/var/spool/mail#用户邮箱所在的目录。#MAIL_FILE.mail#Passwordagingcontrols:# PASS_MAX_DAYSMaximum number of days a passwordmaybeused.LinuxLinux操作系统操作系统 # PASS_MIN_DAYSMinimumnumberofdaysallowedbetweenpasswordchanges.# PASS_MIN_LENMinimum

220、acceptable passwordlength.# PASS_WARN_AGENumber of days warning givenbeforeapasswordexpires.#PASS_MAX_DAYS99999#账户密码最长的使用天数。PASS_MIN_DAYS0LinuxLinux操作系统操作系统 #允许更改账户密码的最短天数。PASS_MIN_LEN5#账户密码最小长度。PASS_WARN_AGE7#账户密码过期前提前警告的天数。#Min/maxvaluesforautomaticuidselectioninuseradd#LinuxLinux操作系统操作系统 UID_MIN5

221、00#用useradd命令添加账户时自动产生UID,最小的UID值。UID_MAX60000#用useradd命令添加账户时自动产生UID,最大的UID值。#Min/maxvaluesforautomaticgidselectioningroupadd#GID_MIN500LinuxLinux操作系统操作系统 #用useradd命令添加账户时自动产生GID,最小的GID值。GID_MAX60000#用useradd命令添加账户时自动产生GID,最大的GID值。#Ifdefined,thiscommandisrunwhenremovingauser.#Itshouldremoveanyat/cr

222、on/printjobsetc.ownedby#theusertoberemoved(passedasthefirstargument).LinuxLinux操作系统操作系统 #USERDEL_CMD/usr/sbin/userdel_local#Ifuseraddshouldcreatehomedirectoriesforusersbydefault#OnRHsystems,wedo.ThisoptionisORedwiththe-mflagon#useraddcommandline.#CREATE_HOMEyes#是否创建用户主目录。LinuxLinux操作系统操作系统 4.1.7用户登录

223、系统后环境的设定用户登录系统后环境的设定系统管理员经常碰到用户反映“我不想每次设定我自己的命令别名,我要怎么做?”、“我想改变我注册后的提示符,我要怎么做?”这类问题。这些要求可以通过修改系统或用户的作业环境来控制。用户登录系统后可以使用不同的Shell,不同的Shell对作业环境进行控制所采用的文件不太一样。我们这里以系统默认的ShellBashShell为例,其他Shell所采用的文件请参见有关的资料(例如,用mantcsh命令)。LinuxLinux操作系统操作系统 使用BashShell时,有以下几个文件和用户的作业环境有关:(1)/etc/profile。(2)/etc/bashrc

224、。(3)/etc/inputrc。(4)$HOME/.bash_profile。(5)$HOME/.bashrc。(6)$HOME/.inputrc。(7)$HOME/.bash_login。LinuxLinux操作系统操作系统 前3个文件和系统所有的用户有关,影响所有登录的用户;后4个文件和某个特定用户有关,如果只想改变单一用户的作业环境,要更改这几个文件。这些文件(inputrc和.inputrc除外)采用Shell语言编写,因此请参照Shell编程这一章节的内容来阅读这些文件的内容。其中,/etc/profile是系统首先会执行的文件。LinuxLinux操作系统操作系统 【实例4.9】

225、同样,我们把有关的说明用“#”进行标注,以示和文件原有内容的区别。#/etc/profile#Systemwideenvironmentandstartupprograms#Functionsandaliasesgoin/etc/bashrc#如果用户的搜索路径中没有/usr/X11R6/bin,则把这一路径加到搜索路径中。if!echo$PATH|/bin/grep-q/usr/X11R6/bin;thenPATH=$PATH:/usr/X11R6/binLinuxLinux操作系统操作系统 fi#设定系统产生的核心文件的大小最大为100MB(软限制)。ulimit-S-c1000000/d

226、ev/null2&1#如果是普通用户,则umask值设为022,否则为002。ifidgn=idun-aidu-gt14;thenumask002LinuxLinux操作系统操作系统 elseumask022fi#设定环境变量USER(用户名)。USER=idun#设定环境变量LOGNAME(登录名)。LOGNAME=$USER#设定环境变量MAIL(用户邮箱所在处)。MAIL=/var/spool/mail/$USER#设定环境变量HOSTNAME(主机名)。LinuxLinux操作系统操作系统 HOSTNAME=bin/hostname#设定环境变量HISTSIZE,即保存1000条的历史

227、命令。使用history命令时可以显示用户的历史命令,能保存的历史命令数和这一变量有关。HISTSIZE=1000#定义键盘键位的文件是/etc/inputrc文件。if-z$INPUTRC-a!-f$HOME/.inputrc;thenINPUTRC=/etc/inputrcLinuxLinux操作系统操作系统 fi#输出以下的变量。exportPATHUSERLOGNAMEMAILHOSTNAMEHISTSIZEINPUTRC#执行/etc/profile.d目录下的所有“*.sh”文件。foriin/etc/pro*.sh;doif-x$i;then.$ifidoneunsetiLinu

228、xLinux操作系统操作系统 #定义堆栈大小为2048。ulimit-s2048/dev/null2&1ulimit-s2048/dev/null2&1/etc/bashrc文件的主要功能是设置一些命令别名和在profile文件没有定义的变量,内容如下。LinuxLinux操作系统操作系统 【实例4.10】#/etc/bashrc#Systemwidefunctionsandaliases#Environmentstuffgoesin/etc/profile#areweaninteractiveShell?if$PS1;thenif-x/usr/bin/tput;thenifxtputkbs!

229、=x;then#WecantdothiswithdumbterminalsttyerasetputkbsLinuxLinux操作系统操作系统 elif-x/usr/bin/wc;theniftputkbs|wc-c-gt0;then#Wecantdothiswithdumbterminalsttyerasetputkbsfifificase$TERMinxterm*)PROMPT_COMMAND=echo-ne0330;$USER$HOSTNAME:$PWD007LinuxLinux操作系统操作系统 ;*);esac#设定用户登录后的提示符,意思是:用户名主机名当前目录。$PS1=s-v$&P

230、S1=uhW$ifx$SHLVL!=x1;then#WerenotaloginShellLinuxLinux操作系统操作系统 foriin/etc/pro*.sh;doif-x$i;then.$ifidonefifi#设定一些常用的命令别名。LinuxLinux操作系统操作系统 aliasls=ls-color-show-control-charsaliasls=ls-color-l-show-control-charsaliasls=ls-coloraliasls=ls-color/etc/inputrc文件主要定义或者改变一些功能键的定义,从而更好地使用命令行,一般并不对此文件进行改变。详

231、细说明请用manbash命令获得。LinuxLinux操作系统操作系统 “.bash_profile”、“.bashrc”和“.bash_login”是存在个人主目录下的隐含文件,更改它们的内容可以定制某一用户的作业环境。它们的内容和profile、bashrc内容类似,这里不再详细说明。LinuxLinux操作系统操作系统 4.1.8超级用户超级用户我们已经知道root用户是超级用户,它具有至高无上的权利,不仅对系统任何文件都有权限(不管是否明确分配root对文件的权限),还可以管理系统。root用户的UID和GID都为0。实际上,普通用户如果其UID和GID也都为0,它就成了和root平起

232、平坐的超级用户了。大多情况下,这样做并没有什么好处,而且还有坏处。但有时在组织中需要多个系统管理员管理同一系统,多个超级用户有利于多个管理员的责任明确。LinuxLinux操作系统操作系统 缺省情况下,超级用户只有从/etc/securetty文件中列出的tty上登录才能获得成功。普通用户成为超级用户后仍无法从Telnet登录。因此如果要远程管理用户,可以用普通用户从Telnet登录,再用su命令切换到超级用户来实现远程管理。LinuxLinux操作系统操作系统 root用户的重要性已经十分明显。和Windows2000不同,如果root的密码丢失,有不用重新安装系统的方法。解决的办法是用红旗

233、Linux启动盘启动,进入到安装状态,然后把文件系统mount到一个目录下(如/mnt),随后修改/etc目录下的文件passwd,把root用户的密码字段内容删除。或者在LILO出现时,输入“linuxsingle”把系统启动到单用户状态,再更改/etc/passwd后重新启动系统到正常状态。LinuxLinux操作系统操作系统 4.2组组的的管管理理4.2.1Linux下的组和组文件下的组和组文件Linux的组有私有组、系统组、标准组之分。建立账户时,若没有指定账户所属的组,系统会建立一个组名和用户名相同的组,这个组就是私有组,这个组只容纳了一个用户。而标准组可以容纳多个用户,组中的用户都

234、具有组所拥有的权利。系统组是Linux系统正常运行所必需的,安装Linux系统或添加新的软件包会自动建立系统组。LinuxLinux操作系统操作系统 一个用户可以属于多个组,用户所属的组又有基本组和附加组之分。在用户所属组中的第一个组称为基本组,基本组在/etc/passwd文件中指定;其他组为附加组,附加组在/etc/group文件中指定。属于多个组的用户所拥有的权限是它所在的组的权限之和。Linux系统关于组的信息存放在文件/etc/group中。LinuxLinux操作系统操作系统 【实例4.11】rootredflag/root#cat/etc/grouproot:x:0:root,t

235、estbin:x:1:root,bin,daemondaemon:x:2:root,bin,daemonsys:x:3:root,bin,admadm:x:4:root,adm,daemonsshd:x:74:rpc:x:32:rpcuser:x:29:LinuxLinux操作系统操作系统 mailnull:x:47:test:x:500:group1:x:1000:user1:x:501:group文件中的每一行记录了一个组的信息,每行包括4个字段,字段之间用“:”分隔。格式如下:LinuxLinux操作系统操作系统 组名:组的密码:GID:组成员字段说明:组名:组的名称,如:root、bi

236、n等。组的密码:设置加入组的密码,一般情况下不使用组密码,该字段通常没用。GID:组的标识符,为数值,类似UID。组成员:组所包含的用户,用户之间用“,”分隔。大部分系统组无成员。LinuxLinux操作系统操作系统 4.2.2组的添加组的添加可以手工编辑/etc/group文件来完成组的添加,也可以用命令groupadd来添加用户。groupadd命令的格式如下:groupadd参数组名参数选项:-gGID:指定新组的GID,默认值是已有的最大的GID加1。LinuxLinux操作系统操作系统 -r:建立一个系统专用组,与-g不同时使用时,则分配一个1499的GID。例如:rootredfl

237、ag/root#groupadd-g1000group1表示添加一个新组,组ID为1000,组名为group1。LinuxLinux操作系统操作系统 4.2.3组属性的修改组属性的修改修改组的属性,使用groupmod命令,格式如下:groupmod参数组名参数选项:-gGID:指定组新的GID。-nname:更改组的名字为name。LinuxLinux操作系统操作系统 要改变组中的成员用户或改变组的密码使用gpasswd命令,例如:gpasswd参数用户名组名不带参数时,即修改组密码。参数选项:-a:将用户加入到组中。-d:将用户从组中删除。-r:取消组密码。LinuxLinux操作系统操作

238、系统 例如:rootredflag/root#gpasswdgroup1Changingthepasswordforgroupgroup1NewPassword:Re-enternewpassword:rootredflag/root#gpasswd-auser1group1将用户user1加入到组group1中。rootredflag/root#gpasswd-duser1group1将用户user1从组group1中删除。LinuxLinux操作系统操作系统 4.2.4文件的安全问题文件的安全问题我们在第2章已经介绍了文件和目录的权限问题,这里就权限问题做一些补充。1.umask改变默认权

239、限掩码文件权限可以通过chmod命令来修改。当用户创建一个新文件后,如果不使用chmod修改权限,则这个文件的权限是什么呢?这个文件的权限由系统默认权限和默认权限掩码共同确定,它等于系统默认权限减去默认权限掩码。LinuxLinux操作系统操作系统 Linux系统中目录的默认权限是777,文件的默认权限是666。因此,有以下公式:新目录的权限=777默认权限掩码新文件的权限=666默认权限掩码例如:rootredflag/root#umask022LinuxLinux操作系统操作系统 以上不带任何参数的umask命令显示当前的默认权限掩码值。如果用户创建新的文件,文件的权限应为:666-022

240、=644(即rw-r-r-)rootredflag/root#vitestrootredflag/root#lsltest-rw-r-r-1rootroot73月812:57testLinuxLinux操作系统操作系统 如果用户创建新的目录,目录的权限应为:777-022=755(即rwxr-xr-x)rootredflag/root#mkdirtestdirrootredflag/root#lsldrwxr-xr-x2rootroot483月813:03testdirrootredflag/root#umask002把当前用户的默认权限掩码值改为002。LinuxLinux操作系统操作系统

241、2.setuid、setgid和sticky位在这之前,我们介绍了文件权限可以用3个八进制来表示。实际上文件权限可以有4个八进制位(如,“0644”),只不过第1位八进制为“0”,可以省略。第1位的八进制如果用二进制表示,有3位二进制,依次表示:用户标识位:组标识位:粘贴位LinuxLinux操作系统操作系统 用户标识位:如为“1”,表示任一用户执行该程序时,正在运行的程序的拥有者将是文件的所有者,而不是启动程序的用户。例如,有一文件testprg,其拥有者为root,该文件设置了用户标识位,用户user1运行了该程序,则正在运行的程序testprg将归root拥有,testprg程序将具有r

242、oot用户的权限。这使得普通用户在权限不够时的情况下仍然可以运行某些要求有高权限的命令,但同时带来了安全的问题,所以要慎重使用用户标识位。LinuxLinux操作系统操作系统 组标识位:和用户标识位类似,只不过用户换成了组而已。粘贴位:如果某个程序不断被运行,可以设置粘贴位以提高速度。设置了粘贴位后,系统会在内存创建一个该程序的拷贝,下次调用时速度会加快。仍然使用chmod命令来设置以上3个位,例如:rootredflag/root#chmod4644testprg注意以上命令有了4个八进制,第1位八进制用于设置用户标识位。LinuxLinux操作系统操作系统 rootredflag/root

243、#ls-ltestprg-rwSr-r-1testtest133月1510:00testprg用户标识位用“-s-”或“-S-”来显示,即它占用了文件拥有者的执行权限位来表示。如果该位为“s”,表示设置了用户标识位的同时文件拥有者对文件还有执行权限;如果该位为“S”,表示设置了用户标识位而文件拥有者对文件没有执行权限。LinuxLinux操作系统操作系统 组标识位用“-s-”或“-S-”来显示,即它占用了文件所属组的执行权限位来表示。如果该位为“s”,表示设置了组标识位的同时文件所属组对文件还有执行权限;如果该位为“S”,表示设置了组标识位而文件所属组对文件没有执行权限。LinuxLinux操

244、作系统操作系统 粘贴位用“-t”或“-T”来显示,即它占用了其他用户的执行权限位来表示。如果该位为“t”,表示设置了粘贴位的同时其他用户对文件还有执行权限;如果该位为“T”,表示设置了粘贴位而其他用户对文件没有执行权限。使用chmod命令时,可以用“s”表示用户或组的标识位,用“t”表示粘贴位。rootredflag/root#chmod4644testprg等价于rootredflag/root#chmodu=rws,g=r,o=rtestprgLinuxLinux操作系统操作系统 4.3磁磁盘盘配配额额所谓的磁盘配额,是指用户在主机上可以使用的磁盘空间的额度。限制用户所能占用的磁盘空间常常

245、是必要的,特别是当主机作为公共服务器使用时。Linux通过quota来实现磁盘配额管理。quota可以从两个方面进行限制:一个方面可以限制用户或组占用的磁盘块数(1块=1024字节);另一方面可以限制用户或组所拥有的文件数(inode数)。大多情况下我们使用块数的限制。LinuxLinux操作系统操作系统 quota是以文件系统为基础的,如果系统中有多个文件系统,则必须在所有文件系统上分别进行quota的设置。quota目前只在ext2类型的文件系统上实现。配置quota一般有以下几个步骤:(1)检查内核是否支持quota。红旗Linux3.0内核缺省是支持的,也可以用下面的命令确认:root

246、redflag/root#dmesg|grep“quota”应有输出:VFS:Diskquotasversiondquot_6.5.0initialized如内核不支持,则用rpm安装相应的软件包。LinuxLinux操作系统操作系统 (2)修改/etc/fstab文件(关于fstab的内容,可进一步参见文件系统管理这一章)。对于要启用quota的文件系统,要配置相应的安装选项。如下:/dev/hda3/mnt/disk1ext2defaults,usrquota,grpquota12带下划线的部分是和quota有关的选项。userquota表示支持用户quota,而grpquota表示支持组

247、quota。LinuxLinux操作系统操作系统 (3)重新启动系统或卸载文件系统并重新安装文件系统让quota选项生效,例如:rootredflag/root#unmount/dev/hda3rootredflag/root#mount/dev/hda3LinuxLinux操作系统操作系统 (4)建立aquota.user和aquota.group文件。使用quotacheck命令来完成这一任务,该命令的作用是检查配置了quota的文件系统中,各个用户或组对文件和文件数的使用情况,并在每个文件系统的根目录上建立aquota.user和aquota.group文件。第一次执行时,如果文件系统存

248、在的文件数较多,会比较费时。LinuxLinux操作系统操作系统 例如:rootredflag/root#quotacheck-avugScanof/mnt/disk1/dev/hda3doneChecked2directoriesand0files参数选项:-a:检查所有已安装(mount)了并且配置了配额的文件系统。-g:检查组的配额。-u:检查用户配额。-v:显示检查时产生的信息。LinuxLinux操作系统操作系统 (5)修改系统的启动脚本,让系统启动时自动执行配额检查并启动配额功能。系统的启动脚本为/etc/rc.d/rc.local,在rc.local文件末加入以下语句:/sbin

249、/quotacheck-avug/sbin/quotaon-avug重新启动系统让脚本生效。也可以不重启系统,但要手工执行一遍以上命令。LinuxLinux操作系统操作系统 (6)设置用户配额。设置用户配额的命令是:edquota参数用户名或组名参数选项:-u:修改用户的配额。-a:修改组的配额。-t:修改缓冲延时。LinuxLinux操作系统操作系统 例如:rootredflag/root#edquota-utestEditblockandinodequotaforusertest:Device/dev/hda3(/mnt/disk1):Used0KB,limits:soft=0hard=0

250、Used0inodes,limits:soft=0hard=0LinuxLinux操作系统操作系统 以上命令将启动vi编辑器用于编辑用户test在每个文件系统的配额(这里只有一个文件系统配置了配额)。“Used0KB”是用户已经使用的磁盘块数,“limits:soft”是软配额,“hard”是硬配额,“Used0inodes”是用户已经使用的文件数(inode数)。软配额:用户所使用的磁盘块数或文件数到这一配额后,系统会警告,但仍允许用户继续使用。可继续使用的时间和下面介绍的缓冲延时有关。LinuxLinux操作系统操作系统 硬配额:用户所使用的磁盘块数或文件数到这一配额后,系统将不允许用户继

251、续使用。缓冲延时:用户使用的磁盘块数或文件数达到软配额后,仍允许用户继续使用的时间。如果延时到达,用户将不被允许继续使用磁盘了。例如:LinuxLinux操作系统操作系统 rootredflag/root#edquota-tEditgracetimesforuserquota:Device/dev/hda3(/mnt/disk1):Blockgrace:7daysInodegrace:7days其中,“Blockgrace:7days”表示磁盘块数的缓冲延时;“Inodegrace:7days”表示文件数的缓冲延时。LinuxLinux操作系统操作系统 (7)关闭和打开磁盘配额功能使用。quo

252、taoffa文件系统关闭文件系统磁盘配额功能。参数选项:-a:关闭所有已安装(mount)了并且配置了配额的文件系统的配额功能。LinuxLinux操作系统操作系统 【实例4.12】rootredflag/root#quotaoff/dev/hda3表示关闭/dev/hda3分区的磁盘配额功能。quotaon参数文件系统打开文件系统磁盘配额功能。参数选项:-a:打开所有已安装(mount)了并且配置了配额的文件系统的配额功能。LinuxLinux操作系统操作系统 【实例4.13】rootredflag/root#quotaon/dev/hda3表示打开/dev/hda3分区的磁盘配额功能。Li

253、nuxLinux操作系统操作系统 (8)其他命令。repquota:可以产生文件系统有关磁盘配额的统计。rootredflag/root#repquota-a*Reportforuserquotasondevice/dev/hda3(/mnt/disk1)LinuxLinux操作系统操作系统 Blockgracetime:7days;Inodegracetime:7daysBlocklimitsUserusedsofthardgraceusedsofthardgrace-root-1300200以上命令显示了各个用户磁盘配额和文件配额的使用数。LinuxLinux操作系统操作系统 习习题题1.

254、/etc/passwd文件中的其中一行为“test:x:500:500:/home/test:/bin/bash”,请解析各字段的含义。2./etc/group文件中的其中一行为“group1:x:1000:”,请解析各字段的含义。3.在/etc/fstab文件中有一行“/dev/hda3/mnt/disk1ext2defaults12”,如要打开/dev/hda3的磁盘配额功能,应加上什么选项?还要其他什么步骤?LinuxLinux操作系统操作系统 第第5章章设备管理设备管理5.1硬件设备硬件设备5.2使用设备使用设备习题习题LinuxLinux操作系统操作系统 5.1硬硬件件设设备备5.1

255、.1设备文件设备文件Linux操作系统本身对于如何控制硬盘、软驱、光驱和其他连接到系统的外围设备并无内建的指令。所有用于和外设通信的指令都包含在一个叫做设备驱动程序的文件中。该程序通常是一段汇编语言或C代码,用于和外设传递数据、交流信息。LinuxLinux操作系统操作系统 Linux系统通过设备文件实现对设备和设备驱动程序的跟踪。设备文件主要包括设备权限和设备类型的有关信息,以及两个可供系统内核识别的惟一的设备号。系统在很多情况下,可能有不止一个同种类型的设备,因此Linux可以对所有的设备使用同种驱动程序,但是操作系统又必须能够区分每一个设备。LinuxLinux操作系统操作系统 那么Li

256、nux又是通过什么样的方法来区分这些同种类型设备呢?实际上Linux是使用设备号来区分的。每一个设备都有一个主设备号和子设备号。主设备号用来确定使用什么样的驱动程序,子设备号是硬件驱动程序用来区分不同的设备和判断如何进行处理。例如,6个终端都使用相同的设备驱动程序,那么它们的主设备号都是一样的,但是每一个终端都有一个不同的子设备号,可使操作系统惟一的确定它们。LinuxLinux操作系统操作系统 【实例5.1】从下面的清单可以看出,所有终端设备的驱动程序都有相同的主设备号4,但子设备号是从05。crw-rw-rw-1roottty4,14OA112001tty0crw-rw-rw-1roott

257、ty4,24OA112001tty1crw-rw-rw-1roottty4,34OA112001tty2crw-rw-rw-1roottty4,44OA112001tty3crw-rw-rw-1roottty4,54OA112001tty4crw-rw-rw-1roottty4,64OA112001tty5LinuxLinux操作系统操作系统 Linux习惯于把所有的设备文件都置于/dev目录下,其中很大一部分只是带有不同设备号的基本驱动程序的拷贝,但是每一个文件都是相互独立的。Linux下的驱动程序的命名与其他操作系统下的命名不同,常见的设备名称与驱动程序的对应关系如表5-1所示。Linux

258、Linux操作系统操作系统 表5-1Linux下常见设备及对应的驱动程序命名设备命名第一软驱(A:)/dev/fd0第二软驱(B:)/dev/fd1IDE1的第一个硬盘(master)/dev/hdaIDE1的第二个硬盘(slave)/dev/hdbIDE2的第一个硬盘(master)/dev/hdcSCSI的第一个硬盘/dev/sdaSCSI的第二个硬盘/dev/sdb光驱CD-ROM/dev/cdrom打印机/dev/lp0LinuxLinux操作系统操作系统 5.1.2设备分类设备分类计算机上凡是与Linux进行通信的每个硬件都被视为一个设备,它们可以分为两种类型:块设备和字符设备。终端

259、、打印机和异步调制解调器都属于字符设备,它们的通信方式是使用字符,一次只发送一个并回送一个字符。相反,硬盘驱动器和磁带机则使用块数据通信,这对发送大量信息无疑是一种极为快捷的方法,这样的设备称为块设备。LinuxLinux操作系统操作系统 通常,块设备用于对大批量数据的处理,而字符设备传输数据则比较缓慢。例如,大多数模拟调制解调器是字符设备,而ISDN则属于块设备。在相同的时间里,块设备可以比字符设备传输更多的数据。LinuxLinux操作系统操作系统 有些设备在不同的情况下可分别为字符设备和块设备,例如,一些磁带机就属于这种情况,也就是说这样的主设备有两套设备驱动程序,用户可针对不同的读写要

260、求来选择设备驱动程序。对于大量、快速的数据传送,最好选用块设备;对于某个文件检索或单一目录的备份,字符设备则更为适合。另一种区分块设备和字符设备的方法是看设备如何处理缓冲,字符设备是靠自己实现缓冲,块设备通常以512字节或1024字节(甚至更大)的组块进行通信,它们通过系统内核实现缓冲。对用户来说,这种缓冲则更易察觉。LinuxLinux操作系统操作系统 设备驱动程序和设备文件很详细地标明了设备是字符设备还是块设备。要识别一个设备的类型,只需要查看一下设备文件中的权限位就可以了。如果权限位中的第一个字符是b,则该设备就是块设备;若是c,则说明它是字符设备。如图5-1所示的是我们从/dev目录清

261、单中摘录的一段,用户可以由权限位的第一个字符来判断设备是何种类型。LinuxLinux操作系统操作系统 crw-1rootroot14,204OA112001audio1crw-1rootroot14,74OA112001audioctlbrw-rw-1rootdisk29,04OA112001aztcdbrw-rw-1rootdisk41,04OA112001bpcd图图5-1/dev目录清单目录清单LinuxLinux操作系统操作系统 5.2使使用用设设备备5.2.1磁盘磁盘计算机有不同种类的磁盘驱动器,常见的有软盘、IDE硬盘和SCSI硬盘等,下面我们分别来介绍如何使用这些设备。Linu

262、xLinux操作系统操作系统 1.软盘软盘是可移动的低容量的存储介质。作为存储设备,它比硬盘要慢得多,但它具有可移动和便于传输数据的优点。相应的软盘的块设备都以字母“fd”开始,/dev/fd0是第一个,其他软盘的编号逐步增大。对于软盘,有许多可能的格式,内核需要知道磁盘的格式才能够正确地读取它。目前计算机使用的软盘基本都是1.44MB的。LinuxLinux操作系统操作系统 使用软盘的步骤如下:(1)以超级用户身份登录;(2)创建一个安装点(如/mnt/floppy)来加载软盘;(3)放入软盘;(4)执行如下命令来加载软驱:rootredflag/root#mounttvfat/dev/fd

263、0/mnt/floppyLinuxLinux操作系统操作系统 成功安装后,软盘的文件出现在/mnt/floppy目录下,这些文件对所有的用户可读,但只有root才可以修改、删除这些文件。卸载软盘的命令如下:rootredflag/root#umount/mnt/floppyLinuxLinux操作系统操作系统 2.硬盘硬盘一般是比较大的存储设备,这使得它能够在其不同位置存放不同的文件系统。加载硬盘的步骤和软盘基本相同,通过加载,我们可以很容易地使用Windows98或Windows2000下的文件,假设安装点为/mnt/windows,对于IDE硬盘执行的命令如下:rootredflag/ro

264、ot#mounttvfat/dev/hda5/mnt/windowsLinuxLinux操作系统操作系统 对于SCSI硬盘,执行的命令如下:rootredflag/root#mounttvfat/dev/sda4/mnt/windows使用“-tvfat”选项,是因为Windows下文件系统是FAT32格式的。【说明】我们可以通过修改/etc/fstab文件,使得系统每次启动时自动加载。/etc/fstab文件的内容如下:LinuxLinux操作系统操作系统 /dev/hda7/reiserfsdefaults,notail11/dev/hda5/mnt/windowsvfatdefaults

265、00/dev/cdrom/mnt/cdromiso9660noauto,owner,ro00/dev/hda6swapswapdefaults00/dev/fd0/mnt/floppyvfatnoauto,owner00none/procprocdefaults00none/dev/ptsdevptsgid=5,mode=62000LinuxLinux操作系统操作系统 5.2.2CD-ROMCD-ROM驱动器从根本上讲是只读设备,它与其他块设备的安装方式相同。CD-ROM一般包含标准的ISO9660文件系统和一些可选的扩充。现在的光驱基本上都符合ATAPI标准。使用mount命令可以把光盘中的

266、所有目录和文件加载到Linux目录中,以root身份执行如下的命令:LinuxLinux操作系统操作系统 rootredflag /root#mount t iso9660 /dev/cdrom/mnt/cdrom如果命令生效,光盘中的内容将出现在目录/mnt/cdrom下。上述命令执行后,若不能加载成功,可能的原因如下:(1)/mnt/cdrom不存在。(2)/dev/cdrom不存在。(3)当前目录是安装点。LinuxLinux操作系统操作系统 卸载光盘的命令如下:rootredflag/root#umount/dev/cdrom如果系统提示“设备已经安装或目录忙”的信息,可能是由于用户的

267、当前目录是在安装点/mnt/cdrom或子目录而造成的,此时必须切换到其他目录下才能进行。LinuxLinux操作系统操作系统 5.2.3打印机打印机当我们想要把自己设计好的文件在Linux下打印时,首先要正确配置打印机。在红旗Linux中,配置打印机的命令是printtool,此命令只能在XWindow下使用。下面我们通过实例来讲述如何安装和配置打印机。LinuxLinux操作系统操作系统 【实例5.2】本实例安装本地打印机,打印机的型号是HPLaserJet4,配置过程如下:(1)运行printtool工具,其主界面如图5-2所示。利用printtool,用户可以添加、编辑和删除打印机队列

268、。LinuxLinux操作系统操作系统 图5-2PrintTool主界面LinuxLinux操作系统操作系统 (2)选择【Add】来添加打印机,然后选择要增加的打印机的类型。Linux下的打印机类型如图5-3所示,有四种类型。LocalPrinter:指连接于本地系统并口或串口上打印机的打印队列。RemoteUnix(lpd)Queue:指可以通过TCP/IP网络来访问的连接于非本地系统的打印队列。LinuxLinux操作系统操作系统 图5-3Linux下的打印机类型LinuxLinux操作系统操作系统 图5-4编辑本地打印机LinuxLinux操作系统操作系统 SMB/Windows95/N

269、TPrinter:指可以通过SMB网络来访问的连接于非本地系统的打印队列。NetWarePrinter(NCP):指可以通过NetWare网络来访问的连接于非本地系统的打印队列,在建立此打印队列之前,必须安装NCP文件系统。(3)选择配置本地打印机,即“LocalPrinter”,进入到具体的配置界面,如图5-4所示。LinuxLinux操作系统操作系统 其中:Names:是打印机名称,可以指定多个名字,之间用“|”(管道)符号隔开。SpoolDirectory:指定存放要打印的文件的目录,不要让多个打印队列共享一个假脱机目录。inKb:所接受的最大作业量,以Kb为单位。0表示不进行限制。Pr

270、interDevice:打印设备名称。LinuxLinux操作系统操作系统 InputFilter:过滤器用来将打印文件转换成打印机可以处理的格式。通过Select来选择最适合你的打印机的过滤器,如图5-5所示。从图5-5可以看出,左边为打印机的具体类型,右边为打印机的具体选项,在这里我们选择“HPLaserJet4/5/6series,non-PostScript”类型的打印机,然后再进行右边的具体配置,最后按“OK”来确定。SuppressHeaders:可以选择是否每个打印作业前打印一张起始信息页。LinuxLinux操作系统操作系统 图5-5配置打印机LinuxLinux操作系统操作系

271、统 (4)上述步骤执行完成了后,我们就完成了本地打印机的配置,如图5-6所示。图图5-6配置好的打印机配置好的打印机LinuxLinux操作系统操作系统 5.2.4显卡显卡显卡是Linux操作系统支持最差的,其配置正确与否直接影响到用户能否启动XWindow。配置显卡最常用的工具是提供了图形化界面的Xconfigurator。【实例5.3】本实例使用Xconfigurator来配置显卡,步骤如下:(1)键入“Xconfigurator”命令来启动配置,欢迎画面如图5-7所示。选择“OK”进入下一步。LinuxLinux操作系统操作系统 图图5-7Xconfigurator欢迎画面欢迎画面Lin

272、uxLinux操作系统操作系统 (2)PCI显卡检测,结果如图5-8所示。图5-8PCI显卡检测结果LinuxLinux操作系统操作系统 (3) 选择显示器类型,如图5-9所示。我们选择“Acer57c”。图5-9选择显示器LinuxLinux操作系统操作系统 (4)选择显存大小,如图5-10所示。我们选择“16mb”。(5)选择时钟芯片,如图5-11所示,我们一般选择第一项。图5-10选择显存LinuxLinux操作系统操作系统 图5-11选择时钟芯片LinuxLinux操作系统操作系统 (6)设置显示器分辨率,如图5-12所示,我们设为24位“1024768”。图5-12设置分辨率Linu

273、xLinux操作系统操作系统 (7)测试。完成上述步骤后,系统会进行测试,来确定显卡能否正常工作。如果测试通过,我们就可以通过startx命令进入XWindow环境,如图5-13所示。LinuxLinux操作系统操作系统 图图5-13XWindow启动画面启动画面LinuxLinux操作系统操作系统 【实例5.4】某机的显卡是TridentBlade3D的,安装显卡驱动程序步骤如下:(1)下载驱动程序。下载驱动程序首先要找到显卡forLinux的驱动程序。现在绝大多数的3D显卡都已有了forLinux的驱动程序,可到各显卡厂商的主页或Linux的相关站点上去寻找。现在找到的驱动程序名为“XF8

274、6_SVGA”,文件格式是“.tar.gz”,是Linux的压缩文件。LinuxLinux操作系统操作系统 (2)文件解压。由于下载的是压缩文件,就需要进行解压缩,可以在Linux下用tar命令解压。(3)拷贝文件。将“XF86_SVGA”文件拷贝到/usr/X11R6/bin目录下。注意,这是针对RedFlag版本来说,其他版本的路径不一定相同。执行如下的命令:cp/root/XF86_SVGA/XF86_SVGA/usr/X11R6/binLinuxLinux操作系统操作系统 大家可根据自己的情况灵活掌握,关键是路径一定要正确,还要分清字母的大小写。如果系统提示有同名文件,问是否覆盖,一定

275、要选择“y”。这些旧文件可能是以前安装显卡时加载的,对我们没有实际用处。LinuxLinux操作系统操作系统 (4)配置显卡。文件拷贝完成后,输入Xconfigurator,启动显卡配置程序。选择加载的显示模块为SVGA,再选择显示器型号、显存大小、刷新频率,选定24位色、800600的分辨率。一切就绪,X服务器开始检测,十几秒钟后,检测完毕,X服务器再没有像以往那样给出出错信息。通过startx命令进入XWindow环境。LinuxLinux操作系统操作系统 5.2.5声卡声卡声卡是多媒体计算机不可或缺的设备,Linux要成为普及的操作系统,当然也会支持声卡。在安装Linux系统时会检测声卡

276、,如果检测不到,用户就必须自行设置。在文字模式中执行sndconfig命令(或执行setup命令后,选择“Soundcardconfiguration”)开始设置声卡。LinuxLinux操作系统操作系统 【实例5.5】本实例介绍如何配置声卡,步骤如下:(1)执行setup命令后,选择“Soundcardconfiguration”,如图5-14所示,进入声卡配置。LinuxLinux操作系统操作系统 图图5-14选择配置声卡选项选择配置声卡选项LinuxLinux操作系统操作系统 (2)接下来系统自动检测声卡,若检测到,会显示如图5-15所示的画面。(3)接下来系统会播放声音样本进行测试,然

277、后询问我们是否听到声音,如图5-16所示。LinuxLinux操作系统操作系统 图5-15检测到声卡LinuxLinux操作系统操作系统 图5-16询问听到声音样本LinuxLinux操作系统操作系统 5.2.6Modem红旗Linux提供了非常方便的配置Modem的图形化的工具。我们用实例5.6来讲述Modem的配置过程。【实例5.6】本实例利用红旗INTERNET工具来介绍使用调制解调器拨号上网,步骤如下:(1)我们可以通过【K按钮】【系统设置】【拨号网络配置】来启动红旗INTERNET工具,如图5-17所示,选择Modem项。LinuxLinux操作系统操作系统 (2)按“下一步”执行K

278、PPP命令来打开“KPPP”对话框,如图5-18所示。(3)我们按设置按钮来设置拨号账号,如图5-19所示。(4) 我 们 选 择 新 建 连 接 , 设 置 连 接 名 字 为“my_dail”,电话号码为“96169”,身份验证选择“PAP”,如图5-20所示。LinuxLinux操作系统操作系统 图5-17红旗INTERNET工具启动画面LinuxLinux操作系统操作系统 图5-18KPPP对话框LinuxLinux操作系统操作系统 图5-19设置拨号账号LinuxLinux操作系统操作系统 图5-20新建拨号连接LinuxLinux操作系统操作系统 (5)新建连接设置好的画面如图5-

279、21所示。(6)开始拨号,画面如图5-22所示。LinuxLinux操作系统操作系统 图5-21设置好的拨号连接LinuxLinux操作系统操作系统 图5-22拨号上网画面LinuxLinux操作系统操作系统 5.2.7ADSL现在已经有越来越多的人采用ADSL方式上网。在Linux下可以使用PPPoE这个软件来进行ADSL拨号。【实例5.7】本实例介绍计时制的ADSL上网,我的账号是,配置步骤如下:LinuxLinux操作系统操作系统 (1)拨号设置。rootredflag/root#adsl-setupWelcometotheRoaringPenguinADSLclientsetup.Fi

280、rst,IwillrunsomechecksonyoursystemtomakesurethePPPoEclientisinstalledproperly.#上面一段显示欢迎信息。Looksgood!Now,pleaseentersomeinformation:#提示用户要输入一些信息。LinuxLinux操作系统操作系统 USERNAME#提示输入用户账号。EnteryourPPPoEusername(default):LinuxLinux操作系统操作系统 INTERFACE#提示用户输入网络接口。 Enter the Ethernet interface connected to the

281、ADSLmodemForSolaris,thisislikelytobesomethinglike/dev/hme0.ForLinux,itwillbeethn,wherenisanumber.(defaulteth0):#网络接口通常是eth0,按回车键即可。Do you want the link to come up on demand, or stay upcontinuously?LinuxLinux操作系统操作系统 Ifyouwantittocomeupondemand,entertheidletimeinsecondsafterwhichthelinkshouldbedroppe

282、d.Ifyouwantthelinktostayuppermanently,enterno(twoletters,lower-case.)NOTE:Demand-activatedlinksdonotinteractwellwithdynamicIPaddresses. You may have some problems with demand-activatedlinks.Enterthedemandvalue(defaultno):noLinuxLinux操作系统操作系统 #让用户设置闲置多少秒要断线,若想一直维持连接,则回答“no”。DNS#提示用户输入“DNS”。Pleaseente

283、rtheIPaddressofyourISPsprimaryDNSserver.IfyourISPclaimsthattheserverwillprovideDNSaddresses,enterserver(alllower-case)here.Ifyoujustpressenter,IwillassumeyouknowwhatyouareLinuxLinux操作系统操作系统 doingandnotmodifyyourDNSsetup.EntertheDNSinformationhere:#输入“DNS”,一般不需要填写,拨号上网后,ISP会自动指定。PASSWORD#输入两次密码,但是密码不

284、会显示在屏幕上。PleaseenteryourPPPoEpassword:Pleasere-enteryourPPPoEpassword:LinuxLinux操作系统操作系统 FIREWALLING#提示用户设置防火墙。Pleasechoosethefirewallrulestouse.Notethattheserulesareverybasic.Youarestronglyencouragedtouseamoresophisticatedfirewallsetup;however,thesewillprovidebasicsecurity.Ifyouarerunninganyserverso

285、nyourmachine,youmustchooseNONEandsetupfirewallingyourself.Otherwise,thefirewallruleswilldenyaccesstoallstandardserverslikeWeb,e-mail,ftp,etc.IfyouareusingSSH,theruleswillblockoutgoingSSHconnectionswhichallocateaprivilegedsourceport.LinuxLinux操作系统操作系统 Thefirewallchoicesare:0-NONE:Thisscriptwillnotset

286、anyfirewallrules.Youareresponsiblefor ensuring the security of your machine. You areSTRONGLYrecommendedtousesomekindoffirewallrules.1-STANDALONE:Appropriateforabasicstand-aloneweb-surfingworkstation2-MASQUERADE:AppropriateforamachineactingasanInternetgatewayforaLANLinuxLinux操作系统操作系统 Chooseatypeoffir

287、ewall(0-2):0#我们选择“0”,表示不设置防火墙。Startthisconnectionatboottime#提示用户是否在启动时进行拨号。Doyouwanttostartthisconnectionatboottime?Pleaseenternooryes.noLinuxLinux操作系统操作系统 *Summaryofwhatyouentered*#查看设置是否正确。EthernetInterface:eth0Username:Activate-on-demand:NoDNS:DonotadjustFirewalling:NONE#如果设置正确,选择“y”完成ADSL设置。Linu

288、xLinux操作系统操作系统 Acceptthesesettingsandadjustconfigurationfiles(y/n)?yAdjusting/etc/ppp/pppoe.confAdjusting/etc/ppp/pap-secretsand/etc/ppp/chap-secrets(Butfirstbackingitupto/etc/ppp/pap-secrets-bak)(Butfirstbackingitupto/etc/ppp/chap-secrets-bak)LinuxLinux操作系统操作系统 Congratulations,itshouldbeallsetup!Ty

289、peadsl-starttobringupyourADSLlinkandadsl-stoptobringitdown.Typeadsl-statustoseethelinkstatus.LinuxLinux操作系统操作系统 (2)拨号上网。当我们要上网时只要执行“adsl-start”命令即可,若要断线则执行“adsl-stop”命令。拨号上线后可执行“adsl-status”命令来查看连接状态。LinuxLinux操作系统操作系统 习习题题1.假设当前系统中只有一个软驱设备,它在Linux下一般表示为_。A./dev/fd0 B./mnt/floppyC./dev/floppyD./dev/

290、fd12.一般/dev/lp0表示_。A.声卡B.打印机C.显示器D.键盘LinuxLinux操作系统操作系统 3.ADSL的拨号软件是_。A.KPPPB.PPPoEC.SLIPD.PPP4.Linux中设备文件的主要内容包括_。A.设备权限 B.设备类型 C.主设备号 D.子设备号5.printtool可以配置的打印机类型包括_。A.localprinterB.remoteunix(lpd)queueC.SMB/Windows95/NTprinterD.NetWarePrinterLinuxLinux操作系统操作系统 6.Linux系统中的设备的类型包括_。A.块设备B.字符设备C.流设备D

291、.缓冲设备7. 执行mount -t auto /dev/cdrom /mnt/cdrom命令之后,Linux报告出错信息,则可能的原因是_。A./mnt/cdrom不存在B./mnt/cdrom为空C./dev/cdrom设备不存在 D. 当前目录是安装点/dev/cdromLinuxLinux操作系统操作系统 第第6章章文件系统管理文件系统管理6.1文件系统基础文件系统基础6.2创建文件系统创建文件系统6.3文件系统的安装和卸载文件系统的安装和卸载6.4文件系统的维护文件系统的维护习题习题LinuxLinux操作系统操作系统 6.1文件系统基础6.1.1磁盘的分区磁盘的分区Linux系统使

292、用各种存储介质来保存永久的数据,例如:硬盘、软盘、光盘、磁带等。其中硬盘是不可缺少的介质,硬盘有容量大、速度快、价格低的特点。我们常常对硬盘进行分区,使得每个分区在逻辑上是独立的。这样我们就可以在每个分区安装一个操作系统,而多个操作系统就可以共处在同一个硬盘上。软盘的容量小,不进行分区;光盘则作为一个大盘更易于使用,也不进行分区。LinuxLinux操作系统操作系统 硬盘分区的信息保存在硬盘的第一个扇区(即第一面第一磁道第一扇区),这个扇区称为MBR(主引导记录),主引导记录包含有一段小程序。计算机启动时BIOS会执行这一段小程序,小程序又会读入分区表,检查哪个分区是活动分区(也叫启动分区),

293、并读入活动分区的第一扇区(称为分区的启动扇区)。启动扇区也包含另一个程序,这个程序实际上是操作系统的一部分。它将负责操作系统的启动。LinuxLinux操作系统操作系统 一个硬盘的分区最多只能有四个基本分区。有些时候这个数量太少了,于是人们就发明了扩展分区。扩展分区是在基本分区的基础上把分区再细分成多个子分区,每个子分区都是逻辑分区。一般情况下,只能允许存在一个扩展分区,即磁盘可以有三个基本分区和一个扩展分区。硬盘的分区结构如图6-1所示,硬盘的分区信息可以使用命令“fdisk-l”获得。LinuxLinux操作系统操作系统 图6-1硬盘分区结构LinuxLinux操作系统操作系统 【实例6.

294、1】rootredflag/root#fdisk-l/dev/hdaDisk/dev/hda:255heads,63sectors,2482cylindersUnits=cylindersof16065*512bytesLinuxLinux操作系统操作系统 DeviceBootStartEndBlocksIdSystem/dev/hda1*1 383307641683Linux/dev/hda2384447 51408082Linuxswap/dev/hda3448454 56227+83Linux/dev/hda4455467 104422+82LinuxswapLinuxLinux操作系统

295、操作系统 以上输出中带“*”号的是启动分区。我们随后将详细介绍fdisk命令的使用。Linux对硬盘分区的命名和DOS对硬盘分区的命名有很大的不同。在DOS下软盘为“A:”、“B:”,而硬盘为“C:”、“D:”,等等。Linux则使用/dev/hda0等来命名它们。以/dev/hd开头的表示IDE接口的硬盘,以/dev/sd开头的表示SCSI接口的硬盘,随后的abcd等代表第几个硬盘,而数字1、2、3、4代表硬盘的第几个分区。例如,/dev/hda1表示第一个IDE硬盘的第一个分区。表6-1列举了常用的分区命名方法。LinuxLinux操作系统操作系统 表6-1分区的命名设备分区的命名软盘/d

296、ev/fd0第一个IDE硬盘(整个硬盘)/dev/hda第一个IDE硬盘第一个分区/dev/hda1第一个IDE硬盘第二个分区/dev/hda2第二个IDE硬盘(整个硬盘)/dev/hdb第二个IDE硬盘第一个分区/dev/hdb1LinuxLinux操作系统操作系统 第二个IDE硬盘第二个分区/dev/hdb2第一个SCSI硬盘(整个硬盘)/dev/sda第一个SCSI硬盘第一个分区/dev/sda1第一个SCSI硬盘第二个分区/dev/sda2第二个SCSI硬盘(整个硬盘)/dev/sdb第二个SCSI硬盘第一个分区/dev/sdb1第二个SCSI硬盘第二个分区/dev/sdb2Linux

297、Linux操作系统操作系统 6.1.2什么是文件系统什么是文件系统文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在磁盘上组织文件的方法。分区或磁盘在作为文件系统使用前需要初始化,并将记录数据结构写到磁盘上,这个过程叫建立文件系统。我们在DOS下常常进行的格式化磁盘进程也是一个建立文件系统的过程。不同的操作系统所支持的文件系统是不同的,一个文件系统在一个操作系统下可以正常地被使用,转移到另一操作系统时往往会出问题。LinuxLinux操作系统操作系统 Linux支持多种类型的文件系统。而红旗Linux3.0版又增加了几种新类型的文件系统。下面是几个重要的文件系统:minix:最

298、早的Minix系统的文件系统。ext2:Linux系统的文件系统,目前是使用最广泛的文件系统。swap:用于交换分区和交换文件的文件系统。sysv:Unix里广泛使用的SystemV。iso9660:标准的CD-ROM的文件系统。LinuxLinux操作系统操作系统 vfat:扩展的DOS文件系统,支持长文件名,被Windows98采用。msdos:与MS-DOS/FAT16兼容的文件系统。hpfs:OS/2文件系统。nfs:网络文件系统,允许多台计算机间共享的文件系统。ntfs:用于WindowsNT和Windows2000的文件系统。reiserfs:安全性和效能比ext2都好的文件系统。

299、ext3:ext2的后续者,红旗Linux3.0版(Linux内核2.4.17)已经把它加入。smb:支持SMB协议的高性能文件系统。LinuxLinux操作系统操作系统 一般情况下没有理由用不同类型的文件系统来组成Linux系统,除非原有的文件系统已经存在。由于历史的原因,当前ext2的使用最为广泛,而reiserfs是红旗Linux3.0安装时默认的文件系统类型,ext3是当前最新的文件系统类型。ext2比起以往的文件系统在文件性能方面有很大的提高,但也存在不少的问题,例如,文件系统在异常关机等情况下容易遭到破坏,使用“fsck”命令检查文件系统要检查整个文件系统,对于较大的文件系统,常常

300、需花费几个小时的检查时间。LinuxLinux操作系统操作系统 为了解决这个问题,出现日志型文件系统,如reiserfs和ext3。日志型文件系统比传统的文件系统安全,因为它用独立的日志文件跟踪磁盘内容的变化。就像关系型数据库(RDBMS),日志文件系统可以用事务处理的方式提交或撤消文件系统的变化。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。正因为如此,在系统突然崩溃时,在下次启动几秒钟后就能恢复成一个完整的系统,系统也就能很快地使用了。LinuxLinux操作系统操作系统 reiserfs除了具有日志型文件系统的特性,还具有适合处理大量小文件(如5000个50字节的文件)和

301、特大文件(例如2GB以上)的特点。ext3则是ext2的后续者,它也是日志型文件系统,更为难得的是,它的磁盘格式和ext2的相同,ext2和ext3的转换相当的容易,对于ext2的升级十分有利。没有一种文件系统适合所有的应用,因此我们要选择适合自己的文件系统。对于新安装的系统,我们建议采用reiserfs或ext3。LinuxLinux操作系统操作系统 Linux采用虚拟文件系统(VFS)技术,因此Linux可以支持多种文件。每一文件系统都提供一个公共的接口给VFS,不同文件系统的所有细节由软件进行转换。而从Linux内核和Linux运行的程序来看,不同的文件系统之间没有差别。例如,用户可以把

302、自己原有的Windows分区挂接到Linux中的一个目录下,也可以同时把NFS(网络文件系统)挂接在另一目录,它们可以和平地融合为一体。LinuxLinux操作系统操作系统 文件系统是所有数据的基础,所有文件和目录都驻留在文件系统上。在Linux系统中,所有的文件系统都被连接到一个总的目录上,这个目录就叫根目录,是由系统自动建立的。根目录下有许多分支,分支又有子分支,从而整个目录呈树状结构,如图6-2所示。LinuxLinux操作系统操作系统 图图6-2树状的目录结构树状的目录结构LinuxLinux操作系统操作系统 文件系统连接目录树上的一点,这个点就叫安装点。图6-2中的每个虚框就是一个文

303、件系统,所有不在虚框的部分也是一个文件系统,一共有四个文件系统。就这样,不同的文件系统形成了一个无缝的整体。LinuxLinux操作系统操作系统 6.1.3文件文件文件是有名字的一组相关信息的集合,它有多种的分类方法,如根据文件的用途我们把文件分为以下四种。(1)普通文件。文件可以是千差万别的,如普通的Word文件、图像文件、声音文件、网页HTML文件,也可以是脚本文件、程序员编写的可执行文件。我们可进一步把文件分类为文本文件和二进制文件。LinuxLinux操作系统操作系统 文本文件即ASCII码文件,可以使用cat、more等命令查看,Linux系统的多种配置文件、源程序、HTML文件都属

304、于此类。二进制文件,一般不能被直接查看,而必须使用相应的软件才行,如图像文件、声音文件、可执行文件都属于此类。(2)目录文件。Linux中把目录也看成文件,这是和DOS/Windows不太相同的地方。目录可以包含下一级目录和普通文件。(3)链接文件。我们在第2章已经介绍了链接,有软链接和硬链接之分。链接的一个好处是不占用过多的磁盘空间。LinuxLinux操作系统操作系统 (4)设备文件。Linux中把系统中的设备也当成文件,用户可以像访问普通文件一样来访问系统中的设备,并且所有设备文件都放在/dev目录下。设备文件可以分为块设备和字符设备两类。例如,打印机是字符设备,磁盘是块设备。把设备当成

305、文件的好处是使得Linux系统能够保证设备的独立性。计算机外设不断更新,但是操作系统不可能为了刚出现的设备文件而经常修改。当需要增加新的设备时,只需要在内核添加必要的设备驱动程序就可以了。这样一来,使用不同外设时内核就可以用完全一样的方式来进行处理。LinuxLinux操作系统操作系统 设备文件中有一特殊的文件是/dev/null,称为空设备。它是一个类似“黑洞”的设备,所有放入该设备的东西将不复存在,例如:rootredflag/root#mvtest.zip/dev/null该命令执行的结果是test.zip文件永远被删除了。LinuxLinux操作系统操作系统 还有一种很特殊的文件是管道

306、文件,它主要用于在进程间传递信息,是一个先进先出(FIFO)的缓冲区,管道文件类似我们日常生活中的管道,一端进入的是某个进程的输出,另一端输出的是另一个进程的输入。例如:rootredflag/root#cat/etc/passwd|more该命令使用了管道“|”,命令cat/etc/passwd的输出是管道的输入,经过管道后,成为了命令more的输入。LinuxLinux操作系统操作系统 使用命令“lsl”可以显示文件的类别,每个输出行中的第一个字符表示的就是文件的类别,例如,“b”代表块设备,“p”代表管道文件,“c”代表字符设备,“d”代表目录文件。LinuxLinux操作系统操作系统

307、6.1.4Linux系统的目录结构Linux系统中,目录是一个层次(或树状结构),根是所有目录的起始点,根目录下主要有以下子目录。/bin:包含二进制文件,即可执行程序,这些程序是系统必需的文件。/sbin:也用于存储二进制文件,但不同的是它们不给普通用户使用,只有超级用户root可以使用。LinuxLinux操作系统操作系统 /etc:用于存放Linux系统的配置文件,该目录的文件相当重要,例如:passwd、host、fstab、inittab等等,我们将在不同的章节使用到这个目录下的文件。/boot:Linux系统引导时加载器使用的文件,系统中非常重要的内核vmlinux就是放在该目录下

308、。/dev:存放设备文件,用户可以通过这些文件访问外部设备。/lib:存放根文件系统中的程序运行所需要的库文件。LinuxLinux操作系统操作系统 /temp:存放各种临时文件。/mnt:管理员临时安装文件系统的安装点,下面有几个意义明确的子目录,如软盘、光驱等。如下:drwxrwxr-x2rootroot4810月91998cdromdrwxrwxr-x2rootroot482月61996floppyLinuxLinux操作系统操作系统 /root:超级用户的个人主目录。/usr:该目录占用的空间一般比较大,用于安装各种应用程序。/proc:是一个虚拟的目录,存放当前内存的映像,该文件系统

309、由内核自动产生。/var:存放一些会随时改变的文件。例如,spool目录、其他的暂存文件。/opt:是放置额外安装的应用程序包的地方。LinuxLinux操作系统操作系统 6.2创建文件系统要在硬盘创建文件系统,首先要进行硬盘分区。硬盘分区有很多的工具,如:Fdisk、Cfdisk等,用得最多的还是Fdisk。LinuxLinux操作系统操作系统 6.2.1Fdisk的使用的使用1.fdisk-l显示所有分区的信息【实例6.2】Disk/dev/hda:255heads,63sectors,2482cylindersUnits=cylindersof16065*512bytesLinuxLin

310、ux操作系统操作系统 DeviceBoot Start EndBlocksIdSystem/dev/hda1*1 383307641683Linux/dev/hda238444751408082Linuxswap/dev/hda3448486313267+83LinuxLinuxLinux操作系统操作系统 以上显示了惟一的一个磁盘/dev/hda的参数和分区情况,磁盘有255个磁头,2482个柱面,每柱面63个扇区,第四行起是分区的情况,依次是分区名、是否是启动分区、起始柱面、终止柱面、分区的总块数、分区ID(分区类型的数字值)、分区的类型。如/dev/hda1分区是启动分区(带“*”号),起

311、始柱面是1,终止柱面是383,分区大小是3076416块(每块的大小是1024字节,即总共300MB左右的空间)。每柱面的扇区数等于磁头数乘以每柱面扇区数,每两个扇区为一块,因此分区的块数等于分区占用的总柱面数乘以磁头数,再乘以每柱面扇区数后除以二。例如:/dev/hda2的总块数=6425563/2=514080LinuxLinux操作系统操作系统 2.fdisk驱动器名创建磁盘分区【实例6.3】rootredflag/root#fdisk/dev/hdaThenumberofcylindersforthisdiskissetto2482.Thereisnothingwrongwiththa

312、t,butthisislargerthan1024,andcouldincertainsetupscauseproblemswith:1)softwarethatrunsatboottime(e.g.,oldversionsofLILO)2)bootingandpartitioningsoftwarefromotherOSs(e.g.,DOSFDISK,OS/2FDISK)Command(mforhelp):mLinuxLinux操作系统操作系统 使用“m”可以获得如下帮助:Commandactiona toggleabootableflagb editbsddisklabelc toggle

313、thedoscompatibilityflagd deleteapartitionl listknownpartitiontypesmprintthismenun addanewpartitiono createanewemptyDOSpartitiontablep printthepartitiontableLinuxLinux操作系统操作系统 q quitwithoutsavingchangess createanewemptySundisklabelt changeapartitionssystemidu changedisplay/entryunitsv verifythepartit

314、iontablewwritetabletodiskandexitx extrafunctionality(expertsonly)LinuxLinux操作系统操作系统 其中常用的命令有:a:切换分区的启动标志。d:删除分区。l:显示已知的分区类型。m:显示命令的帮助。n:添加新的分区。p:显示当前硬盘的分区情况。q:退出并且不保存分区的结果。t:改变分区的类型。w:保存分区的结果并退出。LinuxLinux操作系统操作系统 Command(mforhelp):l0Empty1bHiddenWin95FA63GNUHURDorSysb7BSDIfs1FAT121cHiddenWin95FA64N

315、ovellNetwareb8BSDIswap2XENIXroot1eHiddenWin95FA65NovellNetwarec1DRDOS/sec(FAT-3XENIXusr24NECDOS70DiskSecureMultc4DRDOS/sec(FAT-4FAT1632M39Plan975PC/IXc6DRDOS/sec(FAT-5Extended3cPartitionMagic80OldMinixc7Syrinx6FAT1640Venix8028681Minix/oldLindaNon-FSdataLinuxLinux操作系统操作系统 7HPFS/NTFS41PPCPRePBoot82Lin

316、uxswapdbCP/M/CTOS/.8AIX42SFS83LinuxdeDellUtility9AIXbootable4dQNX4.x84OS/2hiddenC:e1DOSaccessaOS/2BootManag4eQNX4.x2ndpart85Linuxextendede3DOSR/ObWin95FAT324fQNX4.x3rdpart86NTFSvolumesete4SpeedStorcWin95FAT32(LB50OnTrackDM87NTFSvolumesetebBeOSfseWin95FAT16(LB51OnTrackDM6Aux8eLinuxLVMeeEFIGPTfWin95Ex

317、td(LB52CP/M93AmoebaefEFI(FAT-12/16/10OPUS53OnTrackDM6Aux94AmoebaBBTf1SpeedStor11HiddenFAT1254OnTrackDM69fBSD/OSf4SpeedStor12Compaqdiagnost55EZ-Drivea0IBMThinkpadhif2DOSsecondary14HiddenFAT16bad再用mkfs命令建立文件系统:rootredflag/root#mkfs-text2-lbad/dev/fd0mke2fs1.27(8-Mar-2002)label=OStype:LinuxLinuxLinux操作

318、系统操作系统 Blocksize=1024(log=0)Fragmentsize=1024(log=0)184inodes,1440blocks72blocks(5.00%)reservedforthesuperuserFirstdatablock=11blockgroup8192blockspergroup,8192fragmentspergroupLinuxLinux操作系统操作系统 184inodespergroupWritinginodetables:doneWritingsuperblocksandaccountinginformation:doneThiswillbeautomat

319、icallycheckedevery26mountsor180 days, whichever comes first. Use tune2fs -c or -i tooverride.LinuxLinux操作系统操作系统 6.2.3交换分区交换分区如果在Linux运行时物理内存不够,Linux会把内存的数据先写到磁盘上,当需要数据时再读回到物理内存中,这个过程就叫交换,而用于交换的磁盘空间就叫交换空间。这些技术和Windows的虚拟内存技术类似,但Linux支持两种形式的交换空间:独立的磁盘交换分区和交换文件。LinuxLinux操作系统操作系统 独立的磁盘交换分区是专门分出一个磁盘分区用于

320、交换,而交换文件则是创建一个文件用于交换。使用交换分区比使用交换文件效率要高,因为独立的交换分区保证了磁盘块的连续,Linux系统读写数据的速度较快。交换空间的大小一般是物理内存的1.52倍。如果内存是256MB,则交换空间大小为500MB左右较为合适。LinuxLinux操作系统操作系统 1.交换分区的建立和激活交换分区的建立和其他分区的建立没有太大的差别,惟一不同是用fdisk命令建立分区时要使用“t”命令把分区类型改成82(LinuxSwap),如下的/dev/hda4是新建的交换分区。rootredflag/root#fdisk-lDisk/dev/hda:255heads,63sec

321、tors,2482cylindersLinuxLinux操作系统操作系统 Units=cylindersof16065*512bytesDeviceBootStartEndBlocksIdSystem/dev/hda1* 1383307641683Linux/dev/hda2384447 51408082Linuxswap/dev/hda344845456227+83Linux/dev/hda4455467104422+82LinuxswapLinuxLinux操作系统操作系统 Linux系统下可以有多个交换分区。创建好交换分区后,要使用mkswap命令“格式化”分区。rootredflag/

322、root#mks/dev/hda4Settingupsversion1,size=106921984bytes最后还要激活交换分区:rootredflag/root#swapon/dev/hda4LinuxLinux操作系统操作系统 以上命令是手工激活的方法,但交换分区通常是在系统启动时就自动激活,自动激活可以在/etc/fstab文件中配置(见下节介绍)。关闭交换分区的命令为:rootredflag/root#s/dev/hda4LinuxLinux操作系统操作系统 2.交换文件的建立和激活交换文件一般用在临时增加交换空间的情形。对交换文件的要求是不能有空洞,即文件要占据一片连续的物理空间。

323、建立交换文件和激活的过程如下:LinuxLinux操作系统操作系统 (1)创建一个指定大小的文件。如下:rootredflag/root#ddif=/dev/zeroof=/scount=5000050000+0recordsin50000+0recordsout以上命令在根目录下创建了一个25MB(等于50000块)的交换文件swap。/dev/zero是一个特殊的设备文件,对它的读操作总是返回零值字节。LinuxLinux操作系统操作系统 (2)创建交换文件并修改文件的权限为600。如下:rootredflag/root#mksSettingupsversion1,size=2559590

324、4bytesrootredflag/root#chmod600/swapLinuxLinux操作系统操作系统 (3)激活交换文件。如下:rootredflag/root#swapon/swap同样关闭交换文件的使用,可以使用命令:rootredflag/root#s/swap交换文件关闭后,如果不再继续使用,可以删除。LinuxLinux操作系统操作系统 6.3文件系统的安装和卸载文件系统的安装和卸载Linux文件系统的组织方式和DOS、Windows文件系统的组织方式有很大的差别。Windows把磁盘分区后用不同驱动器名字来命名,如“C:”、“D:”、“E:”等等,我们把它们当成逻辑独立的硬

325、盘来使用,每个逻辑盘有自己的根目录。而Linux系统只有一个总的根目录,或者说只有一个目录树,不同磁盘的不同分区都只是这个目录树的一部分。LinuxLinux操作系统操作系统 在Linux中创建文件后,用户还不能直接使用它,要把文件系统安装(mount)后才能使用。安装文件系统首先要选择一个安装点(mountpoint)。所谓的安装点就是要安装的文件系统的根目录所在的目录。如图6-3和图6-4所示,安装后/home就是第二个文件系统的安装点,因为第二个文件系统的根目录在这一目录下。这样整个文件是由多个文件系统构成的,但对于用户来说整个文件系统却是无缝的,感觉不到是在不同的文件系统工作。文件系统

326、的安装点不同,目录树的结构也会发生变化,如图6-5所示。LinuxLinux操作系统操作系统 图图6-3未安装的两个独立的文件系统未安装的两个独立的文件系统LinuxLinux操作系统操作系统 图6-4安装后的文件系统LinuxLinux操作系统操作系统 图6-5文件系统安装点不同引起目录树结构的不同LinuxLinux操作系统操作系统 6.3.1手工安装和卸载文件系统手工安装和卸载文件系统手工安装文件系统常常用于临时使用文件系统的场合,尤其是软盘和光盘的使用。手工安装文件系统使用mount命令,其格式如下:mount参数设备名安装点参数选项:-a:安装/etc/fstab中的所有设备。-f:

327、不执行真正的安装,只是显示安装过程中的信息。-n:不在/etc/mtab登记此安装。LinuxLinux操作系统操作系统 -r:用户对被安装的文件系统只有读权限。-w:用户对被安装的文件系统有写权限。-t type:指定被安装的文件系统的类型,常用的有:minix、ext、ext2、ext3、msdos、hpfs、nfs、iso9660、vfat、reiserfs、umdos、smbfs。-o:指定安装文件系统的安装选项。LinuxLinux操作系统操作系统 例如:rootredflag/root#mount-text3/dev/hda3/mnt/disk1该命令将/dev/hda3分区的文件

328、系统安装在/mnt/disk1目录下,文件系统的类型是ext3,安装点是/mnt/disk1。安装文件系统时,用户不能处在安装点(即当前目录是安装点),否则安装文件系统后,用户看到的内容仍是没有安装文件系统前安装点目录原来的内容。安装文件系统后,安装点原有的内容会不可见。卸载文件系统后,安装点原有的内容又会可见。LinuxLinux操作系统操作系统 使用mount命令时,mount会试着测试文件系统的类型,因此常常可以不指明文件系统的类型,但mount并非总能成功检测出文件系统的类型,例如:rootredflag/root#mount/dev/hda3/mnt/disk1安装文件系统只能由超级

329、用户root来进行,一般用户不能执行此项操作。对于软盘这样的设备,如果只允许超级用户来使用的话不是很合理,这时可以在/etc/fstab加入相应的行来控制。我们随后介绍/etc/fstab的用法。LinuxLinux操作系统操作系统 如果不打算在一个文件系统上写入任何数据的话,可以使用-r开关。这将停止任何对此文件的写要求,也将停止对i节点的文件存取时间的更改。rootredflag/root#mount-r-tntfs/dev/hdb1/mnt/disk2LinuxLinux操作系统操作系统 以上命令把/dev/hdb1(Windows2000)安装在/mnt/disk2目录下,只是为了在L

330、inux中能够读取Windows2000系统下的数据,但不允许改动,以免影响Windows2000的正常工作。Linux系统会把已经安装的文件系统信息写到/etc/mtab文件中,用不带任何参数的mount命令也可以显示已经安装的文件系统的信息。LinuxLinux操作系统操作系统 【实例6.5】rootredflag/root#mount/dev/hda1on/typereiserfs(rw,notail)noneon/proctypeproc(rw)usbdevfson/proc/bus/usbtypeusbdevfs(rw)noneon/dev/ptstypedevpts(rw,gid=

331、5,mode=620)以上是当前已经安装文件系统的信息。要卸载文件系统则相当简单,使用以下命令:LinuxLinux操作系统操作系统 umount安装点或umount设备名rootredflag/root#umount/mnt/disk1卸载文件系统时,不能有用户正在使用文件系统,例如,用户当前目录是/mnt/disk1,则以上命令会失败。要先切换到别的目录,再执行umount,例如:rootredflag/root#cdrootredflag/root#umount/mnt/disk1LinuxLinux操作系统操作系统 6.3.2文件系统的自动安装文件系统的自动安装我们可以使用mount命

332、令手工安装文件系统,对于用户经常使用的文件系统则最好能让Linux系统在启动时就自动安装好。/etc/fstab文件就是为了解决这个问题的,其格式如下:文件系统安装点文件系统类型安装选项备份频率检查顺序LinuxLinux操作系统操作系统 【实例6.6】rootredflag/root#cat/etc/fstab/dev/hda1/reiserfs defaults,notail11/dev/cdrom/mnt/cdromiso9660noauto,owner,ro00/dev/hda2swapswap defaults00/dev/fd0/mnt/floppyvfatnoauto,owner

333、 00none/procprocdefaults00none/dev/ptsdevpts gid=5,mode=62000LinuxLinux操作系统操作系统 例6.6中第二行文件系统/dev/cdrom安装在/mnt/cdrom目录下,文件系统类型是iso9660,安装选项是“noauto,owner,ro”,不使用dump命令进行备份,系统安装文件系统时不进行检查。文件系统安装选项可以有多个,选项之间用逗号隔开,常用选项有:LinuxLinux操作系统操作系统 defaults:缺省值,等于rw,suid,dev,exec,auto,nouser,async。noauto:系统启动时不自动

334、加载该文件系统。ro:该文件系统只能读。rw:该文件系统可以读写。user:允许普通用户安装该文件系统。noexec:不允许在该文件系统运行程序。LinuxLinux操作系统操作系统 6.4文件系统的维护文件系统的维护6.4.1检查文件系统检查文件系统Linux是一个稳定的操作系统,一般情况下文件系统并不会出现什么问题。如果系统异常断电或不遵守正确的关机步骤,磁盘缓冲的数据没有写入磁盘,文件系统常常会不正常,这时就需要进行文件系统的检查。Linux系统启动时,会自动检查/etc/fstab文件中设定要自动检查的文件系统,就像Windows系统开机时用scandisk检查磁盘一样。我们也可以使用

335、fsck命令手工对文件系统进行检查,fsck命令的格式如下:LinuxLinux操作系统操作系统 fsck参数设备名参数选项:-tfstype:指定文件系统类型。-A:检查/etc/fstab中的所有文件系统。-V:显示fsck执行时的信息。-N:只是显示fsck每一步的工作,而不进行实际操作。-R:和-A同时使用时,跳过根文件系统。LinuxLinux操作系统操作系统 -P:和-A同时使用时,不跳过根文件系统(要注意使用)。-n:检查文件系统时,对要求回答的所有问题,全部回答“no”。-y:检查文件系统时,对要求回答的所有问题,全部回答“yes”。-p:检查文件系统时,不需要确认就执行所有的

336、修复。LinuxLinux操作系统操作系统 fsck检查结束后,会给出如下错误代码(fsck实际的返回值可能是以上代码值的和,表示出现多个错误):0没有发现错误;1文件系统错误已经更正;2系统需要重新启动;4文件系统错误没有更正;8操作错误;16语法错误;128共享库错误。LinuxLinux操作系统操作系统 手工检查文件系统时应在没有安装的文件系统上进行,如果文件系统已经安装,应先把它卸载。fsck命令检查完文件系统后,如果修复了文件系统,应该重新启动Linux系统。通常fsck检查完文件系统会将没有引用的项直接连接到文件系统中的/lost+found这样的特定目录下,用户可以从这里找回丢失

337、的数据,但这不是一件容易的事。LinuxLinux操作系统操作系统 【实例6.7】rootredflag/root#umount/dev/hda3rootredflag/root#fsck-V-text3/dev/hda3fsck1.27(8-Mar-2002)/sbin/fsck.ext3(1)-/dev/hda3fsck.ext3/dev/hda3e2fsck1.27(8-Mar-2002)/dev/hda3:clean,11/14056files,5907/56227blocks以上命令检查了/dev/hda3上的文件系统。LinuxLinux操作系统操作系统 检查文件系统所需的时间与文

338、件系统的大小和类型有很大关系。ext2类型文件系统在检查时要检查整个文件系统,往往要几分钟到几十分钟时间。而reiserfs和ext3类型文件系统所需的时间要短得多。LinuxLinux操作系统操作系统 6.4.2磁盘坏块的检查磁盘坏块的检查在磁盘进行分区之后,创建文件系统之前,最好能够使用badblocks命令检查磁盘上的坏块。创建文件系统时可以利用坏块检查结果来跳过坏块,避免数据保存到磁盘坏块上。坏块检查命令badblocks的格式如下:badblocks参数设备名块数LinuxLinux操作系统操作系统 参数选项:-o:将坏块情况输出到文件。-s:显示已经检查过的磁盘块数。-w:使用写模

339、式。LinuxLinux操作系统操作系统 例如:rootredflag/root#badblocks-obad/dev/fd01440以上命令检查软盘,软盘的块数是1440(即1440KB),坏块结果输出到文件bad中。rootredflag/root#badblocks-s/dev/hda3Checkingforbadblocks(read-onlytest):done以上命令检查/dev/hda3的坏块情况,并显示检查的进度。LinuxLinux操作系统操作系统 6.4.3其他常用的文件系统管理命令其他常用的文件系统管理命令1.du参数目录名统计目录使用磁盘空间的情况参数选项:-a:显示所

340、有文件的统计数,而不仅仅是目录的统计数。-s:只显示磁盘的总体使用情况。-b:以字节为单位显示信息,缺省时是块(1024字节)。例如:rootredflag/root#du-b/root以上命令统计/root下各个子目录的大小(以字节显示)。LinuxLinux操作系统操作系统 2.df统计未使用磁盘空间例如:rootredflag/root#df 1k-blocksUsedAvailableUse%Mountedon/dev/hda130763161003628 2072688 33%/dev/hda3544474127475098%/mnt/disk1以上命令统计的是当前系统已经安装的文件

341、系统。LinuxLinux操作系统操作系统 3.dd转换和拷贝文件dd命令可以用来产生交换文件,也常常用来制作软盘的映像文件。制作软盘映像并不需要建立文件系统。ddif=输入文件名of=输出文件名count=块数例如:root redflag /root#dd if=/dev/fd0 of=floppy-imagecount=14401440+0recordsin1440+0recordsoutLinuxLinux操作系统操作系统 以上命令从软盘产生一个映像文件floppy-image。更换软盘后使用以下命令,把产生的映像文件写入到新的软盘:rootredflag/root#ddif=flop

342、py-imageof=/dev/fd0count=14401440+0recordsin1440+0recordsoutLinuxLinux操作系统操作系统 习习题题1.Linux下不同文件系统如何形成一个无缝的目录?2.要使用硬盘上的某一空闲空间一般要经过什么步骤?使用什么命令?3./etc/fstab文件中有如下一行:/dev/hda1/reiserfsdefaults,notail11请解析各个字段的含义。LinuxLinux操作系统操作系统 第第7章章Shell编程编程7.1Shell的基本概念的基本概念7.2Shell语法语法7.3正则表达式正则表达式7.4Shell编程综合实例编程

343、综合实例习题习题LinuxLinux操作系统操作系统 7.1Shell的基本概念的基本概念7.1.1Shell的概念的概念Shell是一个命令语言解释器,它拥有自己内建的Shell命令集,Shell也能被系统中其他应用程序调用。用户在提示符下输入的命令都由Shell解释后传给Linux核心。Shell、用户及Linux操作系统内核之间关系如图7-1所示。LinuxLinux操作系统操作系统 图图7-1Shell、用户及、用户及Linux操作系统内核之间关系操作系统内核之间关系LinuxLinux操作系统操作系统 有一些命令(比如改变工作目录命令cd)是包含在Shell内部的。还有一些命令(例如

344、拷贝命令cp和移动命令rm)是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在Shell内部还是一个单独的程序。LinuxLinux操作系统操作系统 Shell接到用户输入的命令后首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后,Shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部

345、命令或应用程序将被分解为系统调用并传给Linux内核。Shell对命令的解释过程如图7-2所示。LinuxLinux操作系统操作系统 Shell的另一个重要特性是它自身就是一个解释型的程序设计语言。Shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。Shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个执行的Shell程序中。LinuxLinux操作系统操作系统 图7-2Shell对命令的解释过程LinuxLinux操作系统操作系统 当普通用户成功登录后,系统将执行一个称为Shell的程序。正是Shell进程提供了命令行提示符。作为默认

346、值,对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。一旦出现了Shell提示符,就可以键入命令名称及命令所需要的参数。Shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以在键盘上按【Ctrl-d】发出中断信号来中断它(在正常结束之前,中止它的执行)。LinuxLinux操作系统操作系统 当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按【Ctrl-d】实现),结束登录。下面的例子显示了Shell如何来工作:rootredflag/root#cal32003LinuxLinux操作系统操作

347、系统 三月2003日一二三四五六12345678910111213141516171819202122232425262728293031rootredflag/root#LinuxLinux操作系统操作系统 另外,用户键入有关命令后,如果Shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:rootredflag/root#mytestbash:mytest:commandnotfound此时可以看到,用户得到了一个没有找到该命令的错误信息,这样的错误信息一般出现在用户输入错误命令时。LinuxLinux操作系统操作系统 7.1.2Shell的种类的种类Linux

348、中的Shell有多种类型,其中最常见的是BourneShell(sh)、CShell(csh)和KornShell(ksh)。三种Shell各有优缺点。BourneShell是Unix最初始的Shell,并且在每种Unix上都可以使用。BourneShell在Shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种Shell。Bash(BourneAgainShell)是BourneShell的扩展,与BourneShell完全向下兼容,并且增加了许多特性。它还包含了很多CShell和KornShell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。LinuxLinux

349、操作系统操作系统 CShell是一种比BourneShell更适于编程的Shell,它的语法与C语言很相似。Linux为喜欢使用CShell的人员提供了Tcsh。Tcsh是CShell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写矫正、历史命令替换、作业控制和类似C语言的语法,它提供比BourneShell更多的提示符参数。KornShell集合了CShell和BourneShell的优点并且和BourneShell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。LinuxLinux操作系统操作系统 Bash

350、是大多数Linux系统(包括红旗Linux系统)的默认Shell。Bash有以下的优点:(1)补全命令。当你在Bash命令提示符下输入命令或程序名时,你不必输全命令或程序名,按【Tab】键,Bash将自动补全命令或程序名。(2)通配符。在Bash下可以使用通配符“*”和“?”。“*”可以替代多个字符,而“?”则替代一个字符。LinuxLinux操作系统操作系统 (3)历史命令。Bash能自动跟踪用户每次输入的命令,并把输入的命令保存在历史列表缓冲区。缓冲区的大小由HISTSIZE变量控制。当用户每次登录后,home目录下的“.bash_history”文件将初始化历史列表缓冲区。也能通过his

351、tory和fc命令执行、编辑历史命令。(4)别名。在Bash下,可用alias和unalias命令给命令或可执行程序起别名和清除别名,这样就可以用自己习惯的方式输入命令。LinuxLinux操作系统操作系统 (5)输入/输出重定向。输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是“”。LinuxLinux操作系统操作系统 【实例7.1】输入重定向:rootredflag/root#wcdir.out上面命令将ls命令的输出保存为文件dir.out。rootredflag/root#lsdir1.

352、outLinuxLinux操作系统操作系统 “”表示要将一条命令的输出结果追加到文件dir1.out的后面,该文件的原有内容不被破坏,如果使用“”,则文件原有内容被覆盖。(6)管道。管道用于将一系列的命令连接起来,也就是把前面命令的输出作为后面命令的输入。管道的命令是“|”。LinuxLinux操作系统操作系统 【实例7.2】rootredflag/root#catdir.out|greptest|wcl管道将cat命令(列出一个文件的内容)的输出送给grep命令,grep命令在输入里查找单词test,grep的输出则是所有包含单词test的行,这个输出又被送给wc命令,wc命令统计出输入中的

353、行数。假设dir.out的内容如下:LinuxLinux操作系统操作系统 Thisisatest.TodayisMonday.Eveybodyishere.Weshouldhaveatest.Thefinaltestisover.那么该管道运行的结果应该是3。LinuxLinux操作系统操作系统 (7)提示符。Bash有两级提示符。第一级提示符就是登录Shell时见到的,默认为“$”。可以通过重新给PS1变量赋值来改变第一级提示符。当Bash需要进一步提示以便补全命令时,它会显示第二级提示符。第二级提示符默认为“”,可以通过重新给PS2变量赋值来改变第二级提示符。一些特殊意义的字符也可以加入提

354、示符赋值中。LinuxLinux操作系统操作系统 (8)作业控制。作业控制是指在一个作业执行过程中,控制执行的状态。可以挂起一个正在执行的进程,并在以后恢复执行该进程。按下【Ctrl-z】组合键,挂起正在执行的进程,用bg命令使进程恢复在后台执行,用fg命令使进程恢复在前台执行。【技巧】如何查看用户登录系统时默认使用的Shell?LinuxLinux操作系统操作系统 最简单的方式是执行echo命令,查询系统环境变量的值:rootredflag/root#echo$SHELL/bin/bash执行finger命令查看用户数据,也能看到用户默认的Shell:rootredflag/root#fin

355、gerlrootLogin:rootName:rootDirectory:/rootShell:/bin/bashLinuxLinux操作系统操作系统 OnsinceFriMar708:14(EST)ontty120minutes24secondsidleOnsinceFriMar708:17(EST)ontty216minutesidleOnsinceFriMar708:14(EST)onpts/020minutes6secondsidleOnsinceFriMar708:19(EST)onpts/1from:0.0Nomail.Plan:listening.LinuxLinux操作系统操作

356、系统 查看/etc/passwd文件,注意用“:”分隔的最后一列,就是该用户的默认的Shell,该文件的内容如下:root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:daemon:x:2:2:daemon:/sbin:adm:x:3:4:adm:/var/adm:lp:x:4:7:lp:/var/spool/lpd:rpcuser:x:29:29:RPCServiceUser:/var/lib/nfs:/bin/falsetest:x:500:500:/home/test:/bin/bashLinuxLinux操作系统操作系统 7.1.3创建及执

357、行创建及执行Shell脚本脚本1.创建Shell脚本文件Shell脚本是指使用用户环境Shell提供的语法所编写的脚本。如果你经常用到相同执行顺序的操作命令,便可以将这些命令写成脚本文件,这样以后要做同样的事情时,只要在命令行输入其文件名即可。本节会以一个简单的实例,来介绍如何创建与执行Shell脚本。LinuxLinux操作系统操作系统 【实例7.3】该实例会显示当前的日期时间、执行路径、用户账号及所在的目录位置。在文本编辑器中输入下列内容,并存为showinfo:#!/bin/bash#Thisscriptisatest!echonDateandtimeis:dateLinuxLinux操

358、作系统操作系统 echonTheExecutablepathis:$PATHechoYournameis:whoamiechonYourCurrentdirectoryis:pwd#endLinuxLinux操作系统操作系统 2.执行Shell脚本编辑脚本之后,如何来运行呢?一般有四种方法,下面来分别介绍。(1)将脚本的权限设置为可执行,这样就可以在Shell的提示符下直接执行。可以使用chmod命令更改Shell脚本的权限:chmodu+xshowinfochmodu+x,g+xshowinfochmoda+xshowinfoLinuxLinux操作系统操作系统 其中第一行是将用户自己的权限

359、设置为可执行,第二行是将用户自己和同组的权限设置为可执行,第三行将所有人的权限设置为可执行,包括用户自己、同组用户和其他用户。那么如何指定使用哪一个Shell来解释执行脚本呢?如果Shell脚本的第一个非空白字符不是“#”,则它会使用BourneShell。如果Shell脚本的第一个非空白字符是“#”,但不是以“#!”开头时,则它会使用CShell。LinuxLinux操作系统操作系统 如果Shell脚本以“#!”开头,则“#!”后面所跟的字符串就是所使用Shell的绝对路径名。BourneShell的路径名称为/bin/sh,而CShell则为/bin/csh。(2)执行Shell脚本想要执

360、行的Shell,其后跟随Shell脚本的文件名作为命令行参数。例如,使用tcsh执行上面的Shell脚本:tcshshowinfo此命令启动一个新的Shell,并令其执行showinfo文件。LinuxLinux操作系统操作系统 (3)在pdksh和Bash下使用“.”命令,或在tcsh下使用source命令。例如,在pdksh和Bash下执行上面的Shell脚本:.showinfo或在tcsh下执行上面的Shell脚本:sourceshowinfoLinuxLinux操作系统操作系统 (4)使用命令替换。这是一个相当有用的方法,如果想要使某个命令的输出成为另一个命令的参数时,就可以使用这个方

361、法。将命令列于两个“”号之间,而Shell会以这个命令执行后的输出结果代替这个命令以及两个“”符号。例如:str=Currentdirectoryispwdecho$str结果如下:Currentdirectoryis/rootLinuxLinux操作系统操作系统 在上面的例子中,pwd这个命令输出/root,而后整个字符串代替原来的pwd,所以str变量的内容则会包括pwd命令的输出。需要注意的是命令替换方式,灵活运用这种方式,我们可以将一系列小工具装配成一个强大的工具,用来解决复杂的问题。LinuxLinux操作系统操作系统 7.2Shell语语法法7.2.1Shell变量变量所谓变量,就

362、是可存放数据的识别符。例如,x=10,x是个变量名,而10则为存放的数据。在pdksh和Bash中,给变量赋值的方法是一样的,即在变量名后紧跟着等号和变量值。例如,要把变量10赋给变量a,则使用下面的命令:a=10LinuxLinux操作系统操作系统 在tcsh中,可以使用如下的命令:seta=10给字符串赋值的方法与给整数赋值的方法相同。例如:str=name为了读取变量的值,需要使用“$”符号。例如,用如下的命令将a变量的值输出到屏幕上:echo$a除了自定义的变量外,还有一些系统默认的特殊变量,这些变量也是常常应用在脚本程序中的,这些常用的变量如表7-1所示。LinuxLinux操作系统

363、操作系统 表7-1常用的变量变量功能HOME用户的主目录PATH执行命令时所搜索的目录TZ时区MAILCHECK检查新邮件的时间间隔PS1在Shell命令行的提示符PS2在命令尚未输入完时,Shell要求再输入的提示符MANPATHman指令的搜索路径TERM终端的类型LinuxLinux操作系统操作系统 要想查看变量的值,用echo命令即可。表7-1介绍的变量是系统默认的变量,还有一些变量是在执行Shell程序时系统给设置好的,并且不能加以修改,这些变量也是相当有用的,如表7-2所示。LinuxLinux操作系统操作系统 表7-2系统设置好的变量变量功能#存储Shell程序中命令行参数的个数

364、?存储上一个执行命令的返回值0存储Shell程序的程序名*存储Shell程序的所有参数存储所有命令行输入的参数$存储Shell程序的PID!存储上一个后台执行命令的PIDLinuxLinux操作系统操作系统 【实例7.4】下面的程序会显示所有参数及其总数,将其存为showarg文件,源代码如下:#!/bin/bashechoAllargumentlist:$/存储所有命令行输入的参数echoThetotalnumberofargumentis:$#/存储Shell程序中命令行参数的个数#endLinuxLinux操作系统操作系统 存盘后执行chmoda+xshowargrootredflag/

365、root#./showargredflaglinux/输入三个参数Allargumentlist:redflaglinux/显示参数Thetotalnumberofargumentis:3/显示参数的个数LinuxLinux操作系统操作系统 7.2.2数值运算数值运算如果需要处理数值运算,可以使用expr命令,下面列出可以使用的数值运算符及其用法:exprexpressionLinuxLinux操作系统操作系统 【实例7.5】用Shell编程计算2*(3+4)的值。程序的源代码如下:#!/bin/bashsum=expr2*(3+4)echoThesumis$sum#endLinuxLinux

366、操作系统操作系统 7.2.3条件命令条件命令1.条件测试在Bash和pdksh环境中,测试条件表达式只能通过使用test命令来完成。test命令的用法如下:testexpression或expressionLinuxLinux操作系统操作系统 【实例7.6】rootredflag/root#test8=8/测试字符串8等于8rootredflag/root#echo$?/显示其返回值,变量$存储上一个执行命令返回值0/其值为真,返回0rootredflag/root#test8=9/测试字符串8等于9rootredflag/root#echo$?LinuxLinux操作系统操作系统 1/其值为

367、真,返回0rootredflag/root#8=8/省略“test”,改用中括号,作用完全一样rootredflag/root#echo$?0rootredflag/root#8=9/省略“test”,改用中括号,作用完全一样rootredflag/root#echo$?1LinuxLinux操作系统操作系统 test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:整数运算符、字符串运算符、文件运算符和逻辑运算符。在不同的Shell环境中,条件表达式的语法有些不同,本书主要介绍Bash、pdksh和tcsh,其中Bash和pdksh的语法相同。下面分别介绍。首先,在Bash和pdks

368、h环境中:LinuxLinux操作系统操作系统 (1)数值运算符:用来判断数值表达式的真假。可用的运算符如下:int1-eqint2如果int1=int2,则为真。int1-geint2如果int1=int2,则为真。int1-gtint2如果int1int2,则为真。int1-leint2如果int1=int2,则为真。int1-ltint2如果int1int2,则为真。int1-neint2如果int1!=int2,则为真。LinuxLinux操作系统操作系统 【实例7.7】rootredflag/root#text-gtabc/测试整数text是否大于abc:text:integerex

369、pressionexpected/数据类型错误rootredflag/root#100-gt200/100大于200吗?rootredflag/root#echo$? /显示其返回值1 /其值为假,返回1LinuxLinux操作系统操作系统 (2)字符串运算符:用来判断字符串表达式的真假。可用的运算符如下:str1=str2 如果str1和str2相同,则为真。str1!=str2如果str1和str2不相同,则为真。str如果str不为空,则为真。-nstr如果str的长度大于零,则为真。-zstr如果str的长度等于零,则为真。LinuxLinux操作系统操作系统 【实例7.8】rootr

370、edflag/root#text=TEXT/测试字符串text是否等于TEXTrootredflag/root#echo$?/显示其返回值1/其值为假,返回1(区分大小写)rootredflag/root#$PWD/测试环境变量PWD是否有值rootredflag/root#echo$?0/其值为真,返回0LinuxLinux操作系统操作系统 (3)文件运算符:用来判断文件是否存在、文件类型及属性。可用的运算符如下:-d 如果为目录,则为真。-f 如果为普通的文件,则为真。-r 如果为只读,则为真。-s 如果的长度大于零,则为真。-w如果为可写,则为真。-x 如果为可执行,则为真。LinuxL

371、inux操作系统操作系统 【实例7.9】rootredflag/root#-d/etc/判断/etc是否为目录rootredflag/root#echo$?/显示其返回值0 /其值为真,返回0rootredflag/root#-w/etc/判断root对目录/etc是否有写的权限rootredflag/root#echo$?/显示其返回值0/其值为真,返回0,有写的权限LinuxLinux操作系统操作系统 (4)逻辑运算符:用来结合表达式或取得表达式相反值。可用的运算符如下:!expr 如果expr为假,则返回真。expr1-aexpr2如果expr1和expr2同时为真,则返回真。expr1

372、-oexpr2如果expr1或expr2有一个为真,则返回真。LinuxLinux操作系统操作系统 【实例7.10】rootredflag/root#-ffile1awfile1/file1存在且具有可写的权限rootredflag/root#echo$?/显示其返回值0/其值为真,返回0其次,对于tcsh来说,它的语法更接近于C语言,所支持的表达式运算符也分为整数运算符、字符串运算符、文件运算符和逻辑运算符四类。LinuxLinux操作系统操作系统 (1)数值运算符:用来判断数值表达式的真假。可用的运算符如下:int1=int2如果int1=int2如果int1=int2,则为真。int1i

373、nt2如果int1int2,则为真。int1int2如果int1int2,则为真。LinuxLinux操作系统操作系统 (2)字符串运算符:用来判断字符串表达式的真假。可用的运算符如下:str1=str2如果str1和str2相同,则为真。str1!=str2如果str1和str2不相同,则为真。LinuxLinux操作系统操作系统 (3)文件运算符:用来判断文件是否存在、文件类型及属性。可用的运算符如下:-r如果为只读,则为真。-w 如果为可写,则为真。-x如果为可执行,则为真。-e如果存在,则为真。-o如果当前用户拥有,则为真。-z如果的长度为零,则为真。-f如果为普通的文件,则为真。-d

374、如果为目录,则为真。LinuxLinux操作系统操作系统 (4)逻辑运算符:用来结合表达式或取得表达式相反值。可用的运算符如下:!expr如果expr为假,则返回真。expr1&expr2如果expr1和expr2同时为真,则返回真。expr1|expr2如果expr1或expr2有一个为真,则返回真。LinuxLinux操作系统操作系统 2.条件语句1)if语句if语句可根据表达式的值是真或假来决定要执行的程序段落,其语法如下:ifexpressionl/若expressionl为真thencommands/则执行这些命令elifexpression2/否则若expression2为真Lin

375、uxLinux操作系统操作系统 thencommands/则执行这些命令else/若以上的表达式都不成立commands/则执行这些命令fi/结束if语句LinuxLinux操作系统操作系统 fi是if语句的结束符(刚好是if倒过来),必须与if成对出现,而elif及else子句可有可无。elif是elseif的简写,当if的表达式不成立时,才会接着测试elif的表达式。如果if及elif的测试条件都不成立,最后才会执行else子句内的命令。一个if可以有好几个elif子句,但只能有一个else子句。LinuxLinux操作系统操作系统 【实例7.11】此实例将显示目录内是否有example_

376、if文件,源代码如下:#!/bin/bash#Thisisexample1aboutif.if-fexample_if /判断文件是否存在thenechoThereisaexample_ifcurrentdirectory.elseechonoexample_ifcurrentdirectory.fi#endLinuxLinux操作系统操作系统 【实例7.12】此实例在键盘上读取一个字符,然后根据字符的值来判断。#!/bin/bash#Thisisexample2aboutif.echonPleaseinputtheanswer: /-n不换行readI/从键盘读入if$I=ythenLinu

377、xLinux操作系统操作系统 echoTheanswerisrightelif$I=nthenechoTheansweriswrongelseechoBadInput.fi#endLinuxLinux操作系统操作系统 【技巧】如何从键盘一次读入多个变量?用语句readvar1var2变量之间用空格隔开。例如:readnamegender/读入两个变量echo$nameecho$gender假如在键盘输入linuxman,则上边的语句执行的结果为:linux/变量name的值man/变量gender的值如果输入文本过长,Shell将所有的超长的部分赋给最后一个变量。LinuxLinux操作系统操

378、作系统 2)case语句case语句用来从很多的测试条件中选择符合的条件执行。其语法如下:casestringin/测试string字符串str1)/若str1符合commands;/则执行这些命令LinuxLinux操作系统操作系统 str2)commands;*)/若str1和str2都不符合commands;/则执行这些命令esac /结束case语句LinuxLinux操作系统操作系统 case语句适用于字符串的比较,其测试条件可用通配符。双分号(;)为测试条件的结束,在每一个测试条件成立后,一直到双分号之前的命令,都会被Shell执行。使用通配符作为测试条件时,不要在字符串左右加上双

379、引号,因为这样会使字符串无法正确匹配。由于所有字符串都可以与通配符“*”匹配,因此“*”之后的命令可以视为case语句默认的执行命令。LinuxLinux操作系统操作系统 【实例7.13】此实例检查命令行的第一个参数是否为“-i”或“-e”,如果是“-i”,则计算由第二个参数指定的文件中以i开头的行数;如果是“-e”,则计算由第二个参数指定的文件中以e开头的行数。如果第一个参数既不是“-i”也不是“-e”,则在屏幕上显示一条错误的信息。该实例源代码如下:LinuxLinux操作系统操作系统 #!/bin/bash#Thisisexample1aboutcase.case$1in/$1是命令行第

380、一个参数-i)count=grepi$2|wcl/查找并计算以i开头的行数,“”是反引号echoThenumberoflinesin$2thatstartwithaniis$count.;LinuxLinux操作系统操作系统 -e)count=grepe$2|wclechoThenumberoflinesin$2thatstartwithaneis$count.;*) /默认匹配echoThatoptionisnotrecognized.;esac/和case成对出现#endLinuxLinux操作系统操作系统 将其存为case_1,然后执行chmoda+xcase_1。执行程序case_1:

381、rootredflag/root#./case_1ifile1Thenumberoflinesinfile1thatstartwithaniis8.LinuxLinux操作系统操作系统 【实例7.14】此实例使用case语句建立一个菜单,这也是case最为常见的一种应用。该实例源代码如下:#!/bin/bash#displayamenuecho-echo1RestoreLinuxLinux操作系统操作系统 echo2Backupecho3Upload/前四行显示一个菜单echo#readandexecutetheusersselectionecho-nEnterChoice:readCHOIC

382、E /读取键盘输入case$CHOICEin1|R)echo1Restore;/如果输入是1或者是R,则显示RestoreLinuxLinux操作系统操作系统 2|B)echo2Backup;3|U)echo3Upload;*)echosorry$CHOICEisnotavalidchoice!/默认匹配exit1/退出程序esac#endLinuxLinux操作系统操作系统 7.2.4循环命令循环命令Shell中提供了几种执行循环的命令,比较常见的命令有for、while、until、shift命令。下面分别介绍。1.forfor语句有两种语法。LinuxLinux操作系统操作系统 第一种:

383、forvarinlistdo /对list中的每一个元素commands/执行这些操作done/循环语句结束LinuxLinux操作系统操作系统 在使用此形式时,对在list中的每一项,for语句都执行一次。List可以是包括几个单词并且有空格分隔开的变量,也可以是直接输入的几个值。每执行一次循环,var都被赋予list中的当前值,直到最后一个为止。for语句的in子句和case的子句相同,都可以使用通配符。LinuxLinux操作系统操作系统 第二种:forvardostatements/对每一个命令行参数执行这些操作done/循环语句结束LinuxLinux操作系统操作系统 使用这种形式时

384、,对变量var中的每一项,for语句都执行一次。此时Shell程序假定var包含Shell程序在命令行的所有位置参数。一般情况下,此种方式也可以写成:forvarin$dostatementsdoneLinuxLinux操作系统操作系统 【实例7.15】该实例是for语句的in子句使用通配符的例子,它的功能是显示当前目录下所有文本文件(*.txt)的名称和内容,该程序源代码如下:#!/bin/bash#Thisisexample1aboutfor.for*.txt/对目录下的每个txt文件doLinuxLinux操作系统操作系统 echo-echo$file/显示文件名echo-cat$fil

385、e/显示文件内容done#endLinuxLinux操作系统操作系统 【实例7.16】此程序可以以任何数目的文本文件作为命令行参数。它读取每一个文件,把其中的内容转换成大写字母,然后将结果存在以“.caps”作为扩展名的同样名字的文件中,该程序源代码如下:LinuxLinux操作系统操作系统 #!/bin/bash#Thisisexample2aboutfor.forfiledotra-zA-Z$/将文件的内容转换为大写字母并另存done#endLinuxLinux操作系统操作系统 【实例7.17】此程序可以实现把直接输入的几个值显示出来,该程序源代码如下:#!/bin/bash#Thisis

386、example3aboutfor.forpin12345doecho$pdone#endLinuxLinux操作系统操作系统 【实例7.18】此实例实现求命令行所有整数之和,源代码如下:#!/bin/bash#Thisisexample3aboutfor.sum=0/清零forpin$*/命令行所有参数dosum=expr$sum+$p/加法运算doneechothetotalis$sum#endLinuxLinux操作系统操作系统 2.while及untilwhile语句与until语句的语法结构和用途相似。while语句会在测试条件为真时循环执行,语法如下:whileexpressiond

387、ocommandsdoneLinuxLinux操作系统操作系统 而until语句会在其测试条件为假时循环执行,语法如下:untilexpressiondocommandsdoneLinuxLinux操作系统操作系统 【实例7.19】此实例实现计算15的平方,程序源代码如下:#!/bin/bash#Thisisexample1aboutwhile.int=1/int赋初值while$int-le5/当int=5时,执行循环doLinuxLinux操作系统操作系统 sq=expr$int*$int/计算int平方echo$sqint=expr$int+1/int加1doneechofinished

388、#endLinuxLinux操作系统操作系统 【实例7.20】此实例列出所带的所有参数以及它的位置号,程序源代码如下:#!/bin/bash#Thisisexample2aboutwhile.count=1while-n$*/*表示存储Shell程序的所有参数doLinuxLinux操作系统操作系统 echoThisisparameternumber$count$1shift/将命令行参数左移一位count=expr$count+1done#endLinuxLinux操作系统操作系统 3.shiftshift命令用来将命令行参数左移。假设当前的命令行有3个参数,分别是:$1=-r$2=file

389、1$3=file2则在执行shift命令之后,其值会变成:$1=file1$2=file2shift命令也可以指定参数左移的位数,下面的命令将使命令行参数左移2个位置:shift2shift命令常与while语句或until语句一起使用。LinuxLinux操作系统操作系统 【实例7.21】该实例将一个文件中的英文字母全部转换为大写字母,程序源代码如下:#!/bin/bash#Thisisexampleaboutshift.while$1doif$1=-i/如果是选项-itheninfile=$2/指定输入文件名LinuxLinux操作系统操作系统 shift2/命令行参数左移2位elif$1

390、=-o/若是选项-othenoutfile=$2/指定输出文件名shift2elseechoProgram$0doesnotrecognizeoption$1LinuxLinux操作系统操作系统 fidonetra-zA-Zoutfile/转换为大写字母#endtr命令将第一个参数所设置的范围对应到第二个参数所设置的范围。LinuxLinux操作系统操作系统 将上面的程序存为upcase并将其权限设置为可执行,下面是执行结果:rootredflag/root#cata.txt/显示源文件Ilovelinux.rootredflag/root#./upcaseia.txtoz.out/转换成大写

391、rootredflag/root#catz.out/显示转换后文件的内容ILOVELINUX.LinuxLinux操作系统操作系统 4.break和continue在Shell的for、while、until循环语句中也可以使用如C语言的break和continue语句以跳离现有的循环。break语句用于中断循环的执行,将程序流程移至循环语句结束之后的下一个命令。而continue语句则忽略之后的命令,将程序流程移至循环开始的地方。break和continue语句都可以加上数字,以指示要跳出的循环数目。例如,下面的continue语句将跳出两层循环:LinuxLinux操作系统操作系统 whi

392、leexpression1dowhileexpression2do:continue2/从第二层跳到第一层:donedoneLinuxLinux操作系统操作系统 【实例7.22】该实例用来模拟工业上的操作流程控制,程序源代码如下:#!/bin/bashforxinabcdefghidoforyin123456789LinuxLinux操作系统操作系统 doechocurrentjobis$x$yechoinputntodonextjobechostoskiptheotherjobsincurrentlevelechoxtoterminatealljobsreadactionif$action=

393、nthenLinuxLinux操作系统操作系统 echodonextjobcontinue/往前跳一层elif$action=sthenechoskiptheotherjobsincurrentlevelcontinue2/往前跳两层elif$action=xthenLinuxLinux操作系统操作系统 echoterminatealljobsbreak2/往后跳两层fidonedone#endLinuxLinux操作系统操作系统 7.2.5函数的定义和使用Shell脚本也有自定义函数的功能。当脚本变得很大时,可以将脚本文件中常用的程序写成函数,这样可以使脚本更小、更易于维护,同时整个结构更加

394、严谨。定义函数的语法如下:fname()ShellcommandsLinuxLinux操作系统操作系统 函数的使用方法与外部命令一样,只要直接使用函数名即可。在使用函数时,一样可以传入参数。函数处理参数的方式与脚本文件处理命令行参数的方法是一样的。在函数中,$1是指传入函数的第1个参数,$2是指传入函数的第2个参数。同时也可以使用shift命令来移动函数参数。LinuxLinux操作系统操作系统 【实例7.23】该实例示范如何将命令行中输入的数字传入函数,并显示最大的数值,将文件存为maxvalue,程序源代码如下:#!/bin/bashmax()while$1doif$maxvalueLin

395、uxLinux操作系统操作系统 thenif$1gt$maxvaluethenmaxvalue=$1fielsemaxvalue=$1fishiftdonereturn$maxvalueLinuxLinux操作系统操作系统 max$echoMaxValueis:$maxvalue#end实例执行结果:rootredflag/root#maxvalue100305076020150MaxValueis:119LinuxLinux操作系统操作系统 7.3正正则则表表达达式式正则表达式是一种可以用于模式匹配和替换的工具,可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与待比较字符串或文

396、件进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。例如,在一个文本中抽取一个单词,它的头两个字符是大写的,后面紧跟四个数字。LinuxLinux操作系统操作系统 如果不使用正则表达式,在Shell中将不能实现这个操作。而利用正则表达式就很容易完成。正则表达式起始于Unix系统,目前广泛应用于各种脚本语言中,不但在PHP,Perl,JavaScript中能找到它的身影,而且正则表达式本身就是如sed、awk、grep、perl等程序的选项开关内容之一。LinuxLinux操作系统操作系统 7.3.1正则表达式基本元字符及使用正则表达式基本元字符及使用正则表达式本身是一些特殊或不特殊字符

397、的集合,这些字符被称为元字符,常见的元字符如表7-3所示。LinuxLinux操作系统操作系统 表7-3常见的元字符元字符含义只匹配行首$只匹配行尾*一个单字符后紧跟*,匹配0个或多个此单字符匹配内字符,可以是一个单字符,也可以是字符序列,可以使用-表示内字符序列范围,如用1-5表示12345LinuxLinux操作系统操作系统 用来屏蔽一个元字符的特殊含义,因为有时在Shell中一些元字符有特殊含义,可以使其失去原有意义.匹配任意单字符patternn用来匹配前面pattern出现的次数,n为次数patternn,含义同上,但次数最少为n次patternn,m含义同上,但pattern出现次

398、数在n和m之间LinuxLinux操作系统操作系统 1.使用句点匹配单字符句点“.”可以匹配任意单字符。【实例7.24】(1)使用“lsl”命令可以匹配一定的权限:x.x.x此格式匹配用户本身、用户组及其他组的执行权限。drwx-不匹配-rwxrwxr-不匹配drwx-x-x匹配lrwxrwxrwx 匹配LinuxLinux操作系统操作系统 (2)假定正在过滤一个文本文件,对于一个有10个字符的脚本集,要求前4个字符之后为XC,匹配操作如下:.XC.以上例子解释为前4个字符任意,5、6字符为XC,后4个字符也任意按下例运行:TEXTVITEST不匹配ABC4XCDCBA匹配PPPPXXAAAA

399、不匹配WEWEXCQUTE匹配LinuxLinux操作系统操作系统 2.在行首以“”匹配字符串“”只允许在一行的开始匹配字符或单词。【实例7.25】(1)使用“lsl”命令,并匹配目录。之所以可以这样做,是因为在“lsl”命令的结果中,如果每行的第一个字符是d,就代表一个目录:LinuxLinux操作系统操作系统 ddrwx-匹配-rwxrwxr-不匹配drwx-x-x匹配lrwxrwxrwx不匹配LinuxLinux操作系统操作系统 (2)使用“001”,结果将匹配以001开始的行。001123654不匹配001abc匹配014579不匹配abcdxy不匹配LinuxLinux操作系统操作系

400、统 (3)可以将各种模式混合使用。4XC.TEXTVITEST不匹配ABC4XCDCBA匹配PPPPXXAAAA不匹配WEWEXCQUTE不匹配LinuxLinux操作系统操作系统 3.在行尾以“$”匹配字符串可以说“$”与“”正相反,它在行尾匹配字符串,“$”符号放在匹配单词后。【实例7.26】(1)假定要匹配以单词“linux”结尾的所有的行,操作为:linux$(2)匹配所有的空行。$具体分析为匹配行首,又匹配行尾,中间没有任何模式,因此为空行。LinuxLinux操作系统操作系统 (3)只匹配一个字符。.$在行首和行尾之间有一个“.”,代表任意单字符。LinuxLinux操作系统操作系

401、统 4.使用“*”匹配字符串中的单字符或其重复多次表达使用“*”可以匹配任意字符或字符串的重复多次表达。【实例7.27】匹配compu*ter的字符串如下:computercompuutercompuuuter匹配字符u一次或多次的单词是符合的。LinuxLinux操作系统操作系统 5.使用“”屏蔽一些特殊字符的含义有时候需要查找一些字符或字符串,而它们包含了系统指定为特殊字符的一个字符。什么是特殊字符呢?一般意义上讲,下列字符可以认为是特殊字符:$.“*|()+?LinuxLinux操作系统操作系统 【实例7.28】(1)屏蔽特殊字符“.”。假定要匹配包含字符“.”的行,而点代表匹配任意单字

402、符的特殊字符,因此需要屏蔽其含义,操作如下:.(2)匹配以“*.pas”结尾的所有行。操作如下:*.pas这样就可以屏蔽字符“*”和“.”的特殊含义。LinuxLinux操作系统操作系统 6.使用“”匹配一个范围或集合使用“”匹配特定字符串或字符串集,可以用逗号将括号内要匹配的不同字符串分开,这样做可以增加模式的可读性,但并不强制要求这样做。使用“-”表示一个字符串范围,表明字符串从“-”左边字符开始,到“-”右边字符结束。如果熟知一个字符串匹配操作,应经常使用“”模式。LinuxLinux操作系统操作系统 【实例7.29】(1)假定要匹配任意一个数字,操作如下:0123456789然而通过使

403、用“-”符号可以简化操作:0-9(2)匹配任意字母。如下:A-Za-z表明从A-Z、a-z的字母范围。同理,匹配任意字母或数字:A-Za-z0-9LinuxLinux操作系统操作系统 (3)在字符序列中使用“”。在字符序列中使用“”来指定字符范围,如下:sa-zA-Zt表示要匹配一个单词,以s开头,中间有任意字母,以t结尾。(4)匹配包含system后跟句点的所有单词,这里s可以大小写,操作如下:Ssystem.LinuxLinux操作系统操作系统 (5)匹配所有单词。操作如下:A-Za-z*“”在指定模式匹配的范围或限制方面很有用。结合“*”与“”使用更是有益。(6)否定或不匹配括号内容。如

404、下:A-Za-z匹配任意非字母型字符。LinuxLinux操作系统操作系统 7.使用“”模式匹配结果出现的次数使用“*”可匹配所有匹配结果任意次,但如果指定次数,就应使用“”,此模式有三种形式,即:patternn 匹配模式出现n次patternn, 匹配模式出现最少为n次patternn,m匹配模式出现次数在n和m之间LinuxLinux操作系统操作系统 【实例7.30】(1)匹配字母A出现2次,并以B结尾。A2B匹配值为AAB。(2)匹配字母A至少出现4次。A4,B可以得结果AAAAB或AAAAAAB等,但AAAB就不符合匹配模式。LinuxLinux操作系统操作系统 (3)匹配字母A出现

405、2次到4次之间。A2,4B匹配值为AAB、AAAB、AAAAB,其他结果都不符合匹配模式。(4)匹配模式要求前4个字符是数字,接下来是xx,最后也是4个数字,操作如下:0-94xx0-94LinuxLinux操作系统操作系统 结果为:1234xx7890匹配123axx7865不匹配9930xc1234不匹配1111xx9999匹配LinuxLinux操作系统操作系统 在书写正则表达式时,可能会有难度或达不到预期效果,一个好的习惯就是在写真正的正则表达式前先写下预期的输出结果。这样,当写错时,可以逐渐修改,以消除意外结果,直至返回正确值。为节省设计基本模式的时间,表7-4给出一些例子,这些例子

406、并无特别顺序。LinuxLinux操作系统操作系统 表7-4经常使用的正则表达式举例表达式含义行首$行尾the以the开头行SslignalL匹配单词signal、signiaL、Signal、SignaLSslignalL.同上,但加一句点USER$只包含USER的行LinuxLinux操作系统操作系统 tty$以tty结尾的行.带句点的行d.x.x.x对用户、用户组及其他用户组成员有可执行权限的目录l排除关联目录的目录列表.*00之前或之后加任意字符000*000或更多个iI大写或小写iiInN大写或小写i或nLinuxLinux操作系统操作系统 $空行.*$匹配行中任意字符串$包括6个字

407、符的行a-zA-Z任意单字符a-z*至少一个小写字母0-9$非数字或美元标识0-9A-Za-z非数字或字母12313中的一个数字Ddevice单词Device或deviceLinuxLinux操作系统操作系统 De.ce前两个字母为De,后跟两个任意字符,最后为ceq以q开始的行.$仅有一个字符的行.0-90-9以一个句点和两个数字开始的行Device单词DeviceDeVvice.单词Device.或DeVice.LinuxLinux操作系统操作系统 7.3.2正则表达式的应用正则表达式的应用在Shell编程中,一段好的脚本与完美的脚本间的差别之一,就是要熟知正则表达式并学会使用它们。相比较

408、起来,用一个命令抽取一段文本比用三四个命令得出同样的结果要节省许多时间。在上一节既然已经学会了正则表达式中经常使用的基本特殊字符,又通过一些例子简化了其复杂操作,那么现在可以看一些真正的例子了。本节主要讲述在grep和awk中使用正则表达式的例子。LinuxLinux操作系统操作系统 1.grep和正则表达式相信grep是Unix和Linux中使用最为广泛的命令之一,grep允许对文本文件进行模式查找。如果找到匹配模式,grep显示包含模式的所有行。grep的选项包括:-c:只输出匹配的行数。-I:不区分大小写(只适用于单字符)。-h:查询多文件时不显示文件名。LinuxLinux操作系统操作

409、系统 -l:查询多文件时只输出包含匹配字符的文件名。-n:显示匹配行及行号。-s:不显示不存在或无匹配文本的错误信息。-v:显示不包含匹配文本的所有行。开始讨论之前,先生成一个文件,插入一段文本,并在每列后加入【Tab】键,grep命令实例中将以此为例,该文件名为express.dat,其文件结构如下:LinuxLinux操作系统操作系统 第1列:城市位置编号第2列:月份第3列:存储代码及出库年份第4列:产品代号第5列:产品价格第6列:标识号第7列:合格数量LinuxLinux操作系统操作系统 文件内容如下:48Dec3BC1997LPSX68.00LVX2A138483Sept5AP1996

410、USP65.00LVX2C18949Oct3ZL1998LPSX 43.00KVM9D512219Dec2CC1999CAD23.00PLV2C68484Nov7PL1996CAD49.00PLV2C234483May5PA1998USP37.00KVM9D644216Sept3ZL1998USP86.00KVM9E234LinuxLinux操作系统操作系统 【实例7.31】(1)从文件express.dat中抽取代码为483和484的城市。rootredflag/root#grep4834express.dat483Sept5AP1996USP65.00LVX2C 189484Nov7PL1

411、996CAD49.00PLV2C 234483May5PA1998USP37.00KVM9D644利用上节中讲到使用“”来指定字符串范围,这里以48开始,以3或4结尾,这样抽出483或484。LinuxLinux操作系统操作系统 (2)从文件express.dat中抽取行首不是48的行。rootredflag/root#grep48express.dat219Dec2CC1999CAD23.00PLV2C68216Sept3ZL1998USP86.00KVM9E234方括号内的表示否定,即不是字符4或8。LinuxLinux操作系统操作系统 (3)从文件express.dat中抽取以K开头、以

412、D结尾的所有代码。rootredflag/root#grepKDexpress.dat49Oct3ZL1998LPSX43.00KVM9D512483May5PA1998USP37.00KVM9D644LinuxLinux操作系统操作系统 (4)从文件express.dat中抽取城市代码为219或216。rootredflag/root#grepE219|216express.dat219Dec2CC1999CAD23.00PLV2C68216Sept3ZL1998USP86.00KVM9E234grep命令加-E参数,这一扩展允许使用扩展模式匹配。LinuxLinux操作系统操作系统 (5)

413、从文件express.dat中抽取城市代码,要求第一个字符为任意字符,第二个字符为05之间,第三个字符在06之间。rootredflag/root#grep0-90-50-6express.dat216Sept3ZL1998USP 86.00 KVM9E234LinuxLinux操作系统操作系统 (6)从文件express.dat中抽取数字4至少出现两次的行。rootredflag/root#grep42,express.dat483May5PA1998USP 37.00 KVM9D644LinuxLinux操作系统操作系统 2.awk和正则表达式如果要格式化报文或从一个大的文本文件中抽取数据

414、包,那么awk可以完成这些任务。awk是一种自解释的编程语言,其最基本的功能是在文件或字符中按照指定规则浏览和抽取信息。awk抽取信息后,才能进行其他文本操作。awk脚本由各种操作和模式组成。其命令行格式如下:awk-Ffield-separatorcommandsinput-fileLinuxLinux操作系统操作系统 在这里-F域分割符是可选的,因为awk使用空格作为缺省的域分割符,因此要浏览域空间有空格的文本,不必指定这个选项。但如果要浏览诸如/etc/passwd的文件,则必须指定“-F:”。如果使用“-F”选项,则awk每次读一条记录或一行,而commands是真正的awk命令。Li

415、nuxLinux操作系统操作系统 一个awk语句中可能有多条语句。模式部分决定动作语句何时触发及触发事件。如果缺省模式部分,动作将时刻保持执行状态。模式可以是条件语句、复合语句或正则表达式。动作在大括号里指明。动作大多数用来打印。awk执行时,其浏览域标记为“$1,$2,$3$n”。这种方法称为域标识。使用这些域标识将更容易对域进行进一步处理。使用$1表示参照第1域。如果需要打印一个有5个域的所有记录,不必指明$1,$2,$3,$4,$5,可以使用$0,即所有域。LinuxLinux操作系统操作系统 下面就结合具体的实例来讨论awk的用法。开始讨论之前,先生成一个文件,插入一段文本,并在每列后

416、加入【Tab】键,awk命令实例中将以此为例,该文件名为student.dat,其文件结构如下:第1列:学生姓名第2列:学号第3列:所在城区第4列:性别第5列:英语成绩LinuxLinux操作系统操作系统 文件内容如下:Tom 116001FuTianM90John116005NanShanM85Mary 116018LuoHuW65Steven 116030YanTianM78LinuxLinux操作系统操作系统 【实例7.32】(1)从文件student.dat中抽取家住罗湖区(LuoHu)的学生。rootredflag /rootawk if ($3/LuoHu/) print $0 s

417、tudent.datMary116018LuoHuW65LinuxLinux操作系统操作系统 匹配记录找到时,如果不特别声名,awk缺省打印整条记录。对初学者而言,使用语句开始有点难度,但也有许多方法可以跳过它,并保持同样结果。下面就是上例的另外一种实现方法。rootredflag/rootawk$0/LuoHu/student.datMary116018LuoHuW65LinuxLinux操作系统操作系统 (2)从文件student.dat中抽取家不住罗湖区(LuoHu)的学生。rootredflag/rootawk$0!/LuoHu/student.datTom116001FuTianM9

418、0John116005NanShanM85Steven116030YanTianM78LinuxLinux操作系统操作系统 有时要浏览信息并抽取不匹配操作的记录,与“”相反的符号是“!”,意即不匹配。缺省情况下,awk将打印所有匹配记录,因此这里不必加入动作部分。LinuxLinux操作系统操作系统 (3)从文件student.dat中抽取英语成绩在80分以上的学生,并且只打印学生的姓名。rootredflag/rootawkif($580)print$1student.datTomJohn(4)从文件student.dat中抽取第一个域的第四个字符是v的学生。rootredflag/root

419、awk$1/v/student.datSteven 116030YanTianM78LinuxLinux操作系统操作系统 (5)从文件student.dat中抽取家住福田区(FuTian)的男同学。rootredflag/rootawkif($3=FuTian&$4=M)print$0student.datTom116001FuTianM90LinuxLinux操作系统操作系统 复合模式或复合操作符用于形成复杂的逻辑操作,而复合表达式则为下述各表达式相互结合起来的表达式:&:AND,语句两边必须同时匹配为真。|:OR,语句两边同时或其中一边匹配为真。!:非,求反。LinuxLinux操作系统操

420、作系统 7.4Shell编程综合实例编程综合实例7.4.1实例一实例一该实例的功能是按照/etc/hosts文件中的条目逐一ping所有的机器。该程序的源代码如下:#!/bin/bash#pingallLinuxLinux操作系统操作系统 #grab/etc/hostsandpingeachaddresscat/etc/hosts|grepv#|whilereadLINEdoADDR=awkprint$1forMACHINEin$ADDRdopingsc1$MACHINEdonedone#endLinuxLinux操作系统操作系统 该实例列出/etc/hosts文件并查找其中的非注释行(不以“

421、#”开头的行)。然后使用一个while语句循环读入所有的行,接下来使用awk分析出每一行的第一个域,并把它赋给变量ADDR。最后使用for循环逐一ping相应的地址。LinuxLinux操作系统操作系统 7.4.2实例二实例二该实例的功能是显示当前使用系统的硬件信息。该程序的源代码如下:#!/bin/sh#HINVforlinuxv1.1#writtenbyDino#toincludeinanotherversion#GNUGENERALPUBLICLICENSE#testedonRedFlagandDebiansofar.LinuxLinux操作系统操作系统 #fixedAMDprocess

422、ordetectinthisv1.1#clearverbose=0help=0if$1=-v;thenverbose=1fiif$1=-h;thenechohinv-v|-hLinuxLinux操作系统操作系统 echo-v=verboseecho-h=helpexitfimach=uname-mmem=cat/proc/meminfo|awk/MemTotal/print$2proc=cat /proc/cpuinfo | awk /processor/ |grep -cprocessorechoTotalProcessors:$procLinuxLinux操作系统操作系统 echo$mac

423、h :Processoregrep-ivendor_id|name|MHz|cache/proc/cpuinfoecho#echoMainMemorySize:$memMbytesechoMainMemorySize:$memKbytesif-r/proc/ide/ide0/hda/model;thenechoechoHost:ide0Channel:hdacat/proc/ide/ide0/hda/modelLinuxLinux操作系统操作系统 fiif-r/proc/ide/ide0/hdb/model;thenechoechoHost:ide0Channel:hdbcat/proc/id

424、e/ide0/hdb/modelfiif-r/proc/ide/ide1/hdc/model;thenechoechoHost:ideChannel:hdccat/proc/ide/ide1/hdc/modelLinuxLinux操作系统操作系统 fiif-r/proc/ide/ide1/hdd/model;thenechoechoHost:ideChannel:hddcat/proc/ide/ide1/hdd/modelfiif-r/proc/scsi/scsi;thenechoegrepHost|Vendor/proc/scsi/scsiLinuxLinux操作系统操作系统 fiechoe

425、choSerialPorts:egrep-cserial/proc/ioportsechoKeyboardDetected:egrep-ckeyboard/proc/ioportsechoEthernetControllers:/sbin/ifconfig|awk/eth/print$1echoegrepcontroller/proc/pciif$verbose-ne0;thenegrepbridge/proc/pcifiLinuxLinux操作系统操作系统 该程序的执行结果如下:TotalProcessors:1i686:Processorvendor_id:GenuineIntelmode

426、lname:Celeron(Mendocino)cpuMHz:367.504cachesize:128KBMainMemorySize:158248KbytesLinuxLinux操作系统操作系统 Host:ide0Channel:hdaSAMSUNGSV0432AHost:ideChannel:hdcSAMSUNGSCR-3232SerialPorts:2KeyboardDetected:1EhternetControllers:eth0LinuxLinux操作系统操作系统 Ethernetcontroller:RealtekSemiconductorCo.,Ltd.RTL-8139(rev

427、16).VGAcompatiblecontroller:SiliconIntegratedSystemsSiS86C326(rev11).LinuxLinux操作系统操作系统 习习题题1在bash中普通用户用_作为默认的提示符。A.$B.#C.D.?2.表示追加输出重定向的符号是_。A.B. C. D.D./LinuxLinux操作系统操作系统 4.下列符号中,_不是Shell环境下正则表达式的元字符。A.$B.C.*D.5.在_Shell环境中,使用如下的变量赋值方式:setvariable=5。A.bashB.pdkshC.tcshD.ksh6.BourneShell的程序名为_。A.Ba

428、shB.zshC.rcD.shLinuxLinux操作系统操作系统 7.输入一个命令之后,Shell首先检查_。A.它是不是外部命令B.它是不是在搜索路径上C.它是不是一个命令D.它是不是一个内部命令8.关于Linux的Shell说法错误的是_。A.一个命令语言解释器 B.编译型的程序设计语言C.能执行内部命令D.能执行外部命令LinuxLinux操作系统操作系统 9.为匹配以001开头的行,我们可以使用如下的正则表达式是_。A.001B.$001C.*001D.00110.下面_不是Shell的循环控制结构。A.forB.switchC.whileD.until11.与正则表达式a-z匹配的

429、表达式有_。A.aB.9C.*D.%12.与正则表达式123匹配的表达式有_。A.1B.2 C.23D.123LinuxLinux操作系统操作系统 13下述正则表达式意思相同的有_。A.012345B.0-5C.01-5D.0-23-514.与正则表达式Ccomputer相匹配的项有_。A.CcomputerB.Computer C.computer D.Ccomputer15.与正则表达式compu*t匹配的单词有_。A.computB.compuutC.compuatD.computtLinuxLinux操作系统操作系统 第第8章章网络文件系统网络文件系统NFS8.1NFS基本原理基本原理

430、8.2配置配置NFS服务器服务器8.3配置配置NFS客户客户8.4NFS的性能、安全和故障排除的性能、安全和故障排除习题习题LinuxLinux操作系统操作系统 8.1NFS基本原理基本原理8.1.1什么是什么是NFS(Network)在Windows主机之间可以通过共享文件夹来实现存储远程主机上的文件,而在Linux系统间通过网络文件系统(NFS)可以实现类似的功能。然而NFS和Windows的共享还是有差别的,它和Windows2000Server的分布式文件系统更为类似。我们先来看一个例子:Linux主机A有一个目录/test,我们可以先把它导出(类似把它共享出来),然后我们在Linux

431、主机B上把A:/test安装(挂接)到安装点/mnt/nfs下,这个挂接和挂接本地磁盘一样。LinuxLinux操作系统操作系统 这样在主机B上的用户就可以使用/mnt/nfs下的文件,而实际上用户使用的是主机A上的目录/test。也就是说,用户可以以访问本地文件的方式访问远程主机上的文件。NFS由SUN公司开发,它最终被IETF所接受,纳入RFC成为一种文件服务标准,是分布式计算机系统的一个组成部分。网络文件系统有以下优点:LinuxLinux操作系统操作系统 (1)被所有用户访问的数据可以存放在一台中央的主机上,其他不同主机上的用户可以通过NFS访问同一中央主机上的数据;(2)客户访问远程

432、主机上的文件是透明的,和访问本地主机上的文件是一样的;(3)远程主机上文件的物理位置发生变化(如从一台主机移动到另一主机上)也不会影响客户访问方式的变化。LinuxLinux操作系统操作系统 8.1.2NFS的工作原理的工作原理NFS是基于客户/服务器模式的。NFS服务器是输出一组文件的计算机,而客户是访问文件的计算机。客户和服务器通过远程过程调用(RPC,RemoteProcedureCall)通信,当客户主机上的应用程序访问远程文件时,客户主机内核向远程服务器发送一个请求,客户进程被阻塞,等待服务器应答,而服务器一直处于等待状态,如果接收到客户请求,就处理请求并将结果返回客户机。NFS服务

433、器上的目录如果可被远程用户访问,就称为“导出”(export);客户主机访问服务器导出目录的过程称为“安装”(mount),有时也称“挂接”或“导入”。NFS由许多组件共同协作完成,如图8-1所示。LinuxLinux操作系统操作系统 图图8-1NFS组件组件LinuxLinux操作系统操作系统 XDR(外部数据表示):在异构机器组成的网络上交换数据。RPC协议:负责定义客户机和服务器之间的信息格式,NFS请求是以RPC包的形式发送的。locked:RPC锁监控程序,实现NFS锁管理器(NLM,NFSLockManager)协议,NLM协议支持多个客户通过NFS一致性地锁定文件。LinuxLi

434、nux操作系统操作系统 rpciod:NFSI/O监控程序。knfsd:是NFS系统的核心,监听远程主机的RPC请求、根据NFS协议进行解释,它用RPC将响应返回客户机,并与NFS服务器上运行的其他组件通信如rpciod、rpc.locked和rpc.statd。statd:NFS状态监控程序,利用网络状态监视协议(NSM)维护NFS锁的状态。portmap:将RPC程序号与运行服务的实际端口相对应。LinuxLinux操作系统操作系统 mountd:处理客户机的mount请求。rquotad:提供NFS系统中用户的配额信息。由于NFS有明确的服务器和客户角色之分,因此NFS的配置包括两个部分

435、:NFS服务器的配置和NFS客户机的配置。LinuxLinux操作系统操作系统 8.2配置配置NFS服务器服务器NFS服务器的配置步骤如下:(1)安装NFS软件包。(2)在/etc/exports文件中配置NFS服务器上要导出的文件系统或目录。(3)启动NFS服务。(4)导出/etc/exports中配置的文件系统或目录。LinuxLinux操作系统操作系统 8.2.1安装安装NFS要使用NFS服务器或安装NFS服务软件包,可以用红旗3.0版的CD-ROM中的目录/Redflag/RPMS下的软件包“nfs-utils-0.3.1-8.i386.rpm”。安装之前请用以下命令检查该软件包是否已

436、经安装:rootredflag/root#rpmqa|grepnfs-utilsnfs-utils-0.3.1-8以上命令表明软件包已经安装,如果没有安装则用以下命令安装软件包(当然要先把CD-ROMmount上)。LinuxLinux操作系统操作系统 rootredflag/root#mount/dev/cdromrootredflag/root#cd/mnt/cdrom/RedFlag/RPMSrootredflag/root#rpm-ivhnfs-utils-0.3.1-8.i386.rpmLinuxLinux操作系统操作系统 8.2.2配置导出文件配置导出文件:/etc/exports

437、/etc/exports文件是用来告诉Linux系统哪些文件系统或目录将为NFS客户导出,这个文件是一个文本文件,通常由管理员编辑。文件中以“#”号开头的行被忽略,长行可以用“”分解为多行。语法如下:dir_namehost1(opt1,opt2,)host2(opt1,opt2,)host3(opt2,)LinuxLinux操作系统操作系统 【实例8.1】/(ro)/test*(rw)在/etc/exports文件中的每个项目以目录名开始,目录名dir_name就是要导出给NFS客户使用的目录,目录可以是某一文件系统的根,也可以不是文件系统的根。目录名之后可以列出多个或零个用空格分隔开的导出

438、指定项。每个导出指定项由两个可选部分组成:主机指定部分(host)和导出选项部分(opt),这两个部分都是可选的。LinuxLinux操作系统操作系统 如果只列出主机指定部分而没有列出导出选项部分,则导出选项缺省为“ro”只读,即NFS客户只能读取这个目录的文件而不能写入目录中的文件。如果只指定导出选项而没有指定主机,则主机缺省为所有主机。如果目录后没有指定任何导出项,则以只读选项导出目录给所有主机,相当于*(ro)。LinuxLinux操作系统操作系统 主机部分非常灵活,可以指定单个主机,也可以指定多个主机。描述主机的方法有四种。(1)单个主机:可以列出短名、完全限定名或IP地址,如:lin

439、ux2或或192.168.0.1(2)主机网络:指定特定一个子网或几个子网上的主机,用address/netmask语法指定,如:192.168.0.0/255.255.255.0表明导出文件系统或目录给192.168.0.0子网上的所有主机使用。LinuxLinux操作系统操作系统 (3)通配符主机:可以使用“?”、“*”对主机名进行匹配,如:“*”可以匹配域中的所有主机。但是要注意的是通配符不匹配主机名中的“.”,因此“*”不匹配。LinuxLinux操作系统操作系统 (4)网组:可以列出NFS网组映射中定义的整组主机,网组以“”开头,例如:linuxgrp。导出选项列表用“.”分隔开,选

440、项之间也不能包含空格。表8-1列出了导出选项的含义,导出选项分为性能选项和安全选项两种类型。LinuxLinux操作系统操作系统 表8-1NFS导出选项选项是否缺省类型含义async是性能异步将数据写入磁盘(不是在客户机请求时写入)sync否性能客户机执行写操作时立即将数据写入磁盘wdelay是性能延迟同步写入,实现累积no_wdelay否性能不延迟同步写入ro是安全允许对这个文件系统进行只读操作rw否安全允许对这个文件系统进行读写操作LinuxLinux操作系统操作系统 root_squash是安全将UID=0的用户(root)映射为用户nobodyno_root_squash否安全不将UI

441、D=0的用户(root)映射为用户nobodyall_squash否安全将所有的用户映射为用户nobodyno_all_squash是安全不将所有的用户映射为用户nobodyanonuid=N-2安全将匿名账户nobody的UID设为Nanongid=N-2安全将匿名账户nobody的GID设为Nsecure是安全允许1024以下端口产生的请求insecure否安全允许1024以上端口产生的请求subtree_check是安全认证文件句柄属于整个文件系统的导出子树no_subtree_check否安全不认证文件句柄属于整个文件系统的导出子树hide是安全不导出这个目录下挂接的其他文件系统noh

442、ide否安全导出这个目录下挂接的其他文件系统LinuxLinux操作系统操作系统 【实例8.2】/(ro)将使得主机上的用户对/home目录有只读权限。【实例8.3】/test*(rw)将使得域上的主机上的用户对/test目录有读写权限。LinuxLinux操作系统操作系统 导出目录时将面临一个问题:NFS服务器用户和NFS客户机上用户的映射。假如在NFS服务器上导出/test目录,该目录由NFS服务器上的用户user1和user2拥有,则NFS客户机上要有同样的用户user1和user2才能使用导出的目录。另外,我们可能不希望客户机上的root用户拥有NFS服务器上的root用户对/test

443、目录的权限。这时我们可以使用导出选项控制NFS客户机和NFS服务器的用户映射,从而达到控制权限的目的。“root_squash”选项(root用户挤压)是默认选项,该选项的作用是将客户机上的root用户映射到NFS服务器上的nobody用户,这时NFS客户机上的root用户对NFS服务器上导出的目录的权限只具有服务器上nobody用户的权限。LinuxLinux操作系统操作系统 【实例8.4】/(anonuid=500,anongid=600)本例中客户机上的root用户映射到服务器上UID=500的用户,同时组GID=600,意味着客户机上的root用户具有服务器上UID=500的用户和GI

444、D=600的组的权限。“all_squash”和“no_all_squash”选项的含义和“root_squash”、“no_root_squash”选项的含义类似。只不过“all_squash”是将客户机上的所有用户映射到服务器上的nobody用户,如果要映射成服务器上的其他用户,同样要使用anonuid和anongid选项。“no_all_squash”是缺省选项,意味着缺省时客户机上的用户要和服务器上的用户一一对应,才能访问目录。LinuxLinux操作系统操作系统 【实例8.5】/(all_squash,anonuid=400,anongid=700)本例中把客户机上的所有用户(含ro

445、ot用户)映射到服务器上UID=400的用户,GID=700的组。LinuxLinux操作系统操作系统 8.2.3激活激活NFSNFS服务的启动和停止是通过/etc/rc.d/init.d目录下的脚本nfs来实现的,执行该脚本必须用root用户登录。【实例8.6】/etc/rc.d/init.d/nfsstartStartingNFSservices:OKStartingNFSquotas:OKStartingNFSmountd:OKStartingNFSdaemon:OKLinuxLinux操作系统操作系统 【实例8.7】/etc/rc.d/init.d/nfsstopShuttingdow

446、nNFSmountd:OKShuttingdownNFSdaemon:OKShuttingdownNFSservices:OKShuttingdownNFSquotas:OK【提示】也可以用servicenfsstart来启动NFS服务。如果想让Linux系统在启动时同时也启动NFS服务,可以使用ntsysv命令,如图8-2所示。找到NFS服务,用空格键在NFS处做标记“*”,确认“Ok”即可。LinuxLinux操作系统操作系统 【实例8.8】rootredflag/root#ntsysv(见图8-2)。图图8-2NFS的自动启动的自动启动LinuxLinux操作系统操作系统 【实例8.9】

447、rootredflag/root#rpcinfopprogramversprotoport1000002tcp111portmapper1000002udp111portmapper1000241udp32768 status1000241tcp32768 status1000111udp 635rquotad1000112udp635rquotad1000051udp32775mountdLinuxLinux操作系统操作系统 1000051tcp32773mountd1000052udp32775mountd1000052tcp32773mountd1000053udp32775 mount

448、d1000053tcp32773 mountd1000032udp 2049 nfs1000033udp 2049 nfs1000211udp32776nlockmgr1000213udp32776nlockmgr1000214udp32776nlockmgrLinuxLinux操作系统操作系统 8.2.4导出目录:导出目录:exportfsNFS服务启动时会自动导出/etc/exportfs文件中设定的文件系统或目录,但是如果在NFS服务启动后修改了exports文件,要使用exportfs命令导出目录。exportfs命令的用法如下:/usr/sbin/exportfs-avi-oopti

449、ons,.client:/path./usr/sbin/exportfs-r-v/usr/sbin/exportfs-av-uclient:/path./usr/sbin/exportfs-vLinuxLinux操作系统操作系统 参数选项:-a:对所有的目录操作。-o options:指定目录导出时的选项,选项的定义和exports文件的定义相同。-i:忽略/etc/exports文件列出的信息,取命令行中指定的导出选项。-r:再次导出所有的目录,用于重新初始化NFS服务器内部的导出清单。-u:从NFS服务器中删除导出的目录。-v:显示exportfs命令执行时的信息。LinuxLinux操作

450、系统操作系统 【实例8.10】rootredflag/root#cat/etc/exports/home*(ro)/test*(rw)rootredflag/root#exportfs-avexporting*:/testexporting*:/home导出所有目录。LinuxLinux操作系统操作系统 【实例8.11】rootredflag/root#exportfs-rv重新导出所有目录,如果在/etc/exports文件中增加或删除了某项,可以使用该命令。这是用得最多的例子。LinuxLinux操作系统操作系统 【实例8.12】rootredflag/root#exportfs-v-i-

451、orw,no_root_squash*:/test2exporting*:/test把NFS服务器上的/test2目录导出给“*”客户机使用,导出权限为“rw,no_root_squash”。我们使用“-i”选项让exportfs命令忽略/etc/exports文件。这通常用于临时将一个目录导出,而不将其加入到/etc/exports文件中。LinuxLinux操作系统操作系统 【实例8.13】rootredflag/root#exportfs-vu*:/testunexporting*:/testunexporting*:/test取消/test目录的导出。【实例8.14】rootredfl

452、ag/root#exportfs/home*/test*LinuxLinux操作系统操作系统 8.3配配置置NFS客客户户Linux下的NFS客户配置非常容易,不需要加载任何新的或附加的软件。惟一的要求是内核必须编译为支持NFS的功能或作为可装入模块。缺省情况下,红旗Linux3.0将NFS作为可装入模块,在需要时自动装入。也可以使用命令insmodnfs手工装入模块,装入后可使用lsmod命令检查。LinuxLinux操作系统操作系统 【实例8.15】rootredflag/root#lsmodModuleSizeUsedbyNottaintednfsd 772160(autoclean)n

453、fs867160lockd 572800nfsdnfssunrpc 770760nfsdnfslockd8139too201281(autoclean)usb-uhci256360(unused)usbcore651841usb-uhciLinuxLinux操作系统操作系统 如果输出中有“nfs”项(注意:不是“nfsd”项),则说明“nfs”已经作为可装入模块加载了。rootredflag/root#cat/proc/nodevrootfsnodevbdevnodevprocnodevsockfsnodevtmpfsLinuxLinux操作系统操作系统 nodevshmnodevpipefs

454、ext2iso9660reiserfsnodevdevptsnodevusbdevfsnodevnfs输出中也应该有“nfs”项。LinuxLinux操作系统操作系统 NFS软件包(nfs-utils-0.3.1-8.i386.rpm,我们前面已经介绍过它,它是NFS服务器软件包)带有一个称为showmount的程序,该程序能够给出NFS服务器导出的目录信息。showmount命令的格式如下:showmount参数选项NFS服务器主机名/IP地址参数选项:-e:显示NFS服务器上导出的目录。LinuxLinux操作系统操作系统 【实例8.16】rootredflag/root#showmoun

455、t-e192.168.0.15Exportlistfor192.168.0.15:/test*/home*显示NFS服务器192.168.0.15导出的目录,当然我们也可以在NFS服务器上执行不带任何参数的exportfs命令来查看导出的NFS目录,结果是一样的。LinuxLinux操作系统操作系统 如果已经知道了从NFS服务器上导出的目录信息,就可以使用我们在文件系统这一章中已经介绍过的mount命令手工安装(挂接)NFS服务器上的目录了。挂接NFS目录时,mount命令有几个小的变化:文件系统的类型指定为“nfs”、分区为远程NFS服务器上的导出目录和有一些挂接选项。例如:mount-tn

456、fs-ooptionsnfsserver:/dirdir_mountpointLinuxLinux操作系统操作系统 【实例8.17】rootredflag/root#mount-tnfs-:/test/mnt/nfs把NFS服务器上导出的目录/test挂接在本机的/mnt/nfs目录下,权限为读写。NFS客户机安装NFS分区(目录)时的选项很多,除了以前介绍mount命令时介绍的所有文件系统都具有的一般选项外,还有一些只适用于NFS分区的选项。LinuxLinux操作系统操作系统 挂接NFS分区(目录)时,可以混合使用一般选项和NFS分区特有的选项。常用的NFS特有的选项见表8-2,其余的选项

457、参见mannfs命令的输出。LinuxLinux操作系统操作系统 表8-2NFS客户特有的挂接选项选项缺省值含义bg关后台挂接fg开前台挂接intr关定义一个可中断的挂接soft关软挂接hard开硬挂接rsize=N1024从NFS服务器读取数据的字节数wsize=N1024向NFS服务器写入数据的字节数timeo=N7重传RPC请求之前等待的1/10秒数retrans=N3RPC请求失败前超时和重传的次数LinuxLinux操作系统操作系统 使用后台挂接时,如果第一次挂接失败(例如NFS服务器宕机),挂接进程就会在后台处理,直到成功为止。采用“bg”选项可以避免NFS服务器宕机而使客户机Li

458、nux系统悬挂在mount命令上。特别是在/etc/fstab文件中自动挂接NFS分区时,最好采用“bg”选项,否则可能导致Linux系统无法启动。LinuxLinux操作系统操作系统 如果服务器A在/etc/fstab挂接了服务器B的NFS分区,同时服务器B也在/etc/fstab挂接了服务器A的NFS分区,这时出现了“交叉挂接”,两台主机既是做为服务器为对方服务,也同时是对方的客户。交叉挂接会带来一个问题:服务器A必须等到服务器B完成引导才能正常引导,而服务器B也必须等到服务器A完成引导才能正常引导,从而陷入一个死循环。这种情况下应确保在两台主机的/etc/fstab文件中将NFS分区用“

459、bg”选项来挂接。LinuxLinux操作系统操作系统 NFS客户机挂接NFS分区时,缺省采用“硬”挂接(即采用“hard”选项),即它们会无休止地尝试连接NFS服务器直到连接上为止。这种做法并不总是最好的,在需要对整个系统进行关机时可能会引起故障。如果NFS服务器关机比NFS客户机关机早,客户机的关机操作会无法正常进行。这种情况下可以采用“软”挂接(即采用“soft”选项),NFS客户机在重试一定次数(用retrans=N参数设定重试次数)后会终止连接。但是数据操作执行完成之前不得把控制权交给应用程序时(如电子邮件目录),就不要使用“软”挂接选项。LinuxLinux操作系统操作系统 当NF

460、S客户机上某个进程进行系统调用时,内核就会接过动作,在内核处理系统调用的时间里,原来的进程对自己是没有控制权的。如果内核的存取操作出现问题,该进程就必须继续等待,直到内核调用返回为止,进程自己是不能放弃操作并退出运行的。“intr”选项给挂接加上一个可中断的标志,允许等待NFS操作的进程放弃操作并退出。缺省时不使用“intr”选项。在NFS客户机上挂接NFS服务器上的NFS分区同样可以在/etc/fstab文件中配置,使得客户机的Linux系统启动时自动挂接服务器上的NFS分区。LinuxLinux操作系统操作系统 【实例8.18】在/etc/fstab中添加::/test/mnt/nfsnf

461、srw,bg,intr,soft00自动把NFS服务器上的导出目录/test挂接在/mnt/nfs目 录 下 , 挂 接 选 项 是 : “rw”, “bg”,“intr”,“soft”。LinuxLinux操作系统操作系统 8.4NFS的性能、安全和故障排除的性能、安全和故障排除8.4.1NFS的性能的性能NFS通过网络访问远程文件,因此速度比访问本地磁盘慢。由于NFS有客户机和服务器两个部分,NFS的性能也就和双方的参数配置都有关。LinuxLinux操作系统操作系统 1.NFS服务器的性能选项首先要强调的是NFS性能和Linux内核有很大的关系,调整内核也可改善NFS服务器的性能,特别是

462、把NFS编译到内核,而不是作为模块装入。有关内核的编译请参见有关Linux内核的资料,我们这里主要介绍导出选项对NFS服务器性能的影响。LinuxLinux操作系统操作系统 NFS客户机上的用户执行write系统调用时,它希望系统调用顺利返回时数据已经写入到NFS服务器上的磁盘,这样可以保证数据的可靠性。如果write系统调用后NFS服务器崩溃,则已经写入到磁盘的数据还是安全的,这种方式称为同步写入。同步写入会降低性能,因为用户进程必须等待系统调用的返回。与之相反的另一种方法是NFS服务器并不立即把数据写到磁盘而是放在缓冲区,然后立即返回调用,这就是异步写入。NFS服务器上的Linux系统在调

463、用完成后的一段时间(5秒左右)内把数据写入磁盘,如果在这段时间里NFS服务器崩溃,将会导致数据的丢失。“nfs”导出选项“sync”是同步写入,“async”是异步写入,缺省是“async”。LinuxLinux操作系统操作系统 NFS服务器还有另一个特性和可靠性、性能有关。Linux使用基于页的虚拟内存,它可以把同一物理数据页的几个小的写入集合起来一次性写入,以减少写操作的次数。“wdelay”选项允许Linux系统延迟写入,把几次写入操作集合起来。“nowdelay”选项则不允许Linux系统延迟写入,不允许集合操作。写入延迟可以提高性能,但同样也增加数据丢失的可能性,如果NFS服务器在把

464、集合起来的数据写入到磁盘之前崩溃,则所有这些数据全部丢失。“wdelay”选项是缺省值。LinuxLinux操作系统操作系统 2.NFS客户机的性能选项NFS客户机上的NFS性能是由挂接NFS文件系统时(mount或/etc/fstab)采用的选项控制的。NFS客户机也有类似的“sync”和“async”选项(它们不是NFS特有的选项),注意它们不是用来控制NFS服务器的性能。NFS客户机缓冲用户进程写入的数据时,是将这些数据保留在NFS客户机的缓冲区中,即这个数据不从网络立即传送给NFS服务器。“async”是缺省值。LinuxLinux操作系统操作系统 NFS客户机按固定最大长度的单元从网

465、络上读取和写入数据,这分别是“rsize”和“wsize”选项指定的值。读取和写入长度越大,NFS系统的性能越好。但是NFS建立在RPC上,而RPC使用XDR,XDR又使用IP网络组件。大的NFS传输单元会被分解成多个小组,通常是1500字节左右(在以太网上)。如果使用NFS和UDP,当NFS传输单元中有一分组丢失时,即使其他分组安全到达,也会导致NFS重发整个单元,这样就增加了网络的负担。LinuxLinux操作系统操作系统 如果线路的情况不好,可能出现反复重发,加剧恶化网络的通信状况。因此需要平衡网络的性能和NFS的性能,如果网络快而稳定,“rsize”和“wsize”的值可以加大,高达3

466、2KB;如果网络慢而不稳定(如拨号网络),“rsize”和“wsize”的值可降至1KB、2KB。LinuxLinux操作系统操作系统 8.4.2NFS的安全的安全1.NFS服务器的安全保护NFS服务器是NFS服务安全的最重要部分,保护方式主要有两种:RPC访问安全和目录的导出权限。Linux的TCPWrapper根据两个配置文件确定谁能访问哪些服务,这两个文件是/etc/hosts.allow和/etc/hosts.deny。这两个文件很相似,格式如下:服务1,服务2,:主机名1,主机名2,LinuxLinux操作系统操作系统 TCPWrapper程序在用户访问主机的服务时,按以下的顺序进行

467、操作:(1)如果客户机的主机名或IP地址匹配/etc/hosts.allow列出的服务名,则客户的访问被允许;(2)如果客户机的主机名或IP地址匹配/etc/hosts.deny列出的服务名,则客户的访问被拒绝;(3)如果客户机的主机名或IP地址在两个文件均不匹配,则客户的访问被允许。LinuxLinux操作系统操作系统 【实例8.19】rootredflag/root#cat/etc/hosts.denyALL:ALLrootredflag/root#cat/etc/hosts.allowportmap:192.168.0.lockd:192.168.0.nfsd:192.168.0.mou

468、ntd,rquotad:192.168.0.stad:192.168.0.LinuxLinux操作系统操作系统 以上例子除了开放NFS相关的服务给192.168.0.*的主机外,关闭了其他所有的服务(包括了Web、FTP、DNS等服务)。这里采用的是先关闭所有的服务再一一开放允许的服务,安全性较好,如果要开放某一服务可以在/etc/hosts.allow加入相应的命令行。NFS服务器的配置文件/etc/exports中有许多选项是用于控制安全性,我们已经介绍了“root_squash”、“no_root_squash”、“all_squash”、“no_all_squash”、“anonuid

469、”和“anongid”,这里补充其他的安全选项。LinuxLinux操作系统操作系统 NFS服务器缺省要求NFS客户主机用1024以下的端口来发送请求,这些端口称为安全端口,root用户使用这些端口,非root用户可能使用1024以上的端口(不安全端口)发出请求。因此可能需要用“insecure”选项使得NFS客户可以使用NFS服务,特别是非Linux系统的NFS客户。LinuxLinux操作系统操作系统 NFS服务器导出某一目录时,这一目录下可能还挂接着其他文件系统。为了在NFS客户机上能够使用这两个目录,通常会在NFS服务器上的/etc/exports文件分别有两个目录的导出指定项,然后在

470、NFS客户机上分别挂接,如果只挂接上一级目录,下一级目录会被隐藏。“hide”选项和“nohide”选项可以控制导出目录时其他文件系统是否一起导出。“hide”选项是缺省值,即不显示被导出目录下挂接的其他文件系统,避免出现死循环。LinuxLinux操作系统操作系统 【实例8.20】/test目录下有一目录/test/win2000,它是Windows2000文件系统的挂接点,如果我们导出目录时采用:/test*(ro)/test/win2000*(ro)在NFS客户机上只挂接/test,这时无法在/test目录下看 到 /test/win2000目 录 的 内 容 。 我 们 可 以 使 用

471、“nohide”选项导出:/test*(ro)/test/win2000*(ro,nohide)LinuxLinux操作系统操作系统 在NFS客户机上只挂接/test,这时在/test目录下就可以看到/test/win2000目录的内容了。“subtree_check”选项用于控制NFS服务器证明文件句柄确实属于所导出的文件系统,防止客户机创建伪NFS文件句柄。假设LinuxNFS服务器有一个文件系统安装在/test,其下有目录/test/proj。我们将/test/proj用“subtree_check”选项导出,每次NFS客户机向NFS服务器发送NFS操作时,服务器保证收到的文件句柄属于/

472、test/proj目录或其子目录。LinuxLinux操作系统操作系统 如果客户主机伪造NFS文件句柄(该句柄实际上是指向/test/doc/hetong1.doc)后发送请求给服务器,NFS服务器会检查句柄并拒绝服务。“subtree_check”选项是缺省值,“no_subtree_check”选项可以关掉子树检查。如果导出整个文件系统,可以采用“no_subtree_check”选项加速对文件系统的访问,因为文件系统不会有其他的部分被访问的危险。LinuxLinux操作系统操作系统 2.NFS客户机的安全性在NFS客户机挂接NFS分区时,“rw”和“ro”选项可以控制NFS文件系统的访问

473、权限。缺省时,NFS客户机挂接分区时采用“rw”,而NFS服务器导出目录时缺省采用的是“ro”。因此如果所有的选项保持缺省值,则NFS服务器不让写入导出卷,当NFS客户机想写入导出卷时会出现错误。当然如果NFS服务器上以“rw”选项导出目录,NFS客户机以“ro”选项挂接NFS分区,最终NFS客户机上的用户也只具有读的权限。LinuxLinux操作系统操作系统 8.4.3NFS故障排除故障排除1.IP地址的问题在NFS服务器上的/etc/exports文件配置导出目录时,主机指定如果采用主机名的方法,要保证NFS客户机的IP地址和主机名符合,否则会遭到拒绝。NFS服务器获得连接到自己的客户机I

474、P地址后,试图解析为完全授权域名FQDN,但是如果在/etc/exports文件里列出的机名不完整,NFS服务器将拒绝服务。如,服务器认为是,可在/etc/exports文件里列出的是linux2,这时就要检查/etc/hosts文件和DNS的设置。LinuxLinux操作系统操作系统 在NFS客户机挂接NFS目录时,如果使用主机名而不是使用IP地址来指定NFS客户机,同样要确保客户机能够正确解析主机名的IP地址。如果不能正确解析,就要检查/etc/hosts文件和DNS的配置。LinuxLinux操作系统操作系统 2.故障排除常用命令NFS是基于RPC调用的,因此rcpinfo命令常常用于确

475、定RPC服务的信息。我们前面已经介绍了“rcpinfop”命令,注意这一命令是NFS服务器上执行的,在客户机也可以使用rpcinfo命令确定远程NFS服务器的RPC服务信息。LinuxLinux操作系统操作系统 【实例8.21】在客户机上执行以下命令以确定远程NFS服务器的RPC服务信息:rootredflag/root#rpcinfo-u192.168.0.15portmapprogram100000version2readyandwaitingrootredflag/root#rpcinfo-u192.168.0.15mountdprogram100005version1readyandw

476、aitingLinuxLinux操作系统操作系统 program100005version2readyandwaitingprogram100005version3readyandwaitingrootredflag/root#rpcinfo-u192.168.0.15nfsprogram100003version2readyandwaitingprogram100003version3readyandwaitingLinuxLinux操作系统操作系统 nfsstat命令可以显示nfs统计信息,命令格式如下:nfsstat参数选项参数选项:-c:显示客户机上的NFS操作。-s:显示服务器上的状

477、态。LinuxLinux操作系统操作系统 3.诊断步骤诊断NFS故障的一般步骤如下:(1)检查NFS客户机和NFS服务器之间的通信是否正常(用ping命令)。(2)检查NFS服务器上的NFS服务是否在运行,必要时用“/etc/rc.d/init.d/nfsrestart”命令重新启动。(3)验证NFS服务器的/etc/exports文件语法是否正确,包括导出权限。LinuxLinux操作系统操作系统 (4)检查客户端的NFS文件系统服务是否正常,必要时用“/etc/rc.d/init.d/netfsrestart”命令重新启动。(5)验证/etc/fstab文件中的配置是否正确。LinuxLi

478、nux操作系统操作系统 习习题题1.启动NFS服务的命令是或。2.在/etc/exports文件中有一行:/home请解析其作用。3.在NFS客户端加载NFS有两种方法,分别是和。LinuxLinux操作系统操作系统 第第9章章动态主机配置协议动态主机配置协议DHCP9.1DHCP简介简介9.2DHCP的配置的配置9.3DHCP服务器的高级配置服务器的高级配置9.4DHCP故障排除故障排除习题习题LinuxLinux操作系统操作系统 9.1DHCP简简介介9.1.1为什么需要为什么需要DHCPTCP/IP协议目前已经成为互联网的公用通信协议,在局域网上也是必不可少的协议。用TCP/IP协议进行

479、通信时,每一台计算机(主机)都必须拥有一个IP地址用于在网络上标识自己。如果IP地址的设置是由系统管理员在每一台计算机上手工进行设置,把它设定为一个固定的IP地址时,就称为静态IP地址。LinuxLinux操作系统操作系统 设定静态的IP地址是常见的方法之一,但在许多场合并不适用。如果网络的规模较大,系统管理员给每一台计算机分配IP地址的工作量就会很大,而且常常因为用户不遵守规则而会出现错误,例如:导致IP地址的冲突等。在把大批计算机从一个网络移动到另一个网络或者改变部门计算机所属子网时,同样存在改变IP地址的工作量大的问题。随着笔记本电脑的普及,移动办公也是大家习以为常的事,当电脑从一个网络

480、移动到另一网络时,则每次移动也需要改变IP地址,并且移动的电脑在每个网络都需要占用一个IP地址。LinuxLinux操作系统操作系统 我们再来看看IP地址的占用问题。如果某个网络上有200台计算机,采用静态IP地址时,每台计算机都需要预留一个IP地址,即共需要200个IP地址。然而这200台计算机并不同时开机,假如只有20台计算机同时开机,我们就浪费了180个IP地址。这种情况对于ISP(InternetServiceProvider)来说,是一个十分严重的问题,如果ISP有100000个用户,难道需要100000个IP地址不成?因此必须要有方法解决这个问题。DHCP(DynamicHostC

481、onfigurationProtocol)就是应这个需求而诞生的。采用DHCP的方法配置计算机IP地址的方案称为动态IP地址。LinuxLinux操作系统操作系统 在动态IP地址的方案中,每台计算机并不设定固定的IP地址,而是在计算机开机时才被分配一个IP地址,这台计算机被称为DHCP客户端(DHCPClient)。而负责给DHCP客户端分配IP地址的计算机称为DHCP服务器。也就是说DHCP是采用客户/服务器(Client/Server)模式,有明确的客户端和服务器角色的划分。DHCP服务器在给DHCP客户分配IP地址(即IP地址租用)的时候,还会有租用时间的限制,超过租用时间时,DHCP服

482、务器就把这个IP地址回收。LinuxLinux操作系统操作系统 回收的IP地址可以重新分配给另一个DHCP客户,这样IP地址就被重复使用,大大提高了IP地址的利用率。移动的计算机在不同的网络上开机时,将会获得它所在网络上的DHCP服务器分配的有效IP地址,也就不必手工更改IP地址的设置了。由于DHCP客户是在开机的时候自动获得IP地址的,因此并不能保证每次获得的IP地址是相同的。动态IP地址方案可以减少管理员的工作量是显而易见的,只要DHCP服务器正常,IP地址的冲突是不会发生的。要大批量更改计算机的所在子网或其他IP参数,只要在DHCP服务器上进行即可。LinuxLinux操作系统操作系统

483、9.1.2BOOTP引导程序协议引导程序协议DHCP是对BOOTP的扩展,所以我们要先介绍BOOTP(BOOTstrapProtocol)。BOOTP也称为自举协议,它使用UDP来使一个工作站自动获取配置信息。为了获取配置信息,协议软件广播一个BOOTP请求报文,收到请求报文的BOOTP服务器查找出发出请求的计算机的各项配置信息(如IP地址、默认路由地址、子网掩码等),将配置信息放入一个BOOTP应答报文,并将应答报文返回给发出请求的计算机。LinuxLinux操作系统操作系统 这样,一台计算机就获得了所需的配置信息。由于计算机发送BOOTP请求报文时还没有IP地址,因此它会使用全广播地址作为

484、目的地址,而使用全“0”作为源地址,BOOTP服务器可使用广播(Broadcast)将应答报文返回给计算机,或使用收到的广播帧上的MAC地址进行单播(Unicast)。LinuxLinux操作系统操作系统 但是,BOOTP设计用于相对静态的环境,管理人员创建一个BOOTP配置文件,该文件定义了每一个主机的一组BOOTP参数。配置文件只能提供主机标识符到主机参数的静态映射,如果主机参数没有要求变化,BOOTP的配置信息通常保持不变。配置文件不能快速更改,此外管理员必须为每一主机分配一个IP地址,并对服务器进行相应的配置,使它能够理解从主机到IP地址的映射。由于BOOTP是静态配置IP地址和IP参

485、数的,不可能充分利用IP地址和减少配置的工作量,因此有必要引入自动机制。LinuxLinux操作系统操作系统 9.1.3DHCP动态主机配置协议动态主机配置协议DHCP是对BOOTP的扩充,此协议从两个方面对BOOTP进行有力的扩充。第一,DHCP可使计算机通过一个消息获取它所需要的配置信息,例如,一个DHCP报文除了能获得IP地址,还能获得子网掩码、网关等。第二,DHCP允许计算机快速动态获取IP地址,为了使用DHCP的动态地址分配机制,管理员必须配置DHCP服务器使得它能够提供一组IP地址。任何时候一旦有新的计算机连到网络上,新的计算机与服务器联系,并申请一个IP地址。服务器从管理员指定的

486、IP地址中选择一个地址,并将它分配给该计算机。LinuxLinux操作系统操作系统 DHCP允许有三种类型的地址分配。第一种,和BOOTP类似,DHCP允许手工配置,管理员可为特定的某个计算机配置特定的地址。第二种,管理员可为第一次连接到网络的计算机分配一个固定的地址。第三种,DHCP允许完全动态配置,服务器可使计算机在一段时间内“租用”一个地址。LinuxLinux操作系统操作系统 动态地址分配是DHCP的最重要和新颖的功能,与BOOTP所采用的静态分配地址不同的是,动态IP地址的分配不是一对一的映射,服务器不能预先知道客户机的身份。我们通过配置DHCP服务器使得任意一个主机都可以获得IP地

487、址并开始通信。为了使自动配置成为可能,DHCP服务器一开始就拥有网络管理员交给它的一组IP地址,管理员定义服务器操作的规定,DHCP客户机通过与服务器交换信息协商IP地址的使用。在交换中,服务器为客户机提供IP地址,客户机确认它已经接收此地址。一旦客户机接收了一个地址,它就开始使用此地址进行通信。LinuxLinux操作系统操作系统 将所有的TCP/IP参数保存在DHCP服务器有以下的好处:(1)管理员能够快速地检查IP地址及其他配置参数而不必前往每一台计算机,此外由于DHCP的数据库可以在一个中心位置(即DHCP服务器)完成更改,因此重新配置时也无需对每一台主机进行配置。(2)DHCP不会将

488、相同的IP地址同时分配给两台主机,从而避免了冲突。LinuxLinux操作系统操作系统 9.1.4DHCP的工作过程的工作过程DHCP的工作过程如图9-1所示。LinuxLinux操作系统操作系统 图图9-1DHCP的工作过程的工作过程LinuxLinux操作系统操作系统 (1)DHCP客户机启动时,客户机在当前的子网中广播DHCPDISCOVER报文向DHCP服务器申请一个IP地址。(2)DHCP服务器收到DHCPDISCOVER报文后,它将从针对那台主机的地址区间中为它提供一个尚未被分配出去的IP地址,并把提供的IP地址暂时标记为不可用。服务器以DHCPOFFER报文送回给主机。如果网络里

489、包含有不止一个的DHCP服务器,则客户机可能收到好几个DHCPOFFER报文,但客户机通常只承认第一个DHCPOFFER。LinuxLinux操作系统操作系统 (3)客户端收到DHCPOFFER后,向服务器发送一个含有有关DHCP服务器提供的IP地址的DHCPREQUEST报文。如果客户端没有收到DHCPOFFER报文并且还记得以前的网络配置,此时使用以前的网络配置(如果该配置仍然在有效期限内)。(4)DHCP服务器向客户机发回一个含有原先被发出的IP地址及其分配方案的一个应答报文(DHCPACK)。LinuxLinux操作系统操作系统 (5)客户端接收到包含了配置参数的DHCPACK报文,利

490、用ARP检查网络上是否有相同的IP地址。如果检查通过,则客户机接受这个IP地址及其参数,如果发现有问题,客户机向服务器发送DHCPDECLINE信息,并重新开始新的配置过程。服务器收到DHCPDECLINE信息,将该地址标为不可用。LinuxLinux操作系统操作系统 (6)DHCP服务器只能将那个IP地址分配给DHCP客户一定时间,DHCP客户必须在该次租用过期前对它进行更新。客户机在50%租借时间过去以后,每隔一段时间就开始请求DHCP服务器更新当前租借,如果DHCP服务器应答则租用延期。如果DHCP服务器始终没有应答,则在有效租借期的87.5%,客户应该与任何一个其他的DHCP服务器通信

491、,并请求更新它的配置信息。LinuxLinux操作系统操作系统 如果客户机不能和所有的DHCP服务器取得联系,租借时间到后,它必须放弃当前的IP地址并重新发送一个DHCPDISCOVER报文开始上述的IP地址获得过程。(7)客户端可以主动向服务器发出DHCPRELEASE报文,将当前的IP地址释放。LinuxLinux操作系统操作系统 9.1.5DHCP功能的进一步讨论功能的进一步讨论从以上的讨论中,可以看到DHCP可以提高IP地址的利用率,减少IP地址的管理工作量,便于移动用户的使用。但要注意的是,由于客户机每次获得的IP地址不是固定的(当然现在的DHCP已经可以针对某一计算机分配固定的IP

492、地址),如果想利用某主机对外提供网络服务(例如Web服务、DNS服务)等,动态的IP地址是不可行的,这时通常要求采用静态IP地址配置方法。此外对于一个只有几台计算机的小网络,DHCP服务器则显得有点多余。LinuxLinux操作系统操作系统 利用TCP/IP进行通信,光有IP地址是不够的,常常需要网关、WINS、DNS等设置。DHCP服务器除了能动态提供IP地址外,还能同时提供WINS、DNS主机名、域名等附加信息,完善IP地址参数的配置。LinuxLinux操作系统操作系统 9.2DHCP的配置9.2.1DHCP服务器的配置服务器的配置DHCP服务器的配置步骤主要有:(1)安装DHCP服务器

493、软件包。(2)配置/etc/dhcpd.conf文件。(3)生成dhcpd.leases文件。(4)启动dhcpd服务。LinuxLinux操作系统操作系统 1.安装DHCP软件包用“rpm-qa|grepdhcpd”命令确认DHCP服务器软件包是否已经存在,如果不存在,需先把红旗Linux3.0光盘mount上,在RedFlag/RPMS目录下找到软件包,用“rpmivhdhcp-2.0pl5-4.i386.rpm”命令进行安装。LinuxLinux操作系统操作系统 【实例9.1】rootredflag/root#rpm-qa|grepdhcpdhcp-2.0pl5-4dhcpcd-1.3.

494、18pl8-10以上说明服务器软件包dhcp-2.0pl5-4已经存在。LinuxLinux操作系统操作系统 2.配置/etc/dhcpd.conf文件要向一个子网提供服务,DHCP服务器的守护进程dhcpd需要知道它提供服务的子网号和子网掩码,此外为了分配动态IP地址,还必须在每一个子网提供一个或多个IP地址范围。以下是一个非常简单的配置文件。LinuxLinux操作系统操作系统 【实例9.2】subnet192.168.0.0netmask255.255.255.0#IP地址范围。range192.168.0.100192.168.0.199;DHCP服务器将向192.168.0.0/25

495、5.255.255.0子网提供192.168.0.100到192.168.0.199的IP地址。配置时,除了括号所在行外的其他每一行要加“;”号,以“#”号开头的语句是注释语句。LinuxLinux操作系统操作系统 【实例9.3】subnet192.168.0.0netmask255.255.255.0range192.168.0.20192.168.0.69;range192.168.0.100192.168.0.199;这是一个多地址范围的例子。LinuxLinux操作系统操作系统 DHCP的IP地址租用有时间的限制,租用时间可以是任意长度,具体长度根据需要服务的主机的类型来确定。例如:在

496、一个办公环境中,系统不断增加、减少,但移动较少,那么其租用时间长度为一个月或更多个月比较合适。而在一个工厂的测试车间里,一个最长30分钟的租用期足以完成一个网络应用的简单测试过程,其租用时间就为几十分钟。可以指定两个租用时间长度:缺省租用时间和最大租用时间。LinuxLinux操作系统操作系统 前者是DHCP客户请求租用IP地址时如果未指定要租用的时间,DHCP服务器会自动指定的租用时间长度;而后者是DHCP客户请求租用IP地址时可以指定的最大租用时间长度。它们是作为子网声明的子句定义的。常用的 时 间 可 以 是 86400(一 天 )、 604800(一 周 )、2592000(30天)。

497、如果DHCP服务器同时为多个子网服务,每个子网的租用时间又不相同,可以分别在不同的子网配置不同的租用时间。LinuxLinux操作系统操作系统 【实例9.4】subnet192.168.0.0netmask255.255.255.0#下一行是设置缺省租用时间。default-lease-time600;#下一行是设置最大租用时间。max-lease-time7200;range192.168.0.100192.168.0.199;LinuxLinux操作系统操作系统 这个特殊的子网声明指定了一个10分钟的缺省租用时间和一个两小时的最大租用时间。DHCP提供一种机制,使得服务器可以向客户提供有关

498、如何配置网卡的信息(例如:子网掩码)和客户如何访问各种网络服务(例如DNS、网关等)的信息。这些选项可以通过每一子网中的option语句来定义。DHCP可以指定的option很多,常用的选项见表9-1,更多的选项信息请参见“mandhcp-options”命令。LinuxLinux操作系统操作系统 表9-1dhcpd.conf配置文件中可以指定的常用选项关键字含义subnet-maskip-address子网掩码routersip-address1,ip-address2,网关domain-name-serversip-address1,ip-address2,指明DNShost-namest

499、ring指明主机名domain-namestring指明所在域的域名broadcast-addressip-address指明子网的广播地址LinuxLinux操作系统操作系统 static-routersip-addressip-address,配置客户的静态路由表arp-cache-timeoutint指明arp缓冲表项的生存时间nis-serversip-addres1,ip-address2,指明NIS服务器的地址netbios-name-serversip-address1,ip-address2,指明WINS服务器地址netbios-node-tyoeint指明客户的NetBIOS

500、节点的类型:1B-node:广播2P-node:WINS3M-node:先广播后WINS4H-node:先WINS后广播LinuxLinux操作系统操作系统 【实例9.5】subnet192.168.0.0netmask255.255.255.0default-lease-time600;max-lease-time7200;#下一行指定掩码信息为255.255.255.0。optionsubnet-mask255.255.255.0;#下一行指定广播地址为192.168.0.255。optionbroadcast-address192.168.0.255;#下一行指定网关为192.168.0

501、.254。LinuxLinux操作系统操作系统 optionrouters192.168.0.254;#下一行指定域名服务器(DNS)为192.168.0.1。optiondomain-name-servers192.168.0.1;#下一行指定主机所在的域。optiondomain-name“”;range192.168.0.100192.168.0.199;LinuxLinux操作系统操作系统 3.生成/var/lib/dhcp/dhcpd.leases文件通常安装DHCP软件包时并不产生dhcpd.leases文件。服务器守护进程dhcpd会使用这个文件来存储目前的租用信息,dhcpd为

502、每一客户分配一个IP地址时都会在这个文件记录该租用信息。在系统出现故障后或重新启动时,就可以从该文件中重新获得租用信息。用以下命令生成文件:touch/var/lib/dhcp/dhcpd.leasesLinuxLinux操作系统操作系统 4.启动dhcpd服务我们已迫不及待地要启动DHCP服务,然而还有如下一件事情要确定。eth0Linkencap:EthernetHWaddr00:E0:4C:30:03:F7inetaddr:192.168.0.15Bcast:192.168.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMULTICASTMTU:150

503、0Metric:1RXpackets:699errors:0dropped:0overruns:0frame:0LinuxLinux操作系统操作系统 TX packets:289 errors:0 dropped:0 overruns:0 carrier:0 collisions:0txqueuelen:100RXbytes:69881(68.2Kb)TXbytes:27158(26.5Kb)Interrupt:5Baseaddress:0xe000LinuxLinux操作系统操作系统 loLinkencap:LocalLoopbackinetaddr:127.0.0.1Mask:255.0.

504、0.0UPLOOPBACKRUNNINGMTU:16436Metric:1RXpackets:6errors:0dropped:0overruns:0frame:0TXpackets:6errors:0dropped:0overruns:0carrier:0collisions:0txqueuelen:0RXbytes:420(420.0b)TXbytes:420(420.0b)LinuxLinux操作系统操作系统 查看第3行是否有MULTICAST信息,应该庆幸的是大多数的系统有该信息。如果没有,必须手工加入255.255.255.255这个IP地址至routing-table中,请以roo

505、t用户登录,输入:root redflag /root#route add -host 255.255.255.255deveth0LinuxLinux操作系统操作系统 这是为了让dhcpd能够正确地为过分挑剔的DHCP客户端(例如:Windows95)服务。DHCP必须能够发送数据包到255.255.255.255这个IP地址,但是在以往的Linux系统中这个地址被用来做为监听子网广播的IP地址,所以在2.2内核之前版本要输入以上语句借以启用MULTICAST功能,让数据包传递到255.255.255.255这个地址。LinuxLinux操作系统操作系统 9.2.2DHCP客户的配置客户的配

506、置DHCP客户可以有多类,如Windows98、Windows2000或Linux,下面分别进行介绍。1.Windows2000客户的配置首先在Windows2000下把TCP/IP地址设置为自动获得(见图9-2),如果DHCP服务器还提供DNS、WINS等,也把它们设置为自动获得。LinuxLinux操作系统操作系统 图9-2将TCP/IP地址改为自动获得LinuxLinux操作系统操作系统 【实例9.6】C:ipconfig/renewWindows2000IPConfigurationEthernetadapter本地连接:Connection-specificDNSSuffix. :I

507、PAddress.:192.168.0.11SubnetMask. :255.255.255.0DefaultGateway.:192.168.0.1LinuxLinux操作系统操作系统 C:ipconfig/allWindows2000IPConfigurationHostName. :w2000-clientPrimaryDNSSuffix.:NodeType. :BroadcastIPRoutingEnabled.:YesWINSProxyEnabled.:NoDNSSuffixSearchList.:LinuxLinux操作系统操作系统 Ethernetadapter本地连接:Conn

508、ection-specificDNSSuffix. :Description.:RealtekRTL8139(A)PCIFastEthernetAdapterPhysicalAddress.:00-E0-4C-83-C9-65DHCPEnabled.:YesAutoconfigurationEnabled.:YesIPAddress.:192.168.0.11LinuxLinux操作系统操作系统 SubnetMask.:255.255.255.0DefaultGateway.:192.168.0.1DHCPServer.:192.168.0.2DNSServers.:192.168.0.1Le

509、aseObtained.:2003年4月16日10:47:57LeaseExpires.:2003年4月16日10:57:57LinuxLinux操作系统操作系统 C:ipconfig/releaseWindows2000IPConfigurationIPaddresssuccessfullyreleasedforadapter本地连接LinuxLinux操作系统操作系统 2.Windows98客户的配置先在Windows98下把TCP/IP地址设置为自动获得,再执行winipcfg命令,如图9-3所示。点击“释放”按钮可以释放IP地址,点击“更新”可以获得新的IP地址。LinuxLinux操

510、作系统操作系统 图9-3用winipcfg进行动态IP配置LinuxLinux操作系统操作系统 3.Linux客户端的设置设置DHCP客户机有多种方式。下面介绍常见的三种。第一种是使用linuxconf命令,选择要配置的DHCP客户网络设备,把IP地址设为DHCP方式。重新启动系统,系统将从DHCP服务器上获得IP地址。第二种是手工修改/etc/sysconfig/network-scripts/ifcfg-eth0文件,把BOOTPROTO=“none”改为BOOTPROTO=“dhcp”,再执行命令ifup。LinuxLinux操作系统操作系统 【实例9.7】rootredflag/roo

511、t#ifdowneth0rootredflag/root#ifupeth0rootredflag/root#ifconfigDeterminingIPinformationforeth0.done.eth0Linkencap:EthernetHWaddr00:E0:4C:83:C9:65LinuxLinux操作系统操作系统 inetaddr:192.168.0.20Bcast:192.168.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMTU:1500Metric:1RXpackets:19errors:0dropped:0overruns:0frame:

512、0TXpackets:41errors:0dropped:2overruns:0carrier:0collisions:0txqueuelen:100RXbytes:4530(4.4Kb)TXbytes:16334(15.9Kb)Interrupt:11Baseaddress:0xc000LinuxLinux操作系统操作系统 可以看到IP地址已经成功获取。第三种是运行dhcpcd命令。首先要检查客户机是否安装了dhcpcd软件包。rootredflag/root#rpm-qa|grepdhcpcddhcpcd-1.3.18pl8-10如果没有安装,请用rpm命令把dhcpcd软件包安装上。Li

513、nuxLinux操作系统操作系统 【实例9.8】rootredflag/root#mount/dev/cdromrootredflag/root#cd/mnt/cdrom/RedFlag/RPMSrootredflag/root#rpm-ivhdhcpcd-1.3.18pl8-10.i386.rpmPreparing.#100%1:dhcpcd#100%LinuxLinux操作系统操作系统 rootredflag/root#dhcpcdrootredflag/root#ifconfigDeterminingIPinformationforeth0.done.eth0Linkencap:Ethe

514、rnetHWaddr00:E0:4C:83:C9:65inetaddr:192.168.0.22Bcast:192.168.0.255Mask:255.255.255.0UPBROADCASTRUNNINGMTU:1500Metric:1RXpackets:19errors:0dropped:0overruns:0frame:0TXpackets:41errors:0dropped:2overruns:0carrier:0LinuxLinux操作系统操作系统 collisions:0txqueuelen:100RXbytes:4530(4.4Kb)TXbytes:16334(15.9Kb)In

515、terrupt:11Baseaddress:0xc000可以看到IP地址已经成功获取。要停止dhcpcd进程,可以使用“dhcpcd-k”命令,同时IP地址被释放。LinuxLinux操作系统操作系统 9.3DHCP服务器的高级配置服务器的高级配置9.3.1为计算机分配固定的为计算机分配固定的IP地址地址如果你的主机做为服务器为其他用户提供网络服务(例如Web服务、DNS服务和FTP服务),这时IP地址最好能够固定。我们可以把它们的IP地址设为静态IP而不用动态IP,此外我们也可以让DHCP服务器为它分配固定的IP地址。只要在dhcpd.conf文件中加入相应的配置。LinuxLinux操作系

516、统操作系统 【实例9.9】hostwebserver#Web服务器上网卡的MAC地址。hardwareEthernet00:80:c8:1c:29:96;#固定的IP地址。fixed-address192.168.0.210;以上根据网卡MAC地址分配固定的IP地址。LinuxLinux操作系统操作系统 9.3.2进一步说明进一步说明dhcpd.conf前面介绍了dhcpd.conf的基本用法,这里进一步介绍它的使用。dhcpd.conf是一个递归下降格式的配置文件,由参数和声明两大类语句构成。参数类语句主要告诉dhcpd怎么做(例如,地址租用的时间长短)、是否做什么事情(例如,是否给未知客户

517、分配地址)以及提供给客户什么参数(例如,网关是192.168.0.254)。而声明语句则是描述网络的拓扑、描述网络上的客户、要分配给客户的IP地址以及提供一个参数组给一组声明等。LinuxLinux操作系统操作系统 描述网络拓扑结构的声明语句有:“shared-network”和“subnet”语句。如果要给一个子网里的客户动态分配IP地址,那么在subnet声明里必须有一个range声明,用于说明地址范围。如果要给DHCP客户静态指定IP地址,那么每一个客户都要有一个host声明。group语句用于对主机进行分组,指定共同的参数。一个典型的dhcpd.conf如下:LinuxLinux操作系

518、统操作系统 全局参数shared-networkshared-networkname共享网络特定参数.subnet192.168.0.0netmask255.255.255.0子网特定参数.LinuxLinux操作系统操作系统 range192.168.0.10192.168.0.199;subnet192.168.1.0netmask255.255.255.0子网特定参数.range192.168.1.10192.168.1.199;subnet192.168.2.0netmask255.255.255.0子网特定参数.LinuxLinux操作系统操作系统 range192.168.2.10

519、192.168.2.199;group组特定参数.hostws1.domain特定主机参数.hostws2.domain特定主机参数.LinuxLinux操作系统操作系统 当客户启动时,首先采用的参数是host语句中的特定主机参数,其次是group语句中的组主机参数,再到subnet语 句 中 的 子 网 主 机 参 数 , 下 一 个 是 shared-network语句中的共享网络主机参数,最后才是全局参数。即下层参数的声明会覆盖上层参数的声明、下层如无声明参数则采用上层的参数。LinuxLinux操作系统操作系统 1.声明语句shared-network语句用于告诉dhcpd服务器以下几

520、个IP子网,其实是共享同一个物理网络。任何一个在共享物理网络里的子网都必须声明在share-network语句里。当属于其子网里的客户启动时,将获得在share-network语句里指定参数,除非这些参数被subnet或host里的参数覆盖。shared-network的用法如下:LinuxLinux操作系统操作系统 shared-networkshared-networkname参数声明用share-network是一种权宜之计,例如某公司用B类网络172.16.0.0,公司里的部门A被划在子网172.16.0.0里,子网掩码为255.255.255.0,该子网最多只能容纳254台主机。但如

521、果部门A急速增长,超过了254个节点,而物理网络还来不及增加,因此就要在原来这个物理网络上增加一个子网(例如,172.16.1.0),而这两个子网其实是在同一个物理网络上。LinuxLinux操作系统操作系统 【实例9.10】shared-networkshare1subnet-mask255.255.255.0;subnet172.16.0.0netmask255.255.255.0range172.16.0.10172.16.0.253;subnet172.16.1.0netmask255.255.255.0range172.16.1.10172.16.1.253;LinuxLinux操作

522、系统操作系统 subnet语句用于提供足够的信息来告诉dhcpd一个IP地址是否属于该子网。也可以提供指定的子网参数和该子网的IP地址范围,IP地址必须在range声明里指定。subnet语句的用法如下:subnetsubnet-numbernetmasknetmask参数声明LinuxLinux操作系统操作系统 【实例9.11】subnet172.16.3.0netmask255.255.255.0optionrouter172.16.3.254;range172.16.3.10172.16.3.253;range语句的用法如下:rangelow-addresshigh-address;Li

523、nuxLinux操作系统操作系统 对于一个有动态分配IP地址的subnet语句里,至少要有一个range语句,用来指明要分配的IP地址的范围。如果只有一个IP地址要分配,高地址部分可以省略。host语句的用法如下:hosthostname参数声明host语句的作用是为特定的客户机提供网络信息,常常用于给固定的主机分配固定的IP。LinuxLinux操作系统操作系统 【实例9.12】hostharewareEthernet00:80:c8:1c:29:97;fixed-address192.168.0.2;group的用法如下:group参数声明LinuxLinux操作系统操作系统 【实例9.1

524、3】groupoptionrouter192.168.0.254;hostwebserverharewareEthernet00:80:c8:1c:29:96;fixed-address192.168.0.1;hostharewareEthernet00:80:c8:1c:29:97;fixed-address192.168.0.2;LinuxLinux操作系统操作系统 例子中的两个主机router(网关)都为:192.168.0.254。allow和deny语句用来控制dhcpd对不同类客户请求的响应,unknown-clients关键字表示未知的客户。如下:allowunknown-cli

525、ents;denyunknown-clients;前者允许dhcpd分配动态IP给未知的客户,而后者则不允许,缺省是允许的。LinuxLinux操作系统操作系统 2.参数类语句default-lease-time语法如下:default-lease-timetime;指定缺省租约时间,这里的time是以秒为单位的。如果DHCP客户在请求租用IP地址但没有指定租约的时间,租约时间就是缺省租约时间。LinuxLinux操作系统操作系统 max-lease-time语法如下:max-lease-timetime;指定最大的租约时间,如果DHCP客户机在请求IP地址时指定了租约时间,则该值是被允许的最

526、大租约时间。hardware语法如下:hardwarehardware-typehardware-address;LinuxLinux操作系统操作系统 指明网卡类型(ethernet、token-ring)和硬件地址,硬件地址(即网卡地址)由12个十六进制位构成,每2位以“:”隔开,如00:80:c8:1c:29:96。fixed-address语法如下:fixed-addressaddress,address.;该语句指定一个或多个IP地址给一个DHCP客户,该语句只能出现在host声明里。LinuxLinux操作系统操作系统 3.选项类语句选项类语句以option开头,后面跟一个选项名,选

527、项名后是选项数据,选项非常的多,常用选项见表9-1。LinuxLinux操作系统操作系统 9.3.3DHCP转接代理转接代理当网络中存在多个子网被路由器隔开的时候,由于客户计算机只能通过广播发送DHCP请求,这些请求一般不能跨越路由器。我们可以在每一网络上都安置DHCP服务器,然而这样不便于管理。我们也可以设置路由器转发DHCP请求,即转发相应的UDP端口67和68的广播数据包,但这样设置就增加了网络广播,不利于减少网络流量。LinuxLinux操作系统操作系统 还有另外一种方法来使得DHCP客户计算机能够使用子网之外的DHCP服务器来获得IP地址。这就是使用DHCP转接代理服务器来转发DHC

528、P的请求。转接代理服务器把DHCP请求转移到其他网络的DHCP服务器上。转接代理服务器相当于一个中介,它接收到一个请求时,将把请求转发到命令行指定的DHCP服务器,由于它了解DHCP服务器的IP地址,因此能通过正常的IP数据包将原广播包转发到服务器中,而不使用广播。LinuxLinux操作系统操作系统 当转接代理服务器收到DHCP服务器分配的IP地址后,将在接受请求的网络上进行广播,使发出DHCP请求的主机得到IP地址。转接代理服务器实际上是一个程序Dhcrelay。命令格式如下:dhcrelayDHCP服务器地址LinuxLinux操作系统操作系统 【实例9.14】网络的拓扑结构如图9-4所

529、示。图图9-4使用使用DHCP转接代理服务器的网络转接代理服务器的网络LinuxLinux操作系统操作系统 rootredflag/root#dhcrelay192.168.2.252InternetSoftwareConsortiumDHCPRelayAgent2.0pl5Copyright1997,1998,1999TheInternetSoftwareConsortium.Allrightsreserved.Pleasecontributeifyoufindthissoftwareuseful.Forinfo,pleasevisitListeningonSocket/eth0Sendin

530、gonSocket/eth0LinuxLinux操作系统操作系统 9.4DHCP故障排除故障排除如果DHCP服务器不能正常分配IP地址,要先根据DHCP服务器的配置步骤逐一进行检查,特别是配置文件dhcpd.conf中关键字不要错误,以及每行的行末是否加了“;”。还可以以debug模式运行DHCP服务器,观察DHCP服务器的运行情况。首先停止DHCP服务,再以debug模式运行DHCP服务器,如下。LinuxLinux操作系统操作系统 【实例9.15】rootredflag/root#servicedhcpdstopShuttingdowndhcpd:OKrootredflag/root#dh

531、cpd-dInternetSoftwareConsortiumDHCPServer2.0pl5Copyright 1995, 1996, 1997, 1998, 1999 The InternetSoftwareConsortium.Allrightsreserved.LinuxLinux操作系统操作系统 Pleasecontributeifyoufindthissoftwareuseful.Forinfo,pleasevisitListeningonSocket/eth0/192.168.0.0SendingonSocket/eth0/192.168.0.0DHCPDISCOVERfrom0

532、0:e0:4c:83:c9:65viaeth0DHCPOFFERon192.168.0.11to00:e0:4c:83:c9:65viaeth0LinuxLinux操作系统操作系统 DHCPREQUESTfor192.168.0.11from00:e0:4c:83:c9:65viaeth0DHCPACKon192.168.0.11to00:e0:4c:83:c9:65viaeth0BOOTREQUESTfrom00:ab:00:00:00:00viaeth0NoapplicablerecordforBOOTPhost00:ab:00:00:00:00viaeth0DHCPRELEASEof19

533、2.168.0.11from00:e0:4c:83:c9:65viaeth0(found)LinuxLinux操作系统操作系统 从例子中可以清楚地看到DHCP服务器的工作过程,DHCP报文的发送和接收、IP地址分配过程等。Linux系统把系统的信息记录在/var/log/messages文件中,因此我们可以查看文件中有关DHCP的内容来进行排错。同时,DHCP服务器会把已经出租的IP地址存放在文件/var/lib/dhcp/dhcpd.leases中,它也可以帮助我们排除故障。LinuxLinux操作系统操作系统 【实例9.16】rootredflag/root#cat/var/lib/dhc

534、p/dhcpd.leases#AlltimesinthisinUTC(GMT),notyourlocaltimezone.Thisis#notabug,sopleasedontaskaboutit.Thereisnoportablewayto#storeleasesinthelocaltimezone,sopleasedontrequestthisasa#feature.Ifthisisinconvenientorconfusingtoyou,wesincerelyLinuxLinux操作系统操作系统 #apologize.Seriously,though-dontask.#Theformat

535、ofthisdocumentedinthedhcpd.leases(5)manualpage.lease192.168.0.11starts12003/04/1423:52:35;ends22003/04/1500:02:35;hardwareethernet00:e0:4c:83:c9:65;uid01:00:e0:4c:83:c9:65;client-hostnamew2000-client;LinuxLinux操作系统操作系统 习习题题1.动态IP地址方案有什么优点和缺点?2.要给DHCP客户机分配192.168.0.1到192.168.0.199的IP地址,同时指明DNS为192.16

536、8.0.250、网关为192.168.0.251,应如何书写dhcpd.conf文件?3.为什么要使用DHCP转接代理服务器?LinuxLinux操作系统操作系统 4.在以下的配置文件中,192.168.0.20主机的IP地址租用时间是多少?shared-networkshare1optiondefault-lease-time28000;subnet192.168.0.0netmask255.255.255.0range192.168.0.1192.168.0.199;LinuxLinux操作系统操作系统 hostwebserveroptiondefault-lease-time315360

537、00;harewareEthernet00:80:c8:1c:29:96;fixed-address192.168.0.20;LinuxLinux操作系统操作系统 第第10章章Samba10.1Samba简介简介10.2Samba配置配置 10.3使用加密口令使用加密口令10.4Samba和和Windows互相通信互相通信10.5Samba组件中的应用程序组件中的应用程序10.6Samba常见故障排除常见故障排除习题习题LinuxLinux操作系统操作系统 10.1Samba简简介介10.1.1SMB协议协议SMB(ServerMessageBlock)通信协议可以看作是局域网上共享文件和打印

538、机的一种协议。它是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议,而Samba则是将SMB协议搬到Unix上来应用。LinuxLinux操作系统操作系统 通过“NetBIOSoverTCP/IP”使得Samba不但能与局域网络主机分享资源,更能与全世界的电脑分享资源。因为互联网上千千万万的主机所使用的通讯协议就是TCP/IP。 SMB是 在 会 话 层 (session layer)和 表 示 层(presentationlayer)以及小部分应用层(applicationlayer)的 协 议 。 SMB使 用 了 NetB

539、IOS的 应 用 程 序 接 口(ApplicationProgramInterface,简称API)。另外,它是一个开放性的协议,允许协议扩展,这使得它变得更大而且复杂,大约有65个最上层的作业,而每个作业都超过120个函数。LinuxLinux操作系统操作系统 10.1.2什么是什么是SambaSamba是用来实现SMB协议的一种软件,由澳大利亚的AndewTridgell开发,是一套让Unix系统能够应用Microsoft网络通讯协议的软件。它使执行Unix系统的机器能与执行Windows系统的共享资源。Samba属于GNUPublicLicense(简称GPL)的软件;因此,可以合法且

540、免费地使用它。作为Unix的克隆,Linux也可以运行这套软件。这套软件由一系列的组件构成,主要的组件如表10-1所示。LinuxLinux操作系统操作系统 Samba的运行包含两个后台守护进程:nmbd和smbd,它们是Samba的核心。nmbd程序使其他计算机可以浏览Linux服务器;smbd守护进程在SMB服务请求到达时对它们进行处理,并且为被使用或共享的资源进行协调。如果指定的是一个文件,该资源就是一个文件;而一个打印机请求就要求访问一台打印机。实际上,在请求访问打印机时,smbd把要打印的信息存储到打印队列中;在请求访问一个文件时,smbd把数据发到内核,最后将它存到磁盘上。Linu

541、xLinux操作系统操作系统 表10-1Samba软件包的组件smbdSMB服务器,给SMB客户提供文件和打印服务nmbdNetBIOS名称服务器,提供NetBIOS名称服务和浏览支持,帮助SMB客户定位服务器smbclientSMB客户程序,用来存取SMB服务器上的共享资源testprns测试服务器上打印机访问的程序testparm测试Samba配置文件smb.conf正确性的工具LinuxLinux操作系统操作系统 smb.confSamba的配置文件smbstatus列出当前smbd服务器上的连接smbpasswd用来设定Samba用户密码SwatSamba的Web管理工具mksmbpa

542、sswd.sh从/etc/passwd文件形成smbpasswd文件的程序Smb启动或停止Samba服务的脚本程序smbadduser更新/etc/samba/smbusers文件和/etc/samba/smbpasswd文件LinuxLinux操作系统操作系统 在Linux操作系统中,只要在安装的时候选择了Samba,那么它就会在安装Linux的同时安装Samba。如果没有选择的话,也可以在光盘上找到Samba的RPM安装包,使用RPM安装它就可以了。如果你的Linux发布没有包含这个软件,可以到去下载。LinuxLinux操作系统操作系统 10.1.3Samba的功能的功能通过使用Samb

543、a,Linux可以实现如下功能:(1)提供WindowsNT风格的文件和打印机共享。当Windows95、Windows98、Windows2000等共享Linux操作系统的资源时,外表看起来和Windows的资源没有区别。LinuxLinux操作系统操作系统 (2)解析NetBIOS名字。在Windows网络中,为了能够利用网上资源,同时自己的资源也能被别人所利用;各个主机都定期向网上广播自己的身份信息。而负责收集这些信息并为别的主机提供检索情报的服务器就被称为浏览服务器,Samba可以有效地完成这项功能。在跨越网关的时候Samba还可以作WINS服务器使用。(3)提供SMB客户功能。利用S

544、amba提供的smbclient程序可以从Linux下像使用FTP一样访问Windows的资源。LinuxLinux操作系统操作系统 (4)备份PC上的资源。利用一个叫smbtar的Shell脚本,可以使用tar格式备份和恢复一台远程Windows上的共享文件。(5)提供一个命令行工具,在其上可以有限制地支持NT的某些管理功能。(6)支持SWAT(SambaWebAdministrationTool)。(7)支持SSL(SecureSocketLayer)。LinuxLinux操作系统操作系统 10.1.4Samba的启动和退出的启动和退出我们可以通过命令ntsysv来设定在系统启动时自动启动

545、Samba,也可以通过手工启动Samba,具体的命令如下。(1)启动。rootredflag/root#/etc/rc.d/init.d/smbstart或rootredflag/root#servicesmbstartLinuxLinux操作系统操作系统 (2)重启动。rootredflag/root#/etc/rc.d/init.d/smbrestart或rootredflag/root#servicesmbrestart(3)停止。rootredflag/root#/etc/rc.d/init.d/smbstop或rootredflag/root#servicesmbstop在启动Sam

546、ba服务之前首先要完成其配置文件,接下来我们将详细的介绍。LinuxLinux操作系统操作系统 10.2Samba配配置置10.2.1设置设置smb.conf文件文件1.smb.conf的语法文件smb.conf位于/etc/samba/目录下,它的语法非常明确。与Windows的“*.ini”文件十分相似。如下所示:(1)文件被分成几部分,每一部分都包含几个参数,用来定义Samba输出的共享及其详细操作。LinuxLinux操作系统操作系统 (2)文件被分成段,每一段的名字用一个方括号括起来,例如global、home、printers等。(3)global部分定义的参数用来控制Samba的

547、总体特性,而其他每一部分都定义了一个专门的服务。(4)在每一段内用“名称=值”的格式来设置参数,例如,readonly=yes。(5)行首前面加“;”或“#”表示该行为注释。LinuxLinux操作系统操作系统 2.smb.conf文件结构smb.conf文件最基本的三个特殊段分别是:(1)global(全局参数)。(2)directoryshares(目录共享)包括标准的home部分。(3)printershares(打印共享)部分。除了global段外,所有的段都可以看作是一个共享资源,段名是该共享资源的名字,而段里的参数就是共享资源的属性。global,homes和printers这三个

548、段是比较特殊的。LinuxLinux操作系统操作系统 3.smb.conf配置实例下面我们将用实际应用中一个具体的例子来讲述smb.conf的配置。【实例10.1】以下是作者配置好的smb.conf配置文件,本实例分global和共享服务两节来介绍。为了学习方便,本部分采用逐行注释,其中“#”和“;”开始的行在执行时都被忽略。LinuxLinux操作系统操作系统 (1)global节的内容如下:globalnetbiosname=Redflag指定本机在网上邻居中的显示名,如图10-1所示。LinuxLinux操作系统操作系统 图图10-1Samba服务器在服务器在Windows网上邻居网上邻

549、居中的显示名中的显示名LinuxLinux操作系统操作系统 表10-2smb.conf文件中常用的宏宏描述%S当前共享的名称%P当前服务的根路径%u当前服务的用户名%g给定%u的所在工作组名%H给定的%u的私人目录%vSamba版本号%h运行Samba的机器的主机名%m客户机的NetBIOS名%L服务器的NetBIOS名%T当前的日期和时间%I客户机的IP地址%d当前服务器进程IDLinuxLinux操作系统操作系统 (2)共享服务节的内容如下:一个共享资源段由要提供访问的路径和附加的访问权限组成,可以是文件资源或打印资源。共享资源段可以给guest级的用户服务,一般来说guest用户是不需要

550、密码的,如果给guest提供服务,guest的权限是根据Linux里的guest账户来赋予的。如果共享资源段不是给guest提供服务的,则访问这样的段需要用户的密码。由于赋予用户对共享资源段的访问权限是基于该用户在Linux系统里对该资源的访问权限,所以服务器是不能赋予超过Linux系统赋予该用户的权限的。LinuxLinux操作系统操作系统 homes段的内容如下:homescomment=HomeDirectories#就是对共享的描述,可以是任意的字符串。browseable=yes#指定共享是否可以浏览,默认是“yes”。writable=yes#指定共享路径是否可以写,值是“yes”

551、或“no”。LinuxLinux操作系统操作系统 在homes段中,当用户请求一个共享时,服务器将在存在的共享资源段中去寻找,如果找到匹配的共享资源段,就使用这个共享资源段。如果找不到,就将请求的共享名看成是用户的用户名,并在本地的password文件里找这个用户,如果用户名存在且用户提供的密码是正确的,则以这个home段克隆出一个共享提供给用户。这个新的共享的名称是用户的用户名,而不是home,如果home段里没有指定共享路径,就把该用户的主目录(homedirectory)作为共享路径。LinuxLinux操作系统操作系统 通常的共享资源段能指定的参数基本上都可以指定给home段。但一般情

552、况下home段有如下配置就可以满足普通的应用。homeswritable=yesLinuxLinux操作系统操作系统 printers段的内容如下:printers#该段用于提供打印服务。comment=AllPrinterspath=/usr/spool/samba#path是提供共享服务的路径,可以用%u、%m这样的宏来代替路径里的Linux用户和客户机的NetBIOS名。用户在连接到这个共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。LinuxLinux操作系统操作系统 browseable=yesguestok=nobrowse

553、able=nowritable=noprintable=yes#指定用户能不能打印,默认是“no”,要让一个打印共享可以让用户使用,必须设为“yes”。LinuxLinux操作系统操作系统 printerdriver=HPLaserJet4#打印机的驱动类型,这个参数可以让Windows知道远程打印机上的类型,具体的值可以参考在Windows里安装打印机出现选择打印机类型时的打印机类型。LinuxLinux操作系统操作系统 public段的内容如下:public#所有用户都可以读写的目录,方括号内的内容是在Windows下看到的该共享目录的名称。comment=PublicZonepath=/

554、home/publicpublic=yes#这个参数指明是否允许guest账户访问,值为“yes”或“no”。writable=yesLinuxLinux操作系统操作系统 10.2.2共享访问控制共享访问控制在设置共享时我们必须要考虑到网络安全,因此有必要对共享的目录进行访问控制。下面介绍几种常见的访问控制方法。LinuxLinux操作系统操作系统 1.通过读写方式来进行访问控制通过设置对某个目录的读写来进行访问控制是较为常见的方法。这种访问控制通过以下参数实现:readonly若该项设置成“yes”,则用户只能读而不能进行创建、修改和删除等操作。writable若该项设置成“yes”,则用户

555、可以具有写操作的权限,开放该权限时一定要慎重考虑。LinuxLinux操作系统操作系统 【实例10.2】下面是对/home/share目录进行的共享设定:mysharecomment=sharefilepath=/home/sharebrowseable=yesreadonly=yeswritable=noLinuxLinux操作系统操作系统 2.通过控制主机地址来进行访问控制主机地址访问控制通过以下参数实现:hostsallowhostsdeny“hostsallow”指定允许访问的主机列表,而“hostsdeny”指定拒绝访问的主机列表,主机列表用空格或逗号等隔开。主机列表可以是主机名、I

556、P地址、子网地址,也可以用“EXPECT”关键字来限制子网中的个别主机。LinuxLinux操作系统操作系统 【实例10.3】在smb.conf的global段中加入下面的行:globalnetbiosname=redflagworkgroup=workgrouphostsallow=192.168.100.192.168.150.EXCEPT192.168.150.33LinuxLinux操作系统操作系统 #允许网段192.168.100.0和192.168.150.0除了192.168.150.33主机之外的所有主机访问。hostsdeny=192.168.50.#拒绝网段192.168.

557、50的主机的访问。LinuxLinux操作系统操作系统 3.通过控制用户名来进行访问控制如果某些目录只想让具有合法账号的用户访问,那么通过用户名来实现访问控制是一种比较理想的方法。用户名访问控制通过以下几组参数实现:(1)public和guest这两个参数功能相同,使得相应的资源被guest访问,即不需要用户名和密码的验证即可获得资源的访问权限。如果指定的是“guestonly”,则表示相应的服务只允许由guest用户来访问。LinuxLinux操作系统操作系统 (2)invalidusers和validusersvalidusers指定共享资源的有效用户,即允许访问该资源的用户。invali

558、dusers和validusers相反,指定哪些用户不可访问共享资源。列表中的用户名可以用空格隔开。LinuxLinux操作系统操作系统 【实例10.4】下面是对/home/share目录进行的共享设定:mysharecomment=shareuser1anduser2path=/home/sharevalidusers=user1user2#user1和user2是有效用户。browseable=yeswritable=yesprintable=yesLinuxLinux操作系统操作系统 10.2.3Samba安全级别安全级别Samba是重要的安全配置,其参数有四个值,分别是share、us

559、er、server和domain,下面分别介绍。(1)security=user:这是Samba的默认配置,这种情况下要求用户在访问共享资源之前必须先提供用户名和密码进行验证。(2)security=share:这是几乎没有安全性的级别,任何用户都可以不要用户名和口令访问服务器上的资源。LinuxLinux操作系统操作系统 (3)security=server:这个安全级和user安全级类似,但用户名和密码是递交到另外一个SMB服务器去验证,比如递交给一台NT服务器。如果递交失败,就退到user安全级,从用户端看来,server和user这两个级别是没什么分别的。LinuxLinux操作系统操

560、作系统 (4)security=domain:这种安全级别要求网络上存在一台NTPDC,Samba把用户名和密码递交给NTPDC去验证。从用户端看来,user级以上的安全级其实是没什么分别的,只是服务器验证的方式不同,但这三种安全级都要求用户在本Linux机器上要有系统账户,否则是不能访问的。LinuxLinux操作系统操作系统 10.2.4guest用户映射用户映射guest用户映射仅适用于安全模式(user、server和domain安全级)。如果一个用户没有通过身份验证,就可以将其映射为guest用户,从而允许它访问guest共享。这里的guest用户由global段中的“guestac

561、count”参数指定。guest用户映射由全局参数“maptoguest”控制,它只能放在global节中,可以是如下三个值。LinuxLinux操作系统操作系统 (1)maptoguest=Never:该值不进行映射,拒绝非法用户访问任何资源,这是默认行为。(2)maptoguest=BadUser:该值用于如果用户使用了一个不存在的账号登录,就将他映射为guest用户;如果提供的账号正确而口令错误,则禁止连接。LinuxLinux操作系统操作系统 (3)maptoguest=BadPassword:该值将使用错误口令登录的用户映射为guest用户。但是这样的设置会产生一个问题,即如果用户不

562、小心键入了错误的口令,服务器会“偷偷地”将他映射为guest用户,而不给出任何错误信息,这样该用户会在不知道的情况下受到种种访问控制。LinuxLinux操作系统操作系统 10.3使用加密口令使用加密口令现在的Windows98、Windows2000等操作系统在网络中仅传递加密口令作为用户认证的信息。这些客户机在和不支持加密口令并且以user安全级运行的Samba服务器通信时,会遇到很大的困难。为了能顺利的和这些客户机进行通信,Samba也加入了对加密口令的支持。LinuxLinux操作系统操作系统 10.3.1Samba口令文件口令文件为了使用加密口令,Samba需要一份自己的口令文件,并

563、且该文件应该和Linux的/etc/passwd文件保持同步。可以使用mksmbpasswd.sh脚本来制作这份文件:rootredflag/root#cat/etc/passwd|mksmbpasswd.sh/etc/samba/smbpasswd其中smbpasswd就是需要的口令文件,其权限应该设为0600,拥有者是root。LinuxLinux操作系统操作系统 Samba口令文件中的记录和/etc/passwd文件的记录一一对应,它的格式和/etc/passwd文件基本相同,只有密码字段不同。密码字段由两个部分组成,每部分都是32个X。这两部分就是Samba使用的加密口令,前一部分用于

564、和Lanman通信,后一部分用于和Windows通信。Linux的用户口令是无法破译的,因此,刚建立的口令文件中所有的用户都没有正确的口令,用32个X来表示。root用户可以使用smbpasswd命令为每个用户设定一个初始口令,这样用户就可以使用smbpasswd命令更改自己的Samba口令了。smbpasswd的使用方法和passwd命令类似。LinuxLinux操作系统操作系统 root用户也可以将口令设置为空,方法是手工修改口令文件,将前11个X改为“NOPASSWORD”。这样当smbpasswd命令询问用户旧密码时,就可以直接按回车键跳过。LinuxLinux操作系统操作系统 10.

565、3.2使用加密口令使用加密口令要让Samba使用加密口令,需要在/etc/samba/smb.conf文件的global节中加入以下参数:encryptpasswords=yessmbpasswdfile=/etc/samba/smbpasswd上面两行默认时前面有分号,因此要将分号去掉才能生效,否则以分号开始的行表示注释。第一行通知Samba使用加密口令,第二行给出口令文件的路径。以上两行生效后,在Windows端访问Samba共享资源时将要求输入密码,如图10-2所示。LinuxLinux操作系统操作系统 图图10-2访问访问Samba资源时需要输入密码资源时需要输入密码LinuxLinu

566、x操作系统操作系统 10.3.3smbpasswd的使用的使用smbpasswd命令除了可以修改Samba用户的口令外,还可以帮助root用户添加或删除用户。smbpasswd命令的常用参数如下。1.-a该选项增加一个用户账号,该账号必须出现在/etc/passwd文件中,也就是说是一个合法的Linux账号,只有root可以使用本选项。LinuxLinux操作系统操作系统 【实例10.5】添加一个Samba用户。(1)添加一个Linux用户test。rootredflag/root#useraddtest(2)生成Samba口令文件rootredflag /root# cat /etc/pas

567、swd | mksmbpasswd.sh /etc/samba/smbpasswd(3)添加一个Samba用户test,同时设定test的Samba密码。rootredflag/root#smbpasswdatestLinuxLinux操作系统操作系统 完成上述三个步骤后,就可以在Windows的网上邻居点击Samba主机,输入Samba密码后就可以访问Samba共享资源了,如图10-3所示。LinuxLinux操作系统操作系统 图10-3输入Samba密码LinuxLinux操作系统操作系统 2.-d该选项禁止一个用户账号,并不将其删除,仅供root使用。3.-e该选项恢复一个被禁止的用户账

568、号,仅供root使用。4.-n该选项将账号的口令设为空,即将口令字段的前11个字符改为“NOPASSWORD”,仅供root使用。LinuxLinux操作系统操作系统 5.-rremote_machine_name该选项允许用户指定远程主机,如果没有该选项,那么smbpasswd默认修改本地Samba服务器上的口令。remote_machine_name是远程主机的NetBIOS名。6.-Uusername该选项只能和“-r”选项连用。当修改远程主机上的口令时,用户可以用该选项指定欲修改的账号。还允许在不同系统中使用不同账号的用户修改自己的口令。LinuxLinux操作系统操作系统 7.-s该

569、选项使smbpasswd以slient(沉默)模式工作,在此模式下,smbpasswd将从标准输入读取数据,而不是默认的/dev/tty。这可以帮助用户编写调用smbpasswd的脚本。LinuxLinux操作系统操作系统 10.3.4不使用加密口令不使用加密口令使用加密口令主要是为了顺利地完成和Windows的通信,也许大家觉得有些麻烦,我们可以用另外一种方法来实现Linux和Windows的通信。这种方法就是修改Windows的注册表,强制其使用不加密的口令。不同的操作系统,修改注册表的位置是不同的,我们主要讨论以下三种操作系统。LinuxLinux操作系统操作系统 (1)对于Window

570、s98操作系统,可以在HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDVNETSUP里加一个DWORD变量,变量名称为EnablePlainTextPassword,变量值为1,即EnablePlainTextPassword=00000001如图10-4所示。LinuxLinux操作系统操作系统 图图10-4注册表中变量注册表中变量EnablePlainTextPasswordLinuxLinux操作系统操作系统 (2)对于WindowsNT操作系统,可以在HKEY_LOCAL_MACHINESYSTEMCurrentControlSe

571、tServicesRdrParameters里加一个DWORD变量,EnablePlainTextPassword,变量值为1,即EnablePlainTextPassword=00000001LinuxLinux操作系统操作系统 (3)对于Windows2000操作系统,可以在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanWorkStationParameters里加一个DWORD变量,EnablePlainTextPassword,变量值为1,即EnablePlainTextPassword=00000001通过上面的三种方法

572、,就可以让Linux和Windows能在网络上传送明文密码,但是使用明文传输会带来诸如安全等方面的麻烦,所以我们仍然推荐采用加密传输。LinuxLinux操作系统操作系统 10.4Samba和和Windows互相通信互相通信通过配置Samba服务器,可以提供Windows客户机来访问Linux系统上共享的资源。也能够在Linux上通过SMB协议访问Windows系统上的共享资源。只是习惯上Linux计算机用做服务器,Windows计算机用做客户机,很少有让Linux访问Windows计算机的需要。但是越来越多的计算机使用者不但使用Linux作服务器,也使用Linux来处理很多其他任务,那么就可

573、能会需要访问其他Windows计算机上的资源。LinuxLinux操作系统操作系统 10.4.1从从Linux机上访问机上访问Windows资源资源Samba软件中用于访问网络上其他SMB资源的软件为smbclient,它是一个类似于FTP操作方式,通过远程操作的方式进行文件传递的软件。smbclient命令的语法是:smbclientpasswordoptions其中servicename是要连接的资源名称,资源名称的格式如下:/server/serviceLinuxLinux操作系统操作系统 其中server是远程服务器的NetBIOS名字,对于Windows来说,就是它们出现在“网上邻居

574、”中的名字,而service是共享目录的名称。password是存取该资源所需要的口令,如果没有给出password参数,也没有使用“-N”选项,smbclient会提示用户输入口令。LinuxLinux操作系统操作系统 对于smbclient命令的参数,我们需要掌握如下几个:(1)-L:该选项列出远程服务器提供的所有资源。(2)-N:该选项禁止smbclient提示用户输入口令,当连接不需要口令的资源时可以使用该选项。(3) -I:该选项如果不清楚一个Windows计算机的NetBIOS名字,可以使用“-I”指定要访问计算机的IP地址,这时NetBIOS的名字将被忽略。LinuxLinux操

575、作系统操作系统 【实例10.6】本实例中,Linux计算机的IP地址为192.168.100.33,其 Samba配 置 文 件 中 的 NetBIOS名 字 为 Redflag,Windows 2000计 算 机 的 IP地 址 是 192.168.100.39,NetBIOS名 字 为 lgm, 共 享 的 文 件 夹 为 “web”和“test”,如图10-5所示。LinuxLinux操作系统操作系统 图图10-5在在Windows2000中共享的目录中共享的目录LinuxLinux操作系统操作系统 (1)列出Windows计算机共享出来的资源。rootredflag/root#smbc

576、lientLlgm结果如下:Password:addedinterfaceip=192.168.100.33bcast=192.168.100.255nmask=255.255.255.0Got a positive name query response from 192.168.100.39 (192.168.100.39)Domain=WORKGROUP OS=Windows 5.0 Server=Windows 2000LANManagerLinuxLinux操作系统操作系统 SharenameType Comment- -IPC$IPC 远程IPCwebDisktestDisk#共享

577、的目录“web”和“test”。ADMIN$ Disk 远程管理C$Disk默认共享ServerComment-LinuxLinux操作系统操作系统 DZYLS11LGMLINUXSEVERsambaserverPC23REDFLAGsambaserverREDFLAG36SambaServerWorkgroupMaster-ABCPC17DOMAIN24-DLQEECHSOERLSZCEACPC22WORKGROUPDZYLS11LinuxLinux操作系统操作系统 (2)下载文件夹Web里的文件。rootredflag/root#smbclient/lgm/webaddedinterfac

578、eip=192.168.100.33bcast=192.168.100.255nmask=255.255.255.0Gotapositivenamequeryresponsefrom192.168.100.39(192.168.100.39)Password:Domain=WORKGROUPOS=Windows5.0Server=Windows2000LANManagersmb:?#“?”查看可以使用的命令。LinuxLinux操作系统操作系统 ?cddulcdmdnewerputrdsetmodealtnamechmodexitlinkmgetopenpwdrecursesymlinkarc

579、hivechowngetlowercasemkdirprintqrenametarblocksizedelhelplsmoreprintmodequeuermtarmodecanceldirhistorymaskmputpromptrmdirtranslate!LinuxLinux操作系统操作系统 smb:ls.BOOTEX.LOGDDAA00139459398SatAprSatAprWedDecWedDec501:43:562003501:43:5620032508:37:2620021802:52:142003LinuxLinux操作系统操作系统 64007blocksofsize3276

580、8.18967blocksavailablesmb:getbootex.log/root/bootex.log#下载文件。gettingofsize1394as/root/bootex.log(194.5kb/s)(average194.5kb/s)LinuxLinux操作系统操作系统 (3)使用smbmount安装Samba文件系统。rootredflag/root#smbmount/lgm/web/mnt/sambaPassword:安装成功之后,就可以像使用本地的文件一样。LinuxLinux操作系统操作系统 【实例10.7】本实例中Windows2000的计算机的NetBIOS名称为l

581、gm,Linux计算机的NetBIOS名称为Redflag,则整个访问操作如下:(1)在Windows2000的计算机的桌面上点击“网上邻居”,进入Workgroup组,其成员如图10-6所示,找到Linux的主机Redflag。LinuxLinux操作系统操作系统 图图10-6Windows2000的计算机的计算机Workgroup组成员组成员LinuxLinux操作系统操作系统 (2)点击Redflag,出现要求输入用户名和密码的对话框,如图10-7所示。图10-7访问Samba服务器时输入用户名和密码的对话框LinuxLinux操作系统操作系统 (3)如果输入用户名和密码正确的话,则可以

582、看到Redflag机上共享的资源,如图10-8所示。图图10-8Redflag机上共享的资源机上共享的资源LinuxLinux操作系统操作系统 10.4.3Linux和和Windows互发短消息互发短消息相信大家都使用过Windows98的“winpopup.exe”和Windows2000的“netsend”程序,它们是一个很方便的通信工具。在Linux里的Samba也可以处理winpopup的信息。为了处理winpopup的信息,Samba提供了“messagecommand”全局参数,它定义了信息到来时Samba采取的措施,例如在smb.conf的global段加入下面两行:messag

583、ecommand=bashkedit%s;rm%s&messagecommand=/bin/mail-smessagefrom%fon%mrootN1SatApr515:5613/442messagefromLGMonl&1Message1:LinuxLinux操作系统操作系统 FromnobodySatApr515:56:142003Date:Sat,5Apr200315:56:14-0500From:NobodyTo:Subject:messagefromLGMonlgmThisisatest!LinuxLinux操作系统操作系统 10.5Samba组件中的应用程序10.5.1报告报告Sa

584、mba状态状态smbstatus列出当前所有的Samba连接,该命令执行如下:LinuxLinux操作系统操作系统 rootredflag/root#smbstatusSambaversion2.2.5Serviceuidgidpidmachine-IPC$ testtest 2034 lgm(192.168.100.39)SatApr516:08:472003NolockedfilesLinuxLinux操作系统操作系统 10.5.2基于基于Web的配置工具的配置工具SWATSWAT是SambaWebAdministrationTool的缩写,它允许用户通过Web配置Samba。实现SWAT

585、的过程如下:(1)修改/etc/xinetd.d/swat文件。修改后的SWAT文件内容如下:#default:off#description:SWATistheSambaWebAdminTool.UseswatLinuxLinux操作系统操作系统 # toconfigureyourSambaserver.TouseSWAT,# connecttoport901withyourfavoritewebbrowser.serviceswatport=901socket_type=streamwait=no# only_from =127.0.0.1LinuxLinux操作系统操作系统 from=1

586、92.168.100.0255.255.255.0#允许192.168.100.0网段上的所有机器通过Web配置Samba。user=rootserver=/usr/sbin/swatlog_on_failure+=USERIDdisable=no#默认时,“disable=yes”,要想启动SWAT,所以这里一定设置为“no”。LinuxLinux操作系统操作系统 (2)查看/etc/services文件,保证901端口启动。因为SWAT使用的是901端口,所以该端口一定要打开,在文件/etc/services中的内容如下:swat901/tcpLinuxLinux操作系统操作系统 (3)启

587、动超级网络服务。启动。rootredflag/root#/etc/rc.d/init.d/xinetdstart或rootredflag/root#servicexinetdstart重启动。rootredflag/root#/etc/rc.d/init.d/xinetdrestart或rootredflag/root#servicexinetdrestartLinuxLinux操作系统操作系统 关闭。rootredflag/root#/etc/rc.d/init.d/xinetdstop或rootredflag/root#servicexinetdstopLinuxLinux操作系统操作系统

588、 (4)使用SWAT。在浏览器输入,SWAT首先要求用户输入账号和口令,一般可以用root账号登录,登录完成就进入了配置页面,结果如图10-13所示。LinuxLinux操作系统操作系统 图10-13SWAT配置页面LinuxLinux操作系统操作系统 SWAT提供了比较完整的帮助信息,而且也是非常好的配置工具,可以进行一些简单的配置。SWAT虽然使用很方便,但是功能却没有那么强大,某些应用仍需要直接手工修改配置文件。LinuxLinux操作系统操作系统 10.6Samba常见故障排除常见故障排除10.6.1Samba服务器上的故障排除服务器上的故障排除1.用testparm命令检查语法错误【

589、实例10.8】本实例是用testparm检查192.168.100.33机的Sabma的配置语法,命令如下:rootredflag/root#testparmLinuxLinux操作系统操作系统 结果如下:Loadsmbconfigfilesfrom/etc/samba/smb.confProcessingsectionhomesProcessingsectionprintersLoadedservices.Pressentertoseeadumpofyourservicedefinitions#GlobalparametersglobalLinuxLinux操作系统操作系统 netbiosn

590、ame=REDFLAGworkgroup=WORKGROUPhomescomment=HomeDirectories通过该命令我们可以查看到相应的服务定义,并且根据提示及时更改错误的语法。LinuxLinux操作系统操作系统 2.检查相关的参数因为Samba的许多参数是非常重要的,如果设置不正确的话,Windows和Linux将不能通信。这些参数包括“hostsallow”、“hostsdeny”、“validusers”、“invalidusers”等和权限相关的参数。LinuxLinux操作系统操作系统 3.及时重新启动Samba用户在修改完配置文件后一定要重新启动才能生效。4.检查权限的

591、设定在进行共享目录的权限的设置时,一定要考虑清楚,合理的利用read、writable、guest、browsable等。5.在Linux机上使用smbclient失败在Windows2000下要将guest账号起用。LinuxLinux操作系统操作系统 10.6.2Samba客户机上的故障排除客户机上的故障排除(1)在Windows98或Windows2000上看不到Linux的机器。这时候可以用搜索Linux机器IP地址的方法来解决。(2)在Windows端得到的权限不是理想的权限。如果在服务器上设置了“maptoguest=BadPassword”,而且恰恰用户输入了错误的口令,服务器会

592、“偷偷地”将它映射为guest用户,而不给出任何错误提示信息,这样该用户会在不知道的情况下受到种种访问控制。LinuxLinux操作系统操作系统 习习题题1.Samba的配置文件是_。A.smb.conf B.samba.confC.smbpasswdD.smbclient2.我们可以用_命令对Samba的配置文件进行语法测试。A.smbclientB.smbpasswdC.testparm D.smbmountLinuxLinux操作系统操作系统 3.在smb.conf文件中有如下的表达%m,该表达的含义是_。A.当前服务使用的用户名B.当前共享的名称C.当前会话使用的用户名D.客户机的Ne

593、tBIOS名4._是Samba服务器的默认安全级别。A.shareB.userC.serverD.domain5.我们可以通过设置条目_来控制可以访问Samba共享服务的合法主机名。A.allowhostsB.validhostsC.allowD.publicLinuxLinux操作系统操作系统 6.为了使用户在提供了正确的用户名而密码不正确的情况下,也能登录使用Samba资源,需要设置_参数。A.maptoguest=Never B.maptoguest=BadUserC.maptoguest=BadPassword C.maptoguest=Only7.如果不清楚一个Windows计算机的

594、NetBIOS名字,smbclient可以使用_选项指定要访问计算机的IP地址,这时NetBIOS的名字将被忽略。A.-NB.-IC.-L D.-PLinuxLinux操作系统操作系统 8.Samba的配置文件不包括_。A.global(全局)参数B.directoryshares(目录共享)部分C.printershares(打印共享)部分D.applicationshares(应用程序共享)部分LinuxLinux操作系统操作系统 9.使用Samba服务器,一般来说,可以提供打印服务和_。A.域名服务B.文件服务C.IP地址解析D.Web服务10._允许用户通过Web配置Samba。A.S

595、WATB.xinetdC.inetdD.SSLLinuxLinux操作系统操作系统 11._是Samba核心的两个后台进程。A.smbd和nmbdB.nmbd和inetdC.inetd和smbdD.inetd和httpd12._命令可以修改Samba用户的口令。A.smbpasswdB.passwdC.mksmbpasswdD.passwordLinuxLinux操作系统操作系统 第第11章章域名系统域名系统11.1DNS简介简介11.2DNS域名解析域名解析11.3DNS配置配置11.4DNS的启动、停止和测试的启动、停止和测试11.5DNS故障排除故障排除习题习题LinuxLinux操作系

596、统操作系统 11.1DNS简简介介11.1.1概述概述随着互联网在世界范围的快速发展,网络已经走进人们的生活。在TCP/IP网络上,每个设备必须分配一个惟一的地址,计算机在网络上通讯时只能识别如“202.96.134.163”之类的数字地址,而人们在使用网络资源的时候,为了便于记忆和理解,更倾向于使用有代表意义的名称,即域名系统DNS,LinuxLinux操作系统操作系统 如代表深圳之窗网站的域名,这就是为什么当我们打开浏览器,在地址栏中输入如“”的域名后,就能看到我们所需要的页面。这是因为在我们输入域名后,有一台称为“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出

597、那个IP地址所对应的网页,最后再传回给我们的浏览器,我们才能得到结果。LinuxLinux操作系统操作系统 在早期的IP网络世界里,每台电脑都只用IP位址来表示,不久人们就发现这样很难记忆。于是,一些Unix的管理者就建立一个HOSTS对应表,将IP和主机名字对应起来,只要用户输入主机的名字,计算机就可以将该名字转换成机器能够识别的IP地址。但是随着Internet规模的不断扩大,这种做法显然是不可行的。为了解决这个问题,1983年,Internet开始采用域名系统DNS。LinuxLinux操作系统操作系统 DNS的核心思想是分级的,它主要用于将主机名和电子邮件映射成IP地址。那么DNS是怎

598、么运作的?DNS是使用层的方式来运作的。有的组织有其自己的DNS服务器,这个DNS服务器维护着所在域的主机和IP地址的映射记录。当请求名称解析时,DNS服务器先在自己的记录中检查是否有对应的IP地址。如果未找到,它就会向其他DNS服务器询问该信息。DNS解析程序的查询流程如图11-1所示。LinuxLinux操作系统操作系统 例如,某单位的DomainName为,这个DomainName当然不是凭空而来的,是从“”所委派下来的。“”又是从“.cn”委派(delegation)的。“.cn”是从哪里来的呢?答案是从“.”来的,也就是所谓的“根域”(RootDomain)来的。根域已经是Domai

599、nName的最上层。而“.”这层是由InterNIC(InternetNetworkInformationCenter,互联网信息中心)所管理的。全世界的DomainName就是这样,一层一层地委派下来。LinuxLinux操作系统操作系统 图11-1DNS解析程序的查询流程LinuxLinux操作系统操作系统 【实例11.1】DNS是怎么查出域名的IP地址的?(1)你所用的电脑(可能是PC,也可能是工作站)送出一个问题给这台电脑所设定的DNSServer,问:的IP是什么?(2)这台DNS会先看看是不是在它的cache中,如果是,就给出答案;如果不是,就从最上头查起。在DNSServer上面

600、一定有设定“.”,所以,这个时候它就往“.”层的任何一台DNS(目前“.”有13台)问:“.cn”要问谁?LinuxLinux操作系统操作系统 (3)“.”层的DNS会回答“.cn”要向谁去查询(同时你用的DNS会cache起来这个答案)。(4)接下来你所用的DNS就会向“.cn”这层的DNS问:“”要问谁?(5)“.cn”的这层就会回答“”要向谁查(同时你用的DNS也把该答案cache起来)。LinuxLinux操作系统操作系统 (6)直到回答:的IP是61.144.120.117(又cache起来)。经过了这么多的过程,终于得到了这个IP,接下来才能作进一步的连线。要注意的是,在每一层都会

601、问一个问题,并且把答案记下来(cache起来),而且还会忘掉(看该层的设定是要cache多久)。LinuxLinux操作系统操作系统 11.1.2DNS结构结构为了方便管理及确保网络上每台主机的域名绝对不会重复,因此整个DNS结构就设计成4层,分别是根域、顶层域、第二层域和主机。1.根域这是DNS的最上层,当下层的任何一台DNS服务器无法解析某个DNS名称时,便可以向根域的DNS寻求协助。理论上,只要所查找的主机有按规定注册,那么无论它位于何处,从根域的DNS服务器往下层查找,一定可以解析出它的IP地址。LinuxLinux操作系统操作系统 2.顶层域这一层的命名方式有争议。在美国以外的国家,

602、大多数以ISO3116所定制的国码来区分,例如,cn为中国,jp为日本,hk为香港等,如图11-2所示。但是在美国,虽然它也有us,但却很少用来当成顶级域名,反而是以组织性质来区分,如图11-3所示。LinuxLinux操作系统操作系统 图11-2DNS顶级域名以国码命名LinuxLinux操作系统操作系统 图11-3DNS顶级域名以组织性质命名LinuxLinux操作系统操作系统 其中:com:表示商业组织。edu:表示教育机构。org:表示非赢利组织。net:表示计算机网络组织。gov:表示美国政府组织。mil:表示军事部门。LinuxLinux操作系统操作系统 3.第二层域第二层域可以说

603、是整个DNS系统中最重要的部分,在这些域名之下都可以开放给所有人申请,名称则由申请者自己定义,例如,“”。4.主机最后一层是主机,也就是隶属于第二层域的主机,这一层是由各个域的管理员自行建立,不需要通过管理域名的机构。例如,我们可以在“”这个域下再建立“”、“”等主机。LinuxLinux操作系统操作系统 11.1.3资源记录资源记录如前所述,每个DNS数据库都由资源记录构成。一般来说,资源记录包含与特定主机有关的信息,如IP地址、主机的所有者或者提供服务的类型,当进行DNS解析时,它取回的是与该域名相关的资源记录。LinuxLinux操作系统操作系统 数据库文件的每一行都由一条资源记录组成,

604、可以通过普通的编辑器vi来修改,而每个资源记录通常包含五项,大多数情况下用ASCII文本显示,每条记录一行,格式如下:DomainTimetoliveRecordtypeClassRecorddataLinuxLinux操作系统操作系统 各项的含义如下:(1)域名(Domain):该项给出要定义的资源记录的域名,该域通常用来作为域名查询时的关键字。(2)存活期(Timetolive):在该存活期过后,该记录不再有效。(3)类别(Class):该项说明网络类型。目前大部分的资源记录都采用“IN”,表明Internet,该域的缺省值为“IN”。LinuxLinux操作系统操作系统 (4)记录数据(

605、Recorddata):说明和该资源记录相关的信息,通常由资源记录类型来决定。(5)记录类型(Recordtype):该项说明资源记录的类型,常用的资源记录类型如表11-1所示。LinuxLinux操作系统操作系统 表11-1常用的资源记录类型记录类型说明A将主机名转换为地址CNAME指定主机的别名MX建立邮件服务器记录NS域名服务器PTR将地址变成主机名,主机名必须是规范主机名SOA起始授权机构,此记录指定区域的起点HINFO主机描述,是以ASCII码表示的CPU和OSTXT定义一个zone,所有的定义只与该zone有关LinuxLinux操作系统操作系统 具体解释如下:(1)A:此记录列出

606、特定主机名的IP地址。这是域名解析的重要记录。(2)CNAME:此记录指定标准主机名的别名。(3)MX:建立邮件服务器记录,此记录列出了负责接收发到域中的电子邮件的主机。(4)NS:此记录指定负责给定区域的名称服务器。LinuxLinux操作系统操作系统 (5)PTR:反向地址解析。(6)SOA:它所包含的信息有域名、管理员电子邮件地址,以及指示辅助DNS服务器如何更新区域数据文件的设置等。(7)HINFO:该记录允许人们找出一个域内相应的机器和操作系统类型。(8) TXT:该记录允许域以任意方式标识自身,HINFO和TXT两种记录类型都是为了用户的方便,其中任何一条都不是必要的。LinuxL

607、inux操作系统操作系统 11.1.4域名服务器分类域名服务器分类从理论上讲,一台域名服务器就可以包括多个整个DNS数据库,并响应所有的查询,但是这样的话,服务器会由于负载过重而一无用处。另外,服务器失效,整个互联网就会崩溃。LinuxLinux操作系统操作系统 域名服务器不仅应该能够进行一些域名到IP地址的转换,而且还必须具有与其他域名服务器联系的信息。这样,当自己不能进行域名到IP地址的转换时,就能够知道到什么地方找别的域名服务器,这样就使得这些域名服务器组成一个大的域名服务系统。Internet上的域名服务器系统也是按照域名的层次来划分的。每个域名服务器都只对域名体系中的一部分进行管辖,

608、一个独立管理的DNS子树称为一个区域(zone)。一个常见的区域是一个二级域,如。许多二级域将它们的区域划分成更小的区域。例如,大学可能根据不同的学院来划分区域,公司可能根据不同的部门来划分区域。LinuxLinux操作系统操作系统 1.根服务器(RootServers)根域名服务器位于域名空间的最顶层,也就是“.”,它们主要用来管理根域和顶级域名。目前有13个根域名服务器,这些根域名服务器都由NIC维护,它的主机名通常为“a.root-”,一直到“m.root-”。最新的根域名服务器列表可以从获得。LinuxLinux操作系统操作系统 2.主域名服务器(PrimaryServers)通常每个

609、区域有且只有一个主域名服务器。虽然DNS规则中没有明确禁止使用多个主域名服务器,但是由于维护多个主域名服务器一般来说是比较困难的,而且很容易产生错误,所以不鼓励一个域有多个主域名服务器。对每个区域的所有DNS数据库文件的修改都在该区域的主域名服务器上修改。主域名服务器对该域中的辅助域名服务器进行周期性的更新。从BIND8.1.2开始,主域名服务器在DNS配置文件/etc/named.conf中由“zone”语句中的“typemaster”变量来定义。LinuxLinux操作系统操作系统 3.辅助域名服务器(SecondaryServers)辅助域名服务器用作同一区域中主服务器的备份服务器,以防

610、主服务器无法访问或宕机。辅助域名服务器定期与主域名服务器通讯,确保它的区域信息保持最新。如果不是最新信息,辅助域名服务器就会从主服务器获取最新区域数据文件的副本。这种将区域文件复制到多台域名服务器的过程称为区域复制。LinuxLinux操作系统操作系统 4.专用缓存域名服务器(Cache-onlyServers)所有的域名服务器都缓存非它们授权管理的远地域名的信息。而专用缓存服务器只用来缓存任何DNS域的信息,它们不管理任何授权的域名信息,所以它们对任何域提供的信息都是非授权的。专用缓存服务器可以分担辅助域名服务器从主域名服务器获得数据库文件拷贝的负担,可以为用户提供本地的域名信息服务而不用设

611、置主域名服务器和辅助域名服务器。LinuxLinux操作系统操作系统 5.转发域名服务器(ForwardingServers)转发域名服务器是主域名服务器和辅助域名服务器的一种变形,它负责所有非本地域名的本地查询。如果用户定义了一台转发域名服务器,那么所有对非本地域名的查询都首先发送给它。转发域名服务器通常有大量的域名缓存信息,从而可以减少非本地域名查询的重复次数。转发域名服务器不能解析域名查询,本地域名服务器仍然可以访问远地的域名服务器。从BIND8.1.2开始,转发域名服务器在DNS配置文件/etc/named.conf中由“option”语句来定义。LinuxLinux操作系统操作系统

612、11.2DNS域名解析域名解析11.2.1客户解析过程调用客户解析过程调用域名解析过程开始于客户方的解析过程调用。解析过程调用通常已经被构建到系统内部,应用程序通过系统调用来访问它们。客户解析过程有以下特点:LinuxLinux操作系统操作系统 (1)它只查询在/etc/resolv.conf文件中指定的域名服务器。【实例11.2】下面是某/etc/resolv.conf文件的内容:(2)它是由在DNS服务器中的文件/etc/nsswitch.conf中的“hosts”项中的一个关联激活的。LinuxLinux操作系统操作系统 【实例11.3】下面是某/etc/nsswitch.conf文件的

613、部分内容:#/etc/nsswitch.conf#AnexampleNameServiceSwitchconfigfile.Thisbe#sortedwiththemost-usedservicesatthebeginning.:#hosts:dbfilesnisplusnisdnshosts:filesdnsnisplusnisLinuxLinux操作系统操作系统 在该文件中“hosts:filesdnsnisplusnis”行规定了当主机上的应用程序进行域名解析时的顺序。LinuxLinux操作系统操作系统 11.2.2域名解析过程域名解析过程本节将用一个具体的实例来说明域名解析过程。【实

614、例11.4】如果用户发出“”,那么相应的域名解析过程如下:(1)客户系统查询/etc/nsswitch.conf文件来决定域名解析的顺序,在这个例子中,解析的顺序为:先查/etc/hosts文件,然后查询DNS。LinuxLinux操作系统操作系统 (2)如果客户方没有在/etc/hosts里找到相应的项,它就查看/etc/resolv.conf来确定域名解析的查询顺序,以及所指定的本地域名服务器的IP地址。(3)客户系统的解析过程调用发送一个查询给本地的DNS,等待域名服务器返回其IP地址。(4)本地域名服务器查询本机缓存的信息,看该域名最近是否被查询过,如果是,它就返回一个应答给客户。Li

615、nuxLinux操作系统操作系统 (5)如果在本地缓存中没有相应的记录,那么本地的DNS会询问其他DNS,或直接向根域名服务器发送一个递归查询。在本例中,假设缓存中没有相应的记录,那么就访问一台根域名服务器。(6)根域名服务器返回它所知道的有关“.cn”的域名服务器和它们的IP地址。(7)本地域名服务器和一台“”的域名服务器建立联系,发送和以前一样的查询请求。LinuxLinux操作系统操作系统 (8)“”域名服务器返回“”域名服务器的地址。(9)本地域名服务器和一台“”域名服务器建立连接,发送和以前一样的查询请求。(10)“”域名服务器返回“”的IP地址,由本地域名服务器将该查询结果返回给客

616、户。这样,客户系统获得相应的IP后,ftp命令继续执行。LinuxLinux操作系统操作系统 11.3DNS配置11.3.1BIND及其主要配置文件及其主要配置文件DNS最常用的版本是BIND伯克利Internet域名服务器,该服务器称作named。BIND是免费软件,它的版本处于不断更新和完善过程中,从站点可以获得它的最新的源程序和相关的文档。大部分的Linux发行套件都包括named。LinuxLinux操作系统操作系统 BIND的主要配置包括几个相关的文件,本节将结合一个具体的实例来说明DNS服务器的配置过程。我们假定用户建立的DNS服务器所管辖的域名为,对应的子网IP地址是10.1.1

617、4.0,域名服务器的IP地址为10.1.14.61,配置过程如下。LinuxLinux操作系统操作系统 1.配置启动文件/etc/named.conf该文件是域名服务器守护进程named启动时读取到内存的第一个文件。在该文件中定义了域名服务器的类型、所授权管理的域以及相应数据库文件和其所在的目录。该文件我们分为两个部分讲述,第一部分的内容如下:LinuxLinux操作系统操作系统 /optionsdirectory/var/named;/query-sourceaddress*port53;notifyno;forwarders202.96.134.133;LinuxLinux操作系统操作系统

618、 zone.INtypehint;filenamed.ca;zone0.0.127.in-addr.arpaINtypemaster;filenamed.local;allow-updatenone;LinuxLinux操作系统操作系统 2.创建/var/named/named.ca在Linux系统上,通常在/var/named目录下已经提供了一个named.ca文件,该文件中包含了Internet的顶层域名服务器,但这个文件通常会有变化,所以建议最好从InterNIC下载最新的版本。该文件可以通过匿名FTP下载。该文件的内容如下:LinuxLinux操作系统操作系统 ;Thistheinfo

619、rmationonrootnameserversneededto;initializecacheofInternetdomainnameservers;(e.g.referencethisthecache.;configurationBINDdomainnameservers).;ThismadeavailablebyInterNICregistrationservicesLinuxLinux操作系统操作系统 ;underanonymous;file/domain/named.root;onserver;-OR-underGopheratRS.INTERNIC.NET;undermenuInt

620、erNICRegistrationServices(NSI);submenuInterNICRegistrationArchives;filenamed.rootLinuxLinux操作系统操作系统 ;lastupdate:Aug22,1997;relatedversionofrootzone:1997082200;formerlyNS.INTERNIC.NET;.3600000INNSA.ROOT-SERVERS.NET.LinuxLinux操作系统操作系统 A.ROOT-SERVERS.NET.3600000A198.41.0.4;formerlyNS1.ISI.EDU;. 3600000

621、NSB.ROOT-SERVERS.NET.B.ROOT-SERVERS.NET.3600000A128.9.0.107;formerlyC.PSI.NETLinuxLinux操作系统操作系统 ;. 3600000NSC.ROOT-SERVERS.NET.C.ROOT-SERVERS.NET.3600000A192.33.4.12;formerlyTERP.UMD.EDU;.3600000NSD.ROOT-SERVERS.NET.D.ROOT-SERVERS.NET.3600000A128.8.10.90LinuxLinux操作系统操作系统 ;formerlyNS.NASA.GOV;.36000

622、00NSE.ROOT-SERVERS.NET.E.ROOT-SERVERS.NET.3600000A192.203.230.10;formerlyNS.ISC.ORG;.3600000NSF.ROOT-SERVERS.NET.F.ROOT-SERVERS.NET.3600000A192.5.5.241LinuxLinux操作系统操作系统 ;formerlyNS.NIC.DDN.MIL;.3600000NSG.ROOT-SERVERS.NET.G.ROOT-SERVERS.NET.3600000A192.112.36.4;formerlyAOS.ARL.ARMY.MIL;.3600000NSH.

623、ROOT-SERVERS.NET.H.ROOT-SERVERS.NET.3600000A128.63.2.53;formerlyNIC.NORDU.NET;LinuxLinux操作系统操作系统 .3600000NSI.ROOT-SERVERS.NET.I.ROOT-SERVERS.NET.3600000A192.36.148.17;temporarilyhousedatNSI(InterNIC);.3600000NSJ.ROOT-SERVERS.NET.J.ROOT-SERVERS.NET.3600000A198.41.0.10;housedinLINX,operatedbyRIPENCC;.

624、3600000NSK.ROOT-SERVERS.NET.K.ROOT-SERVERS.NET.3600000A193.0.14.129LinuxLinux操作系统操作系统 ;temporarilyhousedatISI(IANA);.3600000NSL.ROOT-SERVERS.NET.L.ROOT-SERVERS.NET.3600000A198.32.64.12;housedinJapan,operatedbyWIDE;.3600000NSM.ROOT-SERVERS.NET.M.ROOT-SERVERS.NET.3600000A202.12.27.33;EndofFileLinuxLin

625、ux操作系统操作系统 3.创建/var/named/named.hosts该文件指定了域中主机域名同IP地址的映射。该文件的内容如下:;$TTL86400 INSOA.(2001110600;serial28800;refreshLinuxLinux操作系统操作系统 14400;retry3600000;expire86400;minimum)INNS.INMX.LinuxLinux操作系统操作系统 localhost.INA127.0.0.1a100INA10.1.14.61a101INA10.1.14.62a102INA10.1.16.63a103INA10.1.14.64a104INA1

626、0.1.14.65wwwINCNAMEa100ftpINCNAMEa100LinuxLinux操作系统操作系统 4.创建/var/named/named.10.1.14该文件主要定义了IP地址到主机名的转换。IP地址到主机名的转换是非常重要的,Internet上很多应用,例如NFS、Web服务等都要用到该功能。该文件的内容如下:;$TTL86400LinuxLinux操作系统操作系统 INSOA.(2001110600;serial28800;refresh14400;retry3600000;expire86400;minimum)INNS.LinuxLinux操作系统操作系统 61INPT

627、R.62INPTR.63INPTR.64INPTR.65INPTR.LinuxLinux操作系统操作系统 5.创建/var/named/named.local该文件用来说明“回送地址”的IP地址到主机名的映射。该文件的内容如下:;$TTL86400INSOA.(2001110600;serialLinuxLinux操作系统操作系统 28800;refresh14400;retry3600000;expire86400;minimum)INNS.1INPTRlocalhost.LinuxLinux操作系统操作系统 11.3.2相关配置文件相关配置文件和域名服务器配置相关的文件主要包括如下两个文件

628、。1./etc/resolv.conf该文件用来告诉解析器调用的本地域名、域名查找的顺序以及要访问域名服务器的IP地址。该文件的内容如下:LinuxLinux操作系统操作系统 2./etc/nsswitch.conf操作系统使用了很多关于主机、用户、组等信息的数据库。这些数据库的数据存在于不同的文件中。例如,主机名和主机IP地址可能存在于/etc/hosts、NIS、NIS+或DNS中。对于每个数据库,可以使用多个源文件 , 这 些 源 文 件 和 它 们 的 查 询 顺 序 就 是 在/etc/nsswitch.conf文件中指定的。该文件中和域名服务有关的一项是“hosts”。该文件的内容

629、如下:LinuxLinux操作系统操作系统 #/etc/nsswitch.confpasswd:filesnisplusnisshadow:filesnisplusnisgroup:filesnisplusnis#hosts:dbfilesnisplusnisdnshosts:filesdnsnisplusnisLinuxLinux操作系统操作系统 bootparams:nisplusNOTFOUND=returnfilesethers:filesnetmasks:filesnetworks:filesprotocols:filesnisplusnisrpc:filesservices:fil

630、esnisplusnisnetgroup:filesnisplusnisLinuxLinux操作系统操作系统 publickey:nisplusautomount:filesnisplusnisaliases:filesnisplusLinuxLinux操作系统操作系统 11.3.3DNS的安全管理的安全管理由于DNS域名服务器处于Internet上,所以有可能受到入侵或非授权的访问。1.查询请求限制在/etc/named.conf中,可以用“allow-query”语句来限制提供所服务的IP地址范围。请看下面的这个例子:LinuxLinux操作系统操作系统 optionsallow-quer

631、y10.1.14.0/24;10.1.20.0/24;在文件中加入上面的语句,就只允许位于子网10.1.14和10.1.20上的机器访问本域名服务器。“24”表示子网掩码为24位。LinuxLinux操作系统操作系统 2.对特殊的域进行限制可以通过在“zone”语句中使用“allow-query”语句对所定义的域进行限制。例如:INtypemaster;filenamed.hosts;allow-query“10.1.14.0/24”;在这个例子中,只允许在10.1.14.0/24网络中的计算机对该域名服务器进行查询。LinuxLinux操作系统操作系统 11.4DNS的启动、停止和测试的启动

632、、停止和测试11.4.1DNS的启动和停止的启动和停止按照上节所说的步骤设置好/etc/named.conf文件中定义的几个文件后,就可以启动DNS进程。DNS启动方法 有 自 动 和 手 工 两 种 。 如 果 系 统 启 动 是 存 在/etc/named.conf文件,系统会自动启动域名服务器进程named。LinuxLinux操作系统操作系统 下面主要介绍手工方法,具体的命令如下:(1)启动。rootredflag/root#/etc/rc.d/init.d/namedstart或rootredflag/root#servicenamedstart(2)重启动。rootredflag/

633、root#/etc/rc.d/init.d/namedrestart或rootredflag/root#servicenamedrestartLinuxLinux操作系统操作系统 (3)停止。rootredflag/root#/etc/rc.d/init.d/namedstop或rootredflag/root#servicenamedstop(4)查看状态。rootredflag/root#servicenamedstatusLinuxLinux操作系统操作系统 11.4.2DNS测试配置好DNS并启动named进程后,应该对DNS进行测试。BIND软件包提供了三个工具:nslookup、d

634、ig和host。其中最常用的是nslookup。下面将分别使用这三个命令对DNS进行测试。LinuxLinux操作系统操作系统 1.nslookup查找命令nslookup命令用来向Internet域名服务器发出查询信息。它有两种模式:交互式和非交互式。交互模式允许使用者从名字服务器查询不同主机或域的信息,或者打印出一个域内的主机列表;非交互模式用于只打印一个主机或域的名字和所请求的信息。LinuxLinux操作系统操作系统 当没有指定参数(使用缺省的域名服务器)或第一个参数是“_”,第二个参数为一个域名服务器的主机名或IP地址时,nslookup为交互模式;当第一个参数是待查询的主机的域名或

635、IP地址时,nslookup为非交互模式。这时,任选的第二个参数指定了一个域名服务器的主机名或IP地址。下面通过实例使用交互模式对DNS进行测试。LinuxLinux操作系统操作系统 【实例11.5】1)检查正向DNS查找主机。rootredflag/root#Server:10.1.14.61Address:10.1.14.61#53Name: Address:10.1.14.61该命令用来查找主机的IP地址。LinuxLinux操作系统操作系统 如果只输入:a100nslookup应该能够根据文件/etc/resolv.conf中的定义,自动添加的域名,然后显示与上面相同的结果。Linux

636、Linux操作系统操作系统 查找域名信息。rootredflag/root#nslookupsettype=Server:10.1.14.61Address:10.1.14.61#nameserver=.【说明】“settype”表示设置查找的类型。LinuxLinux操作系统操作系统 2)检查反向DNS假如要查找IP地址为10.1.14.61的域名,输入:rootredflag/root#nslookupsettype=ptr10.1.14.61Server:10.1.14.61Address:10.1.14.61#5361.14.1.10.in-addr.arpaname=.LinuxLi

637、nux操作系统操作系统 3)检查MX邮件记录要查找域的邮件记录地址,输入:rootredflag/root#nslookupsettype=Server:10.1.14.61Address:10.1.14.61#mailexchanger=.LinuxLinux操作系统操作系统 4)检查CNAME别名记录要查找主机的别名,输入:rootredflag/root#nslookupsettype=cnameServer:10.1.14.61Address:10.1.14.61#53canonicalname=.LinuxLinux操作系统操作系统 2.dig命令dig(domaininformat

638、iongroper)是一个灵活的命令行方式的域名查询命令,常用于从域名服务器获取特定的信息。LinuxLinux操作系统操作系统 【实例11.6】通过dig可以查看域名“”的信息。rootredflag/root#;DiG9.1.3/ns;globaloptions:printcmd;Gotanswer:; -HEADERHEADER”。LinuxLinux操作系统操作系统 (2)主机域名后没有一个小点(.)。这是最常见的错误。在不同的地方漏掉所出现的现象是不同的。如果是在一个完全标识域名后漏掉,那么查询到的主机名或部分的域名会出现两个。(3)/etc/resolv.conf文件中域名服务器I

639、P地址不正确。在这种情况下,nslookup命令不会出现提示符。(4)回送地址数据库文件有问题。同样,nslookup命令不会出现提示符。(5)在/etc/named.conf文件中定义的文件名与/var/named目录下的文件名一致。LinuxLinux操作系统操作系统 习习题题1.指定域名服务器位置的文件是_。A./etc/hostsB./etc/networksC./etc/resolv.confD./.profile2.DNS提供了一个_命名方案。A.分级B.分层C.多级D.多层3.Internet管理结构最高层域划分中表示商业组织的是_。A.comB.govC.milD.orgLin

640、uxLinux操作系统操作系统 4._表示别名的资源记录。A.MXB.SOAC.cnameD.PTR5.DNS最常见的版本是_。A.BINDB.namedC.SambaD.COMBA6. 主域名服务器在DNS配置文件/etc/named.conf中由“zone”语句中的“typemaster”变量来定义。这种说法。A.正确B.错误LinuxLinux操作系统操作系统 7.在配置/etc/nsswitch.conf文件时,我们发现在hosts行选项的次序是“filesnisdns”,这表明在查找主机名时,将首先在/etc/hosts文件查找,然后通过NIS查找,最后通过DNS服务器来查找。A.正

641、确B.错误8.DNS资源记录通常包含4项,格式为:DomainRecordtypeClassRecorddata。这种说法。A.正确B.错误LinuxLinux操作系统操作系统 9.常用的DNS测试的命令包括_。A.nslookupB.hostC.dig D.trace10.常见的域名服务器包括_。A.主域名服务器B.辅助域名服务器C.根域名服务器D.转发域名服务器LinuxLinux操作系统操作系统 第第12章章Apache12.1Apache简介简介12.2Apache的配置的配置12.3Apache的各种服务的各种服务12.4Apache访问控制访问控制12.5Apache常见故障排除常

642、见故障排除习题习题LinuxLinux操作系统操作系统 12.1Apache简介简介12.1.1Apache的地位和功能的地位和功能2003年3月,根据Netcraft()对1995年9月到2003年3月Web服务器使用情况的调查结果显示如图12-1所示,Apache是世界排名第一的Web服务器,而且这种良好的势头还在上升。LinuxLinux操作系统操作系统 图图12-11995.92003.3各种各种Web服务器的使用情况服务器的使用情况LinuxLinux操作系统操作系统 Apache之所以有今天的好成绩,是因为它有一个强大的ApacheGroup。ApacheGroup是一个完全通过I

643、nternet进行运作的非盈利机构。由它来决定ApacheWeb服务器的标准发行版中应该包含的内容,并且准许任何人修改排错,提供新的特征和将它移植到新的平台上等。当新的代码被提交给ApacheGroup时,该团体审核它的具体内容并进行测试,如果满意,该代码就会被集成到Apache的主要发行版中。Apache的主要特性包括:LinuxLinux操作系统操作系统 (1)几乎可以运行在所有的计算机平台上;(2)支持最新的HTTP/1.1协议;(3)简单而强有力的基于文件的配置,即httpd.conf;(4)支持通用网关接口(CGI);(5)支持虚拟主机;(6)支持HTTP认证;(7)集成PERL;(

644、8)集成的代理服务器;LinuxLinux操作系统操作系统 (9)可以通过Web浏览器监视服务器的状态,可以自定义日志;(10)支持服务器端包含命令(SSI);(11)支持安全SOCKET层(SSL);(12)具有用户会话过程的跟踪能力;(13)支持FASTCGI;(14)支持JAVASERVLETS。LinuxLinux操作系统操作系统 12.1.2Apache的下载和安装的下载和安装通常用户在安装Linux时可以选择安装Apache,然后再在启动时启动httpd进程,这样打开浏览器,输入localhost或本机的IP地址,就会访问到Apache的默认页面。用户可以按照下列步骤检查系统上的A

645、pache服务器软件的安装情况。LinuxLinux操作系统操作系统 (1)用“rpmq”命令检查是否安装了Apache软件包。输入如下命令:rootredflag/root#rpmqapache如果输出显示了Apache软件包名称,就说明已经安装了软件。(2)输入如下命令,检查是否运行了httpd进程。LinuxLinux操作系统操作系统 rootredflag/root#psax|grephttpd955?S0:00/usr/sbin/httpd958?S0:00/usr/sbin/httpd959?S0:00/usr/sbin/httpd960?S0:00/usr/sbin/httpd9

646、61?S0:00/usr/sbin/httpd962?S0:00/usr/sbin/httpd963?S0:00/usr/sbin/httpd964?S0:00/usr/sbin/httpd965?S0:00/usr/sbin/httpdLinuxLinux操作系统操作系统 966?S0:00/usr/sbin/httpd967?S0:00/usr/sbin/httpd971pts/1S0:00grephttpdApache版本的更新一般要快于Linux内核的更新,要下载新的Apache版本,可以到网站下载。Apache网站的下载画面如图12-2所示。LinuxLinux操作系统操作系统 图图

647、12-2Apache网站下载画面网站下载画面LinuxLinux操作系统操作系统 很多免费的Linux应用软件在网上都可以找到,但基本上均为“*.tgz”或“*.tar.gz”格式,需要编译才能使用。本章将从网上下载一个新的Apache版本,通过其下载、编译、再到配置和使用的完整过程让大家学习和体会。LinuxLinux操作系统操作系统 【实例12.1】我们下载的是apache_1.3.27.tar.gz文件,存放在/root目录下,通过下面的步骤可以完成安装和编译等工作。(1)解压缩。可用以下命令:rootredflag /root#tar zxvf apache_1.3.27.tar.gz

648、 C/root/apachetar命令是在Linux中应用最为广泛的,zxvf和-C参数说明如下:LinuxLinux操作系统操作系统 z:用gzip来压缩和解压的文件,还原时一定也要使用该参数。x:从档案文件中释放文件。v:报告tar命令处理的详细信息。f:使用文件时这个参数是必须的。-C:将压缩文件解压到指定的目录中。本例中将Apache源代码解压到/root/apache目录中。LinuxLinux操作系统操作系统 (2)进入到解压的目录。用以下命令:rootredflag/root#cdapache/apache_1.3.27进入到该目录后,用户会找到一个configure的脚本,该脚

649、本是使用APACI配置所必须的。用户可以在该脚本后加“-help”来获取帮助,执行的命令如下:rootredflagapache_1.3.27#./configure-helpLinuxLinux操作系统操作系统 (3)确定安装Apache的路径。首先确定Apache的安装路径。Apache默认的安装路径是/usr/local/apache。当然用户可以根据自己的需要进行指定,本例中我们将Apache安装到/usr/apache下。执行如下的命令:rootredflagapache_1.3.27#./configure-prefix=/usr/apacheLinuxLinux操作系统操作系统

650、执行结果如下:ConfiguringforApache,Version1.3.27+usinginstallationpathlayout:Apache(config.layout)CreatingMakefileCreatingConfiguration.apaciinsrcCreatingMakesrcCreatingMakesrc/apCreatingMakesrc/mainCreatingMakesrc/lib/expat-liteCreatingMakesrc/modules/standardLinuxLinux操作系统操作系统 (4)编译Apache。在成功的运行了上面的脚本文件后

651、,用户就可以编译Apache了。从Apache源代码目录的根目录执行如下的指令来编译Apache源程序:rootredflagapache_1.3.27#make如果编译成功,将产生WWW服务器可执行的二进制文件,否则,请查看错误信息并重新按配置步骤运行一遍。LinuxLinux操作系统操作系统 (5)安装Apache。make命令成功编译以后,在没有任何错误信息的情况下,可以运行如下的指令来安装Apache。rootredflagapache_1.3.27#makeinstall安装完成后的画面如图12-3所示。LinuxLinux操作系统操作系统 图图12-3Apache安装成功画面安装成

652、功画面LinuxLinux操作系统操作系统 (6)清除对象文件。只要已经编译并安装了Apache,就可以运行“makeclean”来删除任何在编译时创建的对象文件,执行的命令如下:rootredflagapache_1.3.27#makeclean在正确地完成上述步骤之后,新版本Apache就已经安装好了。LinuxLinux操作系统操作系统 12.1.3Apache的启动与关闭的启动与关闭Apache安装好之后,会在安装目录下生成一个bin的目录,Apache的主要运行脚本都在该目录下。在运行这些命令时一定要进到该目录里,或者输入绝对路径,否则不能正确执行。(1)启动Apache。rootr

653、edflag/root#cd/usr/apache/binrootredflagbin#./apachectlstart启动成功后,在浏览器中输入本机的IP地址,将会看到Apache的默认页面,如图12-4所示。LinuxLinux操作系统操作系统 图图12-4Apache的默认首页的默认首页LinuxLinux操作系统操作系统 (2)重新启动Apache。rootredflagbin#./apachectlrestart或rootredflagbin#./apachectlgraceful(3)关闭Apache。rootredflagbin#./apachectlstopLinuxLinux

654、操作系统操作系统 12.2Apache的的配配置置Apache服务器的设置文件位于/usr/apache/conf/目录下,传统上使用三个配置文件httpd.conf、access.conf和srm.conf来配置Apache服务器。事实上,当前版本的Apache将原来httpd.conf、srm.conf与access.conf中的所有配置参数均放在了一个配置文件httpd.conf中,只是为了与以前的版本兼容(使用这三个设置文件的方式来源于NCSA-httpd),LinuxLinux操作系统操作系统 才使用三个配置文件,而提供的access.conf和srm.conf文件中没有具体的设置。

655、由于在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的设置。在httpd.conf文件中分为三个部分,分别是全局参数、服务器的主要设置和虚拟主机。本节先介绍全局参数和服务器主要设置,虚拟主机将在12.3节详细介绍。LinuxLinux操作系统操作系统 我们首先来介绍Apache配置文件的格式,第一个字符为“#”符号的是注释行,服务器在进行语法分析时会忽略掉所有的注释行,除了注释和空行外,服务器把其他的行认为是完整的或部分的指令。指令又分成与shell命令类似的命令和伪HTML标记。例如,伪HTML标记的用法如下:LinuxLinux操作系统操作系统

656、 OptionsFollowSymLinksAllowOverrideAll与HTML不同,伪HTML标记必须各占一行,我们可以像上面那样把命令组成一组放在某个伪HTML标记中。其实在Apache配置文件中有很多类似这样的模块。LinuxLinux操作系统操作系统 12.2.1文件文件httpd.conf的全局参数的全局参数下面我们通过实际应用中一个具体的例子来详细讲述httpd.conf的全局参数的配置。1.ServerTypestandaloneServerType定义服务器的启动方式,缺省值为独立方式standalone,httpd服务器将由其本身启动并驻留在主机中监视连接请求。Linu

657、xLinux操作系统操作系统 2.ServerRoot/usr/apacheServerRoot用来存放服务器的配置、出错和记录文件的最底层目录。如果使用APACI接口编译和安装Apache,那么缺省ServerRoot为在配置脚本中提供的prefix值;否则需要修改缺省值为一个合适的目录。由于httpd会经常进行并发的文件操作,就需要使用加锁的方式来保证文件操作不冲突,由于NFS文件系统在文件加锁方面能力有限,因此这个目录应该是本地磁盘文件系统,而尽量避免使用NFS文件系统。LinuxLinux操作系统操作系统 3.#LockLockFile参数指定了httpd守护进程的加锁文件,一般不需要

658、设置这个参数,Apache服务器将自动在ServerRoot下面的路径中进行操作,但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径。LinuxLinux操作系统操作系统 4.PidPidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFile定义的文件中就记录httpd父进程的进程号。LinuxLinux操作系统操作系统 5.ScoreBoardhttpd使用ScoreBoardFil

659、e来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文件httpd.conf,并使用不同的ScoreBoardFile。LinuxLinux操作系统操作系统 6.#ResourceConfigconf/srm.conf和#AccessConfigconf/access.conf这两个参数ResourceConfig和AccessConfig是为了与使用srm.conf和access.conf设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不

660、存在其他设置文件,而仅使用httpd.conf一个文件来保存所有的设置选项。LinuxLinux操作系统操作系统 7.Timeout300Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接。8.KeepAliveOn在HTTP1.0中,一次连接只能传输一次HTTP请求,而KeepAlive参数用于支持HTTP1.1版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。只有较新的浏览器才支持这个功能。LinuxLinux操作系统操作系统 9.MaxKeepAliveRequests100MaxKeepAliveRequests

661、为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0,将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。LinuxLinux操作系统操作系统 10.KeepAliveTimeout15KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。LinuxLinux操作系统操作系统 11.MinSpareServers5和MaxSpareServers10在使用子进程处理HTTP请求的Web

662、服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。LinuxLinux操作系统操作系统 在运行中随着客户请求的增多,启动的子进程会随之增多,但这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。但是空余的子进程副本不能光增加不减少,太多的空余子进程没有处理任务,也占用服务器的处理能力,因此也要限制空余副本的数量,使其保持一个合适的数量,以便既能及

663、时回应客户请求,又能减少不必要的进程数量。LinuxLinux操作系统操作系统 因此就可以使用参数MinSpareServers来设置最少的空余子进程数量,以及使用参数MaxSpareServers来限制最多的空闲子进程数量,多余的服务器进程副本就会退出。根据服务器的实际情况来进行设置,如果服务器性能较高,并且也被频繁访问,就应该增大这两个参数的设置。对于高负载的专业网站,这两个值应该大致相同,并且等同于系统支持的最多服务器副本数量,也减少了不必要的副本退出。LinuxLinux操作系统操作系统 12.StartServers5StartServers参数就是用来设置httpd启动时启动的子进

664、程副本数量,这个参数与上面定义的MinSpareServers和MaxSpareServers参数相关,都是用于启动空闲子进程以提高服务器的反应速度的。这个参数应该设置为前两个值之间的一个数值,小于MinSpareServers或大于MaxSpareServers都没有意义。LinuxLinux操作系统操作系统 13.MaxClients150服务器的能力毕竟是有限的,不可能同时处理无限多的连接请求,因此参数MaxClients就是用于规定服务器支持的最多并发访问的客户数,如果这个值设置得过大,系统在繁忙时不得不在过多的进程之间进行切换来为太多的客户进行服务,这样对每个客户的反应就会减慢,并降

665、低了整体的效率。如果这个值设置得较小,那么系统繁忙时就会拒绝一些客户的连接请求。LinuxLinux操作系统操作系统 当服务器性能较高时,就可以适当增加这个值的设置。对于专业网站,应该使用提高服务器效率的策略,因此这个参数不能超过硬件本身的限制,如果频繁出现拒绝访问现象,就说明需要升级服务器硬件了。对于非专业网站,不太在意客户浏览器的反应速度,或者认为反应速度较慢也比拒绝连接好,也就可以略微超过硬件条件来设置这个参数。LinuxLinux操作系统操作系统 14.MaxRequestsPerChild0使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是

666、每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据了计算机的大量处理能力。因此,最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗。Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大地提高了性能。LinuxLinux操作系统操作系统 但由于在处理过程中子进程要不断地申请和释放内存,次数多了就会造成一些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的httpd进程中重新复制一个干净的副本,这样就

667、能提高系统的稳定性。由此,每个子进程处理服务请求的次数由MaxRequestPerChild定义。缺省的设置值为30,这个值对于具备高稳定性特点的Linux系统来讲是过于保守的设置,实际上可以设置为1000甚至更高,设置为0时支持每个副本进行无限次的服务处理。LinuxLinux操作系统操作系统 15.#Listen3000和#Listen12.34.56.78:80Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的HTTP请求。LinuxLinux操作系统操作系统 12.2.2文件文件httpd.conf的服务器的主要设置的服务器的主要设置同上节一样,我们将用实际应用

668、中一个具体的例子来讲述Apache服务器的主要设置。1.Port80Port定义了Standalone模式下httpd守护进程使用的端口,标准端口是80。这个选项只对于以独立方式启动的服务器有效。LinuxLinux操作系统操作系统 2.Usernobody和GroupnobodyUser和Group配置是Apache的安全保证,Apache在打开端口之后,就将其本身设置为这两个选项所设置的用户和组的权限然后进行运行,这样就降低了服务器的危险性。这个选项也只用于Standalone模式。缺省设置为nobody和nogroup,这个用户和组在系统中不拥有文件,保证了服务器本身和由它启动的CGI进

669、程没有权限更改文件系统。LinuxLinux操作系统操作系统 3.ServerAdmin配置文件中应该改变的也许只有ServerAdmin,这一项用于配置WWW服务器的管理员的E-mail地址,这将在HTTP服务出现错误的条件下返回给浏览器,以便让Web使用者和管理员联系,报告错误。习惯上使用服务器上的webmaster作为WWW服务器的管理员,通过邮件服务器的别名机制,将发送到webmaster的电子邮件发送给真正的Web管理员。LinuxLinux操作系统操作系统 4.ServerName10.1.14.61缺省情况下,并不需要指定这个ServerName参数,服务器将自动通过名字解析过程

670、来获得自己的名字,但如果服务器的名字解析有问题(通常为反向解析不正确),或者没有正式的DNS名字,也可以在这里指定IP地址。当ServerName设置不正确的时候,服务器不能正常启动。LinuxLinux操作系统操作系统 5.DocumentRoot/usr/apache/htdocsDocumentRoot定义服务器对外发布的网页文档存放的路径,客户程序请求的URL就被映射为这个目录下的网页文件。这个目录下的子目录,以及使用符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相对目录名。当然用户可以根据自己的实际情况来决定把网页放在哪个目录。LinuxLinux操作系统操作系

671、统 6.UserDirpublic_html当在一台Linux上运行Apache服务器时,这台计算机上的所有用户都可以有自己的网页路径,形如,使用波浪符号加上用户名就可以映射到用户自己的网页目录上。映射目录为用户个人主目录下的一个子目录,其名字就用UserDir这个参数进行定义,缺省为“public_html”。LinuxLinux操作系统操作系统 7.DirectoryIndexindex.html很多情况下,URL中并没有指定文档的名字,而只是给出了一个目录名,Apache服务器就自动返回这个目录下由DirectoryIndex定义的文件,当然可以指定多个文件名字,系统会在这个目录下顺序搜

672、索。当所有由DirectoryIndex指定的文件都不存在时,Apache服务器可以根据系统设置,生成这个目录下的所有文件列表,提供用户选择。此时该目录的访问控制选项中的Indexes选项(OptionsIndexes)必须打开,以使得服务器能够生成目录列表,否则Apache将拒绝访问。LinuxLinux操作系统操作系统 8.ErrorLog/usr/apache/logs/error_log用来存放WebServer的出错信息的文件。9.ServerSignatureOn在一些情况下,例如当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了ServerSignature选

673、项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息。有的管理员更倾向于不对外显示这些信息,就可以将这个参数设置为Off, 或 者 设 置 为 E-mail, 最 后 一 行 将 替 换 为 对ServerAdmin的E-mail提示。LinuxLinux操作系统操作系统 10.Alias/icons/usr/apache/icons/Alias参数用于将URL与服务器文件系统中的真实位置进行直接映射,一般的文档将在DocumentRoot中进行查询,然而使用Alias定义的路径将直接映射到相应目录下,而不再到DocumentRoot下面进行查询。因此Alias可以用来映射一些公

674、用文件的路径,例如,保存了各种常用图标的icons路径。这样使得除了使用符号连接之外,文档根目录(DocumentRoot)外的目录也可以通过使用Alias映射,以提供给浏览器访问。LinuxLinux操作系统操作系统 11.ScriptAlias/cgi-bin/usr/apache/cgi-bin/ScriptAlias也是用于URL路径的映射,但与Alias的不同在于,ScriptAlias是用于映射CGI程序的路径,这个路径下的文件都被定义为CGI程序,通过执行它们来获得结果,而非由服务器直接返回其内容。缺省情况下CGI程序使用“cgi-bin”目录作为虚拟路径。LinuxLinux操

675、作系统操作系统 12.3Apache的各种服务12.3.1用户个人主页用户个人主页现在许多网站(如等)都允许用户有自己的主页空间,而用户可以很容易地管理自己的主页目录。Apache服务器中同样可以实现用户的个人主页。用户个人主页的URL的格式一般如下所示:LinuxLinux操作系统操作系统 其中“username”是Linux合法用户的名字。用户的主页存放的目录由文件httpd.conf服务器的主要设置参数UserDir设定,一般情况下UserDir的值是“public_html”,当然用户可以根据自己的需要来设定。下面我们通过具体的实例来讲述如何实现用户的个人主页。LinuxLinux操作

676、系统操作系统 【实例12.2】在本实例中UserDir的值设为public_html,用户名为test,实现步骤如下:(1)修改用户的主目录的权限。执行如下的指令:rootredflag/root#chmod705/home/test(2)创建存放用户主页的目录。执行如下指令:rootredflag/root#mkdir/home/test/public_htmlLinuxLinux操作系统操作系统 (3)创建索引文件。执行如下指令:rootredflag/root#cd/home/test/public_htmlrootredflagpublic_html#viindex.html(4)测试

677、。执行如下指令:rootredflag/root#lynx127.0.0.1/test如果能够看到index.html文件的内容,则证明用户个人主页成功实现。如果用户不想让他人访问自己的主页,则可以通过把用户的主目录的权限设为0700来完成。LinuxLinux操作系统操作系统 12.3.2虚拟主机虚拟主机Apache的配置文件httpd.conf的第三部分是关于实现虚拟主机的。虚拟主机是在一台Web服务器上,可以为多个单独域名提供Web服务,并且每个域名都完全独立,包括具有完全独立的文档目录结构及设置,这样域名之间完全独立,不但使每个域名访问到的内容完全独立,并且使另一个域名无法访问其他域名

678、所提供的网页内容。LinuxLinux操作系统操作系统 虚拟主机的概念对于ISP来讲非常有用,虽然一个组织可以将自己的网页挂在具备其他域名的服务器上的下级网址上,但使用独立的域名和根网址更为正式,易为众人接受。传统上,必须自己设立一台服务器才能达到单独域名的目的,然而这需要维护一个单独的服务器,很多小单位缺乏足够的维护能力,所以更为合适的方式是租用别人维护的服务器。ISP也没有必要为一个机构提供一个单独的服务器,完全可以使用虚拟主机,使服务器为多个域名提供Web服务,而且不同的服务互不干扰,对外就表现为多个不同的服务器。LinuxLinux操作系统操作系统 有两种设定虚拟主机的方式,分别是基于

679、IP的虚拟主机和基于名称的虚拟主机。基于IP的虚拟主机基于HTTP1.0标准,它需要一个具备多IP地址的服务器,再配置DNS服务器,给每个IP地址以不同的域名,最后才能配置Apache的配置文件,使服务器对不同域名返回不同的Web文档。由于这需要使用额外的IP地址,对每个要提供服务的域名都要使用单独的IP地址,因此这种方式实现起来问题较多。LinuxLinux操作系统操作系统 可以在一个网卡上绑定多个IP地址,Linux下需要使用ifconfig的Alias参数来进行这个配置,但此时会影响网络性能。而基于名称的虚拟主机基于HTTP1.1标准,在HTTP1.1协议中规定了对浏览器和服务器通信时,

680、服务器能够跟踪浏览器请求的主机名字,因此可以利用这个新特性,使用更轻松的方式设定虚拟主机。这种方式不需要额外的IP地址,但需要新版本的浏览器支持。这种方式已经成为建立虚拟主机的标准方式。要建立非IP基础的虚拟主机,多个域名是不可少的配置,因为每个域名就对应一个要服务的虚拟主机。本书中主要讨论基于名称的虚拟主机的实现。下面我们通过一个具体的实例来讲述虚拟主机的配置。LinuxLinux操作系统操作系统 虚拟主机的IP地址为10.1.14.61,两个虚拟主机的域名分别为:和。实现步骤如下。LinuxLinux操作系统操作系统 1.创建虚拟主机目录我们在/usr/apache/htdocs目录下创建

681、hosta和hostb两个目录,分别用来存放两主机的网页。操作如下:rootredflag/root#mkdir/usr/apache/htdocs/hostarootredflag/root#mkdir/usr/apache/htdocs/hostbrootredflag/root#chmod705/usr/apache/htdocs/hostarootredflag/root#chmod705/usr/apache/htdocs/hostbLinuxLinux操作系统操作系统 2.域名解析实现域名解析可以有两种方法:(1)在客户机上通过修改/etc/hosts文件实现。这是一种比较简单的方

682、法,只需在/etc/hosts文件中加入下面两行:LinuxLinux操作系统操作系统 (2)在DNS服务器上通过配置DNS实现。虽然基于名称的虚拟主机不需要惟一的IP地址,但需要给每台虚拟主机创建一个CNAME。我们在第11章的实例中已经配置了DNS,现在我们只需要在/var/named/named.hosts文件中加入如下两行:INCNAMEINCNAME.LinuxLinux操作系统操作系统 重新启动DNS后,可以用nslookup和ping命令来测试,命令如下:rootredflag/root#nslookupsettype=rootredflag/root#LinuxLinux操作系

683、统操作系统 3.修改httpd.conf文件在httpd.conf文件中修改如下:NameVirtualHost10.1.14.61#NameVirtualHost用来指定虚拟主机使用的IP地址,这个IP地址将对应多个DNS名字,如果Apache使用Listen参数控制了多个端口,那么就可以在这里加上端口号以进一步区分对不同端口的不同连接请求。接下来使用VirtualHost语句,并且使用NameVirtualHost指定的IP地址作参数,对每个名字都定义对应的虚拟主机设置。LinuxLinux操作系统操作系统 #每个虚拟主机的定义以开始,以结束,成对出现,构成伪HTML代码。ServerAd

684、min#管理员的E-mail地址。DocumentRoot/usr/apache/htdocs/hosta#虚拟主机Hosta的目录。ServerNLinuxLinux操作系统操作系统 #虚拟主机Hosta的域名。ErrorLoglogs/-error_log#指定错误信息记录文件。ServerAdminDocumentRoot/usr/apache/htdocs/hostbServerNErrorLoglogs/-error_logLinuxLinux操作系统操作系统 4.测试重新启动Apache后就可以进行测试了。执行命令如下:rootredflag/root#cd/usr/apache/

685、binrootredflagbin#./httpdSLinuxLinux操作系统操作系统 结果如下:virtualhostconfiguration:10.1.14.61:80isaNameVirtualH(/usr/apache/conf/httpd.conf:980)(/usr/apache/conf/httpd.conf:980)(/usr/apache/conf/httpd.conf:987)LinuxLinux操作系统操作系统 12.3.3代理服务代理服务代理服务器的英文全称是ProxyServer,其功能就是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站。在一般情况下,

686、我们使用网络浏览器直接去连接其他Internet站点并取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给用户的浏览器。LinuxLinux操作系统操作系统 而且,大部分代理服务器都具有缓冲的功能,就好像一个大的cache,它有很大的存储空间,不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么

687、它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。而且它建立起了内部网和外部网之间的一道屏障,对内部网的用户起到了保护作用。LinuxLinux操作系统操作系统 Apache同样具有代理服务的功能,它的proxy支持来自于mod_proxy模块,在缺省条件下,它不能被编译生成,需要添加mod_proxy模块,然后进行编译和安装,最后进行配置。接下来我们通过具体的实例来讲述。LinuxLinux操作系统操作系统 【实例12.3】本实例将讲述Apache代理模块的编译、安装、确认和配置过程。(1)加入代理模块。在用户的Apache源代码目录下

688、执行如下的操作:rootredflagapache_1.3.27#./configure-prefix=/usr/apache-enable-module=proxyLinuxLinux操作系统操作系统 结果如下:ConfiguringforApache,Version1.3.27+usinginstallationpathlayout:Apache(config.layout)CreatingMakefileCreatingMakesrc/lib/expat-liteCreatingMakesrc/modules/standardCreatingMakesrc/modules/proxyLi

689、nuxLinux操作系统操作系统 (2)编译。执行如下指令:rootredflagapache_1.3.27#make(3)安装。执行如下指令:rootredflagapache_1.3.27#makeinstall(4)确认。在执行完上述三条命令后,可以用下面的命令来确认mod_proxy是否在输出中显示:rootredflagapache_1.3.27#cd/usr/apache/binrootredflagbin#./httpdlLinuxLinux操作系统操作系统 结果如下:Compiled-inmodules:http_core.cmod_env.cmod_log_config.cm

690、od_proxy.cLinuxLinux操作系统操作系统 (5)配置代理服务器。在httpd.conf中我们配置如下:#IfModule判断加载模块是否成功,如果已经成功地加载了mod_proxy.c的模块,我们定义proxy的相关信息从这里开始。ProxyRequestsOn#打开代理支持。LinuxLinux操作系统操作系统 Orderdeny,allowDenyfromallA#与之间的代码表示只允许域使用该代理。ProxyViaOn#此设置用于处理HTTP/1.1的via:文件头的功能。CacheRoot/usr/apache/proxy#指定缓存要放置的目录。LinuxLinux操作

691、系统操作系统 CacheSize1024#指定缓存的大小,默认是5KB,可以自行调整,不能设得过小。CacheGcInterval4#设置间隔多少时间去检查缓冲的大小,默认是4小时。CacheMaxExpire24#设置一份文件最久可留在缓存的时间,默认是24小时。CacheLastModifiedFactor0.1LinuxLinux操作系统操作系统 #该参数用于计算缓存的文件自上次更新后多久需要删除的系数。例如,一个网页已在缓存中保留了12小时,则120.1=1.2小时,表示1.2小时后此文件要被删除。若计算出来的值大于CacheDefaultExpire,则以CacheDefaultEx

692、pire为准。CacheDefaultExpire1#对于使用非HTTP的传输协议,可由此值来判断何时将该文件从缓存中删除。LinuxLinux操作系统操作系统 NoCache a- another-domain.edu joes.garage-#设置缓存之后,不一定每一个网站的文件都要存入缓存,可用NoCache指定某个网站的文件不要放入缓存。#该模块结束,与对应组成伪HTML代码。LinuxLinux操作系统操作系统 (6)代理服务器的测试。在完成第(5)步后,重新启动Apache,就可以测试了。首先需要将客户端的浏览器设置为通过代理服务器上网。接下来在浏览器中输入想要访问的URL,如果访

693、问成功,则证明代理服务器配置成功。LinuxLinux操作系统操作系统 12.4Apache访问控制访问控制假设有一些敏感的信息要放在Intranet/Internet上,你首先可能会想到自己开发一个用户身份认证的系统来保护自己的Web页面。其实Apache本身就自带了很多访问控制的机制,实现起来也不复杂。LinuxLinux操作系统操作系统 12.4.1Apache访问控制指令访问控制指令在httpd.conf文件中,有很多类似区 域 , 在 每 个 模 块 中 有 Options、AllowOverride、Limit等指令,它们都是和访问控制相关的。1.OptionsOptions用来设

694、置模块的功能。可以设置的特性如表12-1所示。LinuxLinux操作系统操作系统 表12-1Options指令参数表Options指令参数功能说明All所有的目录特性都有效,这是缺省状态ExecCGI允许这个目录下可以执行CGI程序FollowSymLinks允许使用符号连接,这将使浏览器有可能访问文档根目录(DocumentRoot)之外的文档Includes提供SSI功能LinuxLinux操作系统操作系统 IncludesNOExec执行SSI功能,但不执行CGI程序中的#exec与#include命令Indexes允许浏览器生成这个目录下所有文件的索引,使得在这个目录下没有index

695、.html(或其他索引文件)时,能向浏览器发送这个目录下的文件列表MultiViews使用内容协商功能,经过服务器和网页浏览器相互沟通后,决定网页传送的性质None不允许访问目录SymLinksIfOwnerMatch只有符号连接的目的与符号连接本身为同一用户所拥有时,才允许访问,这个设置将增加一些安全性LinuxLinux操作系统操作系统 【实例12.4】本实例允许在目录/usr/apache/htdocs中执行CGI和SSI,配置如下:Options+ExecCGI+IncludesLinuxLinux操作系统操作系统 2.AllowOverrideAllowOverride决定是否可废除

696、之前所设置的访问权限,而在此处另设权限。AllowOverride会读取“.htaccess”文件,以决定是否改变原来的设置。如果AllowOverride设置为None,服务器将不去读取Access指定的文件,这样可以加快服务器的响应时间,因为服务器不必对每一个请求去找Access指定的文件。AllowOverride可以设置的参数如表12-2所示。LinuxLinux操作系统操作系统 表12-2AllowOverride指令参数表AllowOverride指令参数功能说明AuthConfig允许访问控制文件使用AuthName、AuthType等针对每个用户的认证机制,这使目录属主能用口令

697、和用户名来保护目录允许访问控制文件中可以使用AddType等参数设置Indexes允许使用控制目录检索的指令Limit允许使用控制主机访问的命令All允许忽略任何目录命令None停止忽略任何目录命令Options允许使用控制特定文件类型的指令LinuxLinux操作系统操作系统 3.LimitLimit指令的语法如下:这一模块包含了一组访问控制指令,这些指令只针对所指定的HTTP方式。方式的名称列表可以用下面的一个或多个:GET、POST、PUT、CONNECT。如果使用GET,它还会影响到HEAD的请求。如果想限制所有的方式,就不要在指令里包含任何的方式的名称。对于一般的情况,可以对大部分客

698、户打开GET、POST和HEAD请求,而关闭PUT等其他更复杂且不常用的请求。LinuxLinux操作系统操作系统 12.4.2基于主机的访问控制基于主机的访问控制下面三条指令用于实现基于主机的访问控制。这里的主机可以是一个完整的域名,也可以是一个IP地址。1.Allow用户可以通过该指令指定一个关于主机的列表,列表中可包含一个或多个主机名或IP地址,列表中的主机被允许访问某一特定的目录。当指定了多个主机名或IP地址时,它们必须用空格来分隔。Allow指令的常见参数如下:LinuxLinux操作系统操作系统 (1)ALL:允许所有主机访问站点。示例如下:AllowfromALL(2)某主机的绝

699、对域名:允许合格的域名访问站点。示例如下:Allowfrom(3)某主机的IP地址:仅被指定的IP地址才允许访问站点。示例如下:Allowfrom10.1.14.61(4)网络号/掩码:指定的网络可以访问站点。示例如下:Allowfrom10.1.14.0/255.255.255.0LinuxLinux操作系统操作系统 2.Deny该指令的功能与Allow指令相反。用户可以通过该指令指定一个关于主机的列表,列表中可包含一个或多个主机名或IP地址,列表中的主机被拒绝访问某一特定的目录。在Allow指令中参数和示例同样也适用于Deny指令。LinuxLinux操作系统操作系统 3.Order该指令

700、定义处理Allow和Deny的顺序,其参数是以逗号分隔的列表,列表中指定了哪一条指令先执行。特别注意的是,影响所有主机的命令被授予最低的优先级。下面通过一个具体的实例来讲述基于主机的Apache的访问控制。LinuxLinux操作系统操作系统 【实例12.5】本实例是拒绝IP地址为10.1.14.125和10.1.14.66的主机访问/usr/apache/htdocs目录。在httpd.conf中的模块如下:OptionsIndexesFollowSymLinksMultiViewsAllowOverrideAllOrderdeny,allow#定义处理顺序。LinuxLinux操作系统操作

701、系统 Denyfrom10.1.14.12510.1.14.66#拒绝两台主机访问/usr/apache/htdocs目录。Allowfromall#允许其他主机的访问。重新启动Apache服务器后,在IP地址为10.1.14.125的主机访问时的结果如图12-5所示。LinuxLinux操作系统操作系统 图图12-5主机主机10.1.14.125访问被拒绝访问被拒绝LinuxLinux操作系统操作系统 12.4.3基于用户名的访问控制基于用户名的访问控制相信大多数读者都有这样的经历,当访问某些网站或网页时需要输入用户名和密码。身份认证是防止非法用户使用资源的有效手段,也是管理注册用户的有效方

702、法,现在很多网站都使用身份认证来管理用户资源,对用户的访问权限进行严格的限制。Apache服务器允许在全局访问配置文件或用户的“.htaccess”文件中对目录进行强制口令保护。对于口令保护的目录,必须为四个不同的命令指定相应的值,即AuthName、AuthType、AuthUserFile和AuthGroupFile命令。下面分别来介绍。LinuxLinux操作系统操作系统 (1)AuthName。AuthName命令是一个短的字符串,告诉用户他们所被询问的口令,如:“Pleaseinputyouvalidusernameandpassword:”。LinuxLinux操作系统操作系统 (

703、2)AuthType。AuthType命令标识了服务器使用的鉴别方法。AuthType可以选择两个设置之一:Basic和Digest。如果将AuthType设为Basic,使用的就是标准的和基于Unix加密方式的口令系统,还需使用AuthUserFile命令。如果将其设为Digest,使用的就是MD5加密方式,这是一种更为安全的编码系统。在大多数站点上不应该使用Digest,因为它还没有得到大多数浏览器的支持,但是在Intranet和可以决定所有用户使用的浏览器软件的小规模的应用中,它是可以使用的。LinuxLinux操作系统操作系统 (3)AuthUserFile。AuthUserFile命

704、令指定了目录中Apache服务器用户口令文件的全路径名。可以使用htpasswd程序来创建口令文件。(4)AuthDigestFile。如果使用的是Digest鉴别方式,就要使用AuthDigestFile作为口令名单。与AuthUserFile相同,只要将AuthDigestFile设置为口令文件的路径名和文件名即可。要创建文摘式的口令文件,可以使用htdigest程序。LinuxLinux操作系统操作系统 (5)require。require命令指定需要什么条件才能被授权访问。可以使用这个命令强制对一目录的口令保护。这个命令后面应该跟一份“实体”名单。这些实体可以是AuthUserFi1e

705、或AuthGroupFile命令所定义的用户或组的名称,也可以使用“valid-user”的关键字,告诉服务器在AuthUserFile中的任何用户只要能够提供有效的口令就允许进行访问。它可以只列出可能连接的指定用户、指定可能连接的用户的一个组或多个组的清单,如:LinuxLinux操作系统操作系统 requireuseruser1user2#只有user1和user2可以访问。requiregrouptest#只有test组可以访问。下面通过一个具体的实例来讲述基于主机的Apache的访问控制。LinuxLinux操作系统操作系统 【实例12.6】本实例是对/usr/apache/htdoc

706、s目录进行保护,需要合法的用户名和口令才能访问。操作过程如下:(1)配置httpd.conf文件。在httpd.conf文件中的配置模块代码如下:#该模块的作用目录为/usr/apache/htdocs/。AuthNameProtectedLinuxLinux操作系统操作系统 #提示用户的信息为“Protected”。AuthTypebasic#AuthType鉴别方法是basic。AuthUser#这一行很重要,它指定了验证用户名和口令的路径和文件名。LinuxLinux操作系统操作系统 #限制HTTP协议中的GET和POST方法。requirevalid-user#需要合法的用户,即在/u

707、sr/apache/conf/users文件中的用户。LinuxLinux操作系统操作系统 (2)生成用户密码文件。命令htpasswd可以帮助我们完成这项任务。比如说我们想要生成lgm用户密码文件,操作如下:rootredflag /root# htpasswd c /usr/apache/conf/users lgm123456其中123456是用户lgm的验证密码。LinuxLinux操作系统操作系统 如果想要生成多个用户,则需要使用htpasswd命令的“-b”参数,操作如下:rootredflag/root#htpasswdb/usr/apache/conf/userstest123

708、456执行完上述的命令后,可以查看users文件的内容,操作如下:rootredflag/root#cat/usr/apache/conf/users内容如下:lgm:bBdPD1.jOo3tQtest:3PIo6y6wDBuI2LinuxLinux操作系统操作系统 (3)测试。重新启动Apache服务器后,在浏览器中输入本机IP,会出现如图12-6所示的画面,要求输入用户名和密码才能访问。LinuxLinux操作系统操作系统 图图12-6访问需要输入用户名和密码访问需要输入用户名和密码LinuxLinux操作系统操作系统 12.5Apache常见故障排除常见故障排除1.检查服务器的状态在得到

709、服务器的完整状态之前,用户需要确信自己已经将Lynx基于文本的Web浏览器安装在自己的系统上。如果已安装了Lynx,就可以通过运行下面的apachectl脚本来获得所运行的服务器的完整状态:rootredflag/root#/usr/apache/bin/apachectlfullstatusLinuxLinux操作系统操作系统 这样用户就会得到一个充满了各种服务器状态数据的信息页。最好是将这个状态信息重定向到一个文件中,因为文件可以将数据完好地保存下来。也可以通过下面的指令将数据重定向到一个叫做/tmp/status的文件中:rootredflag/root#/usr/apache/bin/

710、apachectlfullstatus/tmp/statusLinuxLinux操作系统操作系统 2.查看服务器配置文件要想检查服务器配置文件有没有语法错误,你可以运行下面的apachectl脚本:rootredflag/root#/usr/apache/bin/apachectlconfigtestLinuxLinux操作系统操作系统 3.检查日志文件在/var/log/httpd目录下提供了访问记录文件access_log以及出错文件error_log,所以当出现故障时,可以首先检查这些记录文件,一般故障都会在文件中指出。常出现的错误有文档路径错误、CGI脚本程序没有执行权限、CGI脚本程

711、序本身有错误等。检查的文件如下:(1)检查访问日志。要想查看访问日志文件,可以进入日志文件目录并运行下面的命令:tailf/path/to/access_logLinuxLinux操作系统操作系统 命令中的tail是一个Linux工具,它使你可以查看一个不断增长的文件(当使用了-f选项时)。现在,用Web浏览器来访问该站点。如果你已经进入了该站点,那么只需刷新一下浏览器,就会看到一个输入被添加到屏幕上的清单里。多次点击刷新按钮,看看访问文件是否被正确更新。如果更新正确,表示访问日志文件工作正常。按【Ctrl-C】退出tail命令。如果没有在日志文件中看到新记录,则应该检查一下日志文件和其所保存

712、在的目录的许可权设置。LinuxLinux操作系统操作系统 (2)检查错误日志。要想查看错误日志文件,可以进入日志文件目录并运行下面的命令:tailf/path/to/error_log(3)检查服务器故障。如果故障属于服务器本身故障,可以使用下面的目录检查配置文件的设置:检查配置文件句法/usr/sbin/httpd-t检查虚拟主机的配置/usr/sbin/httpd-SLinuxLinux操作系统操作系统 4.检查端口设置因为在安装Linux时已经安装了Apache软件,而且在系统启动的时候也启动了Apache,那么它将使用默认的端口,当启动新版本的Apache时,会发生冲突,而且在浏览的

713、时候肯定看到的是旧版本的Apache服务器提供的服务,这时我们需要关掉旧版本的Apache服务器,执行的指令如下:rootredflag/root#/etc/rc.d/init.d/httpdstop然后再重新启动新版本的Apache服务器即可。LinuxLinux操作系统操作系统 习习题题1.最新版本的Apache的配置文件是_。A.access.confB.srm.conf C.httpd.confD.http.conf2.世界上排名第一的Web服务器是_。A.ApacheB.MicrosoftC.SunONE D.NCSALinuxLinux操作系统操作系统 3.检查是否安装了Apach

714、e软件包的指令是_。A.rpm-xapacheB.rpm-rapacheC.rpm-tapacheD.rpm-qapache4.Apache服务器的默认工作方式是_。A.inetdB.xinetdC.standbyD.Standalone5.用来设定当服务器产生错误时,显示在浏览器上的管理员的E-mail地址的指令是_。A.ServerNameB.ServerAdminC.ServerRootD.DocumentRootLinuxLinux操作系统操作系统 6.我们设置Apache服务器时,一般将服务的端口绑定到系统的_端口上。A.10000B.23C.80D.537.用户的主页存放的目录由文

715、件httpd.conf的参数_设定。A.UserDirB.Directory C.pubic_htmlD.DirectoryIndex8.检查Apache配置文件句法是./httpd的_参数。A.-t B.-S C.-l D.-cLinuxLinux操作系统操作系统 9.下面_不是Apache基于主机的访问控制指令。A.AllowB.DenyC.OrderD.All10.在Apache基于用户名的访问控制中,生成用户密码文件的命令是_。A.smbpasswdB.htpasswdC.passwdD.password11.检查服务器的状态的命令是_。A.configtestB.apachectlf

716、ullstatusC.apachectlgracefulD.netstatusLinuxLinux操作系统操作系统 第第13章章FTP13.1FTP简介简介13.2配置配置wu-ftp服务器服务器13.3wu-ftp的相关应用的相关应用13.4wu-ftp常见故障排除常见故障排除习题习题LinuxLinux操作系统操作系统 13.1FTP简简介介13.1.1文件传输协议文件传输协议文件传输协议是Internet上使用得最广泛的文件传送工具,服务器端使用21端口。FTP提供交互式的访问,用来在远程主机与本地主机之间或两台远程主机之间传输文件。FTP不仅可从远程主机上获取文件,而且可以将文件从本地

717、主机传送到远程主机,如图13-1所示。LinuxLinux操作系统操作系统 图图13-1文件传输文件传输LinuxLinux操作系统操作系统 在Internet上有两类FTP服务器。一类是普通的FTP服务器,连接到这种FTP服务器上时,用户必须具有合法的用户名和口令;另一类是匿名FTP服务器。所谓匿名FTP,是指在访问远程计算机时,不需要账号或口令就能访问许多文件信息资源。用户不需要经过注册就可以与它连接并且进行下载和上传文件的操作,通常这种访问限制在公共目录下。LinuxLinux操作系统操作系统 FTP提供的命令十分丰富,涉及文件传输、文件管理、目录管理、连接管理等。目前世界上有很多文件服

718、务系统,为用户提供公用软件、技术通报、论文研究报告,这就使Internet成为目前世界上最大的软件和信息流通渠道。Internet是一个资源宝库,有很多共享软件、免费程序、学术文献、影像资料、图片、文字、动画,它们都允许用户用FTP下载。人们可以直接使用WWW浏览器去搜索所需要的文件,然后利用WWW浏览器所支持的FTP功能下载文件。LinuxLinux操作系统操作系统 13.1.2FTP命令命令FTP命令在前面的章节已简单介绍过,这里将作进一步介绍。文件传输软件的使用格式为:FTP(网址或IP地址)若连接成功,系统将提示用户输入用户名及口令。LOGIN:输入合法的用户名或者“anonymous

719、”。PASSWORD: 输 入 合 法 的 口 令 , 若 以“anonymous”方式登录,一般不用口令。进入想要连接的FTP站点后,用户就可以进行相应的文件传输操作了,其中一些重要的命令及相似的命令如下。LinuxLinux操作系统操作系统 1.help、?、rhelp(1)help显示LOCAL端的命令说明,若不接受则显示所有可用命令;(2)?相当于help,例如:“?cd”;(3)rhelp同help,只是它用来显示REMOTE端的命令说明。2.ascii、binary、image、type(1)ascii切换传输模式为文字模式;(2)binary切换传输模式为二进制模式;(3)ima

720、ge相当于binary;(4)type可更改或显示目前传输模式。LinuxLinux操作系统操作系统 3.bye、quit(1)bye表示退出FTP服务器;(2)quit相当于bye。4.cd、cdup、lcd、pwd、!(1)cd改变当前工作目录;(2)cdup回到上一层目录,相当于“cd.”;(3)lcd可更改或显示LOCAL端的工作目录;(4)pwd显示目前的工作目录(REMOTE端);(5)!可执行外壳命令,例如:“!ls”。LinuxLinux操作系统操作系统 5.delete、mdelete、rename(1)delete删除REMOTE端的文件:(2)mdelete批量删除文件;

721、(3)rename更改REMOTE端的文件名。6.get、mget、put、mput、recv、send(1)get下载文件;(2)mget批量下载文件;(3)put上传文件;(4)mput批量上传文件;(5)recv相当于get;(6)send相当于put。LinuxLinux操作系统操作系统 7.hash、verbose、status、bell(1)hash当有数据传送时,显示“#”号,每一个#号表示传送了10248192bytes/bits;(2)verbose切换所有文件传输过程的显示;(3)status显示目前的一些参数;(4)bell当指令执行完时会发出叫声。LinuxLinux操

722、作系统操作系统 8.ls、dir、mls、mdir、mkdir、rmdir(1)ls有点像Unix下的ls(list)命令;(2)dir相当于“ls-l”;(3)mls只是将远端某目录下的文件存于LOCAL端的某文件里;(4)mdir相当于mls;(5)mkdir像DOS下的MD(创建子目录)一样;(6)rmdir像DOS下的RD(删除子目录)一样。LinuxLinux操作系统操作系统 9.open、close、disconnect、user(1)open连接某个远端FTP服务器;(2)close关闭目前的连接;(3)disconnect相当于close;(4)user再输入一次用户名和口令(

723、有点像Linux下的su)。当我们执行不同命令的时候,会发现FTP服务器返回一组数字,每组数字代表不同的信息,常见的数字及表示的信息如表13-1所示。LinuxLinux操作系统操作系统 表13-1访问FTP服务器命令的返回值及含义数字含义数字含义125打开数据连接,传输开始230用户成功登录200命令被接受331用户名被接受,需要密码211系统状态,或者系统返回的帮助421服务不可用212目录状态425不能打开数据连接213文件状态426连接关闭,传输失败214帮助信息452写文件出错220服务就绪500语法错误,不可识别的命令221控制连接关闭501命令参数错误225打开数据连接,当前没有

724、传输进程502命令不能执行226关闭数据连接503命令顺序错误227进入被动传输状态530登录不成功LinuxLinux操作系统操作系统 13.1.3wu-ftp1.wu-ftp简介wu-ftp全称是WashingtonUniversityFTP,现在因特网上FTP服务器的安装软件大多使用的都是wu-ftp软件,因为它不仅支持多个操作系统平台,而且还具有如下的功能:(1)让用户在下载文件的同时可以对文件做自动的压缩或解压缩操作;(2)可以对不同网络的机器做相应的存取限制和存取时间设定;LinuxLinux操作系统操作系统 (3)可以记录文件上传和下载的时间;(4)可以显示传输时的相关信息,以便

725、让用户知道目前的传输状态;(5)可以设定连接的数量限制,以提高工作效率。LinuxLinux操作系统操作系统 2.wu-ftp的安装如果你在安装Linux系统的过程中,在选择启动进程的时候选择了“xinetd”这一项的话,安装完Linux系统后,就已经将一个默认的FTP服务器安装到系统中去了,我们就可以利用它来实现系统FTP服务器的功能了。在此基础上我们只需根据需要进行一些个性化设定就可以了,用“rpmq”命令检查是否安装了wu-ftp软件包:LinuxLinux操作系统操作系统 rootredflag/root#rpmqwu-ftpd当然你可以到去下载wu-ftp的最新版本,或者在Linux

726、的安装光盘上找到wu-ftp的RPM包,运行如下的命令进行安装:rootredflagRPMS#rpmivhwu-ftpd-2.6.2-7.rpmLinuxLinux操作系统操作系统 安装了wu-ftp后,将在/usr/bin目录下可以看到以下四个可执行文件:(1):用于关闭FTP服务器程序;(2):显示目前登录到FTP服务器的在线人数;(3):查看目前FTP服务器的连接情况;(4)ckconfig:检查FTP服务器的设置是否正确。LinuxLinux操作系统操作系统 除了这些可执行文件以外,它还在/etc和/var目录下生成了六个相关文件:(1)/etc/:设定哪些账号不能用于访问FTP服务

727、器;(2)/etc/:wu-ftp的主要配置文件;(3)/etc/:配置文件压缩/解压缩转换;(4)/var/log/xferlog:存储日志文件;(5)/etc/:设定FTP自己定义的群组;(6)/etc/:设定个别的用户权限。LinuxLinux操作系统操作系统 3.wu-ftpd的启动在登录FTP服务器之前,必须先检查/etc/xinetd.d/wu-ftpd文件的内容,其内容如下:#defaulton#description:Thewu-ftpdserves.Ituses# normal, unencrypted usernames and passwords forauthentic

728、ation.serviceftpLinuxLinux操作系统操作系统 disable=nosocket_type=streamwait=nouser=rootserver=/usr/sbin/in.ftpdserver_args=-l-alog_on_success+=DURATIONUSERIDlog_on_failure+=USERIDnice=10LinuxLinux操作系统操作系统 表13-2wu-ftpd的执行参数及含义参数含义-d当FTP服务器发生错误时,将错误写入系统的syslog文件中-l将每次FTP客户端进行的连接写入系统的syslog文件中-t设置FTP客户端连接几分钟无操

729、作就切断连接-a使wu-ftp使用/etc/的设定-A使wu-ftp不使用/etc/的设定-L将FTP客户端连线后所执行的程序记录在系统的syslog文件中-I将FTP客户端上传的文件记录在日志文件中-o将FTP客户端下载的文件记录在日志文件中LinuxLinux操作系统操作系统 13.2配置配置wu-ftp服务器服务器13.2.1文件文件是FTP最主要的配置文件,而且修改后不需要重新启动wu-ftp就可以生效。下面我们以实例来详细讲述该文件的内容。wu-ftp服务器的IP地址为10.1.14.61,文件的内容涉及到的选项如下(为了让大家很好的对应和方便的学习,我们仍然采用逐句逐行的解释)。L

730、inuxLinux操作系统操作系统 1.deny-gid与deny-uiddeny-gid与deny-uid主要定义系统中有哪些组和用户不能登录FTP服务器。下面两项是常用的的设置。deny-uid%-99%65534-deny-gid%-99%65534-以deny-gid为例,在deny-uid中定义了两个范围:(1)%-99:表示gid编号在99之前。(2)%65534-:表示gid编号在65534之后。LinuxLinux操作系统操作系统 因此如果只要组编号,那么这两个范围的组的用户都不能登录FTP服务器。此外也可以用组名的方式来限制特定的组不允许登录FTP服务器,如下面一行:deny

731、-gidnobody表示nobody的组的用户将无法登录。由此可见,deny-gid后面接的是组的名称或者组的gid。如果是组编号范围,则可以同时指定多组,每组范围之间只要用空格隔开即可;但是如果是组名称,则只能有一个。deny-uid与deny-gid的规则相同,这里就不详细讲述了。LinuxLinux操作系统操作系统 2.allow-uid与allow-gid如果要让deny-uid或deny-gid范围中所限制的特定的用户也能登录服务器,则可以用allow-uid或allow-gid进行设置。从deny-gid%-99来看,组编号在99之前的用户将无法登录服务器,但是在这个范围中,包含了

732、FTP服务器的重要组FTP组,因此为了使FTP组能够正常登录,默认有如下两行:allow-uidftpallow-gidftp这样FTP组的用户就不会受到deny-gid%-99或deny-uid%-99的限制,可以正常登录FTP服务器。LinuxLinux操作系统操作系统 3.guestgroup、restricted-uid和guestuserguestgroup、restricted-uid和guestuser都是和FTP服务器的安全相关的,它们的作用都是在用户登录成功后,把用户限制在自己的主目录下,不让用户到处乱跑,对服务器起到安全保护作用。(1)guestgroup使用guestgr

733、oup可以用来指定FTP服务器中属于guest类的组。这些组的用户登录后的权限会和guest相同,且只能在自己的主目录中活动,内容如下面一行:guestgroupLinuxLinux操作系统操作系统 其中组只是一个例子,不是固定的,当然用户可以根据自己的实际情况来定义,然后把需要设定guest权限的用户加入到该组即可。LinuxLinux操作系统操作系统 (2)restricted-uid使用guestgroup大家可能觉得麻烦,restricted-uid同样可以实现防止用户到处乱跑,而且只需要如下一行命令即可:restricted-uid*(3)guestuser使用guestuser同样

734、可以实现将用户限制在自己的主目录,具体实现如下:guestuser*realuseruser1,user2其中real可以实现用户user1和user2突破“guestuser*”的限制。LinuxLinux操作系统操作系统 当guestgroup、restricted-uid或guestuser选项生效时,如果用户企图进入FTP服务器的其他目录时,如/etc目录,就会出现下面的信息:lgmredflaglgm$C(Versionwu-2.6.1-16)ready.530PleaseloginwithUSERandPASS.530PleaseloginwithUSERandPASS.Linux

735、Linux操作系统操作系统 KERBEROS_V4rejectedasanauthenticationtypeName(10.1.14.61:lgm):lgm331Passwordrequiredforlgm.Password:230Userlgmloggedin.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftpcd/etc550/etc:Nosuchdirectory.LinuxLinux操作系统操作系统 4.classclass的功能设定FTP服务器上用户的类别,并可对客户端的IP地址进行限制,允许某部分的IP地址或全部的I

736、P地址访问。格式如下:class类名用户类别IP地址在FTP服务器上的用户基本可以分为以下三类。LinuxLinux操作系统操作系统 (1)real:在该FTP服务器有合法账号的用户。此类用户使用FTP登录时,默认登录后的目录是其主目录。例如,lgm用户登录后,进入的目录为/home/lgm,但是只要他拥有某目录的访问权限,即使该目录不在/home/lgm下,也能切换到该目录下。(2)guest:某些情况下,管理者可能希望某些拥有账号的用户登录后,只能访问其主目录的文件,而不允许到处乱跑。这时,管理者就可以使用guestgroup或restricted-uid来进行设定。LinuxLinux操

737、作系统操作系统 (3)anonymous:在FTP服务器上没有账号的匿名用户登录时可以使用“anonymous”和E-mail地址作为账号和密码。登录的目录是/var/ftp。匿名用户只能在这个目录下活动,而不能进入到其他任何目录。LinuxLinux操作系统操作系统 下面三行定义了all、local和remote三个不同类的用户。(1)classallreal,anonymous,guest*:本行定义了一个名为all的类。它包含了在任何地方登录(“*”代表所有IP地址,当然在这里也可以是某些主机具体的IP地址)的所有用户,即包括real用户、anonymous用户和guest用户。(2)c

738、lasslocalreal*:本行定义了一个名为local的类,它包含了在任何地方登录的real用户。(3)classremoteanonymous,guest*:本行定义了一个名为remote的类,它包含了在任何地方登录的anonymous用户和guest用户。LinuxLinux操作系统操作系统 5.emailemail的功能是指定FTP服务器管理员的E-mail地址。在服务器运行过程中,如果需要显示便会列出此处的设置值,如下面一行:emailLinuxLinux操作系统操作系统 6.Loginfailsloginfails的功能是设定当用户登录到FTP服务器时,允许用户输错密码的次数。格

739、式如下:loginfails3其中“3”表示允许用户输错密码的次数。下面的操作是验证的过程及显示的相应的信息:LinuxLinux操作系统操作系统 lgmredflaglgm$C(Versionwu-2.6.1-16)ready.530PleaseloginwithUSERandPASS.530PleaseloginwithUSERandPASS.KERBEROS_V4rejectedasanauthenticationtypeName(10.1.14.61:root):lgm331Passwordrequiredforlgm.Password:LinuxLinux操作系统操作系统 530Lo

740、ginincorrect.Loginfailed.ftpuserlgm331Passwordrequiredforlgm.Password:530Loginincorrect.Loginfailed.ftpuserlgm331Passwordrequiredforlgm.LinuxLinux操作系统操作系统 Password:530Loginincorrect.Loginfailed.ftpuserlgm421 Service not available, remote server has closedconnectionLoginfailed.ftpquitLinuxLinux操作系统操作

741、系统 7.readmereadme的功能是用来提醒用户读取说明文件的。格式如下:readme路径和文件名时机组名称下面两行是具体的配置:readmeREADME*loginreadmeREADME*cwd=*上面两行分别表示用户在登录系统和改变目录时提醒用户读取位于用户当前目录下的readme所用到的文件。cwd是changeworkingdirectory的英文缩写。LinuxLinux操作系统操作系统 8.messagemessage的功能是用来显示欢迎的信息的。格式如下:message路径和文件名时机组名称下面两行是具体的配置:message/welcome.msgloginmessag

742、e.messagecwd=*LinuxLinux操作系统操作系统 登录时显示“welcome.msg”,改变目录时显示该目录的“.message”。我们可以为每个目录建立一个“.message”文件,在message的信息文件中还可以使用表13-3所示的变量,使信息更加丰富一些。当然文件所在的目录由用户根据自己的需要来定义。LinuxLinux操作系统操作系统 表13-3message经常使用的变量变量说明%TFTP服务器主机的时间%C当前所在的目录名%EFTP服务器管理员的E-mail地址%R用户所在的远程主机名%LFTP服务器主机名%U用户登录时给定的名称%M同一组可允许最多几个用户登录%

743、N同一组当前已经登录的用户数目LinuxLinux操作系统操作系统 接下来我们就可以用上表中的变量来编辑个性化的welcome.msg文件,其内容如下:*Youarefrom%R.*Theaddressofmyhostis%L*Timeis%T*Anyproblemmailto%E*LinuxLinux操作系统操作系统 用FTP命令登录的结果显示如下:lgmredflaglgm$C(Versionwu-2.6.1-16)ready.530PleaseloginwithUSERandPASS.530PleaseloginwithUSERandPASS.KERBEROS_V4rejectedasa

744、nauthenticationtypeName(10.1.14.61:lgm):lgm331Passwordrequiredforlgm.LinuxLinux操作系统操作系统 Password:230-*230-*Y.230-*T230-*TimeisThuApr1717:21:362003230-*Anyproblemmailto230-*LinuxLinux操作系统操作系统 230-230Userlgmloggedin.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftpLinuxLinux操作系统操作系统 9.压缩命令常用的压

745、缩命令有compress和tar。(1) compress compress的功能是设置哪一个类别 的用户可以使用compress(压缩)功能。格式如下:compressyes/no类别具体配置如下:compressyeslocalremote允 许 local和 remote两 个 类 别 的 用 户 都 能 使 用compress(压缩)功能。LinuxLinux操作系统操作系统 (2)tartar的功能是设置哪一个类别的用户可以使用tar(归档)功能。格式如下:taryes/no类别具体配置如下:taryesall允许all类的用户使用tar功能。LinuxLinux操作系统操作系统 1

746、0.执行命令的权限在 FTP服 务 器 下 “执 行 命 令 ”通 常 包 括 chmod、delete、overwrite和rename,格式如下:命令yes/noreal/anonymous/guest具体配置如下:chmodnoguest,anonymousdeletenoanonymousoverwritenoanonymousrenamenoanonymousLinuxLinux操作系统操作系统 上面四行是设置用户具有的权限。例如在第一行中,设置guest和anonymous组用户没有执行chmod命令的权限,只有real组有执行chmod命令的权限。为了更好地管理FTP服务器,一般

747、情况下,我们不允许匿名用户和guest用户执行chmod等命令。其余三行含义类似,这里就不一一解释了。LinuxLinux操作系统操作系统 11.loglog是用来生成日志文件的,这对服务器的维护和管理非常重要,因为管理员可以很容易地知道诸如用户执行了哪些命令、上传和下载了哪些文件等。通常和log相关的操作有commands和transfers两项。(1)commandscommands的功能是设置哪些用户登录后的操作记录在文件/var/log/xferlog中。格式如下:logcommandsreal/guest/anonymousLinuxLinux操作系统操作系统 具体配置如下:logc

748、ommandsreal当real用户登录后,将他的操作记录下来。由于其他用户权限较低,所以操作不会引起太大的安全隐患,所以一般只需记下real用户的操作就可以了。LinuxLinux操作系统操作系统 (2)transferstransfers的功能是设置对哪些用户的上传(inbound)和下载(outbound)操作做日志。格式如下:logtransfersreal/guest/anonymousinbound/outbound具体配置如下:logtransfersanonymous,guestinbound,outbound对于匿名用户和guest用户要更加关注它们的文件操作,所以无论上传、

749、下载都要进行记录。LinuxLinux操作系统操作系统 12.shutdownshutdown的功能是设定FTP服务器关闭的时间。格式如下:shutdown文件名配置如下:shutdown/etc/shutmsgLinuxLinux操作系统操作系统 当FTP服务器启动时会检查shutdown的设置,然后到指定的/etc/shutmsg文件中去检查关机的时间的设置。若是找不到shutmsg文件,则会忽略此项目。shutmsg文件是有具体格式的,下面显示的内容是shutmsg文件的内容。20034152330205LinuxLinux操作系统操作系统 其中:2003表示年;4表示月份,可选范围为0

750、11(1月为0,二月为1.);15表示日期,可选范围为131;23表示小时,可选范围为023;30表示分钟,可选范围为059;20表示在关闭之前20分钟(即23:10)禁止用户登录服务器;LinuxLinux操作系统操作系统 5表示在关闭之前5分钟(即23:25)禁止已经登录服务器的用户。FTP服务器关闭的时间一到,便无法登录FTP服务器了,要恢复的话只有将shutmsg这个文件删除掉。否则FTP服务器发现shutmsg中的关机时间已经过去,就不会允许登录。而shutmsg这个文件必须由指令来生成,详细内容请参阅13.3.3节。LinuxLinux操作系统操作系统 13.passwd-chec

751、kpasswd-check功能是设定对匿名用户anonymous的密码使用方式。格式如下:passwd-check通用标准系统回应通用标准有三种,分别为以下三种。(1)none:表示不做密码验证,任何密码都可以登录;(2)trival:表示只要输入的密码中含有字符“”就可以登录;LinuxLinux操作系统操作系统 (3)rfc822:表示密码一定要符合RFC822中所规定的E-mail格式才能登录。系统回应有两种,分别为以下两种。(1)enforce:表示输入的密码不符合以上指定的格式就不让登录;(2)warn:表示密码不符合规定时只出现警告信息,但仍然能够登录。LinuxLinux操作系统

752、操作系统 具体配置如下:passwd-checkrfc822warn希望能够得到符合规定的E-mail作为密码,但如果不是,也允许登录。LinuxLinux操作系统操作系统 14.denydeny的功能是限制某些IP地址或域名的用户登入FTP服务器。格式如下:denyIP地址/域名说明文件说明文件要自己创建,当用户要从被拒绝的IP地址连接FTP服务器时,就会出现说明文件的内容而谢绝登录。具体配置如下:deny10.1.14.125/etc/deny.msg拒绝IP地址为10.1.14.125的主机进行FTP访问。LinuxLinux操作系统操作系统 15.limitlimit的功能是设置在指定

753、的时间段内允许多少用户登录本机。格式如下:limit类别人数时间文件名当达到人数上限的时候,显示指定文件的内容。LinuxLinux操作系统操作系统 具体配置如下:limitremote200SaSu|Any1800-0600/etc/toomany.msg表示星期六(Sa)和星期日(Su)允许200人FTP远程登录,其他任何时间(星期一至星期五)只有在晚上6点到凌晨6点允许200人远程FTP登录。当然remote类别一定要在前面定义才可以。limitall100Any/etc/toomany.msg表示在任何时间内,all类的访问用户达到100人时,将不再允许产生新的连接,当第101位客户要

754、连接时,连接将失败,并向用户显示文件/etc/的内容。LinuxLinux操作系统操作系统 16.uploadupload的功能是对可以上传的目录进行更加详细的权限设置。格式如下:upload根目录子目录是否可以上传拥有者拥有组文件权限能否创建字目录LinuxLinux操作系统操作系统 说明如下:(1)根目录:指的是ftp的根目录,即登录时所见到的根目录;(2)子目录:指可供上传的子目录;(3)是否可以上传:设置此目录是否可以上传文件,“yes”表示可以,“no”表示不可以;LinuxLinux操作系统操作系统 (4)拥有者/拥有组:文件上传后赋予它的拥有者和拥有组的名称;(5)文件权限:文件

755、上传后的权限;(6) 能 否 创 建 字 目 录 : “dirs”表 示 可 以 ,“nodirs”表示不可以。具体配置如下:upload/var/ftp*no表示在子目录/var/ftp下不允许上传。LinuxLinux操作系统操作系统 upload/var/no表示在子目录/var/下不允许上传。upload/var/no表示在子目录/var/下不允许上传。upload/var/yes0644dirs允许用服务器上的合法用户在子目录/var/目录下上传权限为0644(也就是-rw-r-r-)的文件,而且在这个目录下可以新建字目录。LinuxLinux操作系统操作系统 17.aliasali

756、as的功能是给指定目录设置一个别名,这样在切换目录时就可以使用较短的目录别名。格式如下:alias目录别名目录名具体配置如下:aliasRpub表示给子目录pub设置一个别名R。LinuxLinux操作系统操作系统 18.cdpathcdpath的功能是提供直接进入某个搜索路径。格式如下:cdpath目录名具体配置如下:cdpath/var/ftpcdpath/var/cdpath/var/假设用户输入“cdlinux”命令,系统就会依次搜索是否有/var/、/var/、/var/目录存在,如果找到就进入该目录。LinuxLinux操作系统操作系统 19.path-filterpath-fil

757、ter的功能是限制上传的文件名可以包括哪些字符。具体配置如下:path-filteranonymous/etc/badA-Za-z0-9*$.-path-filterguest/etc/badA-Za-z0-9*$.-LinuxLinux操作系统操作系统 表示anonymous和guest类的用户上传的文件名可以包括A-Z、a-z和0-9,且不可以用“.”或“-”开头。如果文件名不在规定的范围之内,则会显示文件bad的内容。LinuxLinux操作系统操作系统 20.的功能是限制某class只能传几个文件。格式如下:rawin|out|totalcountclass对某个class限制存取文件

758、的数目,包含了in(上传)、out(下载)、total,raw代表不光是数据文件,而是整个传输的结果。具体配置如下:out20remote表示remote类的用户最多能下载20个文件,如果超过了这个限制,系统会返回“Transferlimitsexceeded.”信息。LinuxLinux操作系统操作系统 21.limit-timelimit-time的功能是限制用户的访问保持时间。格式如下:limit-timetypelist可以是anonymous或者guest,正式用户(real类)不会受到限制。具体配置如下:limit-timeanonymous10limit-timeguest10L

759、inuxLinux操作系统操作系统 13.2.2有时我们需要禁止一些用户使用FTP服务,其设置是十分简单的,只需将要禁止的用户账号写入文件/etc/中。基于系统的安全考虑,一般我们不希望权限过大的用户和一些与命令名相同的用户进入FTP服务器。所以在缺省的配置中,一般以下用户已经被列入了“黑名单”:rootuucpnewsbinadmnobodylpsyncshutdownhaltmail当然在文件中,每个用户名占一行。LinuxLinux操作系统操作系统 【实例13.1】本实例用来实现拒绝lgm用户进行FTP连接。(1)将lgm加入文件中。(2)重新启动xinetd进程。(3)进行测试,操作步

760、骤如下:lgmredflaglgm$C(Versionwu-2.6.1-16)ready.LinuxLinux操作系统操作系统 530PleaseloginwithUSERandPASS.530PleaseloginwithUSERandPASS.KERBEROS_V4rejectedasanauthenticationtypeName(10.1.14.61:lgm):lgm331Passwordrequiredforlgm.Password:530Loginincorrect.Loginfailed.LinuxLinux操作系统操作系统 13.2.3文件的功能是禁止某些来自指定机器上的登录。

761、如果需要拒绝来自某些主机的登录,一种方法就是在/etc/中设置“deny”命令,另一种更加简单的方法就是在/etc/中写入要禁止的主机的IP地址或域名。LinuxLinux操作系统操作系统 【实例13.2】本实例用来验证文件的功能。文件的内容如下:#Examplehostaccessfile#Everythingaftera#istreatedascomment,#emptylinesareignoreddenylgm10.1.14.125#表示拒绝lgm用户从10.1.14.125主机上登录。LinuxLinux操作系统操作系统 allowtest10.1.14.66#表示允许test用户从

762、10.1.14.66主机上登录。denyuser110.1.14.0/255.255.255.0#表示拒绝user1用户从网络10.1.14.0/255.255.255.0登录。我们用lgm用户从主机10.1.14.125上登录,执行结果如图13-2所示:LinuxLinux操作系统操作系统 图13-2从主机10.1.14.125登录被拒绝LinuxLinux操作系统操作系统 13.3wu-ftp的相关应用的相关应用13.3.1连接数统计命令连接数统计命令我们可以使用命令十分清楚地统计出当前连接到FTP服务器上的用户数目,并且同时列出上限。LinuxLinux操作系统操作系统 【实例13.3】

763、本实例用来统计连接到正在运行的wu-ftp服务器的用户的个数,操作如下:rootredflag/root#Serviceclassall-3users(nomaximum)LinuxLinux操作系统操作系统 13.3.2在线用户查看命令在线用户查看命令我们可以使用命令十分清楚地列出当前连接的用户的详细情况。【实例13.4】本实例用来显示连接到正在运行的wu-ftp服务器的用户的信息,操作如下:LinuxLinux操作系统操作系统 rootredflag/root#Serviceclassall:1743?SN0:00ftpd::test1:IDLE1738?SN0:00ftpd:10.1.1

764、4.125:connected:IDLE1714?SN0:00ftpd::lgm:IDLE-3users(nomaximum)LinuxLinux操作系统操作系统 13.3.3FTP关闭文件生成命令关闭文件生成命令我们可以使用命令生成一个在/etc/中设置的shut.msg文件,用于关机设定。命令的格式为:-lmin-dmintime说明-l:设定在关闭FTP服务器功能前多少分钟时停止用户的连接;-d:设定在关闭FTP服务器功能前多少分钟时切断用户连接;LinuxLinux操作系统操作系统 time:指定关闭FTP服务器的时间,例如希望在晚上10点关闭FTP服务器,则为2200;说明:断线以前

765、显示给用户的告警信息。【实例13.5】rootredflag/root#-l15-d51800willshutdown.rootredflag/root#lessshutmsg20030407180000150005willshutdown.LinuxLinux操作系统操作系统 13.3.4用脚本实现自动用脚本实现自动FTP对于经常使用的FTP操作,我们可以编写成脚本,这样就不用每次反复做重复的工作,只需简单地运行一下脚本即可。下面我们用一个具体的实例来讲述如何用脚本来实现FTP。【实例13.6】本实例用来实现从服务器下载文件a.txt,然后把本地的b.txt文件上传到FTP服务器上。实现步骤

766、如下:LinuxLinux操作系统操作系统 (1)创建文本文件。内容如下:open10.1.14.61#用open连接远程服务器10.1.14.61。usertest123456#test是用户名,123456是密码。binary#以二进制传送。hashLinuxLinux操作系统操作系统 #当有数据传送时,显示“#”号。cdpub#进入远程目标路径pub。geta.txt/home/test/a.txt#把远程文件a.txt下载到本地/home/test/目录下。put/root/b.txtb.txt#将本地文件b.txt上传到FTP服务器。bye#退出FTP应用。LinuxLinux操作系

767、统操作系统 (2)执行脚本。执行如下的命令即可执行上面的脚本:rootredflag/root#cat|LinuxLinux操作系统操作系统 13.4wu-ftp常见故障排除常见故障排除13.4.1检查检查ftp的配置文件的配置文件在wu-ftp安装目录下的bin子目录下执行ckconfig,如下所示:rootredflagbin#./ckconfigChecking_PATH_:/etc/ok.Checking_PATH_:/etc/LinuxLinux操作系统操作系统 Icantfindit.lookindoc/examplesforanexample.Checking_PATH_:/et

768、c/ok.Checking_PATH_PIDNAMES:/var/run/ok.Checking_PATH_CVT:/etc/ok.Checking_PATH_XFERLOG:/var/log/xferlogok.LinuxLinux操作系统操作系统 Checking_PATH_PRIVATE:/etc/ok.Checking_PATH_:/etc/ok.这个操作是用来查看FTP的配置文件是否都在正确的位置,通常的配置文件有以下八个:/etc/etc/var/run/etc/var/log/xferlog/etc/etc/etc/LinuxLinux操作系统操作系统 如果执行ckconfig时

769、,出现信息说找不到某些文件,你可以在doc/examples/这个目录下找到相应的例子。就上面的例子来说,它出现的信息是找不到/etc/这个文件,该文件是用来依据客户的IP作相应访问控制的,基本上不影响FTP的正常工作。LinuxLinux操作系统操作系统 13.4.2查看查看log文件文件log日志文件对服务器的维护和管理非常重要,因为管理员可以很容易地知道诸如用户执行了哪些命令,上传和下载了哪些文件等信息。wu-ftp的日志文件一般保存在/var/log/xferlog中,可以通过如下命令来查看:rootredflag/root#tailf/var/log/xferlogLinuxLinu

770、x操作系统操作系统 习习题题1.FTP服务使用的是_端口。A.21 B.23 C.25D.532.我们从Internet上获得软件最常采用的是_。A.WWWB.TelnetC.FTPD.DNS3在Unix和Linux下默认采用的免费的FTP软件是_。A.cute-ftpB.flash-ftpC.wu-ftpD.pro-ftpLinuxLinux操作系统操作系统 4一次下载多个文件用_命令。A.mgetB.get C.putD.send5在FTP操作过程中,“530”表示_。A.登录成功 B.登录不成功C.服务就绪 D.写文件出错6.用于关闭FTP服务器的程序是_。A.B.C.D.ftpdLin

771、uxLinux操作系统操作系统 7.wu-ftp最重要的配置文件是_。A.B.C.D.8.下面_不是FTP用户的类别。A.realB.anonymousC.guestD.users9.下面_不是passwd-check的通用标准。A.noneB.noC.trivalD.rfc82210.在文件中,_对可以上传的目录进行更加详细的权限设置。A.upB.uploadC.putD.sendLinuxLinux操作系统操作系统 第第14章章防火墙防火墙14.1防火墙简介防火墙简介14.2用用ipchains过滤数据包过滤数据包14.3iptables习题习题LinuxLinux操作系统操作系统 14.

772、1防防火火墙墙简简介介14.1.1防火墙的分类和基本工作原理防火墙的分类和基本工作原理防火墙一般分为两大类,一类是“包过滤”型防火墙,另一类是“代理服务器”型防火墙。LinuxLinux操作系统操作系统 1.包过滤型防火墙(PacketFilter)包过滤型防火墙内置于Linux内核,它和日常生活中门卫的作用是类似的。门卫把守着大门,根据上级的指示允许或不允许某些人员进出大楼。包过滤型防火墙根据预先的设置允许或不允许数据包通过防火墙。门卫是根据来往人员是什么样的人、从什么地方来、到什么地方去、想干什么等信息来决定是否放行,那么防火墙是根据什么来决定是否放行数据的呢?我们先来看看数据包中都包含了

773、什么信息。LinuxLinux操作系统操作系统 图14-1是一个以太网数据帧的格式,在帧内封装着IP数据包,IP数据包又封装着传输层的数据报。图图14-1带全部带全部TCP数据报的以太网数据报的以太网数据帧格式数据帧格式LinuxLinux操作系统操作系统 我们再来看一个IP数据包的格式(见图14-2)。IP数据包包头含有源IP地址、目的IP地址,如果数据包是一个TCP或UDP数据包,还会有协议类型。紧接着我们看一个TCP报文的格式(见图14-3)。报文中包含有源端口号、目的端口号。有了IP地址,我们就可以知道数据包是从什么主机发出的、到达哪个主机;而端口号通常表示什么服务,即是干什么的。Li

774、nuxLinux操作系统操作系统 图图14-2IP数据包格式数据包格式LinuxLinux操作系统操作系统 图图14-3TCP数据报文格式数据报文格式LinuxLinux操作系统操作系统 包过滤型防火墙就是通过检查数据包中的源IP地址、目的IP地址、源端口号、目的端口号、协议类型等信息来决定是放行数据还是拒绝数据的。由于防火墙要能读得懂这些信息才能工作,而这些信息分别在TCP/IP协议的网络层、传输层等层中,所以说包过滤型防火墙工作在网络层或传输层中。图14-4是包过滤型防火墙的一种常用的模式,它用来阻隔来自外部网络对内部网络的威胁。LinuxLinux操作系统操作系统 从以上的讨论中可以看到

775、,只要是合法的数据就会被防火墙正常转发,应用程序感觉不到防火墙的存在,因此包过滤型防火墙有着较好的透明性,即应用程序无须做任何更改。同时由于包过滤型防火墙是内置于Linux内核的,也就具有较好的网络性能。LinuxLinux操作系统操作系统 图14-4包过滤型防火墙的一种常用结构LinuxLinux操作系统操作系统 2.代理服务器型防火墙(ProxyServer)代理服务器型防火墙是应用网关型防火墙,通常工作在应用层,图14-5是应用网关型防火墙的常用应用模式。LinuxLinux操作系统操作系统 图14-5代理服务器型防火墙的一种常用结构LinuxLinux操作系统操作系统 代理服务器(Pr

776、oxy)实际上是运行在防火墙上的一种服务器程序,防火墙通常是具有两个网卡(或接口)的主机。服务器监听着客户的请求,如:申请浏览网页等。当内网的客户机请求与外网的真实服务器连接时,客户先连接代理服务器,然后再由代理服务器与真实的服务器进行连接,取得客户想要的信息,代理服务器再把信息返回给客户。LinuxLinux操作系统操作系统 此处的代理服务器是一个中间点,其角色和我们平常所说的中介十分相似,客户机和外界的主机没有发生直接联系,这是代理服务器型防火墙和包过滤型防火墙的本质差别所在。我们只要控制好这个中介所能代理的服务,就可以控制信息的进出,从而实现防火墙的目的。代理服务器型防火墙中数据的流通完

777、全依赖于代理服务器所能代理的服务,因此透明性差。如果我们已经有了房地产的中介,而现在要进行的是外汇买卖,除了再找一个外汇买卖代理外,我们别无办法。LinuxLinux操作系统操作系统 使用代理服务器时,通常要把客户机的应用程序进行改动(即设置应用网关,例如:使用WINProxy代理服务器时,要在客户端的IE浏览器上进行代理服务器的有关配置),如果应用程序没有代理版本,则常常造成服务器无法使用。另外,一个代理服务器软件通常只代理一种或几种服务,因此往往要在主机上安装多个代理服务器软件。一般来说,各种互联网服务的代理软件总是滞后于其标准版本,常常出现没有可靠的代理版本的情况。LinuxLinux操

778、作系统操作系统 使用代理服务器型防火墙的好处是可彻底地与真实网络隔离开来。一般说来,系统的安全性较好,缺点是透明性差,每一项服务都要有相应的代理软件。LinuxLinux操作系统操作系统 14.1.2包过滤型防火墙的两种策略包过滤型防火墙的两种策略设计防火墙有两种基本的策略:一种是一开始就禁止所有的数据包通过,然后根据需要打开相应的服务端口;另一种是一开始就开放所有的服务,然后对不可靠的服务端口进行封锁。原则上,第一种方法比较可靠,但是对于不熟悉TCP/IP的用户,可能会导致一些其他困扰。LinuxLinux操作系统操作系统 14.2用用ipchains过滤数据包过滤数据包14.2.1什么是什

779、么是ipchainsipchains是Linux的包过滤防火墙,是LinuxIPV4防火墙的重写和ipfwadm的重写。ipchains是内核支持的,实现速度较快。它分析一个数据包,检查源IP地址、目的IP地址、源端口号、目的端口号、协议的类型等信息。Linux的ipchains命令可以建立规则,为进入、离开、穿越防火墙的数据提供可控制的限制,从而提供比较安全的防火墙功能。LinuxLinux操作系统操作系统 14.2.2使用使用ipchains的准备工作的准备工作在Linux中使用ipchains的前提满足以下五点:(1) Linux的内核是Linux 2.1.102以后的版本(红旗Linu

780、x3.0的内核是Linux2.4.0以后的,因此满足条件)。LinuxLinux操作系统操作系统 (2)若安装红旗Linux没有安装ipchains,则安装之前要确保当前的内核支持ipchains,请需要/usr/src/linux-2.4目录下用命令“makemenuconfig”对内核进行配置,在“Netwowrkoptions”选项下确保:*Networkpacketfiltering(replacesipchains)IP:NetfilterConfiguration-下的所有选项为“M”重新编译内核,使用新的内核启动系统。LinuxLinux操作系统操作系统 (3)打开IP转发功能,

781、为了完成伪装等功能,必须打开系统的IP转发功能,使得Linux变成路由器。有两种方法:用命令“rootredflag/root#echo1/proc/sys/net/ipv4/ip_forward”或修改/etc/sysconfig/network文件,将FORWARD_IPV4的值改为“true”,重新启动系统。LinuxLinux操作系统操作系统 (4)安装ipchains软件包。如果没有安装软件包,请把红旗Linux光盘mount上,找到相应的目录,用“rpm-ivhipchains-1.3.10-7.i386.rpm”进行安装。(5)用命令“serviceipchainsstart”启

782、动ipchains服务,也可以用“ntsysv”配置ipchains服务在系统启动时自动启动,目的是装入ipchains模块。这里也可以使用命令“modprobeipchains”来装入ipchains模块。LinuxLinux操作系统操作系统 14.2.3ipchains的工作流程的工作流程ipchains在内核插入规则,使得系统根据这些规则进行数据包的过滤。规则是以链(ipchains)的形式组织的,ipchains定义的四类规则链分别是:输入链(input)、输出链(output)、转发链(forward)和用户自定义链(userdefinedchains),其中前三类是永久规则链。输入

783、链的规则作用于进入系统的数据;输出链的规则作用于离开系统的数据;转发链的规则作用于从系统的一个接口进来然后从另一个接口离开的数据(即穿越系统的数据)。永久规则链不能被删除;用户规则链是由用户定义的,可以被删除,它可以由永久规则链中的规则来激活。LinuxLinux操作系统操作系统 我们首先来讨论什么是数据的输入、输出和转发。它们都是从防火墙的角度来定义的,如图14-6(a)所示,数据从主机A出发到达主机B:是先进入防火墙的eth0网卡,然后穿越防火墙,从网卡eth1转发出去,最终到达主机B。以上数据先后经过了输入、转发和输出的过程。再来看图14-6(b),数据从主机A出发,目的地就是防火墙所在

784、的服务器,则数据从网卡eth0进入就到达目的地,数据没有被转发到别处,因此只有输入的过程。在图14-6(c)中,数据从服务器出发到达主机A,数据只有输出的过程。搞清楚数据的方向对于确定哪些规则链会被采用是至关重要的。LinuxLinux操作系统操作系统 图图14-6数据流动的方向数据流动的方向LinuxLinux操作系统操作系统 我们可以在数据输入、转发、输出的过程中定义检查规则和动作,从而对数据进行控制。在图14-6(a)中从主机A发出到达主机B的数据,要先后经过ipchains中的input、forward、output规则链的检查,而图14-6(b)的数据只经过input规则链的检查,图

785、14-6(c)的数据也只经过output规则链的检查。LinuxLinux操作系统操作系统 一个规则链可以由一个或多个规则按顺序排列而成。所谓采用规则链过滤数据包,就是数据包中的源IP地址、目的IP地址、源端口号、目的端口号等信息与规则链中的每一条规则按顺序进行匹配。如果有一条规则满足,就执行规则中的动作(例如:拒绝数据、接受数据、转到用户定义的规则链等);如果没有任何规则满足,则采用缺省动作(称为策略的默认规则)。图14-7描述了这个过程。LinuxLinux操作系统操作系统 图图14-7ipchains事件流事件流LinuxLinux操作系统操作系统 【实例14.1】我们还是以input规

786、则链为例介绍以上数据包的匹配方式。假如主机192.168.0.15上的input规则链定义了如下几条的规则:#以下对所有的ICMP包全部拒绝。Rules1:-icmp-jREJECT#以下对所有的TCP协议数据包,转到用户自定义的规则链userchain。Rules2:-ptcp-juserchainLinuxLinux操作系统操作系统 #以下拒绝所有的UDP协议数据包。Rules3:-pudp-jDENY其中用户自定义规则链userchain的规则集如下:#以下接受来自192.168.0.1主机的数据。Rules1:-s192.168.0.1/32-jACCEPT#拒绝所有的TCP协议数据。

787、Rules2:-ptcpjDENYLinuxLinux操作系统操作系统 (1)从192.168.0.1主机发出的数据到达192.168.0.15主机时,因为数据要进入主机,所以要经过input规则链的检查。从规则链的第一条规则开始进行匹配,由于Telnet应用程序使用的是TCP数据包,不是ICMP数据包,所以第一条规则不符,接着匹配下一条规则;(2)数据包符合第二条规则,所以根据定义的动作,跳转到用户自定义的规则链中,匹配userchain中的规则;LinuxLinux操作系统操作系统 (3)由于数据是从192.168.0.1主机出发的,因此数据包和userchain中的第一条规则匹配,执行规

788、定的动作:接受数据,数据包顺利通过,交给主机192.168.0.15处理,因此Telnet能够成功;(4)由于已经有规则得到匹配,就停止以后规则的匹配,即用户自定义的userchain规则链的第二条规则以及input规则链中的第三条规则并不起作用。我们用图14-8来表示以上过程。LinuxLinux操作系统操作系统 图图14-8规则的匹配过程示例规则的匹配过程示例LinuxLinux操作系统操作系统 14.2.4ipchains命令命令Linux中的防火墙具有强大的功能,而命令却只有一个ipchains。这个命令实现防火墙的所有包过滤功能,因此该命令十分复杂。我们这里先把常用的选项、参数、动作

789、等用表格列出,分别见表14-1、表14-2和表14-3,在下一节,我们将逐一用小的实例进行解析。ipchains的命令格式如下:ipchains选项LinuxLinux操作系统操作系统 表14-1ipchains的命令选项选项含义-A在规则链尾增加一条规则-D从规则链中删除规则-R替换规则链中的规则-I在给出的规则号前插入规则-L列出规则链中的规则,如未指明规则链,则列出所有规则链中的规则-F清除规则链中的规则,如未指明规则链,则清除所有规则链中的规则-N创建用户自己的规则链-X删除用户自定义的规则链-P改变永久规则链的默认规则(即默认动作)LinuxLinux操作系统操作系统 表14-2ip

790、chains的命令参数参数含义-h显示帮助-p!protocol指明要检查的协议,可以列出/etc/protocols列出的名字,如:TCP、UDP、ICMP、ALL,可以用“!”来否定它,表示去除协议-s!address/mask!port:port指明源地址。源地址可以是主机名()、IP地址(192.168.0.1)、网络地址 (192.168.0.0/24或 192.168.0.0/255.255.255.0)、 所 有 的 地 址(0.0.0.0/0),对于TCP和UDP协议,还可以指定端口号和端口范围,6000表示这一单一端口,6000:6009包含60006009的10个端口,没有

791、下限时默认是0,没有上限默认是65535,端口也可以用名字表示,如:wwwLinuxLinux操作系统操作系统 -d ! address /mask!port:port指明目的地址,用法和指明源地址一样-b设置双向模式。用该参数创建的一条规则分别作用于源、目的地址,相当于为源和目的各创建了一条规则-i!name指明单独的接口或某种类型的接口设置过滤规则,不指明时默认是所有的接口;可以指定一个不激活的接口,如PPP0-jtarget指定规则中条件匹配时要执行的动作,target可以是ACCEPT、DENY、REJECT、MASQ和用户的chains-v显示出对用户的命令,ipchains是如何响

792、应的;详细的输出信息包括:接口地址、规则选项、包和字节计数器等LinuxLinux操作系统操作系统 表14-3ipchains的目标动作动作含义ACCEPT允许包通过DENY丢弃包,不向源主机发送ICMP信息REJECT丢弃包,向源主机发送ICMP信息,如果包为ICMP类型,与DENY一样不返回ICMP信息MASQ数据包的IP地址伪装成本机地址发送,回应的数据包自动地在被转发时解伪装REDIRECT数据被重定向到本地,即使它是要发往远端主机的,该规则只能用于输入链和用户链RETURN在用户链中,表示将包送到当前链中的下一条规则;在永久链中则表示将包送到默认规则custom_chain激活名为c

793、ustom_chain的用户自定义规则链LinuxLinux操作系统操作系统 14.2.5ipchains的使用的使用1.规则链ipchains定义了三个默认的基本规则链:(1)input:由网络接口进入本机。(2)output:由网络接口输出。(3)forward:在各网络接口之间转发,即从一个接口进从另一接口出。用户也可以建立自己的规则链。建立自己的规则链使用“ipchains-N”指令,要删除用户规则链使用“ipchainsX”命令,基本规则链是不能删除的。LinuxLinux操作系统操作系统 【实例14.2】rootredflag/root#ipchains-Nmychain建立自己的

794、规则链,名为mychain,随后就可以往规则链中添加规则。rootredflag/root#ipchains-Xmychain删除自己建立的规则链mychain,不指明删除规则链时删除所有用户自定义的规则链。规则链由一条或多条规则组成,而每个规则由两个部分组成:匹配条件和动作(目标)。往规则链添加规则使用“ipchainsA”命令;删除规则使用“ipchainsD”命令。LinuxLinux操作系统操作系统 【实例14.3】rootredflag/root#ipchains-Ainput-picmp-jDENY往input规则链中添加一条规则“-picmp-jDENY”,该规则的含义放在稍后介

795、绍。rootredflag/root#ipchains-Dinput-picmp-jDENY把规则从input规则链中删除,如果想删除规则链中全部规则,可使用“ipchains-F”命令。rootredflag/root#ipchains-Finput删除input规则链中的全部规则,不指明规则链时删除所有规则链中的所有规则,注意规则链并不被删除。LinuxLinux操作系统操作系统 【实例14.4】rootredflag/root#ipchains-LinputChaininput(policyACCEPT):target protoptsourcedestinationportsDENYi

796、cmp-anywhereanywhere any-any显示的是input规则链中全部规则,至于规则的意义稍后介绍。LinuxLinux操作系统操作系统 【实例14.5】rootredflag/root#ipchains-Iinput2-ptcp-jDENY在input规则链中的第二条规则前插入规则,如果没有指明插入的位置,则在规则链的第一条规则前插入。LinuxLinux操作系统操作系统 2.匹配条件每个规则由匹配条件和动作(目标)组成,匹配条件就是对数据包的源IP地址、目的地址、源端口、目的端口、协议类型等进行判断,“-s”表示源,“-d”表示目的,“-p”表示协议类型。LinuxLinu

797、x操作系统操作系统 【实例14.6】rootredflag/root#ipchains-Ainput-s192.168.0.1-d192.168.0.15-jACCEPT如果数据是从192.168.0.1主机出发,到达192.168.0.15则满足条件。rootredflag/root#ipchains-Ainput-s172.16.0.0/16-d202.96.134.0/24-jACCEPTLinuxLinux操作系统操作系统 【实例14.7】rootredflag/root#ipchains-Ainput-s192.168.0.1-ptcp-jACCEPT如果数据包是从192.168.0

798、.1主机发出的TCP协议数据包,则满足匹配条件,目的地可以是任意。【实例14.8】可以在源IP地址、目的IP地址后加上数字表示端口号,但要注意端口号必须和协议类型一起使用。LinuxLinux操作系统操作系统 root redflag /root#ipchains -A input -s 192.168.0.1 -d192.168.0.1523-ptcp-jACCEPT匹配从192.168.0.1主机出发,到192.168.0.15的Telnet连接(23端口),也可以使用名字代替端口号,如下的命令和该命令等效:root redflag /root#ipchains -A input -s 1

799、92.168.0.1 -d192.168.0.15telnet-ptcp-jACCEPT端口号可以使用区间,方法是最小端口号:最大端口号。LinuxLinux操作系统操作系统 rootredflag/root#ipchains-Ainput-s192.168.0.11024:4096-d192.168.0.15telnet-ptcp-jACCEPT表示从192.168.0.1出发所有端口在10244096之间的Telnet请求。上下界可以省略,“1024:”代表1024以上的所有端口。LinuxLinux操作系统操作系统 3.否定“!”符号用于对匹配条件进行否定。【实例14.9】rootred

800、flag/root#ipchains-Ainput-s!192.168.0.1-d192.168.0.15-jACCEPT如果数据到达192.168.0.15,但不是从192.168.0.1主机出发,则满足条件。LinuxLinux操作系统操作系统 4.动作规则中的动作,用于指明如果IP数据和规则中的条件匹配,则防火墙将要采用的动作,用“-j”指示要进行的动作,动作的类型见表14-3。【实例14.10】rootredflag/root#ipchains-Ainput-picmp-jDENY不允许(DENY)ICMP数据包(ping使用的)通过input规则链。这样实际上就是不允许别的主机pin

801、g本机了。LinuxLinux操作系统操作系统 5.规则链的默认动作当数据开始匹配规则链的规则时,从上到下一个一个规则地匹配,如果没有一个规则匹配,防火墙将采取默认的动作。我们可以用“ipchainsP”命令更改规则链的默认动作。LinuxLinux操作系统操作系统 【实例14.11】rootredflag/root#ipchains-PinputDENY表示把input规则链的默认动作改为DENY。rootredflag/root#ipchains-LinputChaininput(policyDENY):target protoptsource destinationportsDENYic

802、mp-anywhereanywhereany-any在输出的第一行显示的是input规则链的默认动作DENY,缺省时所有规则链的默认动作是ACCEPT。LinuxLinux操作系统操作系统 6.接口在指示规则链中的匹配条件时,可以使用“-i”指明接口,当它用于input和output规则链时其意义是显然的,如果用于forward规则链时,那么它给出的是转发的目标接口。LinuxLinux操作系统操作系统 14.2.6实例实例1.实例一如图14-9所示,为了Web服务器的安全,只允许它为同一子网上的计算机提供www服务,同时为了一定程度的方便,也允许子网上的主机用ping命令测试它是否在线。Li

803、nuxLinux操作系统操作系统 图图14-9实例一示意图实例一示意图LinuxLinux操作系统操作系统 在192.168.0.1主机上进行以下的配置:rootredflag/root#ipchains-F(删除所有规则链的所有规则)rootredflag/root#ipchains-Ainput-ptcp-s192.168.0.0/24-d192.168.0.1ACCEPT(允许来自本子网上主机的WWW服务请求)root redflag /root#ipchains -A input -p icmp -s 192.168.0.0/24 -d192.168.0.1-jACCEPT(允许来自本

804、子网上主机的ICMP数据包进入)rootredflag/root#ipchains-PinputDENY(其余的任何数据不允许进入本主机,我们这里采用的策略是先关闭所有的服务,再一一开放指定的服务)LinuxLinux操作系统操作系统 rootredflag/root#ipchains-L(列出全部规则链进行检查)Chaininput(policyDENY):targetprotoptsourcedestinationportsACCEPTtcp-192.168.0.0/24192.168.0.1any-httpACCEPTicmp-192.168.0.0/24192.168.0.1any-a

805、nyChainforward(policyACCEPT):Chainoutput(policyACCEPT):LinuxLinux操作系统操作系统 在以上输出中,第3和第4行是input规则链中的规则,每一列依次是动作、协议类型、选项、源IP地址、目的IP地址、源端口和目的端口。这样子网上的主机只能ping通Web服务器和浏览服务器上的网页了,其他服务如:FTP、Telnet等均不能成功。LinuxLinux操作系统操作系统 2.实例二如图14-10所示,两个部门在各自的子网上,我们除了允许192.168.0.0/255.255.255.0子网的主机可以访问192.168.0.1的邮件服务器外

806、,两个子网间不允许有别的通信。可以在防火墙上进行:LinuxLinux操作系统操作系统 图图14-10实例二示意图实例二示意图LinuxLinux操作系统操作系统 14.2.7让建立的规则在系统启动时生效让建立的规则在系统启动时生效有两种方法让ipchains中的规则在系统启动时生效。1.建立脚本并自动运行可以直接用ipchains命令编写一个规则脚本,并在系统启动时执行脚本。例如,建立脚本名为/etc/myfirewall,脚本要是可执行的,并在启动脚本/etc/rc.d/rc.local中加入语句:if-x/etc/myfirewall;then/etc/myfirewall;fi;Lin

807、uxLinux操作系统操作系统 2.用ipchains恢复首先要测试通过防火墙的配置,再用命令把内存中的规则转储在文件上。rootredflag/root#/etc/rc.d/init.d/ipchainssave该命令会把所有的规则保存在文件/etc/sysconfig/ipchains中。系统启动时会自动执行/etc/rc.d/init.d/ipchains,而它会自动从/etc/sysconfig/ipchains文件中恢复已经保存的规则。LinuxLinux操作系统操作系统 14.2.8IP伪装伪装防火墙的使用场合大多是如图14-4所示的模式,为了减少占用互联网上真实的IP地址,我们在

808、内网(eth1接口所接的网段)使用的是私有IP地址,如192.168.0.0/24,而只有eth0接口才具有一个真正互联网上的IP地址,如202.199.148.120。由于私有IP地址不能和互联网上的主机直接通信,因此要采用网络地址转换(NAT),也称IP代理。LinuxLinux操作系统操作系统 处于私有网络的主机将自己的请求传递给代理机,由代理机重写源IP地址和端口,使得互联网上的主机接收到的数据包看起来像是从代理机发出来的,代理机收到应答数据后,将会把数据转给原来的内网上的主机,这样从内网的主机看来就像是和外部主机直接通信。要使用IP伪装功能,简单地使用“-jMASQ”动作即可。当然首

809、先要打开Linux内核的IP转发功能:rootredflag/root#echo1/proc/sys/net/ipv4/ip_forwardLinuxLinux操作系统操作系统 然后设置防火墙对数据包进行伪装:ipchains-Aforward-s192.168.0.0/24-d!192.168.0.0/24-jMASQ最后还要在内网的客户机上把网关指向防火墙。这实际上做到了网络上的主机共享线路(例如eth0接ADSL)上网了。LinuxLinux操作系统操作系统 但是这里还存在一个问题,在内网的主机如果使用CuteFtp从外网服务器下载文件没有问题,而使用Windows2000下的ftp命令

810、行工具下载文件会出现如下错误:C:Connectedto.220(vsFTPd1.1.3)User(:(none):anonymousLinuxLinux操作系统操作系统 331Pleasespecifythepassword.Password:230Loginsuccessful.Havefun.ftpls500IllegalPORTcommand.425UsePORTorPASVfirst.ftpLinuxLinux操作系统操作系统 这是一个特殊的问题,FTP依赖两个连接,一个连接是用于控制的,它是客户端发起的;而另一个连接是用于传输数据的,通常是服务器端发起的,这种模式叫被动模式。可是服

811、务器根本不知道关于内网(私有网络)的事情,因此连接不会成功。一个解决办法是和CuteFtp相同,强行让数据传输的这个连接也由客户端发起,叫主动模式;另一种方法就是采取补救方法,我们下一节介绍。LinuxLinux操作系统操作系统 14.3iptables在Linux2.2内核中采用了我们前面介绍的ipchains来控制内核包过滤规则。现在的内核已是Linux2.4的了,该内核常常采用全新的内核包过滤管理工具iptables。这个全新的内核包过滤工具将使用户更易于理解其工作原理,更容易被使用,当然也将具有更为强大的功能。iptables只是一个管理内核包过滤的工具,实际上真正来执行这些过滤规则的

812、是netfilter(Linux核心中一个通用架构)及其相关模块(如iptables模块和nat模块)。LinuxLinux操作系统操作系统 14.3.1iptables的原理的原理netfilter是Linux核心中一个通用架构,它提供了一系列的表(tables),每个表由若干链(chains)组成,而每条链中可以由一条或数条规则(rule)组成。我们可以这样来理解,netfilter是表的容器,表是链的容器,而链又是规则的容器。系统有filter、nat、mangle三个表,缺省的表为filter,该表中包含了input、forward和output三个链;nat表有prerouting、

813、postrouting、output三个链;mangle有prerouting、output两个链。这里链的概念和ipchains中链的概念是一样的,每一条链中可以有一条或数条规则。LinuxLinux操作系统操作系统 图图14-11iptables的工作流程的工作流程LinuxLinux操作系统操作系统 当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件。如果满足,系统将根据该条规则所定义的方法处理该数据包;如果不满足则继续检查下一条规则。最后,如果该数据包不符合该链中任一条规则的话,系统就会根据该链预先定义的策略(Policy)来处理该数据包。数据包在fi

814、lter表中的流程如图14-11所示。有数据包进入系统时,系统首先根据路由表决定将数据包发给哪一条链,则可能有以下三种情况:LinuxLinux操作系统操作系统 (1)如果数据包的目的地址是本机,则系统将数据包送往INPUT链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。(2)如果数据包的目的地址不是本机。也就是说,这个包将被转发,则系统将数据包送往forward链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。LinuxLinux操作系统操作系统 (3)如果数据包是由本地系统进程产生的,则系统将其送

815、往output链,如果通过规则检查,则该包被发给相应的本地进程处理;如果没通过规则检查,系统就会将这个包丢掉。LinuxLinux操作系统操作系统 14.3.2使用使用iptables准备工作准备工作1.系统需求检查内核是否支持netfilter,如果不支持要求重新编译。这些项目通常都是位于“Networkingoptions”子项下的。以Linux2.4.17内核为例,我们应该选中的项目有:.*Networkpacketfiltering(replacesipchains).然后,在“IP:NetfilterConfiguration-”选中所有的模块为“M”。LinuxLinux操作系统操

816、作系统 2.载入模块ipchains和iptables是相对立的,在使用iptables时就不能同时使用ipchains。可以使用“rmmodipchains”命令卸载ipchains模块。要使用iptables,必须载入相关模块。可以使用以下命令载入相关模块:rootredflag/root#modprobeip_tables或insmodip_tablesmodprobe命令会自动载入指定模块及其相关模块。iptable_filter模块会在运行时自动载入。LinuxLinux操作系统操作系统 14.3.3iptables命令命令一个iptables命令基本上包含如下五部分:(1)希望工作

817、在哪个表上;(2)希望使用该表的哪个链;(3)进行的操作(插入、添加、删除和修改);(4)对特定规则的目标动作;(5)匹配数据报条件。LinuxLinux操作系统操作系统 基本的语法为:iptables-ttable-Operationchain-jtargetmatch(es)例如,希望添加一个规则,允许所有从任何地方到本地smtp端口的连接:iptables-tfilter-AINPUT-ptcp-dportsmtp-jACCEPT当然,还有其他的对规则进行操作的命令,如:清空链表,设置链缺省策略,添加一个用户自定义的链LinuxLinux操作系统操作系统 基本操作:-A:在链尾添加一条规

818、则。-I:插入规则。-D:删除规则。-R:替代一条规则。-L:列出规则。LinuxLinux操作系统操作系统 基本目标动作,适用于所有的链:ACCEPT:接收该数据报。DROP:丢弃该数据报。QUEUE:排队该数据报到用户空间。RETURN:返回到前面调用的链。Customchain:用户自定义链。LinuxLinux操作系统操作系统 基本匹配条件,适用于所有的链:-p:指定协议(tcp/icmp/udp/.)。-s:源地址(ipaddress/masklen)。-d:目的地址(ipaddress/masklen)。-i:数据报输入接口。-o:数据报输出接口。LinuxLinux操作系统操作系

819、统 14.3.4iptables使用实例使用实例假设某一单位租用DDN专线上网,网络拓扑如图14-12所示,eth0:198.199.37.254,eth1:198.168.80.254。以上的IP地址都是Internet上真实的IP,故没有用到IP伪装。并且,我们假设在内部网中存在以下服务器:WWW服务器:198.168.80.11FTP服务器:198.168.80.12E-mail服务器:198.168.80.13LinuxLinux操作系统操作系统 图图14-12iptables实例图示实例图示LinuxLinux操作系统操作系统 下面我们将用iptables一步一步地来建立我们的包过滤

820、型防火墙,需要说明的是,在这个例子中,我们主要是对内部的各种服务器提供保护。如下:(刷新所有的链的规则)iptables-F(首先禁止转发任何包,然后再一步步设置允许通过的包)iptables-PFORWARDDROPLinuxLinux操作系统操作系统 (数据包是双向的,我们不仅仅要设置数据包出去的规则,还要设置数据包返回的规则,我们先建立针对来自Internet数据包的过滤规则,允许来自Internet的用户的WWW、FTP请求数据包到内网)iptables-AFORWARD-ptcp-d198.168.80.12-dporteth0-jACCEPTiptables-AFORWARD-pt

821、cp-d198.168.80.12-dporteth0-jACCEPTiptables-AFORWARD-ptcp-d198.168.80.12-dport-ieth0-jACCEPTLinuxLinux操作系统操作系统 (允许来自Internet的用户的SMTP、POP3请求数据包到内网)iptables-AFORWARD-ptcp-d198.168.80.13-dportsmtp-ieth0-jACCEPTiptables-AFORWARD-ptcp-d198.168.80.13-dportpop3-ieth0-jACCEPT(接受来自整个内网的数据包过滤)ACCEPTiptables-A

822、FORWARD-s198.168.80.0/24-ieth1-jACCEPT(对不管来自哪里的ICMP包都进行限制,允许每秒通过一个包,该限制触发的条件是10个包。)LinuxLinux操作系统操作系统 iptables-AFORWARD-picmp-mlimit-limit1/s-limit-burst10-jACCEPT以下是完整的脚本文件内容,希望通过这个实例使读者能对iptables的用法有所了解:#!/bin/sh/sbin/iptables-F/sbin/iptables-AFORWARD-ptcp-d198.168.80.11-dporteth0-jACCEPT/sbin/ipt

823、ables-AFORWARD-ptcp-d198.168.80.12-dporteth0-jACCEPTLinuxLinux操作系统操作系统 /sbin/iptables-AFORWARD-ptcp-d198.168.80.12-dport-ieth0-jACCEPT/sbin/iptables-AFORWARD-ptcp-d198.168.80.13-dportsmtp-ieth0-jACCEPT/sbin/iptables-AFORWARD-ptcp-d198.168.80.13-dportpop3-ieth0-jACCEPT/sbin/iptables -A FORWARD -s 198

824、.168.80.0/24 -i eth1 -jACCEPT/sbin/iptables-AFORWARD-picmp-mlimit-limit1/s-limit-burst10-jACCEPTLinuxLinux操作系统操作系统 14.3.5iptables与与ipchains的区别的区别iptables与ipchains的具体区别如下:(1)iptables的缺省链的名称从小写换成大写,并且意义不再相同。input和output分别放置对目的地址是本机以及本机发出的数据包的过滤规则;(2)“-I”选项现在只代表输入网络接口,输出网络接口则使用“-o”选项;LinuxLinux操作系统操作系统

825、 (3)TCP和UDP端口现在需要用“-source-port”或“-sport”(或-destination-port/-dport)选项拼写出来并且必须置于“-ptcp”或“-pudp”选项之后,因为它们分别是载入TCP和UDP扩展的;(4)以前TCP的“-y”标志现在改为“-syn”,并且必须置于“-ptcp”之后;(5)原来的DENY目标最后改为了DROP;(6)MASQ现在改为MASQUERADE,并且使用不同的语法。REDIRECT保留原名称,但也改变了所使用的语法。LinuxLinux操作系统操作系统 14.3.6iptables中的中的IP伪装伪装用iptables来进行IP伪

826、装也是相当的简单,网络结构见图14-4中,使用的命令如下:rootredflag/root#iptables-tnat-APOSTROUTING-oeth0-jMASQUERADE命令中“-tnat”说明对NAT表操作;“-APOSTROUTING”说明是添加POSTROUTING链中的规则;“-oeth0-jMASQUERADE”表示对所有通过eth0(ADSL连接)接口向外发送的包进行IP伪装。但是仍然解决不了14.2.8所提到的FTP数据连接问题,我们要有补救措施:还要加载几个模块。如下:LinuxLinux操作系统操作系统 insmodip_tablesinsmodip_conntra

827、ckinsmodiptable_natinsmodipt_MASQUERADEinsmodip_conntrack_ftpinsmodip_nat_ftpLinuxLinux操作系统操作系统 “ip_conntrack”是连接跟踪模块,是后面两个模块所需要的;“iptable_nat”是实现NAT功能的模块;ipt_MASQUERADE则是实现IP伪装的。在红旗Linux3.0中,前面4个模块会自动加载。当然路由功能也是一定要启用的:rootredflag/root#echo1/proc/sys/net/ipv4/ip_forward这样即使内网中FTP客户端不主动发起数据连接,也能正常和外网

828、的FTP服务器正常通信了。LinuxLinux操作系统操作系统 习习题题1.防火墙可以分成和两大类。2.假设内部网络地址是202.204.19.0/24,要拒绝来自外部网络的ping命令,请写出ipchains命令。3.防火墙进行IP伪装时,在把数据发送到目的主机前,要改写数据包的什么内容?4.在图14-9中,如果只允许服务器为本子网的主机提供WWW和Telnet服务,其余的服务一律拒绝,应如何用ipchains命令实现?LinuxLinux操作系统操作系统 此课件下载可自行编辑修改,供参考!此课件下载可自行编辑修改,供参考!感谢你的支持,我们会努力做得更好!感谢你的支持,我们会努力做得更好!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号