红旗Linux中文教程

——红旗Linux授权培训中心指定用书——

红旗Linux指定培训教材

红旗Linux用户基础教程

中科红旗软件技术有限公司编著

红旗Linux授权培训管理中心监制

Publishing House of Electronics Industry

北京BEIJING内容简介

本书属于“红旗Linux指定培训教材”系列,是红旗Linux授权培训中心指定用书。

本书从最基本的红旗Linux2.0讲起,详细介绍了红旗Linux中外设、文件系统、Shell系统、常用命令、基本网络操作命令,XWindow系统的使用。本书在注重整体性和实用性的基础上,充分考虑了读者在学习工作中的各种困难,每章附有习题,以方便读者巩固所学知识。同时,本书还附有实验部分,这些实验设计精炼,内容充实,对读者巩固学习效果大有好处。

本书适合于Linux入门用户,将带领读者进入红旗Linux的殿堂。同时,本书也是红旗Linux培训的教学用书。

未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。

版权所有,翻版必究。

图书在版编目(CIP)数据

红旗Linux用户基础教程/中科红旗软件技术有限公司编著.-北京:电子工业出版社,2001.1

(红旗Linux指定培训教材)

ISBN7-5053-6476-6

.........Linux操作系统-技术培训-教材Ⅳ.TP316.89

中国版本图书馆CIP数据核字(2000)第86533

丛书名:红旗Linux指定培训教材

书名:红旗Linux用户基础教程

编著:中科红旗软件技术有限公司

监制:红旗Linux授权培训管理中心

责任编辑:郭晶 罗建强

排版制作:电子工业出版社计算机排版室监制

印刷者:

出版发行:电子工业出版社URLhttp://www.phei.com.cn

北京海淀区万寿路173信箱邮编:100036

经销:各地新华书店

开本:787×9801/16印张:18字数:403.2千字

版次:20011月第120011月第1次印刷

ISBN7-5053-6476-6书号:TP·3545

印数:册定价:元

凡购买电子工业出版社的图书,如有缺页、倒页、脱页、所附磁盘或光盘有问题者,请向购买书店调换。

若书店售缺,请与本社发行部联系调换。电话:68279077

前言

关于本丛书

Linux是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIXUNIX

的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品。

红旗LinuxLinux的一个发展产品,由中科红旗软件技术有限公司开发研制的以IntelAlpha芯片为CPU构成的服务器平台上第一个国产的操作系统版本。它标志着我国在发展国产操作系统的道路上迈出了坚实的一步。

红旗Linux与其他Linux中文版本有着不同的特点。它使用的是最新的Linux2.2.16版的核心,预装了炎黄中文平台和方正TrueType字库,是目前国内惟一一套在Linux上支持大字符集(GBK)的中文操作系统,实现了Linux上的TrueType显示和打印功能,并且从安装到使用都提供了全中文化的操作环境;红旗Linux支持基于Intel芯片的各类PC机和服务器,并且支持基于Alpha芯片的工作站和服务器等等;红旗Linux彻底支持Informix-SEOracle8以及Sybase等多种流行数据库,并提供了Linux上数据库解决方案的实例,为用户开发基于Linux的数据库应用开创了先例。

红旗Linux的推出,将对中国的计算机产业产生大的影响。操作系统的多元化带动着软件的多元发展,同时对硬件也有互动作用。有了国产操作系统后,许多优秀的应用软件,就能不受微软捆绑软件的威胁,而能在自己的操作系统上一展身手。为了配合红旗Linux的使用和推广,我们特意推出了这套详细讲解红旗Linux的桌面版和服务器的培训教材,以期为国产软件的振兴略尽绵薄之力。

本套丛书包括四本:《红旗Linux桌面应用教程》、《红旗Linux用户基础教程》、《红旗Linux系统管理教程》、《红旗Linux网络管理教程》,内容从基本使用到高级配置,从桌面简单应用到服务器高端管理,基本涵盖了红旗Linux的所有内容。而且,每本书也自成体系,讲解深入浅出,实例丰富,可针对不同的用户,满足不同的需要。无论您是从未涉足Linux的新手,还是经验丰富的老手,本套书都有适合您的内容。本书是红旗Linux授权培训中心的指定用书,通过对本丛书的学习,读者可以参加红旗Linux产品应用专家考试体系(RAP)、红旗Linux认证工程师体系(RCE)的考试,并获得相应的认证。

在本套丛书推出过程中,飞思科技产品研发中心全面负责审校、编辑、印刷、出版等主要环节的工作;北京汇智协同信息科技有限公司在本教材系列的教学研究和培训规划方面给予了全面支持。

关于本书

本书作为“红旗Linux指定培训教材”丛书基础级教材,主要介绍了红旗Linux服务器

2.0版的相关基础知识,是后续两本书《(红旗Linux系统管理教程》和《红旗Linux网络管理教程》)的基础。

本书包含入门级读者在学习Linux时所必须掌握的基础知识,如核心升级和应用软件安装、使用外部设备、常用Linux命令介绍、红旗Linux中文环境、Shell简介、使用Vi、备份数据和资料、多用户管理及用户安全、文件与目录系统及其操作、网络简介和网络服务等。

本书有如下特点:

1)实例丰富。本书讲解的每一个知识点,都有具体的例子来说明;

2)深入浅出,循序渐进。本书章节顺序经过精心考虑,即使您没有任何Linux的经验,只要按照书中各章的顺序完成学习,您最终将成为一名合格的Linux用户;

3)练习丰富,便于自学。每章都有足够数量的练习,您可以及时检查自己的学习效果;书后还附有一些较大的实验练习和习题答案,帮助您更上一层楼。

本书主要针对于从未使用过Linux或者UNIX的入门级读者,同时也是希望进一步进行系统管理或网络管理的读者的基础读物。学完本书后,读者能够轻松定制个人化的红旗Linux工作站,熟练使用常见命令,深刻理解红旗Linux系统,并为后两本书的学习打下扎实的基础。

本书由中科红旗软件技术有限公司编著,刘晓华、杨艳、黄科参与了写作工作,在此表示深深的感谢。由于本书涉及的内容丰富,加之篇幅、时间所限,书中不足之处,敬请读者批评指正。

目  录

1Linux及红旗Linux简介 11

1.1Linux历史 11

1.1.1Linux的产生及发展 11

1.1.2自由软件 12

1.2Linux现状 13

1.2.1Linux用户 13

1.2.2Linux的功能 14

1.2.3Linux的缺陷 14

1.3Linux与其他操作系统性能对比 15

1.3.1DOS系统比较 15

1.3.2Windows系统比较 16

1.4什么是红旗Linux 16

1.5红旗Linux的功能 17

1.5.1一般的操作系统功能 17

1.5.2网络服务 18

1.5.3中文及窗口环境支持 19

1.5.4红旗服务器2.0版本主要特性 19

习题 20

2章红旗Linux中文环境 21

2.1Shell中文环境 21

2.1.1简单介绍 21

2.1.2安装 22

2.1.3使用 22

2.1.4配置 23

2.2KDE中文环境 24

2.2.1简单介绍 24

2.2.2启动输入法程序 25

2.2.3使用中文输入法 26

2.3红旗Linux上的中文打印机配置 27

2.3.1配置打印机 27

2.3.2中文打印 30

2.4语言切换 30

习题 31

3章常用Linux命令介绍 32

3.1作业控制命令 32

3.2显示命令 33

3.3文件和目录操作命令 34

3.4网络命令 37

3.5其他实用命令 38

习题 43

4Shell简介 45

4.1Shell的基本概念 45

4.2进程 47

4.2.1分时 47

4.2.2前台进程和后台进程 47

4.2.3父进程和子进程 47

4.2.4进程状态命令ps 48

4.2.5杀死进程 48

4.3输入输出重定向 48

4.3.1标准输入与输出 48

4.3.2输入重定向 49

4.3.3输出重定向 50

4.3.4管道 51

4.3.5命令替换 51

4.4Bourne Shell script编程基础 52

4.4.1分支语句 52

4.4.2循环控制 54

4.4.3从循环中退出 56

4.4.4处理不定长的参数 58

4.4.5结构化编程:定义函数 59

4.4.6使用And/Or结构进行有条件的命令执行 61

4.4.7使用getopts命令读取Linux格式选项 61

习题 63

5章使用vi 65

5.1vi的两种模式 65

5.2启动和退出vi 65

5.3编辑模式 65

5.4vi基本编辑方法 66

5.5vi高级应用 66

5.5.1移动光标 66

5.5.2高级编辑指令 68

5.5.3文件指令 68

习题 69

6章使用外部设备 70

6.1使用CDROM 70

6.2使用软盘 71

6.3使用Zip驱动器 71

6.4让系统识别并行端口Zip驱动器 71

6.5自动安装(mount)功能 71

6.6设置32I/O硬件驱动器 72

6.7使用打印机 72

6.7.1安装远程打印机 72

6.7.2Linux下的打印工作 73

6.7.3命令行方式下的打印操作 74

6.7.4KDE中打印机的操作和管理 75

6.8配置和使用声卡 75

6.9使用外设的若干常见问题 76

习题 77

7章多用户管理及用户安全 78

7.1用户类别 78

7.2用户管理 78

7.2.1添加用户 78

7.2.2权限设置 79

7.2.3删除和查封用户 81

7.2.4超级用户 81

7.3用户组管理 82

7.3.1用户组的实例 82

7.3.2将用户添加至用户组 83

7.3.3添加用户组 83

7.3.4删除用户组 83

7.3.5设置群组密码 83

7.3.6修改群组记录 84

7.3.7在用户组间切换 84

7.3.8用户组权限需求分析 84

7.4用户安全 85

7.4.1多用户访问权限控制 85

7.4.2口令安全 86

7.4.3关于PAM 88

7.4.4限制用户对主机的使用 89

7.4.5其他安全问题 92

习题 95

8章备份数据和资料 96

8.1备份计划 96

8.1.1备份的重要 96

8.1.2备份内容 96

8.1.3选择备份介质 97

8.2实施备份 98

8.2.1简单备份 98

8.2.2多级备份 102

8.2.3 压缩备份 102

习题 103

9章文件系统 105

9.1      105

9.1.1  建立、安装及拆卸文件系统 107

9.2  网络文件系统 109

9.2.1  网络文件系统的概念 109

9.2.2  网络文件系统的安装 109

9.3  磁盘空间配额管理 110

9.4  碎片清理和文件系统维护 111

9.5      111

9.5.1  创建交换空间 111

习题 112

10      114

10.1  文件名和路径名 114

10.1.1  文件名 114

10.2      115

10.2.1  目录树 115

10.2.2  根(/)文件系统 115

10.2 3  /usr文件系统 116

10.2.4  /var文件系统 116

10.2.5  /proc 文件系统 116

10.2.6  /dev文件系统 117

10.2.7  /etc目录文件 117

10.3      128

习题 129

11  文件和目录操作 130

11.1  文件基本操作 130

11.1.1  列文件 130

11.1.2  复制文件 131

11.1.3  删除文件 131

11.1.4  移动和重命名文件 132

11.2  文件属性操作 132

11.2.1  改变访问权限 132

11.2.2  改变组属 133

11.2.3  查看文件内容 133

11.2.4  压缩和解压 134

11.2.5  fsck检查文件系统完整性 135

11.2.6  badblocks检查磁盘错误 135

11.2.7  文件碎片 136

11.2.8  ext2文件系统的其他工具 136

11.3  LinuxWindows 9X资源共享 136

11.3.1  Linux下共享Windows 9X的资源 136

11.3.2  Windows系统中使用Linux分区的资源 137

11.4  文件系统疑难解决 138

习题 140

12  核心升级和应用软件安装 141

12.1  升级和安装概述 141

12.1.1  取得Linux软件 141

12.1.2  解包工具 141

12.1.3  安装和升级的限制 143

12.2      143

12.2.1  核心升级步骤 144

12.3  应用软件安装 147

12.3.1  Oracle安装 147

12.3.2  安装Sybase客户端 151

12.3.3  ApacheMySqlPHP安装 153

12.3.4  红旗网络商务通eoffice的安装 157

习题 158

13  配置网络和网络服务 160

13.1      160

13.2  配置PPP连接 162

13.3  配置WWW服务器 163

13.4  域名服务器(DNS 164

13.5  配置匿名FTP 165

13.6  配置Sendmail 166

13.7  配置网络远程管理 167

13.8  网络文件系统(NFS 167

13.9      168

13.10  通过局域网中另一台机器的调制解调器使用Internet 169

13.11  Linux作为Windows服务器 169

13.12  远程计算机的访问:r-系列命令 170

习题 172

附录1       172

实验1  熟悉红旗Linux操作系统的环境 173

实验2  操作文件和目录 175

实验3  编辑器vi的使用 178

实验4  Bash中操作 180

实验5  在图形环境中工作 182

实验6  Linux中打印文件 185

实验7  使用中文软件 186

附录2  引导过程 190

2.1  Linux引导过程 190

2.2  配置和使用声卡的进一步讨论 192

2.3      192

2.4  安装驱动文件 193

2.5  安装库文件和实用程序 193

2.6  编辑/etc/modules.conf文件 194

2.7  系统测试和声卡设备调整 195

2.8  聆听自由的声音 200

2.9  修改登录画面 201

2.10  Bash的设置 202

2.11  LILO的一些问题 207

附录3  习题参考答案 209

1Linux及红旗Linux简介

本章内容提要

Linux的历史

Linux的现状

Linux及其特点

☆红旗Linux2.0版本的新特点

☆重点掌握Linux的常识,了解红旗Linux

☆在介绍红旗Linux服务器版之前,先从Linux的历史讲起。红旗Linux用户基础教程

1.1Linux历史

1.1.1Linux的产生及发展

Linux最早是由赫尔辛基大学的一位学生LinusTorvalds编写的。当时Linux是他的一项个人研究项目,其目的是为Minix用户设计一个比较有效的UNIXPC版本,LinusTorvalds称它为Linux1991年发行了Linux0.11版本,并将它发布在Internet上,免费供人们使用。随后他又在comp.os.minix新闻组内请求其他编程人员帮助完善。经过各地Linux爱好者的补充和修改,到1994Linux1.0发布之时,这一操作系统已经具备了抢先多任务和对称多处理的功能。如今Linux家族已经有近140个不同的版本。所有这些不同的版本都基于最初的、免费的源代码。不同的公司可以推出不同的Linux产品,但是他们都必须承诺对初始源代码的任何改动皆公布于众。

以销量计算,1999年在浏览器操作系统市场占有率方面,MicrosoftWindowsNT仍然位居榜首,与1998年一样占有市场的38%,“后起之秀”Linux则售出135万套占第二位,市场占有率由1998年的16%升至25%。同时,UNIX操作系统的销量却由1998年的19%下跌至15%。调查还显示,Linux软件销量增长速度比预期快得多。由于现在大多数应用软件都是针对PCMac系统的,而这些计算机大都运行WindowsMacOS,用户购买电脑时采用的操作系统不会特别地趋向Linux,即使将来Linux上的应用软件更加丰富,取代桌面Windows操作系统的可能性也不大。Linux组织也正在努力将Windows的应用软件移植到Linux上运行。他们制定了Wine计划,目的就是将Windows95WindowsNT上的应用软件无缝地转移到Linux系统上。Corel公司在这方面已经先行一步,该公司正在试图将Windows下的CorelDrawWordPerfect运行于Linux上。

Linux自十年前问世以来,就一直象征着自由与创新。目前它已成为世界上最快的操作系统,它的使用源于网络空间,只要这种操作系统和它的源代码一起,就可以提供给世界各地的人免费从因特网上下载信息。尤其在因特网基础设施不很完备的地区,Linux成功的机会很高。主要原因在于Linux不需要很新的电脑。事实上,它可以兼容任何一种平台:英特尔、ALPHAPC机,具有很广泛的使用空间。许多大公司不必因需增加计算机的容量就淘汰掉完好的PC机、服务器、主机,而安装新的版本。Linux可以充分使用CPU循环系统,使用很少的设备做更多的工作。

Linux有三种操作系统,主要是一种伴有开启资源模式UNIXOS的资源软件,可以使编程者对资源重新更改、再分配,称之为“因特网时间”。Linux具有全球范围的编程者和开发者,不时对操作系统的内部进行更改和完善。Linux的可靠性使其成为因特网及其他网络活动的完美选择。几个现存的工具就可以使LinuxWindowsAppleNetWare一起运作。

1.1.2自由软件

软件按其提供方式和是否赢利可分为三种:商业软件(CommercialSoftware)、共享软件(Shareware)和自由软件(Freeware)。

商业软件由开发者出售拷贝并提供技术服务,用户只有使用权,不得进行非法拷贝,扩散和修改。共享软件由开发者提供软件使用授权,共享软件实际上是商业软件,软件的作者希望得到回报,就像商业软件的制作者一样,鼓励自由传播,但是软件的升级和bug的修改只有交费的用户可以得到,并且不提供软件的源代码,也可以说,共享软件是商业软件的另一种发布方式。自由软件则由开发者提供软件的全部源代码,任何用户都有权使用、拷贝、扩散、修改该软件,同时用户也有义务将自己修改过的程序代码公开。

支持自由软件的人通常认为,每个计算机的使用者都有自己特定的需要,不可能有一个适合所有需求的软件系统。因此软件开发者和系统管理员需要得到软件的源代码以便对软件进行定制和扩展。此外,任何软件产品都存在各种BUG,如果不提供软件的源代码,那么软件使用者在遇到BUG时,只能被动地等待。如果提供了软件的源代码,使用者就可以根据自己的实际情况修改软件,使之适合自己的需要。

自由软件的支持者Stallman1973年创建FSFFreeSoftwareFoundation)用于接受资金支持自由软件的开发。在Stallman看来,“free”不是免费,而是“自由”,即用户可以拥有源代码,有修改和发布软件的自由。FSF开发了大量的软件来达到这个目的。1984年,基于“源代码共享,思想共享”的思想,Stallman提出了GNU计划。GNU计划的目的是开发一个完全自由的,与UNIX类似但功能更强大的操作系统,以便为所有的计算机使用者提供一个功能齐全,性能良好的基本系统。在其他人的协作下,他创作了通用公共许可证(GeneralPublicLicenseGPL),这对推动自由软件发展起了重要的作用。与传统的商业软件许可证不同,GPL保证任何人有共享和修改自由软件的自由,任何人都有权取得、修改和重新发布自由软件的源代码,并且规定在不增加附加费用的条件下得到源代码(基本发布费用除外)。这一规定保证了自由软件总体费用是低的,在使用Internet的情况下则是免费的。GPL条款还规定自由软件的衍生作品继续保持自由状态,并且用户在扩散GNU软件时,必须让下一个用户也有获得源代码的权利。这些工作为后来的Linux操作系统的迅速发展奠定了坚实的基础。

1994年,Linux的第一个“产品”版Linux1.0问世时,是按完全自由扩散版权进行传

播的。它要求所有的源代码必须公开,而且任何人不得从Linux交易中获利。然而这种纯粹的自由软件的理想对于Linux的扩散和发展来说,实际上是一种障碍而不是一股推动力,因红旗Linux用户基础教程为它限制了Linux以磁盘拷贝或者CDROM等媒体形式发行的可能,也限制了一些商业公司参与Linux的进一步开发并提供技术支持的良好愿望,于是Linux决定转向GPL版权。

这一版权的转变对于Linux的进一步发展极为重要,从此以后,便有多家技术力量雄厚的商业软件公司加入了原先完全由业余爱好者参与的这场自由软件运动,开发出了多种Linux的发行版本,极大扩展了Linux全球用户基础。

Linux成功的意义不仅在于Linux操作系统本身,还在于LinusTorvalds所建立的全新的软件开发方法和StallmanGNU精神。Linux操作系统可以从Internet上直接免费下载使用,只要用户有快速的网络连接即可。而且,Linux平台上的许多应用程序也是免费获取的。

1.2Linux现状

1.2.1Linux用户

按用户的性质分,可以将目前Linux的用户分为:个人用户、专业用户和大规模采用了Linux系统的商业应用用户。

1.个人用户

这类用户可以说是业余用户,大多为电脑爱好者或电脑发烧友。对于个人用户来说,完全是出于好奇,或者是抱着用用看的心态才安装Linux的,很少有用户在安装前就希望它能真正干点什么。这类用户中,学生占据了很大的比例。

个人用户大多对UNIX不了解,更多的人在安装Linux系统之前,根本不曾接触过UNIX,对于这类用户,看到长长的控制台命令就有点不知所措。遇到复杂的配置过程,大多数用户都是无计可施。

个人用户在Linux的使用者中占据着极大的一部分。随着Linux的进一步发展,这些用户是Linux得以发展的潜在的最大用户群。随着Linux的各种发行版本对系统配置的进一步简单化,个人用户的数量就会大大增加。

2.专业用户

相对而言,专业用户大多是UNIX的使用者,由于长期受商业UNIX的限制,他们一发现Linux,就对它产生了好感。因为Linux的确可以为他干不少工作,而且关键是它的伸缩性很强,用户可以随便更改。对于专业用户而言,由于他们本身对UNIX比较熟悉,清楚Linux究竟可以干什么,又有使用UNIX的经验,所以上手快,也可以发挥出Linux的强大功能。

由于在使用Linux时,不受软件版权的限制,专业用户可以全部获得所有的源程序,自由更改其中一些自己认为必要的部分,也可以对系统完全进行量身定做,使系统达到完全的高效运行状态。不过,目前国内这种用户的数量还比较少。更多的人则是从源程序中获得一些编程技巧,或者对内核提供的一些功能进行深入学习,从中找到一些有用的方法、思想等。

专业用户是Linux最忠实的拥护者,不管媒体对Linux的看法是好是坏,专业用户永远不会受到丝毫的影响,因为他们从Linux的应用中得到真实的感受:“它真的很好用,功能真正很强大!”。

3.商业用户

由于要向客户提供商业服务,所以商业用户在选择系统时特别认真,他们通常要考虑很多因素,例如安全性、可靠性、费用等。综合各种因素,有的商业用户选择了Linux,这说明Linux已相当稳定,正在逐渐被商业用户所接受。当然,目前选择使用Linux系统的商业用户还不够多,广泛使用Linux的商业用户多为信息服务提供商,如大量的ISPICP等。

商业用户看中的是Linux的可靠性、免费性。但是,鉴于人们对Linux的观望态度、不信任态度(在人们的意念中,花钱的东西肯定比不花钱的东西要好),目前Linux的商业用户还不够多。但是,随着Linux优秀的性能逐渐被广大的商业用户所认识,总会有一天,它会同今天的UNIX一样,最终被人们接受。

1.2.2Linux的功能

Linux的功能强大而全面,在此先简述之。

提供WWW服务。

WWW服务器在全球所有的WWW服务器中占据了将近60%70%的份额,这在很大程度上是因为Apache软件包,目前它的版本为Apache1.3.9。提供Wu-ftp来提供FTP服务、Sendmail提供电子邮件服务、inn提供新闻组服务。另外,Linux还被广泛用作DNS服务器、NIS服务、NFS服务等。

文件及打印服务。

长期以来,人们习惯了使用NT作文件服务,但是,用过NetWare的人都会发现,NT提供的文件服务功能太弱。比如,它无法对用户使用的磁盘进行定额限制,只要管理人员向用户开发了写入权限,一个贪婪的用户就可以将整个硬盘都复制满数据。而使用Linux就不会这样,Linux下的Samba服务器可以轻松为用户提供文件及打印服务,还可以通过磁盘定额(quote)达到同样的目的。

数据库服务。

数据库服务是所有商业用户在选择系统时首先要考虑的问题,因为所有的商业系统几乎没有不用数据库系统的。Linux提供了数据库系统的全力支持,最早的数据系统有:MySQLPostgreSQLmsql等,其中MySQL可以支持到5TB以上的数据库。后来,随着Linux影响的不断扩大,各大数据库厂商纷纷看中Linux广阔的前景,先后推出了自己基于Linux系统下的大型数据库。现在,运行在其他环境下的大型数据库系统,全部可以在Linux下运行。目前可以在Linux运行的大型数据库系统有:SybaseASE11.0.3.3SybaseASE11.9.2Informix-seInformixDynimicServer7.3Oracle8.0.5forLinuxOracle8.1.5forLinuxIBMDB2forLinux6.1BetaNotes/Domino5.0.1等。

网络服务。

Linux可提供网络服务,如将Linux系统用作路由器等。这些系统通常情况下只安装简单的网络服务功能软件包。大多情况下是将一台老的486或较好一点的586机插两块网卡,用作一个简易的路由器或网桥。对于安全性要求较高的网络,还可以将Linux机用作防火墙(IPChain)来使用,以杜绝外部入侵者的破坏。另外,Linux还可以用作代理服务器(SocketSquid等),也可以采用IP掩蔽(IPMasquade)将整个局域网上的用户全部接入Internet。面向用户提供WWWFTPE-mail等服务。

典型应用。

一个经济性的ISP:所有的PC机上安装Linux,每一台PC机上安装4块硬盘,采用md将其以raid0方式拉成一个大盘,其他目录以NFS格式输出。其他PC机上同样安装4块硬盘,同样采用raidtool将其拉成一块大盘,同样以NFS格式输出。最后,在主服务器上,通过加挂(mountNFS文件系统到主服务器上。从而形成一个大的存储空间。WWW服务采用Apache1.3.12,数据库使用了MySQL,通过PHPWeb同数据相连,用户直接通过页面就可以访问数据库。以上种种,就构成了一个经济型的ISP

1.2.3Linux的缺陷

由上面看来,Linux真可谓是无所不能,用户完全可以不用Word写文章,也可以不用AdobePhotoshop处理图形,而改用emacs进行字处理,改用gmid来处理图形。但是,目前在Linux下的应用软件还不太多,还没有像WordwordprofectwordproWPS一样的重量级字处理软件。目前Linux下的应用软件还不够丰富,人们的选择性还不大。

从处理中文的角度上来讲,用户目前需要的是像运行在英文Windows下的中文之星、四通利方那样的外挂式中文系统。Linux缺少全面汉化或者说是内核汉化的中文系统。不过,这一切正在改善,目前国内也发行了许多自己的发行版,但是,大多数发行版的中文系统还不够成熟、不够稳定。可喜的是红旗服务器版本2.0对中文的支持大大加强,用户可以尽情享受中文带来的乐趣了。

读者大概都听说过,不少Linux系统的狂热支持者声称Linux要打败NT。其实,这在短期内是不可能的。PC操作系统的市场占据了大多数的个人用户,而个人用户并不同于专业用户,所以Linux要打败NTWindows,首先要做的事情是:让Linux易用起来。虽然目前的Linux在安装界面、操作界面上较之以前的发行版有了很大的提高,但是,其界面还不够友好,易用性目前还不如Windows。所以说,目前Linux最缺少的东西就是它的操作易用性、安装易用性、配置易用性。解决了这些问题,Linux取胜的可能性就会大起来。

对于业余用户而言,Linux缺少的则是应用。大多数人安装过红旗LinuxRedhatSlackWareOpenLinuxDebianTurboLinux……然而,很多人都会感到迷惑:Linux究竟可以帮助自己干点什么,是啊,自始至终,除了一种感受外,好像Linux并不能为自己真正做点什么。人们习惯了用WordWPS处理文字,习惯了用VBVC编写程序,而这个安装在自己机器上的Linux,却找不到这些可用的软件。于是,很多人又悄悄地将Linux从自己的硬盘上卸掉了,只留下一种期盼……

对于软件开发商而言,到目前为止还没有Linux环境下的集成开发环境。Linux系统的软件开发环境都是字符环境,用户在Linux环境下编写程序,通常都是使用Emacs写好程序,再在Emacs中使用编译器对源程序进行编译。不过,随着Linux的发展,一定会有软件开发商推出新的IDE开发环境。Inpress公司,也即原来的Borland公司正在开发Linux环境下的Jbuilder,不久以后就会推出。SGI也推出一个Linux系统下的集成开发环境,用户可以到其站点下载并免费使用。

对商业用户来说,Linux缺少的则是可靠性。虽然Linux曾经有过600多天不宕机的记录,但是,硬件的不可靠性仍然可能造成系统的意外宕机,目前在各种操作系统中,都有自己的双机热备份系统或集群系统,这些高可靠性的措施,可以大大降低商业用户的后顾之忧,而Linux目前还没有一个成熟的双机热备份系统,基于Linux系统的集群系统还在研制中。所有的这一切,都阻碍了Linux在商业系统中的应用。

总之,Linux虽然说是无所不能,但还是远不能满足目前用户对它的要求。Linux要走的路很长。

1.3Linux与其他操作系统性能对比

1.3.1DOS系统比较

在同一系统上运行LinuxMS-DOS已很普遍,就发挥处理器功能来说,MS-DOS没红旗Linux用户基础教程有完全实现x86处理器的功能,而Linux完全在处理器保护模式下运行,并且开发了处理器的所有特性。Linux可以直接访问计算机内的所有可用内存,提供完整的UNIX接口。而MS-DOS只支持部分UNIX的接口。

就使用费用而言,LinuxMS-DOS是两种完全不同的实体。与其他商业操作系统相比,MS-DOS价格比较便宜,而且在PC机用户中有很大的占有率,任何其他PC机操作系统都很难达到MS-DOS的普及程度,因为其他操作系统的费用对大多数PC机用户来说都是一个不小的负担。但Linux是免费的,用户可以从Internet上或者其他途径获得它的版本,而且可以任意使用,不需要考虑费用问题。

就操作系统的功能来说,MS-DOS是单任务的操作系统,一旦用户运行了一个MS-DOS的应用程序,它就独占了系统的资源,用户不可能再同时运行其他应用程序。而Linux是多任务的操作系统,用户可以同时运行多个应用程序。

1.3.2Windows系统比较

从发展背景看,Linux与其他操作系统的区别是,Linux是从一个比较成熟的操作系统发展而来的。而其他操作系统,如WindowsNT等,都是自成体系,没有对应的相依托的操作系统。这一区别使得Linux的用户能大大地从UNIX团体贡献中获利。因为UNIX是世界上使用最普遍、发展最成熟的操作系统之一,它是20世纪70年代中期发展起来的微机和巨型机的多任务系统,虽然有时接口比较混乱,并缺少相对集中的标准,但还是发展成为了最广泛使用的操作系统之一。无论是UNIX的作者还是UNIX的用户,都认为只有UNIX才是一个真正的操作系统,许多计算机系统(从个人计算机到超级计算机)都存在UNIX版本,UNIX的用户可以从很多方面得到支持和帮助。因此,Linux做为UNIX的一个克隆产品,同样会得到相应的支持和帮助,直接拥有UNIX在用户中建立的牢固的地位。

从使用费用上看,Linux与其他操作系统的区别在于Linux是一种开放、免费的操作系统,而其他操作系统都是封闭的系统,需要有偿使用。这一区别使得用户能够不用花钱就能得到很多Linux的版本以及为其开发的应用软件。当用户访问Internet时,会发现几乎所有可用的自由软件都能够运行在Linux系统上,由来自很多软件商的多种UNIX实现。UNIX的开发、发展商以开放系统的方式推动其标准化,但却没有一个公司来控制这种设计。因此,任何一个软件商(或开发者)都能在某种UNIX实现中实现这些标准。OS/2WindowsNT等操作系统是具有版权的产品,其接口和设计均由某一公司控制,而且只有这些公司才有权实现其设计,它们是在封闭的环境下发展的。

1.4什么是红旗Linux

Linux是一套免费使用和自由传播的类UNIX操作系统,是一个基于POSIXUNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了UNIX以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它主要用于基于Intelx86系列CPU的计算机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的UNIX兼容产品!

Linux以高效性和灵活性著称。Linux模块化的设计结构,使得它既能在价格昂贵的工作站上运行,也能够在廉价的PC机上实现全部的UNIX特性,具有多任务、多用户的能力。

Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的XWindow图形用户界面,如同WindowsNT一样,允许用户使用窗口、图标和菜单对系统进行操作。

红旗LinuxLinux的一个发展产品。是由中科红旗软件技术有限公司开发研制的,以IntelAlpha芯片为CPU构成的服务器平台上第一个国产的操作系统版本,它标志着我国在发展国产操作系统的道路上迈出了坚实的一步。

红旗Linux与其他Linux中文版本有着不同的特点。红旗Linux1.0.0版使用的是最新的Linux2.2.15版的核心,是全中文化的Linux发行版本,预装了炎黄中文平台和方正TrueType字库,是目前国内惟一一套在Linux上支持大字符集(GBK)的中文操作系统,实现了Linux上的TrueType显示和打印功能,并且从安装到使用都提供了全中文化的操作环境。红旗Linux支持基于Intel芯片的各类PC机和服务器,并且支持基于ALPHA芯片的工作站和服务器等等,目前该平台产品在硬件平台支持方——康柏电脑公司的PC服务器及ALPHA机上均能稳定运行,为今后在高端产品上的发展奠定了基础;红旗Linux彻底支持Informix-SEOracle8以及Sybase等多种流行数据库,并提供了Linux上数据库解决方案的实例,为用户开发基于Linux的数据库应用开创了先例。

红旗Linux的推出,将对中国的计算机产业产生很大的影响。操作系统的多元化带动着软件的多元发展,同时对硬件也有互动作用。有了国产操作系统后,许多优秀的应用软件,就能不受微软捆绑软件的威胁,而在自己的操作系统上一展身手了。

1.5红旗Linux的功能

1.5.1一般的操作系统功能

红旗Linux首先是操作系统,它支持多道程序的并行执行,为了使多道程序能有条不紊的执行,它具有以下操作系统功能。

1.存储器管理

存储器的分配和回收。多道程序并发执行的首要条件是程序有自己的内存空间。因此,为多道程序分配内存是存储管理的首要功能。当多道程序运行结束后,必须释放所占有的存储空间,由存储管理程序回收以便再分配。有两种存储分配的方法:静态分配法(一次性分配)和动态分配法(运行过程中随机分配)。

信息保护。为了保证各道程序能在自己已经分到的内存空间中正确运行,互不干扰,互不破坏,尤其是不能让用户程序破坏操作系统常驻内存内的程序,存储管理必须提供信息保护措施。即随时对每道执行中的程序进行检查,查看它们对内存的访问权限是否合法,如果越界则拒绝执行,并发出越界错误信号。

地址映射。由目标程序所限定的地址范围称为程序的地址空间,地址空间中的地址是逻辑地址。内存空间是内存的物理地址的集合。在多道程序系统中,操作系统必须把程序地址空间中的逻辑地址转换为内存空间中的物理地址,这就需要有地址转换机构和地址映射功能。

虚拟存储技术支持。由于内存的大小会直接影响到大型作业或多个作业的并行执行,为了满足用户对内存容量的要求,改善系统性能,一般还要求操作系统支持虚拟存储技术。

2.进程管理

在多道程序并行执行的环境下,处理器的分配和运行都是以进程为基本单位进行的。进程管理主要有以下主要功能:

进程控制:创建进程、撤销进程以及控制进程的状态转换。

进程同步:对并发执行的进程进行协调。

进程通信:管理相互合作的进程之间的通信。

进程调度:当一个正在执行的进程已经完成或因某些原因无法继续执行时,系统进行调度,重新分配处理机。

3.设备管理

设备管理包括:

缓冲区管理。在系统中设有很多不同类型的缓冲区,利用缓冲区来缓冲CPUI/O设备之间速度不匹配的矛盾。因此,在系统中必须对所有的缓冲区进行有效的管理。

设备分配。根据用户请求的设备类型和采用的分配方式,对设备进行分配并将未获得所需要设备的进程列入相应设备的等待队列。

设备处理。启动指定的I/O设备,完成用户规定的I/O操作,并及时响应设备发出的中断请求进行相应的处理。

实现虚拟设备的功能。使每个用户都觉得自己在独占设备。

4.文件管理

文件管理主要有以下的功能:

文件存储空间的管理。要求文件系统对文件存储空间进行分配与回收,为用户提供充足有序的存储空间。

目录管理。为了使用户方便地存取所需文件,通常由系统为每个文件建立一个文件控制块,其中包括文件名、文件属性、文件所在的物理位置以及有关的信息。文件系统对所有的文件和目录进行组织管理,以方便对文件和目录的查找。

对文件的读或写。文件读写管理系统在对某文件进行读写操作时,根据用户给定的目标地址和传送的字节数将文件信息从外存储器读入缓冲区,再复制到指定的用户区或系统区。

文件保护。为了防止文件被其他用户有意无意地破坏或盗用,对文件进行保护和加密,保护措施有口令、存取权限、加密等。

提供接口。为了方便用户,操作系统为用户提供一个使用方便的接口,用户通过该接口取得文件系统的服务,如使用建立、打开、关闭、读或这些文件等系统调用,供编程时使用。

5.作业管理

根据用户和系统的要求对作业的运行进行合理的组织和控制。它主要有以下的功能:

作业调度。根据系统的能力和当前作业的运行情况,按一定的策略,从后备作业队列中选出一批作业,为它们分配所需的I/O设备和存储空间,将它们调入内存并建立相应的进程,使之成为具有获得处理器资格的被选进程。

作业控制。在作业进入系统直到运行完成的整个过程中,用户可以通过某种形式发出各种命令,对自己的作业进行控制和管理。主要的作业控制方式有两种:脱机控制方式和联机控制方式。

此外,操作系统的管理功能还有中断管理系统、错误处理功能等。

1.5.2网络服务

红旗Linux和其他Linux系统一样,具有强大的网络服务功能。首先,它具有很强的网络兼容性,它支持的网络协议众多,如TCP/IPIPX/SPXNetBEUIX.25等;还可以兼容和提供NetWare服务、LANManager服务、AppleTalk服务等,这些能力为Linux提供了无与伦比的网络亲和性。此外,红旗Linux的网络管理能力和安全性也很让人放心,它拥有一套完善的网络管理机制和规则,使得网络的可配置能力很强,为系统管理员提供了极大的灵活性。总体说来它的网络服务具有以下几个方面:

1Internet/Intranet服务器

Internet/Intranet包括WWWFTPE-mail等服务。Linux被广泛应用于InternetIntranet中,提供WWW服务。LinuxWWW服务器在全球的WWW服务器中占据了将近60%~70%的份额,这多亏了Apache软件包。另外,Linux还被广泛用作DNS服务器、NIS服务器、NFS服务器等。

2.网络管理服务器

网络管理服务器包括FirewallRouterIPMASQ等。可以将Linux用作防火墙(IPChain),以杜绝外部入侵者的破坏。另外,Linux还可以毫不费力地用作代理服务器(SocketSquid等),也可以采用IP掩蔽(IPMasquerade)将整个局域网上的用户全部接入Internet

3.企业群组服务器

企业群组服务器包括文件服务、打印服务、数据库服务、目录服务等。但是,用过NetWare的用户都会发现,NT提供的文件服务功能太弱。Linux下的Samba服务器可以轻松地向用户提供文件及打印服务,还可以通过磁盘定额达到与NetWare同样的功效。同时Linux提供了对数据库系统的全力支持,各大数据库厂商纷纷看中Linux广阔的前景,先后推出基于Linux系统下的大型数据库。目前可以在Linux运行的大型数据库系统有:SybaseASE11033SybaseASE1192InformixseInformixDynimicServer73Oracle805forLinuxOracle815forLinuxIBMDB2forLinux61BetaNotesDomino501等。

4.应用服务器

应用服务器包括电子商务、CORBADCOM等服务。此外还可以实现自动拨号(Dial)、论坛、BBS、新闻服务器、LinuxWindows9x/NT联络(Samba)、DNSOracleforLinuxPerlPHP3WebMail、搜索引擎等等。

1.5.3中文及窗口环境支持

对于中国用户来说,中文显示、中文打印是非常重要的。桌面系统对中文的显示、打印等要求很高,Linux在汉字处理方面开发的时间较短,还不够成熟,在字型字体、显示打印等方面与其他桌面系统比起来存在着一定的差距。不过红旗Linux中文能力在这方面处于领先的位置。红旗Linux预装了炎黄中文平台和方正TrueType字库,是目前国内惟一一套在Linux上支持大字符集(GBK)的中文操作系统,实现了Linux上的TrueType显示和打印功能,并且从安装到使用提供了全中文化的操作环境。

1.5.4红旗服务器2.0版本主要特性

支持三种语言,简体中文、繁体中文和英文。并可动态切换。

提供了日志文件系统reiserfs,支持海量文件系统。

增加了UPS电源管理。

加强了系统备份的工具。

提供了LVS的支持,用户可以架构自己的Web集群服务器。

提供了网络防病毒软件。

提供了红旗网络商务通e-Office系统。

部分支持USB设备。

习题

1Linux家族()。

A.已经有近140个不同的版本。

B.抢先具备了多任务和对称多处理的功能。

C.不同的版本都是基于最初的、免费的源代码。

D.在浏览器操作系统市场占有率方面居榜首。

2.下列哪些是使用Linux的好处?()

A.可以提供给世界各地的人免费从因特网上下载信息。

BLinux不需要很新的电脑。

C.具有很广泛的使用空间。

DLinux是免费的,无需任何额外的投资。

EWindows95WindowsNT上的应用软件可以无缝地转移到Linux系统上。

3Linux可以()。

A.作WWW服务器。

B.用作文件及打印服务。

C.数据库服务。

D.网络服务。

E.经济型的ISP

4.红旗Linux支持哪些数据库()?

AInformix-SE

BOracle8

CSybase等多种流行数据库。

DSQLServer2000

EMySql

5.一般的操作系统功能包括()。

A.存储器管理。

B.进程管理。

C.设备管理。

D.文件管理。

E.作业管理。

6.红旗Linux首先是操作系统,它支持()。

A.多道程序的并行执行。

B.单道程序。

C.多道程序串行执行。

D.单道程序的并行执行。

7.红旗Linux2.0服务器版能()。

A.支持海量文件系统。

B.支持LVS

C.支持三种语言,简体中文、繁体中文和英文。

D.部分支持USB设备。

2章红旗Linux中文环境

本章内容提要

红旗Linux提供的中文环境解决了XWindow系统和Shell方式下的中文输入及显示问题。不但附带了Shell方式下的中文环境,还提供了汉化的中文环境KDE,并且实现了XWindow中的中文显示和打印。在中文环境中,提供了多种中文输入法,可以满足不同用户对汉字输入的要求。

与业余爱好者编制的中文环境相比,红旗Linux提供的中文环境支持大字符集(GBK),从而提供更多可选用的汉用字。

本章重点内容

Shell中文环境

KDE中文环境

☆中文打印

☆语言切换

☆要求在红旗Linux下能熟练的使用中文和英文

2.1Shell中文环境

红旗Linux2.0提供了Shell方式下的中文环境,用来支持字符方式的中文显示和输入。配合中文环境,Linux的配置工具也进行了汉化,方便用户配置和管理Linux系统。默认的情况下,不需要额外安装炎黄中文环境,系统中已经存在安装时选下的炎黄中文环境版本。只有用户需要升级炎黄中文环境的时候,才会用于中文环境的安装。

Shell方式下的中文环境的使用,主要涉及中文环境的启动,输入法的开启和关闭,汉字的输入这三个方面。由于Shell方式没有图形化的接口,大部分的操作都是通过键盘的热键进行。如果需要使用Shell方式下的中文环境,这些热键必须有所掌握。

Shell方式下的中文环境配置比较麻烦,由于没有很好的工具,如果需要配置中文环境,用户只能对配置文件进行手工的修改。炎黄中文环境也提供动态的装载和卸载,建议用户使用配置文件进行设置。

2.1.1简单介绍

红旗Linux在字符方式的Shell下面,是通过执行一个程序,完成中文环境的启动。执行的程序,就是炎黄中文环境的初始化程序。在正常执行以后,会生成一个新的Shell命令方式的控制台。新的控制台是在图形方式下模拟出的字符方式,可以支持中文的显示和输入。也正是因为如此,在中文环境中显示汉字和英文的速度,比起原先的Shell方式有所降低。但是相比而言,红旗Linux的中文环境,因为采用了直接写屏技术,比其他方法实现的速度要快一些。在Shell方式下面运行炎黄中文环境,通过输入yh命令进行。Yh是“炎黄”两者字的汉语拼音的第一个字母。

在运行炎黄中文环境以后,会显示出加载的输入法信息,包括输入法的名称和切换的热键。例如:按下【Shift+F3】会切换到智能ABC输入法。在屏幕的下面,有一个状态条,提示当前中文环境的信息。从左边开始,依次是“半角/全角”、“中/英”、“GBK/BIG5”。“/”表明可以利用系统提供的热键进行前后的两个状态之间的切换。

2.1.2安装

新安装好的红旗Linux2.0默认情况下就带有炎黄中文环境,不需要额外的工作。只有在需要使用新的炎黄输入法,或者在其他非红旗Linux的系统上,才会用到安装。安装前首先需要获得炎黄中文平台的源代码或可运行版本。目前最新的炎黄中文平台的版本是V3.1,在红旗Linux的光盘中,即附带有炎黄平台:/RedFlag/RPMS/rf-yh-input-e.1-1.i382.rpm

对于上面的rpm格式的包,下面的命令就会完成炎黄中文平台的安装:rpm-I-forcerf-yh-input-3.1-1.i382.rpm。如果以前安装过炎黄中文环境,那么上面的命令会自动重新安装最新的版本。

如果获得的炎黄中文环境不是rpm包的格式,而是yh-3.1.tar.gz,需要利用targzip程序解开包。tar程序是把许多文件组合成一个大文件的工具,gzip用来对文件进行压缩。

在使用的时候,可以通过tar命令的参数调用gzip程序,从而省去了gzip程序的使用。下面的命令可以完成解包:tarfzxvyh-3.1.tar.gz

注意:上面的命令都假设包文件在当前目录。

命令执行完以后,会在当前目录建立一个yhinstall目录,进入这个目录,然后使用install程序安装。下面的命令完成所有的这些操作:

$tarfzrvyh-3.1.tar.gz

$cdyhinstall

$./install

安装完毕,在Shell提示符下输入yh命令,就会发现炎黄中文软件已经安装成功。

2.1.3使用

启动炎黄中文环境以后,就可以直接利用Linux系统提供的多种工具进行中文的阅读。

例如,使用lessmore命令,可以查看一个中文的文本文件内容。

除了查看以外,还可以通过Shell方式的编辑器,进行中文文件的编辑,也可以对其他程序输入中文。在输入的时候,需要指定使用的中文输入法。常用的输入法有:智能ABC输入法、GBK拼音输入法、郑码、区位码。每一种输入法都有自己特定的编码规则,遵循它们就可以输入指定的汉字。其中最简单的输入法莫过于拼音输入法,只需要知道汉字的发音,就可以把它输入计算机。在炎黄中文环境中,提供了两种拼音输入法,它们是智能ABC输入法和GBK拼音输入法。

由于有多种输入法,为了在输入的时候,正确选择需要的输入法,炎黄中文平台提供了热键用来切换输入法,【Shift+F3】到【Shift+F7】都可以安装输入法。在中文平台的屏幕下面的状态条上,默认的英文输入的时候,就会有热键的提示。具体的输入法和热键之间的对应关系,主要依靠炎黄系统启动的设置。在中文平台刚刚启动的时候,有加载的输入法的热键对应情况。用户也可以自己指定输入法的热键使用。

在切换到指定的输入法以后,就可以按照规则输入,在输入中文的时候,对于拼音输入法,英文字母对应拼音的符号。不过只有小写的半角字母才起作用,大写和全角的字母将会直接接入到系统中,而不会当作拼音符号处理。由于拼音的相同字很多,所以在输入完成以后,还要在候选的同音汉字中选取需要的汉字,选取可以通过汉字前面的数字键进行。例如,如果需要选取“安”字,那么按它前面的数字“2”键。如果候选的汉字太多,那么系统会按每10个一组显示,通过“—”和“=”键进行转换。

在需要输入英文的小写字母的时候,不用转换到英文输入状态,可以利用【Shift+F1】暂时关闭输入法,这样就不会有屏幕最底行的提示状态条,系统恢复英文输入状态。另外一个在DOS下面常用的热键【Ctrl+Space】也可以用来暂时关闭输入法,等于【Shift+F1】。如果需要输入全角的标点符号或者英文字母,通过【Shift+F2】热键,就可以在全角和半角之间进行切换。另外,在输入的时候,也可以输入繁体的BIG5汉字,通过【Ctrl+Alt+b】切换到BIG5输入模式,【Ctrl+Alt+g】恢复为原先的GBK码输入模式。利用热键【Ctrl+Alt+b】切换到BIG5编码以后,炎黄中文平台的显示也变成了繁体。以前输入的简体中文,现在变成了乱码。说明炎黄中文环境的确已经切换到了BIG5码的体系,阅读和输入繁体汉字已经没有问题了。

2.1.4配置

炎黄中文平台的配置主要是配置系统使用的输入法。在启动的时候,系统会自动通过配置文件加载对应的输入法,一般情况下,启动的输入法是:智能ABCGGK拼音和郑码输入法,按照顺序对应输入法的切换热键为【Shift+F3】到【Shift+F5】。

注意:炎黄中文平台同时只能使用5个输入法,最多输入法切换热键只到【Shift+F7】。

如果有多于5个输入法,没有办法同时使用,但是系统提供方法,可以动态地卸载和装载输入法。在需要的时候,先卸载一个不用的输入法,然后再加载新的输入法。

1.自动加载的输入法的配置

有两个位置存放输入法的启动配置文件,一个用来配置系统的默认输入法启动,另外一个用来配置用户私有的输入法启动。炎黄中文平台在启动的时候,首先寻找用户的起始目录,确认是否存在.ims文件,这个文件就是用户私有的配置文件,如果存在,就按照.ims文件的配置加载输入法;不存在,就按照炎黄系统的配置文件/usr/local/yh/lib/system.ims加载输入法。一般情况,个人的.ims文件都没有创建,可以通过Shell或者KDE中的编辑器建立。

配置文件实际上是一个文本文件,在每一行里面,写有需要启动的输入法程序的名称。

按照行的先后的顺序,加载输入法。下面就是一个配置文件的内容:

$cat/usr/local/yh/lib/system/ims

abc

gbkpy

$

abc是智能ABC输入的程序名称,gbkpy则是GBK拼音的输入法程序。通过上面的设置,在炎黄启动的时候,就会启动上面三个默认的输入法。建议用户在使用的时候,不要改变系统的设置,而是给自己创建一个输入法配置文件,这样就不会干扰其他用户的使用。

每一种输入法都对应一个程序名称,系统附带的输入法程序安装在/usr/local/yh/bin目录中,如表2-1所示。

2-1输入法名称与程序对应关系表

程序名称 abc gbkpy  qvwei  zm

输入法名称 智能拼音GBK 拼音区位码 郑码

2.动态卸载输入法

2章红旗Linux中文环境abc是智能ABC输入的程序名称,gbkpy则是GBK拼音的输入法程序。通过上面的设置,在炎黄启动的时候,就会启动上面三个默认的输入法。建议用户在使用的时候,不要改变系统的设置,而是给自己创建一个输入法配置文件,这样就不会干扰其他用户的使用。每一种输入法都对应一个程序名称,系统附带的输入法程序安装在/usr/local/yh/bin目录中,如表2-1所示。表2-1输入法名称与程序对应关系表程序名称abcgbkpyqvweizm输入法名称智能拼音GBK拼音区位码郑码2.动态卸载输入法不管用什么方法安装输入法,都可以在炎黄中文平台运行的时候,利用热键动态地卸载【(Shift+F8】)。使用卸载功能,首先切换到需要卸载的输入法。例如,智能ABC对应于热键【Shift+F3】,现在需要卸载它,首先要按热键【Shift+F3】切换到智能ABC输入法,然后按下热键【Shift+F8】。这个时候在屏幕下部的输入法状态条中,就会再次出现英文的提示状态,正如刚刚启动炎黄系统的时候一样。

在安装中文输入法以后,默认的英文输入状态将会定义在最后一个可用的热键上,例如,安装了三个输入法,那么热键就定义到【Shift+F5】,那么切换到英文输入法就是【Shift+F6】。因此,如果安装了5个中文输入法,那么就不能再使用英文的输入状态,因为切换的热键【Shift+F8】刚好对应输入法卸载热键,会导致中文输入法被卸载。需要使用英文输入法,只能利用【Ctrl+Space】或者【Shift+F1】关闭输入法状态条。

3.动态装载输入法

根据用户的需要,除了利用配置文件启动输入法以外,还可以在炎黄中文环境启动以后动态地增加输入法。如果没有先启动炎黄中文环境,输入法程序将执行出错。动态加载输入法,实际上就是在中文环境中,直接执行输入法程序。

注意:由于输入法程序会耗费系统的资源,而且过多的输入法不会完全用到,因此建议用户尽量只加载必要的输入法。

2.2KDE中文环境

炎黄中文平台除了支持Shell方式下的中文显示和输入以外,还支持XWindow中的中文显示和打印。红旗LinuxXWindow中的KDE环境进行了汉化,方便了中文用户的使用。

红旗LinuxXWindow的中文支持采用了外挂式的中文平台,也正是炎黄中文平台的一部分。对于中文的显示,红旗Linux系统已经内建支持,不需要额外启动外挂程序,只要在需要输入的时候,再启动中文输入法程序即可。

启动了KDE环境中文输入法,外观和使用都与中文Windows系列相近,桌面环境面板的右边,有一个中文输入的选择框,上面显示当前正在使用的输入法信息。只要使用鼠标,就可以改变当前输入法,选择合适的中文输入方案。

相对于Shell方式下的中文环境,KDE中的中文处理更加简便,输入法的切换也采用鼠标的方式进行,不需要记忆热键,免去了Shell方式下中文输入法使用的麻烦。

2.2.1简单介绍

当红旗Linux正常完成安装过程以后,进入KDE桌面环境,显示的面板上有一个方框,里面标明了当前的输入法状态。初始的时候,系统处于英文显示状态,因此在输入法状态中,显示En,代表当前输入英文。

2-1所示就是在KDE面板中的输入法状态栏,面板的右部的En就是。所有KDE

境中的中文输入法的切换,只要通过这个状态栏和鼠标就可以完成。配合键盘的使用,KDE中的炎黄中文环境,也提供了标准的热键,用来切换输入法,进行适当的功能选择。

2-1KDE面板中的输入法状态栏

如果没有启动输入法程序,那么在KDE面板上,不会出现输入法状态栏。如果需要使用中文输入,那么用户必须手工运行输入法程序,详细的方法见下一节。

2.2.2启动输入法程序

尽管在KDE系统中,不用额外程序就可以显示中文,但是为了输入汉字,必须启动外挂的输入法程序,因为炎黄中文环境对于KDE的汉化,是采用了外挂的方式,类似早期的汉化Windows平台,如中文之星、四通利方等等。外挂的汉字平台具有移植方便,不依赖于版本,可以运行在任何普通的英文平台上,在汉化平台上完成汉化工作等优点。缺点在于速度慢,稳定性和系统整体组合不是很好。但是目前来说,几乎所有的中文XWindow环境,都是采用外挂式实现,主要因为XWindow过于庞大,整体的改造仍有待时日,而且外挂的汉字平台,也可以满足目前用户的所有需要,但是彻底的汉化XWindow相信在未来还202章红旗Linux中文环境是会实现的。

炎黄中文环境在KDE桌面上,启动的输入法程序是rfinput。在KDE系统的“自动启动”文件夹(KDE桌面的左边,有它的快捷方式,点击鼠标就可以进入)中,在系统刚刚装好的时候,就有中文输入法的快捷方式,可以保证在KDE桌面启动之后,自动加载中文输入法程序。图2-2所示就是KDE桌面“自动启动”文件夹的内容。

2-2“自动启动”文件夹

由于有“自动启动”文件夹的设备,一般来说用户不需要手工启动中文输入法,只有在它不工作的时候,才需要手工启动。在系统中,rpinput程序位于/usr/local/rfinput目录下,在需要手工启动这个程序的时候,可以先启动KDE下的终端仿真程序,然后在Shell命令行下,输入/usr/local/rfinput/bin/rfinput,就会完成中文输入法的安装。如果系统中已经存在中文输入法,那么安装会报告出错,如果正常运行,在面板的输入法状态栏位置会显示En

只要运行一次中文输入法程序,它就会一直存在,直到XWindow系统关闭,或者强制关闭程序。

在保证中文输入法已经运行成功(注意看面板上是否有输入法状态栏)后,就可以利用KDE进行中文的输入了。

注意:红旗LinuxXWindow对于汉字的显示,不用再额外运行程序。

2.2.3使用中文输入法

KDE中使用中文输入法与在Shell中相比,简单了许多。其大部分工作都可以通过鼠标的点击完成,配合键盘热键使用,更加快速。在本节中,假设中文输入法程序已经正确启动,只详细介绍如何使用KDE中的炎黄中文环境。

1.开启汉字输入法

利用鼠标开启汉字输入法。只要在面板的输入法状态栏上,用左键单击一下,就会弹

出一个菜单,供用户选择需要的输入法类型。图2-3所示就是弹出的菜单的外观。

2-3输入法选择菜单

在繁体中文中,随系统提供的中文输入法总共有3种,分别是:仓颉、注音、九方。“En英语”输入法对应KDE系统默认的英文输入,在需要输入英文的时候使用。

在选中合适的输入法以后,点击鼠标左键,就会开启相应的输入法。除了英语输入法以外,其他的每一种中文输入法,在开启以后,都有相对应的图标在面板的输入法状态栏显示,并且会开启一个输入条,用来进行输入汉字。图2-4所示就是利用鼠标开启了仓颉输入法后,显示的KDE桌面。

2-4启动仓颉输入法

屏幕右下角是输入法状态条,用户可以在这个地方选择输入法,也可通过【Ctrl+Shift】来切换输入法。

2.输入汉字

要输入汉字首先需要打开输入法,参见上面的步骤。在打开中文输入法以后,按下的键盘英文字母,就会被系统解释成为中文输入法的输入,然后依据输入法规则,提示候选的汉字,过程类似于Shell方式下的输入。图2-5所示就是使用九方输入法进行输入的KDE界面。

2-5输入法使用

在输入的时候,类似在Shell下面的方法,通过英文输入字的外码,然后利用数字键选择合适的汉字,并且通过“—”和“=”切换每一组显示的汉字。在图2-5中,左边的是目前输入的汉字,右边的就是符合拼音的候选汉字。

3.输入法切换

在输入法使用中,如果还需要使用其他输入法,那么可以进行输入法切换。切换输入法可以通过鼠标和面板上的输入法状态进行,也可以利用热键。

通过用鼠标点击面板上的输入法状态栏,按照开启输入法一样的步骤,就可以选择需要切换的输入法。也可以使用热键【Ctrl+Shift】进行输入法的切换,每次按下这个热键,输入法会按照顺序进行切换,通过反复的使用,便能做到所有输入法之间的切换。

4.关闭输入法

当不再需要输入中文,而转换到英文输入时,可以选择关闭中文输入法。炎黄中文系统提供热键【Ctrl+Space】关闭中文输入法,在按下以后,就会直接切换到英文输入法,从而关闭了当前的中文输入法。

如果当前的输入法是英文输入法,那么热键【Ctrl+Space】将把英文输入法切换到中文输入法。切换到的中文输入法类型,就是先前使用的中文输入法类型。例如原先使用仓颉输入法,关闭以后,再使用热键【Ctrl+Space】就会再次回到仓颉输入法。当用户需要同时输入中文和英文的时候,利用这个热键,就可以很好的完成中文和英文共同输入。

关闭中文输入法,实际上也就是切换到英文输入法。因此通过上面的切换输入法操作也能完成中文输入法的关闭。例如,可以直接在面板上的输入法状态栏中选择英文输入法,也可以不断按下【Ctrl+Shift】直到出现英文输入法为止。

2.3红旗Linux上的中文打印机配置

2.3.1配置打印机

RedflagLinuxServer2.0中配置打印机的命令是Printtool,此命令只能在XWindow下使用,或者也可以用主菜单中的【系统配置】→【打印机】→【打印机配置】来配置打印机。PrintTool是一个方便的配置打印机的程序,其主界面如图2-6所示。

2-6Pinttool主界面

利用Printtool,用户可以添加,编辑和删除打印机队列。

1)添加一个新的打印机队列,可以选择Add,如图2-7所示。

2-7添加打印机

2)然后选择要增加的打印机类型,可以使用printtool来配置四种打印队列类型:LocalPrinter:指连接于本地系统并口或串口上打印机的打印队列。

RemoteUNIXlpdQueue:指可以通过TCP/IP网络来访问的连接于非本地系统的打印队列。

SMB/Windows95/NTPrinter:指可以通过SMB网络来访问的连接于非本地系统的打印队列。

NetWarePrinter:指可以通过NetWare网络来访问的连接于非本地系统的打印队列,在建立此打印队列之前,必须安装NCP文件系统。

选择了相应的打印队列后,就进入到具体的配置界面,这里以本地打印机为例,如图2-8所示。

2-8编辑本地打印机

其中:

Namesnamel|name2|……):打印机列名称。可以指定多个名字,之间用“|”(管道)符号隔开。

SpoolDirectory:这个本地机器上的目录将用来存放要打印的文件。注意不要让多个打印队列共享一个假脱机目录。

FileLimitinKb0=nolimit):所接受的最大打印作业量,以KB为单位(1KB=1024bytes)。0表示不施加任何限制。

SuppressHeaders:表示是否每个打印作业前打印一张起始信息页,其默认值为不打印起始信息页。

InputFilter:过滤器用来将打印文件转换成打印机可以处理的格式。选择Select来选择最适合您的打印机的过滤器,见图2-9所示。

2-9配置打印机

从图2-9中可以看出,左边为打印机的具体类型,右边为打印的具体选项,除了配置用以打印图形和PostScript格式文档的打印队列外,您还可以配置一个用来打印纯文本的打印机,仅用来打印纯英文的ASCII文本。

PrintingOptions中,其中的主要选项意义为:

SendEOFafterjobtoejectpage:

此选项选中后,将在一个打印任务完成后,强迫打印机弹出纸张。这是由于一些打印机如果收不到EOF字符将不打印。如果用户在每次打印时得到一张额外的空白页,应该将此项关闭。

Fixstair-steppingtext?

如果打印后得到阶梯状的文本,就应该选中这一项,以纠正这一现象。

Fasttextprintingnon-PSprintersonly?

此项在设置非PS打印机时有用。如果用户只是打印纯英文文本文件,可以将此项选中,这样可以提高打印速度;如果用户要打印含有中文的文本文件,就一定要将此项关闭,以便能够正确地打印。请注意,这只对非PostScript打印机有效。

添加完打印机队列后,还需要重起打印守护进程(lpd),这只需要选择printtool主界面上的菜单项【lpd】→【restart】即可。用户还可以打印测试样张来检测打印机是否设置正确。

2.3.2中文打印

RedflagServer2.0中提供了完善的中文打印解决方案,其中采用了中文TrueType字库,打印效果完美,同时支持简体中文和繁体中文的QT/KDE应用程序、文本文件和Netscape中的超文本文档的中文打印。

1.中文文本文件的打印

要打印中文文本文件,首先要将语言环境设置为简(繁)体中文,这样才能正确显示和打印中文文本文件。在RedflagServer2.0中支持在控制台下直接打印中文文本文件,其命令格式为:

lprtext-filename

同时也可在应用程序Kedit中应用打印菜单项即可直接打印简(繁)中文文本文件。

由于在RedflagServer2.0中的中文文本打印应用了mpage程序,所以需要在设置打印机属性的时候不选中FastTextPrinting这一项,这样才能应用lpr命令直接打印出中文文本文件。具体设置可以参见打印机设置一节。

注意:如果只是打印纯英文文本文件,可以在设置打印机时选中FastTextPrinting这一项,这样可以提高打印的速度。

2Netscape中的中文超文本文档打印

Netscape中打印中文超文本文件时,首先要使当前页面中的中文能够正常显示,需要在菜单项【查看】→【字符集】中设置与文档相应的字符集,其中查看BIG5的文档要选择“中文繁体(Big5)”一项,然后就可以用Netscape菜单中的【文件】→【打印】命令打印中文超文本文件。

3.基于QT/KDE的应用程序的中文打印

RedflagServer2.0中,几乎所有的QT/KDE应用程序均可实现简(繁)体中文打印,而不需要额外的设置。只要在应用程序中的中文能够被正确显示,就可以在基于QT的应用程序中正确的打印。

注意:在kmai中,如果选择安装的是中文简体版,则只能打印简体中文的emial,如果要打印繁体中文的emial,请先将语言环境换为繁体中文。

2.4语言切换

红旗Linux服务器版支持三种文字,分别是:简体中文、繁体中文和英文,用户只要根据自己需要,在X窗口环境下,在桌面上点击Language上面的图标,或者在系统菜单中选【系统配置】→【KDE桌面】→【桌面】→【语言】,即可进行地区设置。如图2-10所示。

2-10语言选择

在切换显示语言之后,需要重新启动XWindow,否则不能进行彻底的语言切换,会出现乱码。如果您以图形方式登录,需要退出X窗口,重新登录一次。如果您以文本方式登录,需要退出X窗口,并退出系统,重新登录,再启动XWindow

习题

1.动态卸载输入法的热键是:()

A.【Shift+F3B.【Shift+F8C.【Shift+F5D.【Shift+F10

2.输入法切换的热键是:()

A.【Ctrl+ShiftB.【Ctrl+AltC.【Ctrl+F1D.【Ctrl+Space

3章常用Linux命令介绍

本章内容提要

Linux下的很大一部分工作就是一个一个的输入命令。要使用Linux,就必须使用其中的命令。必须按照一定的规则来写命令。关于命令如何输入的正式说明称为命令的语法。本章将介绍Linux中常见的命令及如何使用它们。通过本章的学习,用户可以了解一些命令的使用,并在今后使用中通过阅读联机手册掌握更多的命令。

本章重点内容

☆常用的Linux命令如atcatcd

☆要求掌握书中列出的命令

3.1作业控制命令

常见的作业控制命令有如下几种:

1at,batch,atq,atrm

at,batch,atq,atrm:安排,检查,删除队列中的工作。

at[-V][-q队列][-f文件名][-mlbv]时间

at-c作业[作业]

atq[-V][-q队列][-v]

atrm[-V]作业[作业]

batch[-V][-q队列][-f文件名][-mv][时间]

at:在设定时间执行作业。

atq:列出用户排在队列中的作业,如果是超级用户,就列出队列中所有的作业。

atrm:删除队列中的作业。

batch:用低优先级运行作业,只要系统的loadavg(系统平均负载)<1.5(或者在atrun中设定的值),它就可开始执行作业。

at超级用户可以在任何情况下使用at系列的命令。一般用户使用at系列命令的权限由文件/etc/atallow/etc/atdeny控制。如果/etc/atallow存在,则只有列在这个文件中的用户才能使用at系列命令。如果/etc/atallow文件不存在,则检查文件/etc/atdeny这个文件。只要不列在这个文件中的用户都可以使用at系列的命令。默认的配置是文件/etc/atdeny是一个空文件,这表明所有的用户都可以使用a系列的命令。

例如:在两天后上午8点执行文件workfile中的作业,可使用如下命令。

$at-fworkfile8am+2days

2crontab命令

crontab——操作每个用户的守护程序和执行的时间表。

crontabfile[-uuser]——用指定的文件替代目前的crontab

crontab-[-uuser]——用标准输入替代目前的crontab

crontab-l[user]——列出用户目前的crontab

crontab-e[user]——编辑用户目前的crontab

crontab-d[user]——删除用户目前的crontab

crontab-cdir——指定crontab的目录。

crontab文件的格式:MHDmdcmd

M:分钟(0-59

H:小时(0-23

D:天(1-31

m:月份(1-12

d:一星期内的天(0-60为星期天)

cmd:要运行的程序,程序被送入shell执行,这个shell只有USERHOMESHELL三个环境变量。

例如:列出用户目前的crontab

$crontab-l

$MINHOURDAYMOUTHDAYOFWEEKCOMMAND

86***clear

$

3.2显示命令

1cat命令

cat——连接文件并打印到标准输出。cat常常用来显示文件,类似于DOS下的命令TYPE

例如:显示文件file的内容,即可采用如下命令。

$catfile

file1file2连接起来输出到文件file3中,即可采用如下命令。

$catfile1file2>file3

2head命令

head——显示文件的前几行。

例如:输出文件/etc/crontab的第一行

$head-n1/etc/crontab

SHELL=/bin/bash

$

3less命令

less——相对于more命令,用来按页显示文件。

例如:显示文件test

31红旗Linux用户基础教程

lesttest

4more命令

more——逐页阅读文本。

more命令十分有用,可以不需要修改就在屏幕上显示文件内容。

键入:morename_of_text_file

使用q命令退出。

3.3文件和目录操作命令

1cd命令

cd——改变目录,能处理绝对和相对路径。

例:假如当前在根目录中,想进入/etc子目录。键入(相对目录):

$cd/etc/

如果想进入/usr/bin目录,键入(绝对目录):

$cd/usr/bin/

此命令有一些实用选项:

$cd回到父目录(注意cd和之间有空格)

$cd回到目前目录了。

$cd~cd~到达个人目录

2ls命令

ls命令——列出当前目录下的文件,常用的两个选项是:-a显示隐文件和-l显示长文件名,将加目录名字到ls命令后。例如:

ls-al/usr/X11R6/bin

键入:

$manls

将显示所有ls命令选项。

此外,ls命令还可以使结果显示某种颜色,用户可以直接ls-F--color;也可以试试编辑/ect/bashrc/home/下的bashrc,加入一行:aliasls="ls--color-f-N"编译之后重新运行bash会立即生效,如果加在/etc/bash则对所有使用bashshell的用户有效。如果使用其他的shell,则q去找对应的配置文件。注意不是/etc/aliass文件,那是sendmail的别置文件。

其中颜色的含义如下:

蓝色——目录

绿色——可执行文件

红色——压缩文件

浅蓝色——链接文件

灰色——其他文件

3file命令

file——探测文件和目录类型。

$fileboot

boot:directory

4find命令

find——搜索目录中文件。

find[路径][匹配表达式]

例如:在整个文件系统中查找名字为“passwd”的文件或目录,可采用如下命令。

$find./-name"passwd"-print

./etc/passwd

./etc/pamd/passwd

./etc/uucp/passwd

./home/ftp/etc/passwd

./usr/bin/passwd

./usr/doc/uucp-1.06.1/sample/passwd

5wc命令

wc——统计一个文件中的字节数,单词数,行数。

6chmod命令

chmod——改变文件保护权限。

文件保护控制用户对文件的访问权,有三个安全级别:所有者级别,组访问级别,其他用户访问级别。在这三个级别中,又有三种权限:读(r),写(w),执行(x)。(用户可以使用ls-lg命令来观看某一文件的所属的group)。

对于文件来说,读权限意味着可以看文件的内容,写权限可以修改或删除文件,执行权限则可以执行它。对于目录来说,读权限意味可以查看目录下的内容,写权限意味着可以在目录中建立新文件,并可以从目录中删除文件,执行权限意味着可以从一个目录转到另一个目录。

保护权限

格式为[ugoa][[+-=][rwxXstugo]][]"ugoa"。控制哪些用户对该文件权限将会改变:

u),文件的所有者;(g),与文件所有者同组的用户;(0),其它组的用户;(a),所有用户。操作符“+”使得用户权限被追加到每个目录文件。操作符“-”使得用户权限被取消,操作符“=”使用户只有这些权限。"rwxXstugo"选择新的属性:r),读权限;(w),写权限;

x),执行权限(和对目录的访问权);(X),只有目标文件对某些用户是可执行的或该目标文件是目录时才追加X属性;(s),同时设定用户或组ID;(t),保存程序的文本到交换设备上;(u),目标文件属主;(g),目标文件属主所在的组;(o),其他用户。如果数字来表示属性,则(0),没有权限;(1),执行权;(2),读权;(4),写权,然后相加,所以数字属性的格式应为307的八进制数,其顺序是(u)、(g)、(o)文件名:以空格分开的要改变权限的文件列表,支持通配符。

例:使所有用户对文件testfile有执行权,输入如下命令:

$chmoda+xtestfile

使所有用户对文件testfile有读权,输入如下命令:

$chmod222testfile

7chown命令

chown——改变文件的属主和组。

用户:可以是用户名或用户ID

组:可以是组名或组的ID

文件名:以空格分开的要改变权限的文件列表,支持通配符。

例如:将文件file1的属主改为host组的test,可用如下命令:

$chownhost:testfile1

8clear命令

clear——清除屏幕(像DOS中的cls)。

例如:清除屏幕,提示符将被移到左上角。

$clear

9touch命令

touch——改变文件的时间参数。

touch将会改变文件的访问时间,修改时间设置为系统的当前时间,如果该文件不存在

则建立一个空的新文件。

10ln命令

ln——在文件间建立连接ln[参数]源文件[目标文件]

在目录间建立连接ln[参数]源文件[目录]

注意:对连接文件做改变属性是没有意义的,因为只有它们连接到的文件才是文件的真正属性。

例如:将文件sourcefile连接到文件testfile

$ln-ssourcefiletestfile

11mv命令

mv——将文件改名。

mv[参数]源文件目标文件

mv[参数]源文件列表(支持通配符)目标文件

例如:

$mv-vsourcefiledestfile

sourcefile->destfile

$

12cp命令

cp——拷贝文件。

用法:

cp[options]源文件目标文件

选项:

-f--force:强行覆盖已存在的目标文件

-i-interactive:在强行覆盖已存在的目标文件时给出提示。

-R--recursive:整个目录拷贝。

例如:拷贝文件sourcefile到文件destfile

cpsourcefiledestfile

13dd命令

dd——拷贝一个文件(并可以同时转化它)。

例如:将文件sourcefile拷贝到文件destfile

$ddif=sourcefileof=destfile

0+1recordsin

0+1recordsout

$

14rm命令

rm——删除文件。

用法:

rmfile_name

rm命令接受通配符。常用选项是:-i在删除前询问确定和-r删除一个目录所有文件。

例如:删除当前目录下html子目录的所有html文件。

$rm-i/html/*Html

警告:当文件被删除后,不能恢复。

15mountumount命令

mount安装一个文件系统。

Umount卸下一个文件系统。

例如:如果您想列出目前系统的文件系统

$mount

/dev/sda1on/typeext2rw

noneon/proctypeprocrw

/dev/hda2on/INSTALLtypeext2rw

$

3.4网络命令

1ping命令

ping命令——确定网络上机器是否可到达和到达速率。

用法:ping选项IP地址/域名

例如:

$pingwww.263.net

Pingingwww.263.net[202.96.44.130]with32bytesofdata:

Replyfrom202.96.44.130:bytes=32time=30msTTL=252

Replyfrom202.96.44.130:bytes=32time=20msTTL=252

Replyfrom202.96.44.130:bytes=32time=50msTTL=252

Replyfrom202.96.44.130:bytes=32time=20msTTL=252

Pingstatisticsfor202.96.44.130:

Packets:Sent=4,Received=4,Lost=00%loss,

Approximateroundtriptimesinmilli-seconds:

Minimum=20ms,Maximum=50ms,Average=30ms

ping命令将大小固定的数据包发送给对方,并要求对方返回。通过数据判断是否返回以及返回时间,用户可以确定对方是否可达,是否开机,以及网络延时时间。

2telnet命令

telnet命令——远程登录命令,此命令使得用户能像使用本地机器一样访问网上机器(必须有除root外的账号)。有许多网络服务都是通过telnet命令来提供的,如BBSachive等。

用法:telnet选项IP/机器名:端口号

例如:如果想通过telnet连接“水木清华”BBS站,键入如下内容:

$telnetsmth.org

这时候我们按要求输入“BBS”以后可以看见如图3-1所示的进站画面:

输入相应的账号和密码以后,进入BBS站,即可看到当前上站人数列表,如图3-1所示。

3-1进站画面

当然,也可以通过直接键入telnet命令,出现telnet提示符后,再使用open命令来实现连接。除了open命令外,还有许多命令,请使用help命令来查询。

telnet下也能使用vi

TELNET/VI被设计为可以通过远程终端机使用。很多终端机与控制台不同,没有方向及编辑键。VI控制状态下可以用普通键盘移动光标,如h,j,k,l,分别对应左,下,上,右,Ctrl-fCtrl-b用来翻页,更多功能可以查看VI使用指南。另外Win9X带的TELNET客户软件功能太弱,建议使用NETTERM,光标位置就不会出错了。

3ftp命令

ftp命令——文件传输命令,使用此命令可以传输文件。

用法:ftp选项IP/机器名

例如:如果想到北京大学计算机系下载软件的话,输入下面的内容:

$ftp://ftp.cs.pku.edu.cn

连接后,要求输入用户名和密码;大多数ftp站点都接收用户名:ftpanonymous,密码请使用自己的E-mail地址。

telnet命令一样,ftp也提供了一个命令行环境,其中的命令很相似,在ftp环境中用help命令可以随时查到帮助。

Linux系统中,命令ncftpwget是两个更加卓越的ftp客户端软件,ncftpftp增强命令,而wget是镜像站点的好助手。

3.5其他实用命令

1aliasunalias命令

aliasunalias——设置别名。

3-2所示是一个使用aliasunalias的例子。

3-2例子

2date命令

date——打印或设置系统日期和时间。

date[-u][-ddatestr][-sdatestr][--utc][--universal][--date=datestr][--set=datestr][--help][--version][+FORMAT][MMDDhhmm[[CC]YY][.ss]]+FORMAT:控制如何显示日期。

指令:%:%

n:新行

t:TAB

时间域

%H:小时(00。。23

%l:小时(00。。12

%k:小时(0。。23

%l:小时(1。。12

%M:小时(00。。59

%pAM或者PM

%r12小时(hh:mm:ss[AP]M

%s:从1970-01-0100:00:00UTC开始的时间

%S:秒(00。。59

%T:时间表示(%H:%M:%S

%Z:时区(如EDT)。如没有指定时区则不显示。

日期域:

%a:缩写形式的星期名(Sun..Sat

%A:星期名(Sunday..Saturday

%b:缩写形式的月名(Jan..Dec

%B:月名(January..December

%c:日期和时间(SatNov0:02:33EST1989

%d:每个月的第几天(01..31

%D:日期(mm/dd/yy

%h:等同于%b

%j:一年的第几天(001..366

%m:月份(01..12

%U:一年中的第几个星期,星期天为星期的第一天(00:53

%w:每个星期的第几天,(0..6)为星期天

39红旗Linux用户基础教程

%W:一年中的第几个星期,星期一为星期的第一天(00:53

%x:日期(mm/dd/yy

%y:年份的后两个数字(00..99

%Y:年份(1970..

[MMDDhhmm[[CC]YY][.ss]]

MM:月份

DD:日期

hh:小时

mm:分钟

CC:年份的前两位(可选项)

YY:年份的后两位(可选项)

ss:秒(可选项)

只有超级用户才有权限设置系统时间(启动时在CMOS中读出)。

-ddatestr--datedates:显示datestr中指定的日期和时间。

-sdatestr--setdatestr:设定datestr中指定的日期和时间。

-u--universal:显示或设定格林威治时间(默认为本地时间)

--help:在标准输出上输出帮助信息并退出。

--version:在标准输出上输出版本信息并退出。

例如:

显示当前的时间:

$date-u--date'2daysago'

TueAug2410:20:39UTC1999

显示月份

$date'+%B%d'

August24

3cal命令

cal——显示日历。

输入的命令行及结果如图3-4所示。

3-4输入cal命令后所得结果

4bc命令

bc——Linux下的计算器。

5df命令

df——报告磁盘剩余空间。

例如:

$df-a-T

Filesystem Type 1 k –blocks Used Available Use% Mounted on

/dev/sda1 ext2 1020541 846524 121288 87%/

none proc 0 0 0 -/proc

none devpts 0 0 0 -/dev/pts

/dev/had2 ext2 114914392792116185185%/work

6du命令

du——报告磁盘空间使用情况。

例如:

$du

366.sr/doc/gnome-libs-devel-1.0.9/devel-docs/gnome/html

243./usr/doc/gnome-libs-devel-1.0.9/devel-docs/gnome/sgml

53./usr/doc/gnome-libs-devel-1.0.9/devel-docs/gnome/tmpl

729./usr/doc/gnome-libs-devel-1.0.9/devel-docs/gnome

$

7grep命令

grepegrepfgrep——在文件中搜索匹配的行并输出。

例如:在文件中/etc/passwd查找含有root的行。

$grep root/etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:

$

8gzip命令

gzipgunzipzcat——压缩或展开文件,详细情况请用mangzip查看。

$gzip -V sourcefile

sourcefile:15.2%--replacedwithsourcefile

9passwd命令

passwd——设置用户的密码。

用户可以使用passwd这个命令来更改自己的登录密码,一般用户只能更改自己的密码,超级用户才能更改其他用户的密码,超级用户和组的管理者能更改组的密码,还可以用这个命令来更改用户的其他信息,如用户的全名,用户的登录Shell,用户的密码失效时间间隔等等。

例如:

$passwd

New UNIX password:

Re-enternew password:

password changed

$

10ps命令

ps——命令罗列运行进程。

在屏幕中显示分为两列:命令列和PID列。命令列显示进程名字,PID列显示进程号(用kill命令停止运行程序将会使用此进程号)。

用法:ps options

参数选项

u能提供更多信息

ax能辩识不属于当前用户的进程(例如在开启是就运行的程序)。

11last命令

last——显示过去多少个用户或终端登录到本机器。

last[-数目][-f文件][-ttty][-h节点名][-iIP地址][-l][-y][用户名]

例如:显示过去3次用户root登录的情况。

last -3 root

root 0 Wed Aug 25 14:07 stilll ogged in

root 0 Wed Aug 25 14:02 -14:0300:00

root :0 WedAug 25 14:01-14:0100:00

wtmP begins Tue Aug1717:27:411999

$

12who命令

who——查看其他登录的用户。

输入的命令及执行结果如图3-5所示。

3-5who命令及执行结果

13man命令

man——显示具有一定格式的在线手册。

man命令对于新手和老手来说都是有用的工具。编程人员可以用此命令参看c函数。

下面是常用的红旗Linux手册的分类:

1)用户命令。

2)系统调用。

3)库函数。

4)设备和设备驱动程序。

5)文件格式。

6)游戏。

7)有用的杂类,如宏命令包等。

8)系统维护和管理命令。

14m系列命令

m系列——在Linux系统下访问DOS磁盘的命令。

mcd——进入DOS子目录。

mcopy——拷贝DOS文件。

mdel——删除DOS文件。

mdeltree——删除DOS目录。

mdir——参看DOS目录内容。

mformat——格式化DOS磁盘。

mlabel——给DOS磁盘加卷标。

mmd——创建DOS目录。

mmove——移动DOS下的文件。

mtype——显示DOS下的文件。

mren——将DOS下的文件改名。

15mkdirrmdir命令

mkdir命令是创建一个目录,rmdir是删除一个空目录。

语法:

mkdir directory_name

rmdir direcotry_name

rmdir常常用rm-rf命令替代,因为此命令能删除未空的目录。小心使用此命令。

16reboot命令

reboot——重新启动系统。

17su命令

su——使普通用户以root帐号登录。

键入su命令,shell要求root密码。键入密码并击回车键:现进入root帐号。键入exit(或按【Ctrl+D】)回到以前的普通用户。

18tar命令

tar命令——创建和编辑UNIX归档文件。

例如:将rep/目录(和其子目录)下文件归档

$tar –c rep />rep.tar

获得的存档能压缩(使用gzipbzip2),例如:键入:

$gzip rep.tar

要展开一个存档文件,键入:

$tar –xvf archive.tar

要解开例子中归档文件,应键入;

tar –xvf rep.tar

tar –xvfz rep.tar.gz(如果存档使用gzip压缩)

要发现所有的tar命令参数,键入:

man tar

19history命令

histoty——显示历史命令记录。

在屏幕显示历史命令记录,并且每条历史命令都有一个记录号。要执行一个命令,键入:

!command_number

会重新执行这条指令。

命令!!,将重新执行上次命令。

20kill命令

kill——中止一个进程。

kill[-s信号|p][-a]进程号

kill-l[信号]

kill向指定的进程发出特定的信号,如果没有指定信号则送出TERM信号,TERM信号将杀死没有捕捉到这个信号的进程。对于某些可能要使用KILL9)信号强制杀死。

例如:

$ps

PIDTTYTIMECMD

520pts/000:00:00bash

523pts/000:00:00ps

$

21which命令

which——显示命令的全路径。

22csh命令

csh——启动CShell

习题

1.为了实现“在二天后上午8点执行文件workfile中的作业”这项任务,需要():

A.超级用户执行at$at –f workfile 8am+2days

B.一般用户执行at$at –fworkfile 8am+2days

C.超级用户执行at$at –fworkfile 2+8amdays

D.一般用户执行at$at-fworkfile 2+8amdays

2.到达个人目录的命令是():

Acd..

Bcd~

Ccd/

Dcd.

3.在文件中搜索匹配的行并输出的命令是():

Agrep

Begrep

Cless

Dfgrep

4ls命令——列出当前目录下的文件,显示隐文件的参数是():

Al

Ba

Ccolor

Dx

4Shell简介

本章内容提要

红要求了解Shell的概念,学会操作进程,掌握基本的旗BourneShellscript语句。红旗Linux系统的Shell作为操作系统的外壳,为用户提L供使用操作系统的接口。它是命令语言、命令解释程序及程i序设计语言的统称。Shell是用户和Linux内核之间的接口程n序,如果把Linux内核想像成一个球体的中心,Shell就是围绕内核的外层。当从Shell或其他程序向Linux传递命令时,内核会做出相应的反应。

本章重点内容

Shell的基本概念

☆进程及其操作

☆输入输出重定向

BourneShellscript编程基础

4.1Shell的基本概念

Shell是一个命令语言解释器,它拥有自己内建的Shell命令集,Shell也能被系统中其他应用程序调用。用户在提示符下输入的命令都由Shell解释后传给Linux核心。

有一些命令,比如改变工作目录命令cd,是包含在Shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在Shell内部还是一个单独的程序。

Shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如lsrm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后Shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。

Shell的另一个重要特性是它自身就是一个解释型的程序设计语言,Shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。Shell

编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的Shell程序中。

当普通用户成功登录后,系统将执行一个称为Shell的程序。正是Shell进程提供了命令行提示符。作为默认值,对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。

一旦出现了Shell提示符,就可以键入命令名称及命令所需要的参数。Shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以在键盘上按【Ctrl+c】发出中断信号来中断它(在正常结束之前,中止它的执行)。

当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按【Ctrl+d】实现),结束登录。

下面可以来看一下Shell是如何工作的。

注意:cal是系统中一个命令的名字,用于显示日历。12001cal的两个参数。该命令的含义是显示20011月的日历。在接收到这个命令后,shell便执行它。执行完之后又返回到命令接收状态。

在例子中,#为系统提示符,该提示符表示用户于超级用户的身份登陆的。

make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在“makework”中,make编译的目标是work。因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。

另外,用户键入有关命令行后,如果Shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:

$myprog

bash:myprog:command not found

$

此时可以看到,用户得到了一个没有找到该命令的错误信息。,这样的错误信息一般出现在用户输入错误命令时。

Shell的种类

Linux中的Shell有多种类型,其中最常用的几种是BourneShellsh)、CShellcsh)和KornShellksh)。三种Shell各有优缺点。BourneShellUNIX最初使用的Shell,并且在每种UNIX上都可以使用。BourneShellShell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种Shell。红旗Linux操作系统默认的ShellBourneAgainShell,它是BourneShell的扩展,简称Bash,与BourneShell完全向后兼容,并且在BourneShell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、令编辑和命令历史表等功能,它还包含了很多CShellKornShell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

CShell是一种比BourneShell更适于编程的Shell,它的语法与C语言很相似。Linux为喜欢使用CShell的人提供了TcshTcshCShell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和BashShell是提示符兼容,而且还提供比BashShell更多的提示符参数。

KornShell集合了CShellBourneShell的优点并且和BourneShell完全兼容。Linux系统提供了pdkshksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。

Linux中还包括了一些流行的Shellashzsh等。每个Shell都有它的用途,有些Shell是有专利的,有些能从Internet网上或其他来源获得。要决定使用哪个Shell,只需读一下各种Shell的联机帮助,并试用一下。

用户在登录到Linux时由/etc/passwd文件来决定要使用哪个Shell。例如:

#fgrep lisa/etc/passwd

lisa:x:500:500:User:/home/lisa:/bin/bash

Shell被列在每行的末尾(/bin/bash)。

4.2进程

通常从进程的角度来理解UNIXLinux系统的多任务的概念。进程或任务,是运行之中的程序的一个实例(instance),亦即程序的一次运行过程,是一个动态的概念。

用户注册的Shell就是一个进程。在提示符$下运行一条命令时,执行中的命令也是一个进程。

4.2.1分时

CPU机器,在同一时刻只能有一个进程在运行。多CPU机器,同一时刻一个CPU也只能运行一个进程。

多进程的同时运行是通过优先级管理机制,给每一个进程分配不同的时间片,分时运行,使每一个程序的执行者都感觉系统是在为自己服务。

4.2.2前台进程和后台进程

用户在Shell下运行命令时,在该进程结束前不能执行其他命令的进程执行方式,是前台进程。而进程未结束前就可以通过Shell运行别的命令的进程是后台进程Shell提供操作符&,使用户就可以在后台运行命令。在命令行尾附加&即可。

$cat/etc/passwd&

用户通常可以重定向命令的输入和输出。从而使程序的输出不会干扰自己的对话期。

$cat/etc/passwd>file.copy&

用户也可以重定向标准错误输出,以屏蔽错误信息。

$cat/etc/passwd>file.copy2>error.out&

用户在对话期间创建的后台进程,在用户签退后即被撤消,因为它们与用户的注册标识相联。UNIX提供了命令nohap来使后台进程在用户签退后仍然可以运行。将nohap放在命令行之前即可。

$nohapcat/etc/passwd&

在管道线使用nohap时,必须对每一个管道元素使用nohap

4.2.3父进程和子进程

一个进程启动另一个进程后,被启动进程是子进程,原进程是启动进程的父进程。一个父进程可以有多个子进程,而一个子进程只有一个父进程。父进程消亡时子进程一般也消亡,用户可以使子进程继续存在,该子进程的父进程就变成了原父进程的父进程。每一个进程都有父进程。进程号是1的为最原始进程。

4.2.4进程状态命令ps

用户可以通过命令psprocessstatus,进程状态)检查机器中当前存活的进程。不加参数时,显示发出该命令用户的登录对话期内所有正在运行的进程。其中参数如下所示。

-f:显示进程的全部信息。

-a:显示全部用户当前活动的进程。

-e:显示当前系统正在运行的全部进程。

-t终端名:显示对应终端的进程。

-u用户名:显示某用户的进程。

通常-ef-af-t使用较多。

显示信息如下:

UID:用户名;PID进程号。

PPID:父进程号;C进程最近所耗的CPU资源。

STIME:进程开始时间TTY启动进程的终端设备。

TIME:进程总共占用CPU的时间。

COMMAND:进程名。

4.2.5杀死进程

命令kill终止自己所拥有进程的执行,下面的几个例子及其说明阐述了此命令的作用。

$kill 435

向进程号是435的进程发送信号15,使其终止,有可能不起作用;

$kill -9 362

强制终止362号进程;

$kill0

向一个进程组的全部进程发出终止信号;

ps-df

4.3输入输出重定向

4.3.1标准输入与输出

执行一个Shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

下面以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若使用如下命令:

$catconfig

将会把文件config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如:

$cat

Hello world

Hello world

Bye

Bye

$

用户输入的每一行都立刻被cat命令输出到屏幕上。

另一个例子,命令sort按行读入文件正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序,假设文件为temp

$sorttemp

输出:apples

apples

bananas

bananas

carrots

carrots

这时用户可在屏幕上得到了已排序的采购单。

直接使用标准输入/输出文件存在以下问题:

1)输入数据从终端输入时,用户输入的数据只能用一次。下次再想用这些数据时就需要重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

2)输出到终端屏幕上的信息只能看不能动。用户无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

4.3.2输入重定向

输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。

例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:

$wc

wc将等待用户告诉它统计什么,这时Shell就好像死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下【Ctrl+d】,wc才将命令结果写在屏幕上。

如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。

$wc/etc/passwd

20 23 726/etc/passwd

$

另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:

$wc

20 23 726

$

另一种输入重定向称为here文档,它告诉Shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。下例将一对分隔符之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。

$wc<

>of the here document,which

>continues until the end of

>text delimter

>delim

4 17 98

在“<<”操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符)将重新定向送给命令wc作为它的标准输入。

由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。

4.3.3输出重定向

输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。

输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。

输出重定向的一般形式为:命令>文件名。例如:

$ls>directory.out

$cat directory.out

ch1.doc ch2.doc ch3.doc chim config mail/test/

$

ls命令的输出保存为一个名为directory.out的文件。

注意:如果“>”符号后边的文件已存在,那么这个文件将被覆盖。

为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,Shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。

如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符“>>”。形式为:命令>>文件名。例如:

$ls*.doc>>directory.out

$cat directory.out

ch1.doc ch2.doc ch3.doc chimp config mail/test/

ch1.docch2.docch3.doc

$

和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:

$ls/usr/tmp2>err.file

可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。还可以使用另一个输出重定向操作符(&)将标准输出和错误输出同时送到同一文件中。例如:

$ls/usr/tmp&>output.file

利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列,即统计了/usr/bin目录下的文件个数。

$ls/usr/bin>/tmp/dir

$wcw

459

4.3.4管道

将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个例子中的/tmp/dir文件将lswc命令联在一起;另一种是Linux所提供的管道功能。这种方法比前一种方法更方便。

管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。

显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。通过使用管道符“|”来建立一个管道行。用管道重写上面的例子:

$ls/usr/bin|wc-w

1789

再如:

$cat sample.txt|grep"High"|wc-l

管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词Highgrep命令的输出则是所有包含单词High的行,这个输出又被送给wc命令,wc命令统计出输入中的行数。假设sample.txt文件的内容如下:

Things to do today:

Low: Go grocery shopping

High:Return movie

High:Clear level3 in Alienvs.Predator

Medium:Pick up clothes from dry cleaner

那么该管道行的结果是2

4.3.5命令替换

命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:

command1`command2`

其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:

$cd`pwd`

该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。

4.4Bourne Shell script编程基础

很多操作系统都有不少语言及一些script功能,但很少有像UNIX/LinuxShell这样灵活强大的script脚本语言能力。

对于系统管理员或程序员来说,熟练地使用Shellscript将对日常工作(系统维护及管理)非常有用,如果您想作一个合格的系统管理员,强烈建议您进一步深入的了解和使用Shell。这部分内容将在《红旗Linux系统管理教程》一书中详细讲述。

4.4.1分支语句

1if语句

格式

if[variable1=value1]

then

command

command

elif[variable1=value2]

then

command

command

elif[variable1=value3]

then

command

command

fi

例:

echo –n "Do you want to continue:Y or N"

read ANSWER

if[$ANSWER=N-o$ANSWER=n]

then

exit

fi

上例中当用户的回答为Nn时程序将结束。

read语句格式如下:

readvar1var2...varn

read将不作变量替换,但会删除多余的空格,直到遇到第一个换行符(回车),并将输入值依次赋值给相应的变量。

2case结构

格式:

casevaluein

pattern1)

command

command;;

pattern2)

command

command;;

...

patternn)

command;

esac

case语句只执行第一个匹配模式

例:使用case语句建立一个菜单选择Shellscript

#Displayamenu

echo_

echo"1Restore"

echo"2Backup"

echo"3Unload"

echo

#Read and excute the user's selection

echo –n "Enter Choice:"

read CHOICE

case "$CHOICE" in

1)echo "Restore";;

2)echo "Backup";;

3)echo "Unload";;

*)echo "Sorry $CHOICE is not avalid choice

exit1

esac

说明:

1.在上例中,*指默认匹配动作。

2#开头的语句为注释语句。

此外,case模式中也可以使用逻辑操作,如下所示:

pattern1|pattern2)command

command;;

这样可以将上面示例程序中允许用户输入数字或每一个大写字母。

case"$CHOICE"in

1|R)echo"Restore";;

2|B)echo"Backup";;

3|U)echo"Unload";;

*)echo "Sorry $CHOICE is not avalid choice

exit1

esac

4.4.2循环控制

1while循环

格式:

whilecommand

do

command

command

command

...

done

例:计算15的平方。

#!/bin/sh

#

#Filename:square.sh

int=1

while[$int-le5]

do

sq=`expr$int\*$int`

echo$sq

int=`expr$int+1`

done

echo"Jobcompleted"

$shsquare.sh

1

4

9

16

25

Jobcompleted

2until循环结构

格式:

untilcommand

do

command

command

....

command

done

示例:

使用until结构计算1-5的平方。

#!/bin/sh

int=1

until[$int-gt5]

do

sq=`expr $int\*$int`

echo$sq

int=`expr $int+1

done

echo"Job completed"

说明:

1expr $int\*$int`计算变量的平方。

2int=`expr $int+1为赋值语句注意左边的变量没有$符号。

3for循环

格式:

for varin arg1 arg2...argn

do

command

....

command

done

1

$for letter in a b c d e; do echo $letter;done

a

b

c

d

e

2:对当前目录下的所有文件操作:

$for i in *

do

if[-f$i]

then

echo"$i is a file"

elif[-d $i]

echo "$i is a directory"

fi

done

说明:

*表示当前目录下的所有文件。

3:求命令行上所有整数之和:

#!/bin/sh

sum=0

for INT in $*

do

sum=`expr $sum + $INT`

done

echo $sum

说明:

$*表示所有的录入参数。

4.4.3从循环中退出

从循环中退出可采用breakcontinue命令。

break:立即退出循环。

continue:忽略本循环中的其他命令,继续下一个循环。

Shell编程中有时要用到进行无限循环的技巧,也就是说这种循环一直执行碰到breakcontinue命令。这种无限循环通常是使用truefalse命令开始的。UNIX系统中的true总是返回0值,而false则返回非零值。如下例所示,一直执行到程序执行了break或用户强行中断时才结束循环。

while true

do

command

....

command

done

上面所示的循环也可以使用until false,如下所示。

until false

do

command

....

command

done

在如下的Shellscript中同时使用了continuebreak以及case语句中的正规表达式用法:

#!/bin/sh

#Interactive program to restore,backup,or unload

#a directory

echo "Welcome to the menu driven Archive program"

while true

do

#Display a Menu

echo

echo"Make a Choice from the Menu below"

echo_

echo "1Restore Archive"

echo "2Backup directory"

echo "3Unload directory"

echo "4Quit"

echo

#Read the user's selection

echo –n "Enter Choice:"

read CHOICE

case $CHOICE in

[1-3])echo

#Read and validate the name of the directory

echo –n "What directory do you want?"

read WORKDIR

if [!-d "$WORK DIR"]

then

echo "Sorry, $WORK DIR is not a directory"

continue

fi

#Make the directory the current working directory

cd $WORK DIR;;

#Following is other operation

*)echo "Sorry, $CHOICE is not a valid choice"

continue

esac

case"$CHOICE"in

1)echo"Restoring..."

cpio -i

2)echo "Archiving..."

ls|cpio -o>/dev/rmt/0h;;

3)echo "Unloading..."

ls|cpio -o>/dev/rmt/0h;;

4)echo "Quitting"

break;;

esac

#Check for cpio errors

if [$? -ne 0]

then

echo "A problem has occurred during the process"

if [$CHOICE=3]

then

echo"The directory will not be erased"

fi

echo "Please check the device and try again"

continue

else

if[$CHOICE=3]

then

rm*

fi

fi

done

4.4.4处理不定长的参数

在以上的示例中总是假设命令行参数惟一或其个数固定,或者使用“$*”将整个命令行参数传递给Shellscript进行处理。当参数个数不固定并且希望对每个命令参数进行单独处理时则需要shift命令。使用shift可以将命令行位置参数依次移动位置,即$2->$1,$6->$2.在移位之前的第一个位置参数$1在移位后将不在存在。

示例如下:

#!/bin/sh

#

#Filename:shifter

until[$#-eq0]

do

echo"Argument is $1 and `expr$# -1 `argument(s) remain"

shift

done

$shifter 1 2 3 4

Argument is 1 and 3 argument(s) remain

Argument is 2 and 2 argument(s) remain

Argument is 3 and 1 argument(s) remain

Argument is 4 and 0 argument(s) remain

$

使用shift时,每进行一次移位,$#1,使用这一特性可以用until循环对每个参数进行处理,如下示例中是一个求整数和的Shellscript

#!/bin/sh

#sumints –a program to suma series of integers

#

if[$# -eq 0]

then

echo "Usage:sumints integer list"

exit1

fi

sum=0

until[$#-eq0]

do

sum=`expr$sum+$1`

shift

done

echo$sum

$sh sumints 324 34 34 12 34

438

$

使用shift的另一个原因是BourneShell的位置参数变量为$1~$9,因此通过位置变量只能访问前9个参数。但这并不等于在命令行上最多只能输入9个参数。此时如果想访问前9个参数之后的参数,就必须使用shift

另外,shift后可加整数进行一次多个移位,如:

shift3

4.4.5结构化编程:定义函数

同其他高级语言一样,Shell也提供了函数功能。函数通常也称之为子过程(subroutine),

其定义格式如下:

funcname()

{

command

...

command;#分号

}

定义函数之后,可以在Shell中对此函数进行调用,使用函数定义可以将一个复杂的程序分为多个可管理的程序段,如下所示:

#startprogram

setup()

{commandlist;}

do_data()

{commandlist;}

cleanup()

{commandlist;}

errors()

{commandlist;}

setup

do_data

cleanup

#endprogram

技巧:在对函数命名时最好能使用有含义的名字,即函数名能够比较准确的描述函数所完成的任务。为了程序的维护方便,请尽可能使用注释。

使用函数的另一个好处就是可以在一个程序中的不同地方执行相同的命令序列(函数),如下所示:

iscontinue()

{

while true

do

echo-n"Continue?(Y/N)"

read ANSWER

case $ANSWER in

[Yy])return0;;

[Nn])return1;;

*)echo"Answer Y or N";;

esac

done

}

这样可以在Shell编程中调用iscontinue,确定是否继续执行。

if iscontinue

then

continue

else

break

fi

Shell函数与Shell程序非常相似,但两者有一个非常重要的差别:Shell程序是由子Shell

执行的,而Shell函数则是作为当前Shell的一部分被执行的,因此在当前Shell中可以改变

函数的定义。此外在任意Shell(包括交互式的Shell)中均可定义函数,如:

$dir

dir: not found

$dir(){ls-l;}

$dir

total 5875

-rw-r--r--1 hbwork 100 Nov 1023:16doc

-rw-r--r--1 hbwork 2973806 Nov 1023:47 ns40docs.zip

-rw-r--r--1 hbwork 1715011 Nov 1023:30 ns840usr.pdf

-rw-r--r--1 hbwork 1273409 Sep 231998 radsol21b6.tar.Z

-rw-r--r--1 hbwork 7526 Nov 1023:47 wget-log

-rw-r--r --1 hbwork 1748 Nov 1321:51 wget-log.1

$unset dir

$dir(){

>echo"Permission Link Owner Group File_SZ LastAccess FileName"

>echo"-----------------------------------------------------------"

>ls-l$*;

>}

$dir

Permission Link Owne GroupFile_SZ LastAccess FileName

-----------------------------------------------------------

total5875

-rw-r--r--1 hbwork100Nov1023:16doc

-rw-r--r--1 hbwork 100 Nov 1023:16doc

-rw-r--r--1 hbwork 2973806 Nov 1023:47 ns40docs.zip

-rw-r--r--1 hbwork 1715011 Nov 1023:30 ns840usr.pdf

-rw-r--r--1 hbwork 1273409 Sep 231998 radsol21b6.tar.Z

-rw-r--r--1 hbwork 7526 Nov 1023:47 wget-log

-rw-r--r --1 hbwork 1748 Nov 1321:51 wget-log.1

通常情况下,Shellscript是在子Shell中执行的,因此在此子Shell中对变量所作的修改对父Shell不起作用。点(.)命令使用Shell在不创建子Shell而由当前Shell读取并执行一个Shellscript,可以通过这种方式来定义函数及变量。此外点(.)命令最常用的功能就是通过读取.profile来重新配置初始化login变量。如下所示:

$..profile

csh相对于命令的是source命令)。

4.4.6使用And/Or结构进行有条件的命令执行

1And

仅当第一个命令成功时才执行后一个命令,如同在逻辑与表达式中如果前面的结果为真

时才有必要继续运算,否则结果肯定为假。格式:

command1 && command2

例:rm $TEMPDIR/* && echo "File successfully removed"

上例命令等价于以下语句所得效果。

if rm $TEMPDIR/*

then

echo"File successfully removed"

fi

2Or

And相反,只有前一个命令执行出错时才执行后一条命令

例:rm$TEMPDIR/*||echo"File not removed"

等价于:

ifrm$TEMPDIR/*

then

command

else

echo"File not removed"

fi

3.混合命令条件执行

command1 && command2 && command3

command1,command2成功时才执行command3

command1 && command2 || comamnd3

仅当command1成功,command2失败时才执行command3

当然可以根据自己的需要进行多种条件命令的组合,在此不多讲述。

4.4.7使用getopts命令读取Linux格式选项

Linux格式选项指如下格式的命令行参数:

command -options parameters

getopts使用格式:

getopts option_string variable

具体使用方法请参考getopts的在线文档(mangetopts)。

示例如下:

#newdate

if [$#-lt1]

then

date

else

while getopts mdyDHMSTjJwahr OPTION

do

case$OPTION

in

m)date'+%m';;#MonthofYear

d)date'+%d';;#DayofMonth

y)date'+%y';;#Year

D)date'+%D';;#MM/DD/YY

H)date'+%H';;#Hour

M)date'+%M';;#Minute

S)date'+%S';;#Second

T)date'+%T';;#HH:MM:SS

j)date'+%j';;#dayofyear

J)date'+%y%j';;#5digit Juliandate

w)date'+%w';;#Day of the Week

a)date'+%a';;#Day abbreviation

h)date'+%h';;#Month abbreviation

r)date'+%r';;#AM-PMtime

\?)echo"Invalid option $OPTION";;

esac

done

fi

$newdate -J

94031

$newdate -a -h -d

Mon

Jan

31

$newdate -ahd

Mon

Jan

31

$

示例程序:复制程序

#Syntax: duplicate [-cinteger][-v] filename

#where integer is the number of duplicate copies

#and -v is the verbose option

COPIES=1

VERBOSE=N

while getopts vc:OPTION

do

case $OPTION

in

c)COPIES=$OPTARG;;

v)VERBOSE=Y;;

\?)echo"IllegalOption"

exit1;;

esac

done

if [ $OPTIND -gt $#]

then

echo "No filename specified"

exit2

fi

shift `expr $OPTIND-1`

FILE=$1

COPY=0

while [$COPIES -gt $COPY]

do

COPY=`expr $COPY+1`

cp $FILE ${FILE}${COPY}

if [VERBOSE=Y]

then

echo ${FILE}${COPY}

fi

done

$duplicate -v fileA

fileA1

$duplicate -c 3 -vfileB

fileB1

fileB2

fileB3

习题

1.关于Linuxshell说法错误的是:()

A.一个命令语言解释器

B.编译型的程序设计语言

C.能执行内部命令

D.能执行外部命令

71红旗Linux用户基础教程

2.超级用户(root)用_____作默认的提示符。()

A$B#C?D!

3.操作符______使用户就可以在后台运行命令。()

A!B&C%D@

4Linux的最原始进程是____。()

A.进程1B.进程0C.进程2D.进程3

5here文档的重定向操作符使用______()

A>>B<>

6.对错误输出设备重定向可以用操作符_______()

A2>B>C>D<

7.管道符是:()

A||B|C<//

8.仅当前一个命令执行出错时才执行后一条命令,需要采取的操作是:()

Acommand1 && command2

Bcommand1 XOR command2

Ccommand1 || command2

Dcommand1 << command2

9command1 && command2 || comamnd3的含义是:()

A.当command1成功,command2失败时才执行command3

B.当command1,command2成功时才执行command3

C.当command1,command2失败时才执行command3

D.当command1失败,command2成功时才执行command3

5章使用vi

本章内容提要

viUNIX/Linux中最为流行的编辑器,几乎可以说每个UNIX/Linux系统都提供了vivivisual的缩写,是一种全屏幕文本编辑器。在虚拟控制台(console)里是最好的文本编辑器之一。

本章重点内容

vi的编辑模式切换和指令模式及其切换

vi基本编辑方法

vi中移动光标

vi中进行删除、复制、放置、修改

vi中的文件指令

☆要求能熟练使用vi

5.1vi的两种模式

在使用vi之前,应该先了解一下vi的基本概念。vi有两种工作模式:编辑模式和指令模式。编辑模式用来输入和编辑文字资料;而指令模式则用来下达一些编排文件、存盘以及退出vi等操作指令。运行vi后,会先进入指令模式,此时输入的任何字符都被视为指令。

vi的指令分为两种:长指令和短指令。长指令以冒号开头,键入冒号后,屏幕最末尾一行会出现一个冒号提示符,等待用户键入后续的指令,输入完后回车,vi就会执行该指令。短指令很像是快捷键,键入短指令时,vi不会给出任何提示,一个指令键入完毕后,vi将立即执行该指令。本章中,所有的长指令前都标有冒号,以和短指令相区分。要从编辑模式切换到指令模式可以使用【Esc】键,如果不能断定目前处于什么模式,可以多按几次【Esc】键,这时系统会发出很难听的哔哔声(除非你的机器没有扬声器)以确定已经进入指令模式。

5.2启动和退出vi

启动vi的方法很简单,只需在vi后面加上要编辑的文件名即可。如果该文件存在,vi将打开该文件,反之vi将建立新文件。如果vi后不跟文件名,则打开一个缓存区,可以让用户写,但是写完之后由于没有文件名,这个文件始终存不了,意义也就不大。

进入vi后屏幕最左列会出现波浪符号,行首有该符号的行就是空行。进入vi时,系统处于指令模式。要退出vi可以在指令模式下键入指令“:q”,指令“:wq”将当前文件磁盘并退出,这两个指令都是长指令。

5.3编辑模式

有好几个指令可以进入编辑模式,这些指令都是短指令,用户只需键入相应的字符即可。

1.新增(append

a从光标所在位置后面开始添加文本,光标后的文本随新增文本向后移动。

A从光标所在行最后面的地方开始添加文本。

2.插入(insert

I从光标所在位置前面开始插入文本,光标后的文本随新增文本向后移动。这项功能和【Insert】键功能相同。

I从光标所在行的第一个非空白字符前面开始插入文本。

3.开始(open

o在光标所在行下方新增一行并进入输入模式。

O在光标所在行上方新增一行并进入输入模式。

vi是一个全屏幕编辑器,用户只要实际操作一下就可以了解这些操作方式。

进入编辑模式后,就可以使用四个方向键、【Ins】、【Del】和【Backspace】等按键进行文本编辑了。

5.4vi基本编辑方法

终端和键盘有许多种不同的类型。与用户使用的PC不同,有些终端没有特定的功能键,如方向键等。在PC上使用vi是很简单的,用户可以利用PC键盘上的各种功能键进行光标的移动、删除文本等操作。而在某些比较简陋的终端中,由于缺少一些功能键,要实现这些操作就必须使用vi提供的各种编辑指令。

虽然多数用户使用的都是PC,但笔者仍然打算简要地介绍一下这些指令。这样做并不是徒劳的,因为读者今后可能会使用不同的终端,更重要的是,telnet程序一般模拟终端VT100,而该终端就没有方向键。

以下列出了vi的一些基本编辑指令。

X删除光标所在字符。

Dd删除光标所在的行。

R修改光标所在字符,r后接着要修正的字符。

R进入取代状态,新增文本会覆盖原先文本,直到按【Esc】键回到指令模式为止。

S删除光标所在字符,并进入编辑模式。

在指令模式下移动光标的基本指令是hjkl,它们自然可以用PC上的方向键来代替,而且无论在编辑模式和指令模式中都可以。

当然PC键盘也有不足之处。有个很好用的指令u可以恢复被删除的文本,而U指令则可以恢复光标所在行的所有改变。这与某些电脑上的【Undo】按键功能相同。

5.5vi高级应用

现在,读者已经了解并进行了一定的实践,vi的基本用法已有一定的掌握,应该可以顺利地利用vi编辑文本了。本节介绍其他一些可以进一步简化操作的指令。

5.5.1移动光标

vi提供了许多移动光标的指令,以下总结了这些指令。

1.基本移动指令

0移动到光标所在列的最前面,对应的功能键是【Home】。

$移动到光标所在列的最后面,对应的功能键是【End】。

Ctrl-d向下半页。

Ctrl-f向下一页,对应的功能键是【PageDown】。

Ctrlu向上半页。

Ctrlb向上一页,对应的功能键是【PageUp】。

2.行间快速移动

H移动到屏幕的第一行。

M移动到屏幕的中间行。

L移动到屏幕的最后一行。

n-减号移动到上一行的第一个非空白字符,前面加上数字可以指定移动到以上n行。

n+加号移动到下一行的第一个非空白字符,前面加上数字可以指定移动到以下n行。

nG直接用数字n加上大写G移动到第n行。

3.行内快速移动

b移动到下个词的第一个字母。

w移动到上个词的第一个字母。

e移动到下个词的最后一个字母。

^移动到光标所在行的第一个非空字符。

fx往右移动到x字符上。

Fx往左移动到x字符上。

tx往右移动到x字符前。

Tx往左移动到x字符前。

;配合ft使用,重复一次。

,配合ft使用,反方向重复一次。

4.全文搜索

/string向后移动到有string的地方,string可以是正则表达式。

?string往前移动到有string的地方。

n配合/?使用,重复一次。

N配合/?使用,反方向重复一次。

5.句间移动

n(左括号移动到句子的最前面,前面加上数字可以指定往前移动n个句子。句子以“!”、“.”、“?”三种符号来界定。

n)右括号移动到下个句子的最前面,前面加上数字可以指定往后移动n个句子。

6.段间移动

n{左括弧移动到段落的最前面,前面加上数字可以指定往前移动n个段落。段落以段落间的空白行界定。

n}右括弧移动到下个段落的最前面,前面加上数字可以指定往后移动n个段落。

只要多实践几次,读者就能掌握这些指令,并且会发现它们可以较大幅度地提高工作效率。vi的这些指令是其他编辑器所不具备的,从这个意义上讲,vi比其他很多编辑器要优秀。其实,使用vi的基于文本的操作指令比使用基于图形界面的操作指令来得方便、快捷,因为填写对话框是很费时费力的工作。

5.5.2高级编辑指令

vi提供了一些非常灵活的编辑指令,这些指令基本上由指令与范围构成。例如dw由删除指令d与范围w组成,代表删除一个词dDeletewWord)。

指令列表如下:

d删除(delete

y复制(yank

p放置(put

c修改(change

范围可以是下列几个:

e光标所在位置到该词的最后一个字母。

w光标所在位置到下个词的第一个字母。

b光标所在位置到上个词的第一个字母。

$光标所在位置到该行的最后一个字母。

0光标所在位置到该行的第一个字母。

)光标所在位置到下个句子的第一个字母。

(光标所在位置到该句子的第一个字母。

}光标所在位置到该段落的最后一个字母。

{光标所在位置到该段落的第一个字母。

这些指令提供了更加灵活的文本编辑能力。值得注意的一点是,删除与复制都会将指定范围的内容放到内存中,然后可以用指令p将它们贴到其他地方去,这是vi实现块复制与块移动的办法。

这些指令其实只是指定范围的方式有点杂,而指令却只有四个。

指令v非常好用,只要按下v键,光标所在的位置就会反白,然后可以移动光标来设定范围,接着再直接下达编辑指令即可。

对于整行操作,vi另外提供了更方便的编辑指令。前面提到的删除整行文本的指令dd就是其中之一;cc指令可以修改整行文字;yy指令可以复制整行文字;指令D则可以删除光标到该行末尾的所有文字。

5.5.3文件指令

文件指令多是以冒号开头的长指令,与编辑指令有所不同。

下面简要介绍一下文件指令:

1:q

结束编辑(quit),如果要放弃对文件所做的修改,应该使用“:q!”指令强行退出。

2:w

存盘(write),其后可加所存盘的文件名。可以将多个文件指令合在一起使用,例如“:wq”的作用是保存文件并退出。

3ZZ(大写)

功能与“:wq”相同。

另外值得一提的是vi的部分存盘功能。可以用“:n,mwfilename”指令将第n行到第m行的文本存放到指定的文件filename中。

有关vi的使用方法只讲这些,内容还有很多。读者不必刻意地去背诵这些指令,只要在使用vi的过程中能够有意地去查一下帮助和使用一下,就一定能很快地掌握这些指令的使用方法。

习题

1.从编辑模式切换到指令模式可以使用______键。(    )

AF2

BSHIFT

CTAB

DESC

2vi中,命令_________从光标所在行的第一个非空白字符前面开始插入文本。(    )

Ai BI Ca DS

3.删除整行文本的指令是_______(    )

Ad Byy Cdd Dq

4.存盘并退出vi的指令是:(    )

Aq! Bq Cw Dwq

6章使用外部设备

本章内容提要

在红旗Linux下,您可以使用各种驱动器、文件系统和网络设备。其中包括Linux分区、DOSMSWindows分区(硬盘驱动器或软盘上的)、ZIPJazz驱动器以及CDROM文件系统。红旗Linux还支持许多并不常见的文件系统。这意味着你可以在Linux下用Netscape下载Windows软件,把下载的软件保存到Windows硬盘分区。

本章重点内容

☆如何使用CDROM

☆使用软盘

☆使用Zip驱动器

☆挂装文件系统

☆使用打印机

☆重点掌握CDROM,软盘Zip,打印机的使用,学会挂装,掌握mount命令红旗Linux用户基础教程

6.1使用CDROM

使用mount命令可以把CD中的所有目录和文件加入到Linux目录树中。挂装CDROM的命令如下,该命令需要以root身份执行。

#mountCDROM:

#mounttauto/dev/cdrom/mnt/cdrom

如果命令生效,光盘中的内容将出现在目录/mnt/cdrom下。下面介绍该命令的工作原理。

它通知操作系统自动探测(选项“-tauto”)文件系统并安装它。被安装的设备为/dev/cdrom,安装点(安装到的目录)为/mnt/cdrom。这一目录必须已经存在并为空。如果它不存在,那么就需要使用如下命令进行创建:

$mkdir /mnt/cdrom

如果安装命令失败,则要确认/dev/cdrom设备存在。如果使用的是IDECDROM,对应的设备文件名可能是/dev/hdb/dev/hdc或者/dev/hdd。如果使用的是SCSICDROM,对应设备文件名可能为/dev/sda1/dev/sda2hda是第一IDE主驱动器,hdb是第一IDE从驱动器,hdc是第二IDE主驱动器,等等),hdd是第二IDE从驱动器;sda是第一SCSI接口,后面所接数字是SCSI驱动器id号。

假设/dev/cdrom不存在,而CDROM设备文件名为/dev/hdb。用户可以使用如下命令创

建一个到文件/dev/cdrom的符号链接。

$ln -s /dev/hdb/dev/cdrom

如果系统提示“设备已经安装(mounted)或目录忙”,可能是由于用户的当前目录是在安装点目录/dev/cdrom或者子目录中而造成的。此时必须切换到其他目录才能进行。

umount(卸载)一个已经安装上的CD,需要退出/mnt/cdrom目录,并以root身份输入如下命令:

#umount/dev/cdrom

如果CDROM没有能够成功卸载(umounted),光盘就无法被取出。

6.2使用软盘

安装软盘的命令如下:

$mount -t auto /dev/fd0/mnt/floppy

在安装时,首先要确认/mnt/floppy目录存在并为空,并且/mnt/floppy不能是系统中何用户的当前目录。

成功安装后,软盘的文件出现在/mnt/floppy目录下,这些文件对所有用户可读,但只有root才可以修改、删除这些文件。

卸载软盘的命令如下:

$umount/mnt/floppy

注意:在卸载软盘时,当前工作目录不能是/mnt/floppy或其子目录。

6.3使用Zip驱动器

安装SCSI仿真并口扩展Zip驱动器的命令如下:

$mounttvfat/dev/sda4/mnt/zipdrive

使用“-tvfat”选项是因为Zip驱动器事先已经格式化为vfat文件系统,这一文件系统属于Windows文件系统,支持长文件名。卸载Zip驱动器的命令为umount。如果不卸载,盘片将无法弹出。Linux系统支持除USB之外的所有Zip驱动器(内置SCSIIDE,外置SCSI和并口)。

6.4让系统识别并行端口Zip驱动器

如果Zip驱动器安装不成功。则在安装结束后,应该使用以下命令把并行端口zip驱动器模块加载到内核中:

$/sbin/insmod parport

$/sbin/insmod ppa

为了让上面的指令在每次系统启动时自动执行,应该将其加在文件/etc/rc.d/rc.local结尾。该文件类似DOS下的autoexec.bat文件。如果系统仍然不能识别,应该编辑文件/etc/modules.conf,例如下面是文件/etc/modules.conf的示例行。

alias parport_lowlevel parport_pc

6.5自动安装(mount)功能

用户也可以使用自动安装功能。自动安装(automount)将在用户访问一个文件系统时自动安装它,并在停止访问时卸载它。

首先要以root身份运行setup命令,选择netsysv,确认自动安装服务。

接下来需要编辑automount的配置文件/etc/auto.master/etc/auto.misc,例如:

$pico/etc/auto.master

/misc/etc/auto.misc --timeout 1

该文件指明自动安装设备将被安装到/misc目录,此目录必须存在并为空。timeout字段指定了自动安装设备将在停止使用后一秒内自动卸载,该时间值可以任意设置。配置文件是/etc/auto.misc。该文件示例如下:

kernel -rosoftintrftp.kernel.org:/pub/linux

cdrom -fstype=autoro:/dev/cdrom

floppy -fstype=autorw:/dev/fd0

zipdrive -fstype=vfatrw:/dev/sda4

dosdrive -fstype=vfatro:/dev/hda1

hacker_cdrom-fstype=nfsrohacker:/mnt/cdrom

hacker_floppy-fstype=nfsrwhacker:/mnt/floppy

hacker_usr-fstype=nfsrohacker:/usr

6.6设置32I/O硬件驱动器

打开32I/ODMA只能由root执行。为了减小出错重启时对文件系统的损害,最好以单用户模式进行。

例如,要在第一IDE硬盘hda上激活32I/O,可以用下面的命令首先检查硬件驱动器的I/O情况。

$hdparm -t /dev/hda

如果要显示当前I/ODMA配置,命令分别如下:

$hdparm -c /dev/hda

$hdparm -d /dev/hda

开启32I/ODMA的命令如下:

$hdparm -c 1 /dev/hda

$hdparm -d 1 /dev/hda

让配置生效的命令如下:

$hdparm -k 1 /dev/hda

如果要使新的设置在每次重新启动系统时生效,应该在文件/etc/rc.d/rc.local结尾加入下面的命令:

hdparm -c 1 -d 1 -k 1/dev/hda

在执行上述操作以后,硬盘的性能就可以有大幅度提高。

6.7使用打印机

Linux是一个多用户系统,因而它的打印比较复杂。本节主要讲述Linux下打印机的安装\工作的原理、打印命令和KDE中提供的关于打印工作的管理和配置工具。

6.7.1安装远程打印机

如果要安装一个远程打印机,应该确认自己的主机有权使用远程打印机。权限设置定义在/etc/host.lpd(较安全)或/etc/hosts.equiv(较不安全)中。这些文件简单地列出了主机名称,每一行定义一个主机。例如:

hacker

mars

要快速查看主机中的打印信息,可以查看文件/etc/printcap

$cd/etc/

$cat printcap

下面是文件/etc/printcap的示例。

#LOCAL

djet500lp:\

:sd=/var/spool/lpd/dj:\

:mx # 0:

:lp = /dev/lp0:\

:sh:

其中,“:”为字段分隔符,“\”表示行尾,继续接下一行。djet500lp为打印机名称。sd参数行指定的路径/var/spool/lpd/djspool目录。mx#0为打印作业最大长度,以块为单位,“0”代表无限制。sh说明进行头部压缩。打印头部是打印工作前带有用户名字及信息的打印页。lp=/dev/lp0为本机设备名。/dev/lp0是红旗Linux2.0第一并行端口的设备文件。if=/var/spool/lpd/lp/filter为输入过滤程序名称,打印作业在送往打印机前先过滤。

6.7.2Linux下的打印工作

DOS下,用户常常使用直接向打印机输出的方法来打印。也就是用户直接控制打印程序,完成打印操作,这种方法实现起来比较简单。但是由于DOS仅仅是单用户的操作系统,运行情况比较简单,处理问题才会如此容易。而Linux被设计成一个多用户的操作系统,必须考虑多个用户同时进行打印时,对打印机资源进行竞争的情况,因而比较复杂。在Linux中打印工作有一套较为复杂的机制,下面将对其进行介绍。

1.假脱机

Linux采用了假脱机(spooling)的打印方法。即当用户打印一个文件时,打印文件的输出并不直接输送到打印机上,而是先送到一个“spool”目录下,然后由一个负责打印的后台进程把这些数据再送入打印机。这样做避免了多个用户的打印作业之间的互相干扰,可以说是Linux系统对打印作业进行统一的管理和调度。

2.打印缓冲区目录

spool”目录称为缓冲区目录。Linux中有许多有缓冲区的进程,负责打印的进程lpd在“spool”目录下有自己的缓冲区。红旗Linux在安装时设置的打印缓冲区目录是/var/spool/lpd”,要打印的数据在被打印之前先送到这里。通常每一台打印机在缓冲区目录下都有一个与这台打印机同名的打印机目录,该目录中专门存放关于该打印机的文件。例如,系统以“/var/spool/ipd”作为系统的打印缓冲区目录,一台叫“hp”的hp4L激光打印机所拥有的打印机目录便是“/var/spool/lpd/hp”。

3.打印机守护进程

Linux中负责后台打印文件操作的是一个名为lpd的打印机守护进程,它在系统启动后便被激活,经常扫描打印缓冲区以查看有无需要打印的新文件。如果存在新文件,就按先进先出的顺序打印缓冲区中的文件。

4.网络打印

Linux系统中使用的打印机可以是本地打印机,也可以是网络打印机,还可以是UNIX主机上的打印机上或连在Windows服务器(只要提供Samba/LAManager服务)上的打印机。只要给出正确的服务器节点名称和打印机的名称,并进行了正确的网络通讯协议的配置,就可以将网络上的打印机像本地打印机一样对待。

5.打印配置文件

Linux系统中将对打印机的配置放在了“/etc/printcap”文件中,这是一个文本文件,如果用户以“root”身份登录系统的话,可以直接编辑这个文本,在这里可以设定打印机的名称、使用的设备(并口)、所用的打印缓冲区目录等。对于网络打印机,还要指定打印机所属的计算机名称。

6.7.3命令行方式下的打印操作

Linux系统提供了一组有关打印的命令。一般情况下,打印命令使用默认打印机。默认打印机是由PRINTER环境设定的。用户也可以在命令行上指定要使用的打印机。

1lpd命令

lpd命令是假脱机打印命令。该命令将打印作业放到打印缓冲队列中,并向lpd守护进程发送消息,提出打印请求。Lpd扫描“/etc/printcap”文件,查询打印对应的缓冲区目录,然后由lpd控制打印,将需要打印的数据从缓冲区送到打印机上进行打印。

lpd命令的格式为:

lpd[-P printer][#num][数据格式选项][其他选项][name]

命令中各选项的含义如下:

-p:指定打印机。如果不用此选项,则使用默认打印机或环境变量PRINTER指定的打印机。

-m:打印完毕后发送e-mail

数据格式选项:对于要打印的文件,指定文件数据的格式,便于lpd进行处理和转换。默认情况下,认为是标准的文本文件。详细情况请参见lpd的帮助。

-#num:打印文件的份数。

name:打印文件名。

2lpq命令

lpq是缓冲队列检查命令,它通过lpq在缓冲区中检查打印文件,报告指定作业的状态或指定用户的作业。Linux中将每一个打印任务称为一个作业,为它分配一个作业标识号(作业ID),标识一个特定的作业。

Lpq命令的格式为:

Lpq[-l][-p printer][jod#][user…]

命令中各选项的含义如下:

-p:指定一个打印机,否则使用默认打印机。

l:打印作业队列中的所有文件的信息。

Jod:需要查询的打印作业号。

User:指定用户名,查询他的打印作业。

上述参数和选项可以组合使用,以明确查询所要换的打印作业。

对提交的每一个作业,lpq报告用户名、在队列中的级别、组成作业的文件、标识号以及总的打印数据的多少等信息。不带任何参数的lpq命令显示现在队列中的所有作业。

3lprm命令

lprm命令用于从缓冲队列中删除打印作业。用户可以使用该命令从缓冲队列中删除属于自己的一个或多个打印作业。

Lprm命令的格式为:

lprm[-p printer][-][jod#][user…]

命令中各选项的含义如下:

-p:指定一个打印机,否则使用默认的打印机。

-:删除用户所有的打印作业。

User:删除队列中属于用户“user”的作业(只有超级用户可以这样做)。

jod#jod是作业号,通过指定作业号“#”删除某个打印作业。

例:如果刚刚提交了若干个文档去打印,忽然发现其中有一个文档需要修改,必须取消对该文档的打印,如何操作呢?

1)执行“lpql”命令,如果使用用户名和打印机名作进一步的限制更好。之后从该命令的输出结果中可以查询到所要找的文件,记住它的作业号。假设该文件作业名为“job”。

2)然后,执行“lprmjob”,其中“job”是该作业的作业号,便可以从打印队列中删除对该文件的打印。

6.7.4KDE中打印机的操作和管理

在红旗LinuxKDE环境下,提供了两个图形化的配置和管理工具:printCfgKlpq,使用它们可以完成一般的打印任务。

1.打印机配置(printCfg

printCfg是红旗Linux控制中心的组件之一,它可以完成以下的管理和配置的任务。

增加打印机

增加系统中可以使用的打印机,有3种类型可供选择:Local(本地打印机),Remote(远端UNIX),SMBsamba/LANManager打印机)。此外,还可以为本地打印机指定厂商和类型等参数,从而使用在系统中安装过的驱动程序。

删除打印机

将不可修改打印机的配置从系统中去掉。

修改打印机配置

可以修改打印机的配置参数,包括打印机的队列名、缓冲区目录、打印机参数、网络参数等。

2.显示打印队列(Klpq

启动Klpq的菜单命令可以在主程序菜单下找到。Klpq是集成了lpqlpqrm和其他管理打印任务的命令所具有的功能,为系统管理员提供了一个集中管理打印作业的工具。通过它可以显示出当前系统中正在执行的打印作业,可以将不想要的打印作业删除,还可以改变打印作业在打印队列中的先后次序。

6.8配置和使用声卡

用命令sndconfig会弹出配置声卡的对话框,根据提示即可完成配置。如果sndconfig不能正确配置您的声卡,可以启动alsaconf来配置。要了解更多的信息,请参见附录配置和使用声卡的进一步讨论。

6.9使用外设的若干常见问题

1.如何让内核检验到两块网卡?

当有两块网卡时,在lilo.conf里加上:append="ether=0,0,eth1"

当有三块网卡时,则为:append="ether=0,0,eth1eth0,0,eth2"

当然这是不知道网卡ioirq的情况下这么设的,如果知道,一般采用ether=#irq,#io;

2.为什么不能看到Windows CDROM的长文件名?

如果您有一片CDROM,上面有Windows可看到,但Linux看不到长文件名,那么这片光盘可能使用Microsoft专属的Joliet文件系统格式。Microsoft制定了一种叫JolietISO CDROM文件系统延伸格式。它允许使用16-bitUNICODE编码的长文件名。从2.0.34版核心起,Linux核心已支持MicrosoftJoliet文件系统格式。必须在核心中启用它。如果要用使用的语言(nativelanguage)正确地显示在JolietCDROM上的文件名,也需要在核心中支持相应的NLSISO8859字元集。

3.在CD上有隐藏文件,没办法读有些CD的一些文件设定为隐藏。这些文件正常状态是看不到的。不过如果您挂装时使用了“unhide”选项,那么就可以读取了。

4.装好Linux后,CDROM不能用了最常见的症状是先用Linux安装时,Linux承认您的CDROM。但装完后,从软盘或硬盘开机却又不能用它了。

最大的可能就是多数Linux套件中,装在硬盘的核心不一定和安装片用的一样。您选了支持您设备的安装片,在硬盘上安装的却是不支持CD-ROM的“通用版”核心。

解决方法是重编译核心,确定您需要的CD-ROM驱动程序及其他需要的部分(如SCSI卡,ISO-9660文件系统)都编进去了。

如果安装时用了命令列参数(如“hdc=cdrom”),要把它加进开机载入程序的设定文件中(通常是/etc/lilo.conf)。

5.关机时,为什么光驱托盘自动退出来?

sbpcd驱动程序支持在卸下盘片时自动退片的功能。在旧版核心中这也是预设值。如果您下了关机指令,那么挂上的CD就会被卸下,然后就会退片。

这样在换片时就会很方便。如果在托盘打开状态下挂上或读取CD,那么它也会自动进片。

有时这项功能会造成问题(如cdplayworkbone)。在1.1.60版核心中您可以用软件决定要不要用这功能。有一个例程序包含在sbpcd的文件里。(或者用[52]eject程序)。可以通过修改核心源代码sbpcd.h文件,改变预设的行为。

6.没有root身份的人,如何挂上及卸下光驱

多数mount命令支持user选项。假设在/etc/fstab里加入了这样一行:

/dev/sbpcd  /mnt/cdrom iso9660 user,noauto,ro

那么普通使用者就可以像下面这样挂上或卸下这台机器的资料:

%mount /mnt/cdrom

%umount /mnt/cdrom

挂上程序将会加上一些额外选项以确保系统安全,例如:程序不准执行,盘片上的设备文件将失效(不予理会);如果这些限制过严了,您可以加入额外的选项(如“exec”选项可以让上面的程序可执行)。

另一个办法就是使用usermount软件。它允许非root的使用者挂上或卸下可移除设备,如软盘及CDROM等,但限制对其他设备的动作(如硬盘分区)。

ftp.cdrom.com里有mount.c的源代码,允许一般使用者挂上或卸下CDROM

setuid是指将执行文件执行时的权限变成和文件所有人相同。普通执行文件执行时,权限是执行者的权限,这样的话很多程序都不能跑。如:用户不能修改/etc/passwd,所以不能变更密码。而如果setuid,该文件又是root所有,这种执行文件就有root权限了。像passwd程序就是靠这个改密码的。不过setuid反过来也可能是系统安全的主要漏洞。

习题

1.上述命令执行之后,Linux报告出错信息,则可能的原因是:()

A/mnt/cdrom不存在

B/mnt/cdrom为空

C/dev/cdrom设备不存在

D.当前目录是安装点/dev/cdrom

2$mounttauto/dev/fd0/mnt/floppy命令执行成功后:()

A.软盘的文件出现在/mnt/floppy目录下

B/mnt/floppy目录下的文件对所有用户可读

C/mnt/floppy目录下的文件对所有用户可写

D/mnt/floppy目录下的文件对所有用户可执行

7章多用户管理及用户安全

本章内容提要

要求掌握添加用户和用户组,删除用户和用户组,配置用户和用户组权限,掌握限制用户对主机使用的方法,了解PAM

当一台计算机为多人所用时,通常需要区分用户,例如,使个人文件保持个人化。即使计算机只为一人所用,这一点也很重要。因此,每个用户拥有一个单独的用户名,这个名字用于登录。

本章重点内容

☆用户管理

☆用户组管理

☆用户安全

7.1用户类别

标准用户:

也可以称之为普通用户。对普通用户来说,他在硬盘上可以进行写操作的地方可能只有自己的主目录。它位于“/home/用户名”下。其中/home目录保存所有用户文件,包括用户设置程序、配置文件、文档数据,netscape的缓存文件以及用户邮件等等。普通用户仅仅可以在自己的主目录下创建新的子目录来组织自己的文件,并且在没有赋予其他用户普通用户权限的情况下,其他用户是无权读写您主目录下的内容的。除了自己的主目录外,普通用户可以查找﹑读﹑执行系统内其他目录中的文件,但是一般情况下他们不能修改或移动这些文件。

标准用户组:

标准用户组是由很多标准用户组成的一个组。在系统中可以有很多个标准用户组。在同一个标准用户组内的用户可以具有小组的存取许可权限,可以使用组内的共享文件。

私有用户组:

该用户不属于任何一个现有的标准用户组,或者有的用户可能时常需要独自为一个小组;有的用户可能有一个SGID程序,需要独自为一个小组。这些用户可以称之为私有用户。由他们所构成的组称为私有用户组。

7.2用户管理

7.2.1添加用户

这里介绍三种方法:

1.用useradd命令,

注意执行完毕也需要执行passwd username

例:

useradd lxh

passwd lxh

下面输入lxh的密码并确认。

2vi/etc/passwd

加入下面一行:

用户名:密码:UID:GID:用户全名:用户HOME目录:用户的Shell

比如:

test::500:500:TestUser:/home/test:/bin/bash

注意:

1)密码一定什么也不填。

2)用户的HOME目录一定要存在,不然用户无法登陆。

3UID不要和其他用户的相同。

4)如果密码是经过shadow的,需要执行一下pwconv,以便把新加的密码转换成正确的合适。并更新/etc/shadow,然后需要执行passwdUSERNAME,以设定用户密码。

3.用红旗Linux linuxconfuserconf

思考:如何创建无密码用户呢?

可以使用passwd -d USERNAME命令完成之。USERNAME用实际的用户名代替或者

编辑/etc/passwd文件,把该用户对应行的第一个冒号和第二个冒号之间的部分删除。如果有

/etc/shadow文件存在,也需要做与对/etc/passwd文件相同的操作。

7.2.2权限设置

1.用户权限需求分析

红旗Linux采用了将管理员和普通用户分开的策略。这种策略保证了系统的健壮性,同时也使红旗Linux下的病毒难以编写(用户编写的程序仅对自己的目录有写权限,而与操作系统的其他部分是隔离开的)。

首先必须对用户设置访问与加入的口令,其中包括普通用户口令、组口令。如果以超级用户注册的话,还有超级用户的口令。口令是用一个单向加密算法加密的,并且将加密结果保存在文件/etc/passwd中。而原始口令并不保存。

对于普通用户的权限,只能在自己的主目录下创建新的子目录来组织自己的文件,如果在别的普通用户没有授予他用户权限的情况下,他无权读写其他用户主目录下的内容。不过可以查找﹑读﹑执行系统内其他目录中的文件,只是不能修改或移动这些文件。

同时对于标准用户组以及私人用户组内的安全,以及组内用户的读写、以及程序的运行权限都需要进行设置。此外,还应该有超级用户的权限的操作命令。

2.权限设置方式

建立用户

首先来介绍普通用户的建立。超级用户root可以创建新的用户账号,例如下面的命令将建立一个名为joe的新用户:

#adduserjoe

#passwdjoe(键入joe的口令)

设置及修改口令

系统管理员可以通过配置程序来设定口令的安全策略,例如您可以以root身份启动linuxconf实用程序:#linuxconf。在菜单【useraccount】→【policies】→【password & account

policies】下配置口令。root可以在不知道用户当前口令的前提下,修改任何一个用户的口令。注册时键入的口令被一个单向加密算法计算,并将结果与保存在/etc/passwd中的值进行比较。正确的话,用户就可以登录系统。

用户在第一次注册时,可修改自己的口令命令,如下所示:

$passwd

(current)Unix Password[键入老的口令字]

New Unix Password[键入新的口令字]

Retype New UNIX password[再一次键入新的口令字]

出于安全考虑您键入的口令是不会回显在屏幕上的。

如果普通用户忘记了自己的口令,可以让root修改该用户的口令。例如要修改用户susan的口令,命令如下:

#passwd susan

该命令将提示输入用户susan的新的口令,它不需要输入旧的口令来确认。

此外,如果在/etc/passwd中有的口令项前有*号,这意味着此账号暂时不可用。当您想恢复这一账号时,只要删除这个星号,这个账号就可以用原来的口令注册了。

3.文件的访问权限的设置

可以用“lsl”命令显示任何文件所有者和所有者组。(“-l”选项表示以长格式显示)。

例如执行如下命令:

$ls -l junk

-rwx----- -1 yogin inca 27 Apr 24 14:12 junk

将显示文件junk的所有者为yogin,所有者所在组为inca。一般说来只有文件的所有者和root才能删除该文件(其他用户只有被授予了相应权限后才可以删除)。

文件的所有者可以通过命令chown改变所有者和chgrp改变所处的组。不过这些命令通常是root使用的,例如执行以下两条命令权限:

#chown peter junk

#chgrp peter junk

显示改变为

$ls -l junk

-rwx----- -1 peter peter 27 Apr 25 20:27 junk

将文件junk的所有者由yogin变为peter,所有者所在的组由inca变为peter

可以使用命令chmod修改您所有的文件的权限,用以下命令:

$chmod a+r junk

a”表示所有的用户,此外还可以用“u”“g”或“o”,其中“u”表示文件所有者,“g”表示同组用户;“o”表示其他用户。

+”代表增加,此外还可以用“-”(表示禁止)、“=”(设置某个权限)。“r”表示可读,此外还可以设置“w”(可写)和“x”(可运行)权限。除了使用字母“r”“w”和“x”设置权限,您也可以使用数字代替。其中读(read)的权限值为4;写(write)的权限值为2;执行(execute)的权限值为1。所以4代表“只读”,5代表“读和执行”,6代表“读和写”,7代表“读写和执行”。例如命令:

$chmod 666 junk:将会给所有用户读和写的权限;

$chmod 411 junk:赋予文件所有者读权限,对同组用户和其他用户赋予执行权限。

修改新建文件的默认文件权限,命令如下:

$umask u=rwx g= o=

它会在创建新文件时,给文件所有者以全部权限,而同组用户及其他用户没有任何权限。在umask中的数字设置方式与chmod命令相反,它代表的是要禁用的权限。因此umask 000会给全部用户赋予新创建文件的全部权限,而命令umask 077会给文件所有者全部权限而其他人什么权限也没有。

7.2.3删除和查封用户

删除一个用户必须:

1)删除/etc/passwd文件中此用户的记录。

2)删除/etc/group文件中提及的此用户。

3)删除用户的主目录。

4)删除此用户创建或属于此用户的文件。

userdel命令删除用户及其主目录。

例:删除用户lxh及其主目录

userdel -r lxh

此用户相关的文件如邮箱和crontab文件,必须手工删除。下面的命令:find/-user username -ls,可以迅速找到与某用户相关的文件。

注意:使用该命令的时候,/etc/passwd文件中必须有username的记录。如果已经删除了用户username,则换成如下的格式:find/-uidnumls.num是已经删除了用户的UID

临时查封一个用户有两种方法:

1)把用户的记录从/etc/passwd中去掉,保留主目录和其他文件不变。

2)在/etc/passwd(或/etc/shadow)文件中在该用户的passwd域的第一个字符前面加上一个“*”。

例:临时查封用户lxhlxh:*gERo4lxhBzleUc:10084:0:180:7:::

7.2.4超级用户

1.超级用户的权限

超级用户属于系统指定的特殊用户,通常也称为root用户。一些系统管理命令只能由超级用户运行。超级用户拥有其他用户所没有的特权。对于root用户,权限上没有任何限制,它不仅可以读、写或者删除系统中的任何文件而且可以修改文件的权限以及所有者。

此外root用户还可以运行一些特殊的程序,如给磁盘分区,建立文件系统等。系统管理员通常使用命令:/bin/su或以root进入系统从而成为超级用户。

2.超级用户的管理

系统管理员以root账户登录到系统中,可以完成普通用户不能完成的任务。由于root能够作任何事情,因而在这个账户下,很容易由于操作失误而造成灾难性的后果。作为一般的用户,如果不小心使用了删除etc目录中所有文件的命令,系统将不允许您这样做。但是对于以root账户登录的用户,系统将对其操作不加任何限制,因此使用root账户时,稍有不慎就容易导致系统的崩溃,因而为了避免事故,需要对超级用户的使用进行有效的管理,较好的方法是:

在多用户系统下不让普通用户通过root账户登录,只允许系统管理员以root登录。可以通过口令设置来实行。

root账户提供一个不同于普通用户账户的提示符。这时需要修改root账户下的.bashrc.login文件,把Shell提示符设置成不同于普通账户的提示符。

只有在完全必要的情况下才使用root账户登录。一旦作为root用户完成所需工作,就及时推出。使用的root账户越少,对系统造成损害的可能性就越小。

不要习惯使用root账户。因为习惯在root账户中操作,就有可能将root中的权限和普通用户的权限混淆,从而导致不必要的损害。如,在某个用户名下,用户自以为是普通用户时,可能实际上是以root用户登录。

3.使用su命令改变身份

用户在使用过程中可以随时使用susetuser的缩写)命令来改变身份。例如,root账号一般用于系统管理,使用root账号时必须特别小心以防损坏系统。因此,管理员在平时工作时可以用普通账号登录,而在进行系统维护时用su命令获得root权限,维护完毕后再用su切回原账号。更为重要的是,考虑到系统安全问题,红旗Linux系统默认不允许以root身份进行远程登录(telnet),如果管理员要从客户机上进行远程管理,就必须先以普通用户登录,然后再用su获得root权限。

su的用法如下:

#su [username]

username是要切换到的用户名,如果省略usernamesu默认将用户身份切换至root,当然需要给出正确的密码。只有root用户使用su时才不需要密码。

4.找回root口令

root口令丢了,完全没必要重装。解决办法:用红旗Linux启动盘启动,进入到安装状态,然后把文件系统mount到一个目录里,如/mnt里,随后修改/etc/passwd即可。或者干脆在lilo出现的时候,输入linuxsingle(或者是singlelinux)登陆进去以后,改/etc/passwd中的root密码就可以。

7.3用户组管理

Linux系统中,每个用户账号都至少属于一个用户组,每个用户组可以包括好多个账号。属于同一用户组的用户享有该组共有的权限(主要是文件使用权限)。例如,管理员可以创建game用户组,使该组中的用户都具有运行系统中游戏程序的权利。

7.3.1用户组的实例

在用户较多的大型系统中,使用用户组可以方便管理。有关用户组的信息存放在/etc/group文件中,下面给出一个group文件的内容:

root::0:root

bin::1:root,bin,daemon

daemon::2:root,bin,daemon

sys::3:root,bin,adm

adm::4:root,adm,daemon

tty::5:

disk::6:root,adm

lp::7:lp

wheel::10:root

floppy::11:

rootmail::12:

mailnews::13:

newsuucp::14:

uucpman::15:man

users::100:games

nogroup::-1:

group文件的内容和passwd文件的格式很像,group的每一行记录了一个群组的资料。

每个群组的资料包括四个栏位,以“:”隔开。它们分别是:

群组名称

该群组名称,如rootbin

群组密码

设置加入群组的密码,大部分的情况下是不使用群组密码,所以这个栏位通常没有作用。

GID

群组号码,就像用户一样,群组也有自己的号码供系统识别,且每一个群组的号码一定不会相同。

群组成员

这一栏记录了属于该群组成员,在大部分用户的个人群组这一栏是空的,您可以按照需求将用户加入某群组成为该群组的成员。

7.3.2将用户添加至用户组

要将一个用户账号添加到某一工作组中,只需要修改group文件,将其用户名添加到该组的users列表中即可。

7.3.3添加用户组

使用groupadd命令添加用户组:

#groupadd[option]group

如命令sgrgupaddkpk即是在系统内新增名为kpk的群组。

7.3.4删除用户组

将群组由系统内删除。

语法:

groupdel group

例:使用groupdel命令删除用户组:

#groupdel

7.3.5设置群组密码

gpasswd可用来设置群组密码的指令。但一般情况下,使用群组密码的情况并不多,而这个命令用来管理组内的用户倒很方便,gpasswd可以把用户加入群组,可以从群组内删除。

这个指令只有root或是群组的管理员有权使用。

语法:gpasswd[option][user][group]

参数说明如下所示。

-a:将用户user加入group群组。

-d:将用户usergroup群组里删除。

-r:取消群组密码。

例:将用户kpk加入到kapak群组内。

$gpasswd -a kpk kapak

7.3.6修改群组记录

groupmod指令修改在/etc/group文件中的资料。

语法:groupmod[options]group

选项的说明如下所示。

-gGID:更改群组号码。

-nname:更改群组名称。

-o:强制接受更改的群组号码为重复的号码。

例:将群组kapak更名为kpk

$groupmod -n kpk kapak

7.3.7在用户组间切换

一个用户可以分属于不同的用户组,用户可以使用groups命令来查看自己属于哪些用户组:

#groups[username]

username是要查看的用户名,如果省略则查看自己所属的用户组。下面的命令查看root账号所属的工作组:

#groupsroot

root : root bin daemon sYs adm disk wheel

Linux系统规定,任何用户在任意时刻只能属于一个用户组,也就是说,在同一时刻只能享有一个用户组的权利。当用户登录时,他所属的工作组由passwd文件中的GID字段指定。

使用newgrp命令在所属的用户组中切换,使用方法如下:

#newgrg [group]

group参数给出欲切换到的目标用户组,如果没有给出该参数,则切回登录时所在的工作组。

7.3.8用户组权限需求分析

出于安全的要求。用户组必须保证组内的用户可以访问到组内的共享文件,而非组内的成员没有经过允许不能访问组内的信息。因此必须设置一个组的访问口令。

文件存取的权限

设置组内的用户或者是组外的用户对于文件的存取权限。

用户组的安全权限的设置

可以设置一个组的口令。

组内用户的权限设置

首先采用以下命令,可以查看文件的读写信息。

$ls -l文件名

可能会显示以下的信息:

-rwxrwxrwx

跳过第一个“-”(如果为“d”,则代表其为一目录),其中前三个字母代表文件所有者的权限,第二组三个字母代表与所有者同组人的权限,第三组为其他用户的权限。如果没授予相应权限则以“-”替代权限。上述信息表明该文件对所有用户(所有者;同组;其他人)都具备所有的权限(读、写、执行)。

利用命令“$chmod 411文件名”可以赋予用户对文件的读写以及执行的权限。例如:

$chmod 411 junk

上述命令赋予文件所有者读权限,对同组用户和其他用户赋予执行权限。

此外,文件的所有者可以通过命令chown来改变所有者和chgrp改变所处的组。但是这些命令通常是root(超级用户)使用的。

7.4用户安全

Linux是多用户的操作系统,如果一个人想运行并操作Linux的话,就必须在系统中拥有一个合法的用户账号。现在读者应该至少已经拥有了两个账号,一个是root,另一个则是在安装时设定的。为了使其他人也能够使用自己的Linux,应当为他们建立账号。

注意:只有root超级用户才能管理用户账号,因此请读者在管理账号前以root身份登录。

为了管理多用户的权限,维护系统的安全,首先应该以root身份登录。最简单的管理用户的工具是红旗usercfg/x、红旗usercfg,还有另外一些命令行的管理用户工具:useradduserdelusermodusersgroupaddgroupdelgroupmodgroups。您一定想知道系统的密码系统是怎样操作的吧,现在可以来研究一个文件——/etc/passwd

7.4.1多用户访问权限控制

Linux是一个多用户的操作系统,所以它的安全和保密性是十分重要的。Linux把系统的使用者分为两种:超级用户和普通用户。超级用户用“root”名注册进入系统,他对文件的操作不受限制。普通用户对文件的操作则受到文件存取权限的限制。

文件权限是由一个十位的二进制数组成。这十位数分为四段,第一段是第一位,以后的每三位是一段。其中第一段标志该文件的类型。文件类型与其标志的关系如表7-1所示:

7-1文件类型与标志

文件类型 标志

普通文件 -

块设备文件 b

字符设备文件 c

连接文件 l

目录文件 d

套接字 s

命名管道 p

第二段是文件的所有者对该文件的存取权限。Linux给文件三种类型的存取权限:“r”,“w”,“x”,即“读”,“写”,和“执行”权限。对于文件来说是:读文件的内容(r)、写数据到文件(w)、作为命令执行该文件(x)。对目录文件的读,写,执行权限,又与普通文件的有些不一样。对目录文件的读权限表示允许查看目录内容;对目录文件的写权限表示允许在目录中建立新文件和子目录;对目录文件的执行权限表示允许用户使用cd命令转到指定目录。

第三段是该文件所有者同组的用户对文件的权限。同组用户是指与该文件所有者有关系的用户,如:同一个开发小组的用户。

第四段是其他用户对该文件的权限。其他用户一般指与文件所有者无关的用户。

文件权限如图7-1所示:

标志位 所有者 同组用户 其他用户

-bcldsp rwx rwx rwx

7-1文件权限

对每个文件或目录都有4类不同的用户。每类用户各有一组读、写和执行(搜索)文件的访问权限,这4类用户分别是:“超级用户”,“文件所有者”,“同组用户”,和“其他用户”。“超级用户”自动拥有了所有文件和目录的全面的读、写和搜索的权限,所以没有必要明确指定他们的权限。后三种类型的用户权限的大小是逐渐降低的,“所有者”权限最大,并由他决定“同组用户”和“其他用户”的权限。对应这三种用户,文件权限对应位置上出现的字母表示该用户拥有的权限,没有哪一种权限,就在该位置上用“-”符号代替。

如:某个文件的权限为:“-rwxr-xr--”表示该文件是普通文件,文件的所有者对文件有“读”,“写”,“执行”权限;所有者的同组用户对该文件有“读”和“执行”权限;其他用户对该文件只有“读”权限,不能写,也不能执行。

在一个新文件被创建后,就有一个默认的权限,一般为“-rw-r--r”就是说文件所有者可以读写该文件,同组用户和其他用户只能读文件。同时,还可以使用下面的命令检查新建文件的默认存取权限:

umask -s

7.4.2口令安全

在任何一个Linux系统中,都有一个passwd文件,它存放在/etc目录下。这个文件存

放着所有用户账号的信息,包括用户名和密码,因此,它对系统来说是至关重要的。读者

可以使用如下命令查看该文件:

#cat/etc/passwd

下面是一个passwd文件的内容:

root:sWMrPGa52GO1Y:0:0:root:/root:/bin/bash

bin: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:

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:

news:x:9:13:news:/var/spool/news:

uucp:x:10:14:uucp:/var/spool/uucp:

operator:x:11:0:operator:/root:

games:x:12:100:games:/usr/games:

gopher:x:13:30:gopher:/usr/lib/gopher-data:

ftp:x:14:50:FTPUser:/home/ftp:

nobody:x:99:99:Nobody:/:

arp:GFcoDv58s4YYg:500:500:user:/home/somebody:/bin/bash

读者可以看到rootarp等账号。

Passwd文件由许多条记录组成,每条记录占一行,记录了一个用户账号的所有信息。

每条记录由7个字段组成,字段间用冒号“:”隔开,其格式如下:

username:password:UserID:GroupID:comment:homedirectory:Shell

各字段的涵义是:

1username:用户名,它惟一地标识了一个用户账号,用户在登录时使用的就是它。

2password:该账号的口令,passwd文件中存放的密码是经过加密处理的。Linux的加密算法很严密,其中的口令几乎是不可能被破解的。盗用账号的人一般都借助专门的黑客程序,构造出无数个密码,然后使用同样的加密算法将其加密,再和本字段进行比较,如果相同的话,就代表构造出的口令是正确的。正因为如此,笔者才建议读者不要使用生日、常用单词等作为口令,它们在黑客程序面前几乎是不堪一击的。特别是对那些直接连入较大网络的系统来说,系统安全性显得尤为重要。

3UserID:用户识别码,简称UIDLinux系统内部使用UID来标识用户,而不是用户名。UID是一个整数,用户的UID互不相同。

4GroupID:用户组识别码,简称GID。不同的用户可以属于同一个用户组,享有该用户组共有的权限。与UID类似,GID惟一地标识了一个用户组。

5comment:这是管理员给用户账号做的注解,它一般是用户真实姓名、电话号码、住址等,当然也可以是空的。

6home directory:家目录,这个目录属于该账号,当用户登录后,它就会被置于此目录中,就像回到家一样。一般来说,root账号的家目录是/root,其他账号的家目录都在/home目录下,并且和用户名同名。当然这个目录也可以改到别的地方。

7login command:用户登录后执行的命令,一般来说,这个命令将启动一个Shell程序。使用过BBS的用户都知道,用BBS账号登录后,会直接进入BBS系统,这是因为BBS账号的login command指向的是BBS程序,等系统登录到BBS时就自动运行这些命令。

1.系统默认账号

系统中还有一些默认的账号,如admdaemonbinsys等,读者可以在前面的passwd

文件中找到它们。这些账号有着特殊的用途,一般用于进行系统管理,例如:

bin账号拥有可执行文件。

sys账号拥有可执行文件。

adm账号拥有账号文件(如passwd)和日志(log)文件。

在比较大型的工作站中,超级用户可能希望将繁重的维护任务分派给其他维护人员,但又不希望赋予他们root权限,这时这些账号就派上用场了。这些账号的口令大部分用星号表示,代表它们不能在登录时使用。

2.安全密码

为了增强系统的安全性,Linux系统还可以为用户提供MD5Shadow安全密码服务。如果在安装红旗Linux服务器版的时候在相关配置的选项上选中了MD5Shadow服务,那么将看到的/etc/passwd文件和上边的例子文件稍有差别,差别就是在/etc/passwd里的passwd项上无论是什么用户,都是一个“*”,这就表示这些用户都登录不了;系统其实是把真正的密码数据放在了/etc/shadow文件里,用户只能以root身份来浏览这个文件。为什么要这样做呢,原因其实很简单,在系统设计的时候,/etc/passwd文件是任何人都可以读的,那么那些心有所图的人就可以利用这个文件,使用各种各样的工具按照Linux密码加密的方法把用户甚至root的密码试出来,这样整个系统就会被他所控制,严重危害系统的安全和用户数据的保密性。

/etc/passwd中存放的加密的口令用于用户登录时输入的口令经计算后相比较,符合则允许登录,否则拒绝用户登录。用户可用passwd命令修改自己的口令,不能直接修改/etc/passwd中的口令部分。

一个好的口令应当至少有6个字符长,不要取用个人信息(如生日,名字,反向拼写的登录名,房间中可见的东西),普通的英语单词也不好(因为可用字典攻击法),口令中最好有一些非字母(如数字,标点符号,控制字符等),还要好记一些,不能写在纸上或计算机中的文件中,选择口令的一个好方法是将两个不相关的词用一个数字或控制字符相连,并截断为8个字符。当然,如果能记住8位乱码自然更好。

不应使用同一个口令在不同机器中使用,特别是在不同级别的用户上使用同一口令,会引起全盘崩溃。用户应定期改变口令,至少6个月要改变一次,系统管理员可以强制用户定期做口令修改。为防止眼明手快的人窃取口令,在输入口令时应确认无人在身边。

7.4.3关于PAM

Linux的解决方案类似于第二个方案,叫做shadow password。在/etc/passwd文件中的密码串被替换成了’x’,组密码也一样处理。系统在使用密码文件时,发现标记会寻找shadow文件,完成相应的操作。而shadow文件只有root用户可存取。

这个办法真是既简单又可靠。但是,问题还没有完,许多程序在运行时都需要用户认证,必须修改所有这些程序,再次编译,以便支持这项技术。还有新的、更安全可靠和经济的认证技术不断出现,如果想使用这些技术,仍然需要修改许多程序。

为了达到更经济合理的目的,PAMPluggableAuthenticationModules)可插拔认证模块就应运而生了。它在需要认证的程序和实际认证机制之间引入中间件层。一旦程序是基于PAM发行的,那么,任何PAM支持的认证方法都可以用于程序。这样就没有重新编译所有程序的麻烦了,只要PAM发展了新技术,如数字签名,基于PAM的程序可以马上使用它。这种强大的灵活性能是企业级应用不可或缺的。更进一步,普通认证手段难以完善的管理用户、会话数据等工作还可以交给PAM来做。比如,您可以非常容易地禁止某些用户在特定的时间段登录,或要求他们登录时使用特别的认证方式。甚至还可以把Linux工作站绑定到基于MicrosoftNT的网络中,在NT域下使用自己的Linux工作站,完成认证工作。却并不需要买额外的软件。Linux的发行版如果不是基于PAM方式发行的,那你做的工作会多一些,比如安装PAM套件,编译相应程序。

7.4.4限制用户对主机的使用

有时,不得不在主机上建立用户账号,开放交互登录。如果对用户使用主机不加限制,用户做的不少事情会给您造成麻烦。比如:Linux默认没有磁盘限额控制,任何一个用户都有可能把您的磁盘空间用光!再如,运行高计算强度的软件,把主机CPU处理时间通通耗光。诸如此类的事情绝对不能发生。

1.内存及CPU使用的限制

现在几乎所有的Linux都绑定了PAM,这套组件可以用来限制用户使用的内存数量。

在红旗Linux系统下的/etc/security/limits.conf文件,可以用来做此类控制。(如果没有的话,只能通过安装盘,把组件安装上去)。

此配置文件的格式是:

用户名、组名(以@开头)或“*”表示所有用户。

soft”或“hard”,soft表示限制不严格,需要时可以超过此值,但会有警告,hard

表示严格限制,不能超过此值。

cpu->占用的处理时间片单位、maxlogins->允许此用户同时登录的个数、nproc→最大进程数等等。

对应的数字值

举例如下:

*soft core 0

*hard rss 10000

@student hard nproc20

@faculty soft nproc20

@faculty hard nproc50

ftp hard nproc0

@student -maxlogins 4

2.磁盘使用的限制

Quota是用来限制用户使用磁盘数量的。绝大多数Linux发行版本都捆绑了它,但是默认状态是关闭的。

如果不确定核心对Quota的支持,就重新编译内核,在相应选项里面选择Quota的支持。然后

1)修改启动脚本/etc/rc.d/rc.sysinit文件,在最后面加入下面的脚本:

#Check quota and then turn quota on.

if [-x /usr/sbin/quotacheck]

then

echo "Checking quotas.This may take some time."

/usr/sbin/quota check -a vug

echo"Done."

fi

if [-x /usr/sbin/quotaon]

then

echo"Turning on quota."

/usr/sbin/quotaon -avug

fi

注意:必须在/etc/fstab里面的文件系统装载后再打开Quota,否则Quota不起作用。

2)修改/etc/fstab文件

一般没有加入Quota时像这样:

/dev/hda5/ext2 defaults 1 1

/dev/hda7/usr ext2 defaults 1 1

在包含"defaults"这个字的第四个栏位加上"usrquota"

/dev/hda5/ext2 defaults 1 1

/dev/hda7/usrext2 defaults,usr quota 1 1

如果需要在一文件系统中开启群组quota支持,将"usrquota"改为:

"grpquota"

/dev/hda5/ext2 defaults 1 1

/dev/hda7/usr ext2 defaults,grp quota 1 1

如果要同时支持使用者quota与群组quota的话

/dev/hda5/ext2 defaults 1 1

/dev/hda7/usr ext2 defaults,usr quota,grp quota 1 1

3)建立相应配置文件

在加入了Quota的分区根目录下使用下列命令创建文件。这些文件只能允许root用户

读写,其他用户没有任何权限。

touch/partition/quota.user

touch/partition/quota.group

chmod600/partition/quota.user

chmod600/partition/quota.group

4)重新启动并编辑用户限额

使用edquota命令。

edquota -u xxxxxx指用户名称)或edquota -g xxxxxx指组名称)会带你进入VI编辑器,编辑相应内容即可。“man edquota”可以查看细节内容。

3.文件许可权

文件属性决定了文件的被访问权限,即谁能存取或执行该文件。用ls -l可以列出详细的文件信息,如:

-rwxrwxrwx 1 pat cs440 70 Jul 28 21:12 zombin包括了文件许可,文件链接数,文件所有者名,文件相关组名,文件长度,上次存取日期和文件名。

其中文件许可分为四部分:

-:表示文件类型。

第一个rwx:表示文件属主的访问权限。

第二个rwx::示文件同组用户的访问权限。

第三个rwx:表示其他用户的访问权限。

若某种许可被限制则相应的字母换为-

在许可权限的执行许可位置上,可能是其他字母:sStTsS可出现在所有者和同组用户许可模式位置上,与特殊的许可有关,后面将要讨论,tT可出现在其他用户的许可模式位置上,与“粘贴位”有关而与安全无关。小写字母(xst)表示执行许可为允许,负号或大写字母(-ST)表示执行许可为不允许。

改变许可方式可使用chmod命令,并以新许可方式和该文件名为参数。新许可方式以38进制数给出,r4w2x1。如rwxr-xr--754

chmod也有其他方式的参数可直接对某组参数修改,在此不再多说,详见UNIX系统的联机手册。

文件许可权可用于防止偶然性地重写或删除一个重要文件(即使是属主自己)!

改变文件的属主和组名可用chownchgrp,但修改后原属主和组员就无法修改回来了。

4.目录许可

UNIX系统中,目录也是一个文件,用ls-l列出时,目录文件的属性前面带一个d

目录许可也类似于文件许可,用ls列目录要有读许可,在目录中增删文件要有写许可,进入目录或将该目录作路径分量时要有执行许可,故要使用任一个文件,必须有该文件及找到该文件的路径上所有目录分量的相应许可。仅当要打开一个文件时,文件的许可才开始起作用,而rmmv只要有目录的搜索和写许可,不需文件的许可,这一点应注意。

5umask命令

umask设置用户文件和目录的文件创建默认屏蔽值,若将此命令放入.profile文件,就可控制该用户后续所建文件的存取许可。umask命令与chmod命令的作用正好相反,它告诉系统在创建文件时不给予什么存取许可。

6.设置用户ID和同组用户ID许可

用户ID许可(SUID)设置和同组用户ID许可(SGID)可给予可执行的目标文件(只有可执行文件才有意义)当一个进程执行时就被赋于4个编号,以标识该进程隶属于谁,分别为实际和有效的UID,实际和有效的GID。有效的UIDGID一般和实际的UIDGID相同,有效的UIDGID用于系统确定该进程对于文件的存取许可。而设置可执行文件的SUID许可将改变上述情况,当设置了SUID时,进程的有效UID为该可执行文件的所有者的有效UID,而不是执行该程序的用户的有效UID,因此,由该程序创建的都有与该程序所有者相同的存取许可。这样,程序的所有者将可通过程序的控制在有限的范围内向用户发表不允许被公众访问的信息。

同样,SGID是设置有效GID。用chmod u+s文件名和chmod u-s文件名来设置和取消SUID设置。用chmod g+s文件名和chmod g-s文件名来设置和取消SGID设置。当文件设置了SUIDSGID后,chownchgrp命令将全部取消这些许可。

7cpmvlncpio命令

cp拷贝文件时,若目的文件不存在则将同时拷贝源文件的存取许可,包括SUIDSGID许可。新拷贝的文件属拷贝的用户所有,故拷贝别人的文件时应小心,不要被其他用户的SUID程序破坏自己的文件安全。

mv移文件时,新移的文件存取许可与原文件相同,mv仅改变文件名。只要用户有目录的写和搜索许可,就可移走该目录中某人的SUID程序且不改变其存取许可。若目录许可设置不正确,则用户的SUID程序可被移到一个他不能修改和删除的目录中,将出现安全漏洞。

ln为现有文件建立一个链,即建立一个引用同一文件的新名字。如目的文件已经存在,则该文件被删除而代之以新的链,或存在的目的文件不允许用户写它,则请求用户确认是否删除该文件,只允许在同一文件系统内建链。若要删除一个SUID文件,就要确认文件的链接数,只有一个链才能确保该文件被删除。若SUID文件已有多个链,一种方法是改变其存取许可方式,将同时修改所有链的存取许可,也可以chmod000文件名,不仅取消了文件的SUIDSGID许可,而且也取消了文件的全部链.要想找到谁与自己的SUID程序建立了链,不要立刻删除该程序,系统管理员可用ncheck命令找到该程序的其他链。

cpio命令用于将目录结构拷贝到一个普通文件中,而后可再用cpio命令将该普通文件转成目录结构。用-i选项时,cpio从标准输入设备读文件和目录名表,并将其内容按档案格式拷贝到标准输出设备,使用-o选项时,cpio从标准输入设备读取先已建好的档案,重建目录结构。cpio命令常用以下命令做一完整的目录系统档案:

find fromdir -print|cpio-o>archive

根据档案文件重建一个目录结构命令为:

cpio -id

cpio的安全约定如下:

档案文件存放每个文件的信息,包括文件所有者,小组用户,最后修改时间,最后存取时间,文件存取许可方式。

1)根据档案建立的文件存放于档案中的存取许可方式。

2)从档案中提取的每个文件的所有者和小组用户设置给运行cpio -i命令的用户,而不是设置给档案中指出的所有者和小组用户。

3)当运行cpio -i命令的用户是root时,被建立的文件的所有者和小组用户是档案文件所指出的。

4)档案中的SUID/SGID文件被重建时,保持SUIDSGID许可,如果重建文件的用户不是rootSUID/SGID许可是档案文件指出的用户/小组的许可。

现存文件与cpio档案中的文件同名时,若现存文件比档案中的文件更新,这些文件将不被重写。

如果用修改选项U,则同名的现存的文件将被重写。可能会发生一件很奇怪的事:如被重写的文件原与另一个文件建了链,文件被重写后链并不断开,换言之,该文件的链将保持。因此,该文件的所有链实际指向从档案中提取出来的文件,运行cpio无条件地重写现存文件以及改变链的指向。cpio档案中可含的全路径名或父目录名给出的文件。

8sunewgrp命令

1su命令:可不必注销户头而将另一用户又登录进入系统,作为另一用户工作。它将启动一个新的Shell并将有效和实际的UIDGID设置给另一用户。因此必须严格将root口令保密。

2newgrp命令:与su相似,用于修改当前所处的组名。

9.文件加密

crypt命令可提供给用户以加密文件,使用一个关键词将标准输入的信息编码为不可读的杂乱字符串,送到标准输出设备。再次使用此命令,用同一关键词作用于加密后的文件,可恢复文件内容。

一般来说,在文件加密后,应删除原始文件,只留下加密后的版本,且不能忘记加密关键词。在vi中一般都有加密功能,用vi-x命令可编辑加密后的文件。关于加密关键词的选取规则与口令的选取规则相同。由于crypt程序可能被做成特洛依木马,故不宜用口令做为关键词。最好在加密前用packcompress命令对文件进行压缩后再加密。

7.4.5其他安全问题

用户的.profile文件

由于用户的HOME目录下的.profile文件在用户登录时就被执行。若该文件对其他人是可写的则系统的任何用户都能修改此文件,使其按自己的要求工作。这样可能使得其他用户具有该用户相同的权限。

ls -a

此命令用于列出当前目录中的全部文件,包括文件名以“。”开头的文件,查看所有文件的存取许可方式和文件所有者,任何不属于自己但存在于自己的目录中的文件都应怀疑和追究。

.exrc文件

为编辑程序的初始化文件,使用编辑文件后,首先查找$HOME/.exrc文件和./.exrc文件,若该文件是在$HOME目录中找到,则可像.profile一样控制它的存取方式,若在一个自己不能控制的目录中,运行编辑程序,则可能运行其他人的.exrc文件,或许该.exrc文件存在那里正是为了损害他人的文件安全。为了保证所编辑文件的安全,最好不要在不属于自己或其他人可写的目录中运行任何编辑程序。

暂存文件和目录

UNIX系统中暂存目录为/tmp/usr/tmp,对于程序员和许多系统命令都使用它们。如果用这些目录存放暂存文件,别的用户可能会破坏这些文件。使用暂存文件最好将文件屏蔽值定义为007,但最保险的方法是建立自己的暂存文件和目录:$HOME/tmp,不要将重要文件存放于公共的暂存目录。

UUCP和其他网络

UUCP命令用于将文件从一个UNIX系统传送到另一个UNIX系统,通过UUCP传送的文件通常存于/usr/spool/uucppublic/login目录,login是用户的登录名,该目录存取许可为777,通过网络传输并存放于此目录的文件属于UUCP所有,文件存取许可为666777,用户应当将通过UUCP传送的文件加密,并尽快移到自己的目录中。其他网络将文件传送到用户HOME目录下的rjc目录中。该目录应对其他人是可写可搜索的,但不必是可读的,因而用户的rjc目录的存取许可方式应为733,允许程序在其中建立文件。同样,传送的文件也应加密并尽快移到自己的目录中。

特洛依木马

UNIX系统安全中,用特洛依木马来代表一种程序,这种程序在完成某种具有明显意图的功能时,还破坏用户的安全。如果PATH设置为先搜索系统目录,则受特洛依木马的攻击会大大减少。如模似的crypt程序。

诱骗

类似于特洛依木马,模拟一些东西使用户泄漏一些信息。不同的是,它由某人执行,等待无警觉的用户来上当。如模拟的login

计算机病毒

计算机病毒通过把其他程序变成病毒从而传染系统,可以迅速地扩散。特别是系统管理员的粗心大意,作为root运行一个被感染的程序时。实验表明,一个病毒可在一个小时内(平均少于30分钟)取得root权限。

离开自己已登录的终端

要离开自己已登录的终端,除非能对终端上锁,否则一定要注销户头。

智能终端

由于智能终端有sendenter换码序列,告诉终端送当前行给系统,就像是用户敲入的一样。这是一种危险的能力,其他人可用write命令发送信息给本用户终端,信息中如含有以下的换码序列:移光标到新行(换行),在屏幕上显示"rm -r *"

将该行送给系统,后果大家可以想像。禁止其他用户发送信息的方法是使用mesg命令。

mesgn不允许其他用户发信息,mesgy允许其他用户发信息。即使如此仍是有换码序列的问题存在,任何一个用户用mail命令发送同样一组换码序列,不同的要用!rm -r *替换rm -r *.mail将以!开头的行解释为一条Shell命令,启动Shell,由Shell解释该行的其他部分,这被称为Shell换码。为避免mail命令发送换码序列到自己的终端,可建立一个过滤程序,在读mail文件之前先运行过滤程序,对mail文件进行处理:

myname="$LOGNAME";

tr -d [\001-\007][-\016-\037]>$HOME/mailbox;

>/usr/mail/$myname;

mail -f $HOME/mailbox

其中tr将标准输入的字符转换手写到标准输出中。这只是一个简单的思路,从原则上来说,此程序应为一C程序,以避免破坏正发送到的文件,可用锁文件方式实现。

断开与系统的连接

用户应在看到系统确认用户登录注销后再离开,以免在用户未注销时由他人潜入。

cu命令

该命令使用户能从一个UNIX系统登录到另一个UNIX系统,此时,在远地系统中注销用户后还必须输入"~"后回车,以断开cu和远地系统的连接。cu还有两个安全问题:

1)如本机安全性弱于远地机,不提倡用cu去登录远地机,以免由于本地机的不安全而影响较安全的远地机。

2)由于cu的老版本处理"~"的方法不完善,从安全性强的系统调用安全性弱的系统时,会使弱系统的用户使用强系统用户的cu传送强系统的/etc/passwd文件,除非确信正在使用的cu是正确版本,否则不要调用弱系统。

保持用户安全的要点

1)保持口令的安全。

◆不要将口令写下来。

◆不要将口令存于终端功能键或MODEM的字符串存储器中。

◆不要选取显而易见的信息作口令。

◆不要让别人知道。

◆不要交替使用两个口令。

◆不要在不同系统上使用同一口令。

◆不要让人看见自己在输入口令。

2)不要让自己的文件或目录可被他人写。

◆如果不信任本组用户,umask设置为022

◆确保自己的.profile除自己外对他人都不可读写。

◆暂存目录最好不用于存放重要文件。

◆确保HOME目录对任何人不可写。

uucp传输的文件应加密,并尽快私人化。

3)若不想要其他用户读自己的文件或目录,就要使自己的文件和目录不允许任何人读。

umask设置为006/007

◆若不允许同组用户存取自己的文件和目录,umask设置为077

◆暂存文件按当前umask设置,存放重要数据到暂存文件的程序,就被写成能确保暂存文件对其他用户不可读。

◆确保HOME目录对每个用户不可读。

4)不要写SUID/SGID程序。

5)小心地拷贝和移动文件。

cp拷贝文件时,记住目的文件的许可方式将和文件相同,包括SUID/SGID许可在内,如目的文件已存在,则目的文件的存取许可和所有者均不变。

mv移动文件时,记住目的文件的许可方式将和文件相同,包括SUID/SGID许可在内,若在同一文件系统内移文件,目的文件的所有者和小组都不变,否则,目的文件的所有者和小组将设置成本用户的有效UIDGID

◆小心使用cpio命令,它能覆盖不在本用户当前目录结构中的文件,可用t选项首先列出要被拷贝的文件。

6)删除一个SUID/SGID程序时,先检查该程序的链接数,如有多个链,则将存取许可方式改为000,然后再删除该程序,或先写空该程序再删除,也可将该程序的i节点号给系统管理员去查找其他链。

7)用crypt加密不愿让任何用户(包括超级用户)看的文件。

◆不要将关键词作为命令变量。

◆用ed -xvi -x编辑加密文件。

8)除了信任的用户外,不要运行其他用户的程序。

9)在自己的PATH中,将系统目录放在前面。

10)不要离开自己登录的终端。

11)若有智能终端,当心来自其他用户,包括write命令,mail命令和其他用户文件

的信息中有换码序列。

12)用【Ctrl+D】或【exit】退出后,在断开与系统的连接前等待看到login:提示。

13)注意cu版本。

◆不要用cu调用安全性更强的系统。

◆除非确信cu不会被诱骗去发送文件,否则不要用cu调用安全性较弱的系统。

习题

1.删除一个用户必须:()

A.删除/etc/passwd文件中此用户的记录

B.删除/etc/group文件中提及的此用户

C.删除用户的主目录

D.删除此用户创建或属于此用户的文件

2.对所有用户增加对文件test的读权限,可以用命令:( )

A$chmod ar+test

B$chmod a+rtest

C$chmod +artest

D$chmod r+test

3.临时查封用户,在该用户的passwd域的第一个字符前面加上一个____( )

A&B!C||D*

8章备份数据和资料

本章内容提要

☆备份计划

☆简单备份

☆多级备份

☆压缩备份

☆要求理解备份的重要性,掌握备份计划,简单备份,多级备份,压缩备份实施方法

8.1备份计划

8.1.1备份的重要

每个人的数据对于他自己来说都是最有意义的,最有价值的。假如不小心丢失数据,那么就要花费很多的时间和精力来恢复,虽然有时候是不能恢复的。所以,必须重视数据的保护,并采取正确的保护措施。

丢失数据一般有以下几个原因:硬件出错、软件存在问题、人的操作的失误,自然灾害等。虽然现代硬件已经越来越可靠,但损坏还是不可避免的。存储数据最重要的硬件是硬盘,它依赖微小的磁区在充满电噪声的世界上保存数据。当今的软件的可靠性仍然没有得到保证,一个真正完全可靠的程序几乎是不可能出现的。而人为因素更是数据丢失的一大原因,因为人的操作可能会出现失误,而且人为故意破坏数据的可能性也不能排除。此外自然灾害造成数据丢失或毁坏更是不可避免的。总之,想要数据一点错误都不出,所有工作都可以完美的进行,这几乎是不可能的。

备份是进行数据保护的一个十分不错的方法。拥有多个备份,就不怕其中的某个被损坏,假如数据真的被损坏了,只需从备份数据中恢复数据就可以了。正确的备份是很重要的。正确的备份要保证它是有效的,可用的。

8.1.2备份内容

许多人都有可能有这样的想法,就是尽可能的多备份。但是实际上,有些数据是不必要备份的,以免花费不必要的时间、精力和金钱。其中包括那些很容易重新安装的软件,但即使是这些软件,也会有一些重要的配置文件需要备份;另外还包括/proc文件系统,因为它只含有内核且总是自动产生的数据,所以没有必要备份。尤其没有必要备份/proc/kcore文件,因为它只是当前物理内存的一个映像,而且非常大。此外可备份也可不备份的部分包括newsspoollog文件、以及/var中的许多数据。

一般来说,需要备份的是用户文件(/home)和系统配置文件(主要在/etc)。基本上,用户应该检查包含任何下列文件的目录:非标准Linux安装文件或比将要新安装的Linux还新的文件并分开那些将要继续保留的文件。

建议对下列每一项都做了一个.tgz的文件并存储在备份媒体上:

/usr/lib/rn

/usr/lib/smail

/usr/lib/trn/usr/lib的其他部分需要重新安装)

/usr/local/src

/usr/local/bin

/usr/local/lib

/usr/local/lpfont

/usr/local/man

/usr/local/sbin

/usr/local/thot

/usr/openwin

/usr/X11R6/lib/X11/app -defaults

/usr/X11R6/lib/X11/initrc(其他Xfree86的部分要重新安装)

/var/named

/var/openwin

/var/texfonts

8.1.3选择备份介质

要想得到有效的、可用的备份,最重要的是选择好备份介质。选择备份介质需要考虑到成本、可靠性、速度、可取得、可用性。

成本是很重要的,因为可能需要有某些数据的多个存储、多个备份。因此常常需要便宜的介质。

可靠性是最重要的,因为坏的备份会叫人更难办。备份介质必须能保存数据很多年而不会出现数据损坏。如何使用备份介质会影响到它的可靠性。硬盘一般来说是相当可靠的,但是如果用它作为备份介质,而且与它要备份的数据放在同一台机器上,那么它的可靠性就得不到保证了。

如果备份不是交互进行,那么速度通常不是太重要。但是如果备份只能在机器空闲时进行,那么速度就是个问题了。

可取得性很明显是必要的,因为用户不可能使用一种不存在的介质。但是还要注意的是这种介质在将来是否还能得到,并且它是否能在其他计算机上使用。

可用性是决定是否需要经常做备份的一个主要因素。备份越容易使用越好。一种备份介质千万不能太难以使用。

备份介质的典型选择是软盘和磁带。软盘很便宜,可靠性还可以,速度不很快,而且很容易得到,但是不太适合备份大量的数据。磁带有的便宜有的贵,一般来说价格还是可以接受的,可靠性还可以,速度也不错,很容易得到,而且磁带的容量也比较合适。此外也还有一些其他选择。但是这些备份介质一般不好取得,但如果这不是问题,那么这些介质也不错。例如,磁光盘同时具有软盘(随机访问,使得恢复单个文件速度很快)和磁带(能备份大量数据)的优点。

现在使用硬盘的越来越多了。因为几十GB的大硬盘实在是便宜,速度又是一流。另外,CDR/CDRW也是不错的选择,但是多了刻盘的时间,速度不及硬盘,倒是毕竟便宜。另外常用的介质就是磁带了。流式读写,不能随机存取。但便宜稳定是其优点。

8.2实施备份

8.2.1简单备份

简单的备份是一次备份所有东西,然后再备份从上次备份以后修改过的所有东西。第一个备份叫完全备份(fullbackup),接下来所做的备份叫增量备份(incrementalbackups)。

完全备份比增量备份要花费更多的时间和劳动,因为有很多的东西需要一次写到磁带上,有时候完全备份还有可能一盘磁带都不够(更别说软盘了)。从增量备份中进行恢复要比从完全备份进行恢复需要更多的时间和更多的劳动。备份可以进行优化,做法是自上次全备份以后,总用增量备份保存所有修改过的文件。这样,备份可能需要多花上一点工作量,但用户只需恢复一个全备份和一个增量备份,而不需要做更多的工作了。下面几种方法可以实现简单备份。

1tar

tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tarGNU版本的。

语法:

tar[主选项+辅选项]文件或者目录

使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。

主选项:

c:创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。

r:把要存档的文件追加到档案文件的末尾。例如用户已经作好备份文件,又发现还有

一个目录或是一些文件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。

t:列出档案文件的内容,查看已经备份了哪些文件。

u:更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追加到备份文件的最后。

x:从档案文件中释放文件。

辅助选项:

b:该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为2020*512bytes)。

f:使用档案文件或设备,这个选项通常是必选的。

k:保存已经存在的文件。例如用户把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。

m:在还原文件时,把所有文件的修改时间设定为现在。

M:创建多卷的档案文件,以便在几个磁盘中存放。

v:详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。

w:每一步都要求确认。

z:用gzip来压缩/解压缩文件,加上该选项后可以将档案文件进行压缩,但还原时也一定要使用该选项进行解压缩。

1:把/home目录下包括它的子目录全部做备份文件,备份文件名为usr.tar

$tar cvf usr.tar/home

2:把/home目录下包括它的子目录全部做备份文件,并进行压缩,备份文件名为usr.tar.gz

$tar czvf usr.tar.gz/home

3:把usr.tar.gz这个备份文件还原并解压缩。

$tar xzvf usr.tar.gz

4:查看usr.tar备份文件的内容,并以分屏方式显示在显示器上。

$tar tvf usr.tar|more

要将文件备份到一个特定的设备,只需把设备名作为备份文件名。

5:用户在/dev/fd0设备的软盘中创建一个备份文件,并将/home目录中所有的文件都拷贝到备份文件中。

$tar cf/dev/fd0/home

要恢复设备磁盘中的文件,则可使用xf选项:

$tarxf/dev/fd0

如果用户备份的文件大小超过设备可用的存贮空间,可以创建一个多卷的tar备份文件。

M选项指示tar命令提示您使用一个新的存贮设备,当使用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样就可以把tar档案存入几张磁盘中。

$tar cMf/dev/fd0/home

要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有xM选项的tar命令。在必要时会被提醒放入另外一张软盘。

$tar xMf/dev/fd0

2gzip命令

减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。

语法:gzip[选项]压缩(解压缩)的文件名

各选项的含义:

-c:将输出写到标准输出上,并保留原有文件。

-d:将压缩文件解压。

-l对每个压缩文件,显示压缩文件的大小、未压缩文件的大小、压缩比和未压缩文件的名字。

-r:递归式地查找指定目录并压缩其中的所有文件或者是解压缩。

-t:测试,检查压缩文件是否完整。

-v:对每一个压缩和解压的文件,显示文件名和压缩比。

-num:用指定的数字num调整压缩的速度,-1--fast表示最快压缩方法(低压缩比),-9--best表示最慢压缩方法(高压缩比)。系统默认值为6

假设一个目录/home下有文件mm.txtsort.txtxx.com

1:把/home目录下的每个文件压缩成.gz文件。

$cd/home

$gzip*

$ls

m.txt.gzsort.txt.gzxx.com.gz

2:把例1中每个压缩的文件解压,并列出详细的信息。

$gzip-dv*

mm.txt.gz43.1%-----replaced with mm.txt

sort.txt.gz43.1%-----replaced with sort.txt

xx.com.gz43.1%-----replaced with xx.com

$ls

mm.txt sort.tx txx.com

3:详细显示例1中每个压缩的文件的信息,并不解压。

$gzip-l*

compressed uncompr.ratio uncompressed_name

277 445 43.1%mm.txt

278 445 43.1%sort.txt

277 445 43.1%xx.com

$ls

mm.txt.gz sort.txt.gz xx.com.gz

4:压缩一个tar备份文件,如usr.tar,此时压缩文件的扩展名为.tar.gz

$gzipusr.tar

$ls

usr.tar.gz

3unzip命令

Windows下的压缩软件WinZip压缩的文件如何在Linux系统下展开呢?可以用unzip命令,该命令用于解扩展名为.zip的压缩文件。

语法:unzip[选项]压缩文件名.zip

各选项的含义:

-x:文件列表解压缩文件,但不包括指定的file文件。

-v:查看压缩文件目录,但不解压。

-t:测试文件有无损坏,但不解压。

-d:把压缩文件解到指定目录下。

-z:只显示压缩文件的注解。

-n:不覆盖已经存在的文件。

-o:覆盖已存在的文件且不要求用户确认。

-j:不重建文档的目录结构,把所有文件解压到同一目录下。

1:将压缩文件text.zip在当前目录下解压缩。

$unziptext.zip

2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先的文件。

$unzip -n text.zip -d/tmp

3:查看压缩文件目录,但不解压。

$unzip -v text.zip

4zgrep命令

这个命令的功能是在压缩文件中寻找匹配的正则表达式,用法和grep命令一样,只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话,便可用zgrep命令。

5rsync

一个富有特色的工具。可以跨越网络使用。rsync是镜像文件最有效的工具之一。它同时可以保持文件原有的状态,如权限、链接等等。它还支持所谓的“anonymous”匿名模式,既可以从服务器也可以从远程客户机允许程序。使用客户机运行时不必使用root用户,可以匿名工作。需要使用注册用户时,自动加密认证信息(128位!)。安全有保证。功能十分强大,使用起来得心应手。

从下面网址可以得到rsync:http://rsync.samba.org/

该工具被安装后会在/etc/目录下生成rsyncd.conf文件,可以按照自己的需求配置。如下所示:

motd file = /etc/rsync.motd # specifies a file to be displayed,legal disclaimer,etc.

max connections = 5 # maximum number of connections so you don't get flooded

[pub-ftp]

comment = public ftp area # simple comment

path = /home/ftp/pub # path to the directory being exported

read only = yes # make it readonly, great for exported directories

chroot = yes # chroot to /home/ftp/pub

uid = nobody # explicitly set the UID

gid = nobody # explicitly set the GID

[secret-stuff]

comment = my secret stuff

path=/home/user/secret#path to my stuff

list = no # hide this module when asked for a list

secrets file = /etc/rsync.users # password file

auth users = me,bob,santa # list of users It rust to see my secret stuff

hosts allow = 1.1.1.1,2.2.2.2 # list of hosts to allow

使用manrsyncd.conf可以查看详细资料。

和防火墙合用时,需要修改ipchainsrsyncd使用TCP,873端口。

ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 873

ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0873

ipchains -A input -p tcp -j DENY -s 0.0.0.0/0-d0.0.0.0/0 873

6.其他商业软件

另外还有一些其他商业软件也可用来备份,下面列出几种,从其后的网址中可得到相应的软件。

BRU(Backup and Restore Utility)

http://www.estinc.com/features.html

Quickstart

http://www.estinc.com/qsdr.html

BackupProfessional

http://www.unitrends.com/bp.html

CTAR

http://www.unitrends.com/ctar.html

CTAR:NET

http://www.unitrends.com/ctarnet.html

PCPara Chute

http://www.unitrends.com/pcpara.html

8.2.2多级备份

简单备份的方法,适合于个人使用或小的站点使用。对于多数很重要的使用,使用多级备份更好。

简单备份有两个备份级:完全备份和增量备份。这可以通用化到任何数量的级别。完全备份是0级,增量备份可分为123级等等,每个增量备份级备份本级或上一级别的上次备份后所有修改过的东西。

这样可以拥有更便宜的更长的备份记录历史(backup history)。更长的备份记录历史是非常有用的,因为删除或损坏的文件可能长期得不到注意。这样即使得不到一个文件的最新版本,但也比没有好。

备份级可使文件系统在最少的时间内恢复。如果您有许多只是单调增长级别数的增量备份,要恢复整个文件系统,只需要恢复所有备份。而如果级别数不是单调增长,可以减少备份和恢复的数目。

为了减少用于恢复操作时的已备份磁带数量,可以用小的级别做每个增量磁带。然而,这样做会做每个增量备份的时间会增加(每个备份拷贝了上次全备份后改变的所有东西)

8.2.3 压缩备份 

备份占用了大量的介质空间,而且要花费大量金钱。为了节省存储空间,常常将备份文件进行压缩。有几种方法。  

其中一种办法是使用tar中的-z选项,进行压缩备份。但是压缩备份可能导致问题。由于压缩工作的原理,如果一个bit错误,可能导致所有其他压缩数据不可用。虽然有些备份程序内置纠错功能,但没有什么办法可以处理大量的错误。所以这个压缩方法不是很好。  

还有一个方法是单独压缩每个文件,这样一个文件的丢失,不会影响到其他文件。afio程序(cpio的一个变种)可以用来做这样的工作。  

压缩需要时间,这可能使得备份程序不能尽可能快地将数据写到磁带驱动器中,这可以靠输出缓冲来避免(如果备份程序足够智能,可以内置,否则可以用其他程序来做),但即使这样,运行工作也并不一定足够好。 

8.2.4  使用举例 

1tar至文件 

% cd /u/jypai  

% tar cf backup.tar doc         <-- /dev/rst1改为backup.tar,进行tar  

% ls -l backup.tar  

-rw-r--r--  1 jypai       20480 Oct  2 17:34 backup.tar  

% cd /tmp                       <-- 换至/tmp下解tar,以免覆盖掉原来的doc  

% tar xf /u/jypai/backup.tar    <-- tar  

% ls doc  

doc:  

Amanda.is.charming      TANet.lst address-book  

-documents.tar       address-book 

 % 

 一般来说,用户都会顺便将.tar文件用compress压缩成.Z文件,节省储存空间;要还

原时,要先uncompress,再解tar

 % compress backup.tar                                      <-- 压缩  

% ls -l backup* 

 -rw-r--r--  1 jypai        3085 Oct  2 17:34 backup.tar.Z  <-- 只剩.Z文件 

 % uncompress backup.tar.Z                                  <-- 解压缩 

 % tar xf backup.tar                                        <-- tar  

%               

同理,也可以用gzip/gunzip来代替compress/uncompress,不过要注意将来要解压缩的电脑中有没有gunzip可用。  

2tar的线上压缩/解压缩 

 tarproject所发展的tar版本,它增加了许多功能,例如线上压缩(在tar的同时进行压缩;若用UNIX标准tar,只能在执行完后,另外再进行压缩,所以不适用于磁带)、remote tar(经由网络,每部电脑都可以利用server上的磁带机进行tar)...等等。本小节将介绍最常用到的线上压缩。 

tar不是标准UNIX软件,您必须先确定自己的电脑上有安装。红旗LINUX上已安装方法是执行"tar --help",若是 tar,则会显示如下的消息: 

% tar --help                                    <-- 确定您执行到的是 tar  

This is  tar, the tape archiving program. 

 choose one of the following: 

 -A, --catenate,  

    --concatenate       append tar files to an archive 

 ....()  

%  

%  

使用 tar线上压缩功能,只要增加“z”选项即可,下面是一个简单的示范:

  % cd /u/jypai  

% tar zcf /tmp/backup.tar.gz doc     <-- 增加'z'(线上压缩)功能 

% cd /tmp  

% tar ztf backup.tar.gz              <-- 增加'z'(线上解压)功能  

doc/Amanda.is.charming  

doc/-documents.tar  

doc/TANet.lst 

 doc/address-book 

 % tar zxf backup.tar.gz              <--增加'z'(线上解压)功能 

其中,“z”功能选项的作用是将文件内容交由gzip来做压缩处理,tar另外还提供'Z'选项,将压缩处理交由compress来做,例如:

 % tar Zcf backup.tar.Z doc  

 

习题 

1.丢失数据一般有以下几个原因,它们是?(   )

 A.硬件出错     B.软件存在问题     C.人的操作的失误     D.自然灾害

 2.一般来说,需要备份的是:(   )

 A.用户文件(/home ) 

B/var

 C.系统配置文件(主要在/etc )。  

D/proc 文件系统 

3.压缩备份可以使用哪种方法?(   ) 

A.使用tar中的-z选项 

B.用afio 程序单独压缩每个文件 

C.用rsync 

D.使用tar中的-v选项 

 

9章文件系统

本章内容提要 

 

文件是一组相关信息集合,在Linux中文件是不包括其他结构的字符流。文件中的任何两个字节之间没有任何相互关系。文件中各字节的意义是靠相应的软件去解释的。Linux用文件来组织信息。文件的内容可为文本、程序信息、命令脚本或者实际中其他类型的信息。 在红旗Linux系统中,文件包括普通文件、目录文件、设备文件、链接文件。其中普通文件又分为文本文件、数据x文件、命令文件和可执行文件。  

本章重点内容  

☆ 建立文件系统 

☆ 安装文件系统 

☆ 拆卸文件系统 

☆ 网络文件系统 

☆ 交换空间

☆ 磁盘空间配额管理 

☆ 碎片清理和文件系统维护 

☆ 要求掌握文件系统的建立,安装,拆卸和维护。

9.1  文 件 系 统 

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区或文件系统种类。因此,可以说“我有2个文件系统”意思是有2个分区,一个存文件,或者用“扩展文件系统”,意思是文件系统的种类。 

磁盘或分区和它所包括的文件系统的不同是很重要的。少数程序(包括最有理由的产生文件系统的程序)直接对磁盘或分区的原始扇区进行操作;这可能破坏一个存在的文件系统。大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。  

一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。

这个过程就叫建立文件系统。  

大部分linux文件系统种类具有类似的通用结构,即使细节有些变化。其中心概念是超级块superblocki节点inode,数据块data block,目录块directory block,和间接块indirection block。超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中,目录条目包括文件名和文件的i节点数目。i节点包括几个数据块的数目,用于存储文件的数据。i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。  

linux文件系统通常允许在文件中产生孔(hole),意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置保留实际的磁盘空间(这意味着这个文件将少用一些磁盘空间)。这在小的二进制文件中经常发生,Linux共享库、一些数据库和其他一些特殊情况。(孔由存储在间接块或i节点中的作为数据块地址的一个特殊值实现,这个特殊地址说明没有为文件的这个部分分配数据块,即,文件中有一个孔)。 

Linux的最重要特征之一就是支持多种文件系统。这样它更加灵活并可以和许多其他种操作系统共存。其中下面几种是最常用的: 

 Minix:最古老的,但一直被认为是最可靠的文件系统。它的功能和容量都十分有限。文件名最长只能到30个字符,每个文件系统最多支持64MB。 

 Xiaminix文件系统的一个修正版本,提升了文件名和文件系统大小的限制,除此以外并没有增加新的功能。该文件系统一直都不太流行,但运行情况不错。 

 Ext2:当前最通用的Linux文件系统。它被设计成易于向上兼容,所以新的文件系统代码无需重做已有的文件系统。 

 Extext2的老版,它不支持向上兼容。很难用新版安装程序安装,现在几乎没人再用它。

  Msdos:与MSDOSOS/2等的FAT文件系统兼容。

  UmsdosLinux下的扩展msdos文件系统,支持长文件系统、文件所有者、文件权限、链接以及折本文件。 

 ISO9660:标准的CD-ROM文件系统。

  NFS:网络文件系统,使得多太计算机之间更易于共享文件。

  HPFSOS/2文件系统。 

 SYSVUNIX System V 文件系统。

 Raiserfsext3均是linux环境下对基于低版本内核的ext2文件系统的一个大的修改,从名字中可以看出ext3是直接对ext2的升级,而且在2.4的测试版本中已经可以看到ext3的影子,但是由于raiserfs文件系统还有一些bug没有解决,所以虽然raiserfs文件系统具有很多作为高级服务器文件系统的优点,出于稳定性的考虑并没有放进2.4的测试内核中。不过从文件系统的角度来看,raiserfs文件系统对比ext2来说,是有相当大的进步的。比如说,对小文件的存储处理,对文件系统故障的修复等等。现在暂且只能在Intel结构体系上使用,

现在Internet上已经有很多将ext2文件系统直接转为raiserfs文件系统的工具。不过也可以将其编译进kernel或作成一个安装模块。 

用户可以从http://www.devlinux.com/namesys下载raiserfs的补丁程序,并且要注意下载的补丁版本和kernel的版本是一致的。 

下载后用root身份登录进入系统,切换至/usr/src/linux目录,执行命令:  

    #cd [文件下载的目录

# gunzip linux-2.2.16-reiserfs-3.5.24-patch.gz  

    # patch -p1 -i linux-2.2.16-reiserfs-3.5.24-patch  

    假设读者使用的是2.2.16的内核,这也是红旗linux server2的默认设置。这样就可以使用其他编译内核的工具来完成加载或编译进内核的任务了。 

Reiserfs的相关应用程序在 /usr/src/linux/fs/reiserfs/utils 目录下,比如说我们mkreiserfs命令重新格式化一个已经存在的分区成raiserfs文件系统类型,在做完这一步后,可以修改/ets/fstab文件,指定加载这个raiserfs分区,或使用如“mount -t reiserfs /dev/hda2 /raiserfs”,加载这个raiserfs分区到目录/raiserfs下,这样就可以同使用其他类型分区一样使用这个新的分区了。 

当然这个工作也可以通过常用命令fdisk来完成。 

Linux并不使用设备号或驱动器名称来访问独立文件系统,而是通过文件系统层次树结构来访问它。Linux每安装一个文件系统时都会将其加入到文件系统层次树中。不管文件系统属于什么类型,都被连接到一个目录上且此文件系统上的文件将取代此目录中已存在的文件。这个目录被称为安装点或者安装目录。当卸载此文件系统时这个安装目录中原有的文件将再次出现。  

9.1.1  建立、安装及拆卸文件系统 

1.建立文件系统 

Linux文件系统的建立是通过mkfs命令来完成的。用mkfs命令可以在任何指定的块设备上建立不同类型的文件系统。对于每个不同种类的文件系统使用的都是不同的。单独的程序。Mkfs只是对于不同文件系统确定运行何种程序的一个外壳而已。 

一般最常用的mkfs语法如下: 

mkfs [-v] [-t fs-type] [fs-options] device [size] 

其中各参数的意义如下: 

-v:强迫产生长格式输出;

 

-t fs-type:选择文件类型。 fs-options:将要建立的文件系统选项,它可以是下面的选项。

 -c:搜索坏块并初始化相应的坏块表。 

-l filename:从文件filename中读初始的坏块表。 

-v:让实际建造的文件系统程序产生长格式输出。 

device:文件系统所在设备号。

 size:文件系统大小。 

例:在软盘上建立一个ext2文件系统:  

#mkfs t ext2 /dev/fd0  

命令运行后,软盘上已建立好ext2文件系统,可以对其进行加载或读写操作,并在必要时写入/etc/fstab文件中,以便在引导时安装。  

2.安装文件系统 

一个文件系统,如果其存在但却未被合并到可存取文件系统结构中,则称为卸下的文件系统。如果它已经被并入到可存取的文件系统结构中,则称其为已安装的文件系统。一个文件系统在使用之前,必须执行文件系统的安装;只有安装后的文件系统,用户才能对其进行一般的文件操作。文件系统的安装,可以在系统引导过程中自动安装,也可以使用mount命令手工安装。 

多数情况下,用户需要使用的文件系统是比较固定的,不会经常变化。如果每次使用时都需要重新安装这是很麻烦的,因此,可以方便地定义一个系统在引导时自动安装文件系统的方法。通过修改/etc/fstab文件中的表项来选择启动时需要安装的文件系统。在内核引导过程时,它首先从LILO指定的设备上安装根文件系统,随后将加载/etc/fstab文件中列出的文件系统。/etc/fstab指定了该系统中的文件系统的类型、安装位置及可选参数。fstab是一个文本文件,可以用任何编辑软件进行修改,但请在修改前作好备份,因为破坏或删除其中的任何一行将导致下次系统引导时该文件系统不能被加载。该文件被称为文件系统安装表,其中每一行代表一个需要安装的文件系统,其格式如下: 

device  mnt  type  options  dump  passno 

其中: 

device:指定需要安装的文件系统。

 mnt:指定文件系统的安装点。对交换文件使用none。 

type:指定安装文件系统的类型,目前支持这几种类型: 

    minix,ext,ext2,xiafs,msdos,hpfs,iso9660,nfs,swap,umsdos,sysv

 options:使用逗号隔开的安装选项列表,至少需要指出文件系统的安装类型。 

dump:指定两次备份之间的时间。

 passno:指定系统引导时检查文件系统的顺序,根系统值为1,其余值为2,如果此值没有指定,则引导时文件系统不被检查。

 下面是一个实际的/etc/fstab文件: 

$ Sample /etc/fstab file 

/dev/hda3   /             ext2    defaults  1  1 

/dev/hda5   /dos          vft     defaults  0  0 

/dev/fdo    /mnt/floppy    ext2    noauto  0  0 

/dev/cdrom  /mnt/cdrom   iso9660  noauto  0  0 

其中,/dev/hda3 是根文件系统,使用ext2文件系统类型,安装选项是默认值;/dev/hda5 Windows 95/98 的 vfat 文件系统,/dev/fdo /dev/cdrom 分别是软驱和光驱。

 还要说明的一点是所谓的默认值defaults代表以下选项:设定为可读/写文件系统;允许执行二进制文件;可以使用mount a 命令安装该系统;不允许普通用户安装该系统;所有I/O操作均采用异步执行的方式。 

除了在系统引导时自动安装文件系统以外,用户也可以使用mount命令实现对文件系统的手工安装。Mount命令用于告诉Linux系统内核将一个文件系统合并到可访问的文件系统结构中。 

Mount命令的语法如下: 

Mount [-t type] device  dir 

其中,device:代表设备名;dir:代表安装点。 

例如: 

$ mount t ext2 /dev/fdo /mnt/floppy 

该命令把设备/dev/fdo上类型为ext2的文件系统安装到/mnt/floppy下。 

Mount命令还带有许多参数,如下: 

-f: 完成每步操作,但不真正安装文件系统。 

-v: 长格式模式。 

-w: 安装有读/写权限的文件系统。 

-r: 安装只读文件系统。 

-n: 不把条目写入/etc/mtab 的文件。 

-a: 安装/etc/fstab 中所有文件系统。 

注意:在安装文件系统之前,设备上必须已经建立了文件系统,并且安装时指明的文件系统类型应与建立的文件系统类型一致。 

3.卸下文件系统 

文件系统的拆卸与安装是相反的过程。当不再使用一个文件系统时,可以将其卸下。

除了根文件系统外,其他文件系统都是可以拆卸的。常用的是对于软盘和光盘上的文件系统,每更换一次盘就必须安装/拆卸一次。 

拆卸文件系统可使用umount 命令,其格式如下: 

umount  设备名安装点

 该命令使用设备名或者安装点作为参数,用于拆卸设备名或者安装点所对应的文件系统。

 Umount命令拆卸文件时容易犯的错误是拆卸正在使用的文件系统。在这种情况下,应该退出安装目录并通知在此目录下工作的其他用户也一起退出,然后在执行umount命令。

 只有超级用户才能使用mount 和 umount命令。 

注意:如果文件系统已在/etc/fstab中出现,则加载时只需指出安装位置或设备名称,如:#mount /home与此相对应,卸载一个文件系统的命令为umount,将文件系统/home卸载:#umount /home  

9.2  网络文件系统  

9.2.1  网络文件系统的概念 

NFSNetwork File System),也即网络文件系统,是UNIX系统间实现磁盘文件共享的一种方法,它由Sun Microsystems公司发展起来,逐渐成为主机间共享资源的一个标准。

它可以把远程主机上的一个文件系统安装在本机的某一目录下,使对远程主机上文件的访问变成了对本地文件的访问,使得运行不同操作系统的不同体系结构的计算机之间通过网络实现资源共享,节省了磁盘空间。NFS可以在不同的操作系统中实现。在每个操作系统上,NFS模型都被映射为本地文件系统,让用户感觉就像在本机工作一样。NFS还允许多个计算机使用同一文件。

 NFS系统要正常工作必须满足三个必要条件:客户机服务器之间可以通过TCP/IP协议进行通信;服务器必须使文件系统是可以被安装的;客户机必须将此文件系统安装为NFS文件系统。其中服务器是指用于放置被其他计算机安装的文件系统的计算机。客户机指用于安装该文件系统的计算机。 

9.2.2  网络文件系统的安装 

NFS使用远程过程调用(RPC)方法,由后台的驻留服务和配置文件控制。要启动NFS进程,需要以root身份登录并执行:# /etc/rc.d/init.d/nfs start  

NFS的主要配置文件为/etc/exports/etc/fstab。首先要把准备共享的文件目录(注意:这里是文件目录,而非文件系统)和有关选项填入/etc/exports,格式为:  

Dir_to_export host1(permission) host2(permission)  

其中hostn为允许共享该目录的其他主机,permission是它们使用该目录时的权限,分为rw(读写)、ro(只读)和no_root_squash(承认客户机的root用户权限)。  

配置好/etc/exports后,利用exportfs命令向后台驻留服务发出信号,要NFS相关进程重新读此文件并做更新。如:  

# exportfs -a  

此时,即可在客户端安装该目录,如果主机名为server1, 共享目录为/home/exports, 则在客户机上使用mount命令安装此输出文件系统:  

# mount server1:/home/exports /home/share  

说明:mount还有其他多个参数,下面是其格式: 

mount [-t nfs] [-o specific-options] 文件系统 安装点

 其中参数的意义如下: 

-t:指定安装的文件系统类型。

 文件系统:要安装的文件系统名。

 

安装点:该文件系统

的安装目录。 -o:指定安装选项。 specific-options:安装选项,其中最常用的选项如下: 

ro:只读。 

rw:可读写。 

soft:软安装。 

hard:硬安装。 

Rsize:指定NFS客户读请求使用的数据报的大小,默认值为1024

 Wsize:指定NFS客户写请求使用的数据报的大小,默认值为1024。 Tim:置NFS客户等待请求完成的时间,默认值为0.7秒。 

如果需要客户机在引导时即加载该输出文件系统,则在/etc/fstab中加入此目录名。不同的是,在设备名一列使用server1:/home/exports, 并将其类型设为nfs。 

9.3  磁盘空间配额管理  

当用户总把一些很大的文件下载到主机,或在服务器上安装占用大量磁盘空间的应用软件时,硬盘很快就撑得满满当当。其实,在红旗Linux下,可以通过对用户的磁盘空间进行配额管理,用户占用的空间不会超过所规定的上限。下面就一个示例说明配额管理的方法。下面举一个例子具体说明。 

假设有一名用户Fred,规定其在文件系统/home上最大的磁盘占有量为1000 blocks。  

1)首先,建立相应的系统使用文件quota.userquota.group,前者是用户磁盘配额文件,后者则是针对组用户的。  

# touch /quota.user  

# touch /quota.group  

# chmod 600 /quota.user  

2)对该系统的/etc/fstab文件中的文件系统/home所在行进行修改,在参数列上加入usrquota,表明该文件系统将实施配额管理。  

/dev/hda5ext2/homedefaults, usrquota12  

3)重新加载该文件系统,使上述改动生效。  # mount o remountdefaults, usrquota /home  

4)下面,可以确定该用户配额的具体上限。用命令edquota Fred打开配额文件,其内容为:  

/dev/hda5:  

blocks in use: 0, limits(soft = 1200, hard = 1000)  

inodes in use: 0, limits(soft = 0, hard = 0)  

在这里,只需改动limits后面的数值。hard项代表该用户在此文件系统拥有的磁盘最大使用量,Soft项表示用户可以临时超过其配额,达到该容量,但期限一过,用户只能按其配额数量使用磁盘。一般只改变blocks的使用限制,而对inodes不做限制(使其limits项均为0),由系统自动分配inode数量。改变完毕,可存盘退出。  

5)最后,打开该用户磁盘配额控制。  

# quotaon uv Fred  

此时,用户Fred在文件系统/home中仅拥有1000 blocks的空间,一旦该上限被突破,便会得到警告信息,无法继续增加磁盘使用量。用户可通过quota命令查看自己的磁盘配额,而root用户可以用repquota检查所有用户的配额情况。  

9.4  碎片清理和文件系统维护 

文件写到磁盘时,不一定在连续的块中。没在连续块中的文件叫碎片。读碎片文件时磁盘的读写头需要更多地移动,所以将花费较长的时间。因此最好还是避免碎片。Ext2文件系统试图使碎片最少,即使不能将一个文件的所有块存在连续扇区中,也尽量靠近。Ext2通常有效地安排了文件其他块最近的空闲块,因此很少需要关心碎片问题。

 Linux的文件系统相当复杂,很容易发生错误,因此Linux提供了一个命令fsck专门检查文件系统的运行是否正确。Fsck命令的格式如下:

 Fsck  [选项1] [-s] [文件类型] [选项2] 文件系统名称

 其中选项1及其意义如下: 

-A:检查所有/etc/fstab中列出的文件系统。 

-V:长格式模式。 

-R:使用A参数时不检查根文件系统。

 -T:不显示开头的标题栏。 

-N:显示每一步的执行,但不进行检查。 

-P:使用A参数时,检查根文件系统。 

选项2及其意义如下: 

-a:直接修改检查发现的问题,而不征求用户意见。 

-l:列出文件系统中所有的文件名。 -r:修改检查发现的问题之前,征求用户同意。 

此外: 

-s:检查文件系统前列出管理块信息。 

9.5  交 换 空 间 

9.5.1  创建交换空间 

交换(swap)空间是系统从硬盘中划分的一部分硬盘空间,它与计算机的物理RAM 一起构成整个系统的虚拟内存空间。这样用户用到的内存空间可以大于实际的物理内存空间。当没有空闲的物理内存空间时,操作系统内核会把当前没有使用的内存块的内容写到硬盘以便腾出存储空间,需要时内核又会把这些内存块从硬盘中读回到内存中。

 红旗Linux运行时所需的总存储空间与系统的运行方式有关,如果只使用命令行方式那么至少需要32MB总存储空间;如果要运行X Window系统,那么,至少需要64MB总存储空间;而且SWAP空间大小至少要为物理内存大小的1.5倍。

 Linux可以用文件系统中的普通文件或者用一个专门的分区作为交换空间。使用交换分区速度快,使用交换文件可以灵活地改变大小。如果偶尔需要用到较大的交换空间,用户可以临时建立一个交换文件,使用完后再将其删除,而不必固定保留一个大的交换空间,以避免硬盘空间的浪费。

 交换文件是一个普通文件,对操作系统内核而言,交换文件除了无空洞外,并无特别之处。所谓空洞,即占用一片连续的硬盘物理空间。系统中最多可以有个交换文件每一个最大为16MB。 

建立交换文件的步骤如下: 

1)创建一个具有期望交换大小的文件。 

$dd if=/dev/zero of=/swapfile  bs=1024 count=8192 

该命令物理地创建一个交换文件swapfile,每一个交换块大小为1024字节,共有8192

块。 

注意:因为交换文件是连续的,所以不能用cp来创建交换文件。

 (2)创建交换文件 

$mkswap /swapfile 8192 

3)强迫将交换区内容写入磁盘 

$sync 

4)激活该交换文件 

$swapon  /swapfile 

5)使用完交换文件之后,关闭或删除它 

$swapoff  /swapfile 

$rm /swapfile  

红旗Linux允许有多个SWAP分区,每一个最大可达124MB,这些SWAP分区可以根据需要随时创建并激活。交换分区也无特别之处,用户可以像创建其他分区一样地创建交换分区,稍有不同的是,交换分区是一个原始分区,它不包含任何文件系统。交换分区的建立及激活步骤如下: 

1)先用fdisk 创建一个分区。 

2)建立一个交换分区使用命令:mkswap  实际分区名。 

例:$mkswap c /dev/hda4 

138  9章  文件系统 

hda4代表实际的分区名,这里没有指明分区大小,因此系统会自动检测。 

3)激活此交换分区:swapon  实际分区名。 

例:$swapon /dev/hda4 

如果设置系统启动时也激活此交换区,请修改/etc/fstab,在其中加入适当的条目。

 例如:/dev/hda4 swap default 0 0 

4)关闭交换分区:swapoff  实际分区名

 例:$swapoff /dev/hda4 

 

习题 

1.文件标志b表示:(   )

 A.字符设备文件

 B.目录文件 

C.块设备文件 

D.套接字 

2Linux支持哪些文件系统:(   ) 

AMinix   BExt2   CMsdos   DNFS   EISO9660 

3.在软盘上建立一个ext2文件系统:(   ) 

A#mkfs t ext2 /dev/fd0 

Bformat a: 

Cfdisk  a: 

D#mkfs  ext2 /dev/fd0 

4.交换文件:(   )  

A.是连续的     B.是普通文件 

C.无空洞       D.可以有个交换文件每一个最大为16M 

 

  

10章  目 录 系 统

本章内容提要 

 

Linux的几个重要目录: / 目录、/usr目录、/var目录、/proc目录、/dev目录、/etc目录。 

了解目录、/usr目录、/var目录、/proc目录、/dev 目录、/etc目录的内容。

 Linux文件系统采用层次的多级树形目录结构,整个文n件系统有一个根目录,在根目录下包含若干子目录。每一级目录下都可以包含普通文件和次一级的目录。 

10.1  文件名和路径名 

10.1.1  文件名 

Linux系统与其他操作系统一样,必须使用一个名称来标志一个特定的文件。Linux文件的命名是相当宽松的,没有什么太多的特殊规定。 

Linux文件名中不能含有空格,此外,文件名中一定不能含有“/”因为“/”在Linux的目录树中表示根目录或是路径中的分隔符(如同DOS中的“\”)。文件名长度还是有规定的,最大可以为256个字符,为了与UNIX兼容,建议使用14个以下字符长度的文件名。

文件名通常是由字母数字“.”(点号)“_”(下划线)和“-”(减号)组成的另外还有一些字母是合法的但是并不推荐使用它们例如“*”(星号)“?”(问号)“ ”(空格)“$”(美元符号)“&”和任何括号。在Linux中,文件名是区分大小写的。所以,Linux的所有命令都用小写字母表示。 

Linux在查找或者指定文件名时,可以使用通配符。常用的通配符有:

 *:匹配零个或多个字符;如“a”匹配以字母a开头的所有文件名。

 ?: 匹配任何一个字符,如“a?”匹配以字母a开头的所有两个字符的文件名。 

[abc1]:匹配任何一个在枚举集合中的字符在该例中该集合是a b c 1。 

[a-z]:匹配任何一个小写字符。 

[A-F]:匹配任何一个从AF的大写字符。 

[0-9]:匹配任何一个单个数字。

 [a-z A-Z 0-9]:匹配任何字符(小写或大小)或任何数字。 

10.1.2  路径名 

系统查找一个文件所经过的路径称为路径名。如果使用当前目录下的文件,可以直接引用文件名。如果要使用其他目录下的文件,就必须指定该文件是在哪个目录之中。 

查找文件只能从两个起点开始:即从根目录开始或者从当前目录开始,于是出现了两种路径名:绝对路径名和相对路径名。从根目录开始的路径名为绝对路径名;从用户当前所在目录开始的路径名为相对路径名。 

DOS一样,在每个目录下面都有名为“.”和“..”的两个文件。前者代表当前目录,后者代表当前目录的父目录。相对路径名是从“..”开始的。

  

注意:在树型目录结构中到某一确定文件的绝对路径和相对路径均只有一条。绝对路径是确定不变的,而相对路径则随着用户工作目录的变化而不断变化。 

用户可以使用pwd命令来查看当前所在目录的目录名。 

10.2  目 录 结 构 

10.2.1  目录树 

Linux的目录树如图10-1所示: 

/           home       ftp 

                      happy 

          bin 

          proc 

          boot 

          usr            bin 

                        lib 

                        tmp 

                        man 

 

          dev 

10-1  目录树 

Linux目录结构主要由根(/)文件系统,/usr文件系统,/var文件系统,以及/home

件系统等组成。

 10.2.2  根(/)文件系统 

根文件系统中的文件不需要经常改动,而且数目比较少,因此根文件系统一般占的空间并不大。它是比较特殊的文件系统。它包含系统引导以及其他文件系统安装所需要的一些关键文件。根文件系统一般除了标准的系统引导映像以外,不包含任何其他文件。所有其他文件都存放在根文件系统的子目录中。 

 /bin存放系统中的可执行文件。这些可执行文件大都是Linux系统里最常用的命令,一般用户和超级用户都经常使用该目录下的命令。  

 /sbin存放那些不打算提供给普通用户使用的命令。  

 /etc存放大部分系统配置文件,对系统的配置主要就是对该目录下的文件修改。  

 /root超级用户的目录。  

 /lib根文件系统上的程序所需的共享库。这些库文件仅在执行/bin /sbin目录下的命令时才会用到。  

 /lib/modules核心可加载模块,特别是那些恢复损坏系统时引导所需的(例如网络和文件系统驱动)。  

 /dev设备文件。用户通过这些文件访问外部设备。  

 /tmp临时文件。引导启动后运行的程序应该使用/var/tmp,而不是/tmp,因为前者可能在一个拥有更多空间的磁盘上。  

 /boot用于放置引导系统时使用的各种文件,如LILO。内核映像也经常在这里,而不是在根目录。如果有许多内核映像,这个目录可能变得很大,这时可能使用单独的文件系统更好。最重要的是要确保核心映像必须在IDE硬盘的前1024柱面内。  

 /mnt系统管理员临时mount的安装点。  

 /proc/usr/var/home其他文件系统的安装点。

 10.2 3  /usr文件系统 

/usr文件系统经常很大,用于存放可被系统中所有用户共享的文件。本地安装的程序和其他东西在/usr/local下。这样在升级时无须重新安装全部程序。/usr的有些子目录在下面列出(一些不太重要的目录省略了)。  

 /usr/X11R6 X Window系统的所有文件。为简化X的开发和安装,X的文件没有集成到系统中。  

 usr/bin存放了几乎所有用户命令。其他的一些命令在/bin/usr/local/bin中。  

 /usr/sbin许多系统管理命令,例如多数服务程序。  

 /usr/man/usr/info/usr/doc存放手册页、GNU信息文档和各种其他文档文件。  

 /usr/include C编程语言的头文件。从一致性上考虑这实际上应该在/usr/lib下,但传统上支持这个名字。  

 /usr/lib存放库函数文件。  

 /usr/local本地安装的软件和其他文件放在这里。 

10.2.4  /var文件系统 

/var包括系统正常运行时要改变的数据。每个系统是本机所特有的,即不通过网络与其他计算机共享。  

 /var/catman格式化好的man页的cacheman页的源文件一般存在/usr/man/man*中;

 有些man页可能有预格式化的版本,存在/usr/man/cat*中。而其他的man页在第一次查看需要格式化,格式化完的版本存在/var/man中,这样下一个人再看相同的页时就无须等待格式化了。  

 /var/lib存放系统正常运行时要改变的文件。  

 /var/local存放/usr/local 中安装的程序的可变数据(即系统管理员安装的程序)。  

 /var/lock锁定文件。许多程序遵循在/var/lock中产生一个锁定文件的约定,以指出他们正在使用某个特定的设备或文件。其他程序注意到这个锁定文件,将不试图使用这个设备或文件。  

 /var/log存放各种程序的Log文件。  

 /var/run存放与系统有关的信息文件。  

 /var/spool存放邮件,消息,打印队列等等。  

 /var/tmp/tmp允许的大或需要存在较长时间的临时文件。 

10.2.5  /proc 文件系统 

/proc文件系统是一个虚构的文件系统。此目录中的文件实际上不存在磁盘上。而是由内核在内存中产生。用于提供关于系统的信息。下面说明一些最重要的文件和目录。  

 /proc/1关于进程1的信息目录。每个进程在/proc下有一个名为其进程号的目录。  

 /proc/cpuinfo计算机CPU的检测报告。  

 /proc/devices当前使用的系统设备的报告。  

 /proc/dma显示当前使用的DMA通道。  

 /proc/filesystems存放本内核所配置的文件系统。  

 /proc/interrupts显示使用的中断和中断次数。  

 /proc/ioports当前使用的I/O端口。  

 /proc/kcore系统物理内存映像。与物理内存大小完全一样,但不实际占用这么多内存。  

 /proc/kmsg内核输出的消息。  

 /proc/ksyms内核符号表。  

 /proc/loadavg记录系统"平均负载"。  

 /proc/meminfo内存使用信息。  

 /proc/modules当前加载了哪些核心模块。  

 /proc/net网络协议状态信息。  

 /proc/self到查看/proc的程序的进程目录的符号连接。当两个进程查看/proc 时,是不同的连接。这主要为了方便程序得到它自己的进程目录。  

 /proc/stat系统的统计信息。 

 /proc/uptime系统启动的时间长度。  

 /proc/version内核版本。  

10.2.6  /dev文件系统 

/dev目录包含了所有的设备文件,这些设备是系统设置的、一般都和系统硬件有一定相互对应关系的特殊文件,不是特别需要请不要随便更改和删除。下面列出了/dev目录中一些常用的设备文件。 

 /dev/console 系统控制台,由显示器和键盘组成。 

 /dev/fd 软盘驱动器。第一软盘驱动器的设备文件是/dev/fd0,第二软盘驱动器的设备文件是/dev/fd1。 

 /dev/hd  IDE硬盘设备。/dev/hda指整个第一主盘,/dev/hda1指第一主盘上的第一分区。 

 /dev/sd  CSI磁盘设备。

  /dev/md Multiple Devices。将不同硬盘上的分区集合在一起构成一个大的设备,很像磁盘阵列(RAID),但主要由系统核心来完成,而不是磁盘阵列控制器。 

 /dev/tty 虚拟控制台。 

 /dev/pty 用于远程登录进程的伪终端。如用户通过telnet远程使用系统,则他的终端设备就是/dev/pty

  /dev/ttyS 串口设备。

  /dev/null 空设备,所有写入/dev/null的数据都将永远丢失。可以使用它来屏蔽一个程序的输出结果,也可以用它来建立特殊的长度为0的文件。 

10.2.7  /etc目录文件 

 /etc/hosts 

文件格式:IPaddress hostname aliases 

文件功能:提供主机名到IP地址的对应关系,建议将自己经常使用的主机加入此文件中,也可将没有DNS记录的机器加入到此文件中,这样会方便网络应用。 

127.0.0.1       localhost       localhost.localdomain 

202.118.66.81   helius.dlut.edu.cn      helius 

 /etc/resolv.conf 

文件功能:DNS客户机配置文件,设置DNS服务器的IP地址及DNS域名。 

相关文件:/etc/host.conf

 文件格式:

         domainname 域名 

        search  域名 

        nameserver Primary_DNS_Server_IP_address 

        nameserver Second_DNS_Server_IP_address 

        其中domainnamesearch可同时存在,也可只有一个;nameserver可指定多个示例文件内容: 

search dlut.edu.cn 

nameserver 202.118.66.6 

 /etc/host.conf 

文件功能:指定主机名查找方法,通常指先查找文件/etc/hosts,找不到时再向DNS服务器请求。对于大多数用户不用改动此文件内容。 

相关文件:Linux: /etc/host.conf 

文件内容:order hosts, bind 

          multi on 

   Soalris: /etc/nsswitch.conf 中的hosts

                 hosts files, dns 

 /etc/HOSTNAME 

    功能:设置主机名,不同Linux之间可能有所差别,请使用 

        egrep hostname /etc/rc.d/init.d/* 

        或

         egrep hostname /etc/init.d/* 

        查找相应版本上的主机名设置文件及方法。

  /etc/inetd.conf 

Internet超级服务器,相关程序:/usr/sbin/inetd 

相应服务:

              telnet 

             ftp 

             pop3 

             r*      rsh rcp rlogin(建议最好关闭r服务) 

示例文件内容: 

# inetd.conf    This file describes the services that will be available 

#               through the INETD TCP/IP super server.  To re-configure 

#               the running INETD process, edit this file, then send the 

#               INETD process a SIGHUP signal. 

# Version:      @(#)/etc/inetd.conf     3.10    05/27/93 

# Authors:      Original taken from BSD UNIX 4.3/TAHOE.

 #               Fred N. van Kempen,  

# Modified for Debian Linux by Ian A. Murdock  

# Modified for RHS Linux by Marc Ewing  

#        

# Echo, discard, daytime, and chargen are used primarily for testing.

 # 

# To re-read this file after changes, just do a 'killall -HUP inetd'

 # 

#echo   stream  tcp     nowait  root    internal 

#echo   dgram   udp     wait    root    internal

 #discard        stream  tcp     nowait  root    internal

 #discard        dgram   udp     wait    root    internal 

#daytime        stream  tcp     nowait  root    internal 

#daytime        dgram   udp     wait    root    internal 

#chargen        stream  tcp     nowait  root    internal 

#chargen        dgram   udp     wait    root    internal 

# These are standard services. 

ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a 

telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd 

gopher  stream  tcp     nowait  root    /usr/sbin/tcpd  gn 

# do not uncomment smtp unless you *really* know what you are doing.

 # smtp is handled by the sendmail daemon now, not smtpd.  It does NOT 

# run from here, it is started at boot time from /etc/rc.d/rc#.d.

 #smtp   stream  tcp     nowait  root    /usr/bin/smtpd  smtpd 

#nntp   stream  tcp     nowait  root    /usr/sbin/tcpd  in.nntpd 

# Shell, login, exec and talk are BSD protocols.

 # 

Shell   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd 

login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind 

#exec   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd 

talk    dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd 

ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  in.ntalkd 

#dtalk  stream  tcp     waut    nobody  /usr/sbin/tcpd  in.dtalkd 

# Pop and imap mail services et al

 # 

pop-2   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop2d 

pop-3   stream  tcp     nowait  root    /usr/sbin/tcpd  ipop3d 

imap    stream  tcp     nowait  root    /usr/sbin/tcpd  imapd 

# The Internet UUCP service. 

#uucp   stream  tcp     nowait  uucp    /usr/sbin/tcpd  /usr/lib/uucp/uucico    -l

 # 

# Tftp service is provided primarily for booting.  Most sites 

# run this only on machines acting as "boot servers." Do not uncomment 

# this unless you *need* it.   

#tftp   dgram   udp     wait    root    /usr/sbin/tcpd  in.tftpd 

#bootps dgram   udp     wait    root    /usr/sbin/tcpd  bootpd 

# Finger, systat and netstat give out user information which may be 

# valuable to potential "system crackers."  Many sites choose to disable  

# some or all of these services to improve security. 

# cfinger is for GNU finger, which is currently not in use in RHS Linux 

finger  stream  tcp     nowait  root    /usr/sbin/tcpd  in.fingerd 

#cfinger stream tcp     nowait  root    /usr/sbin/tcpd  in.cfingerd 

#systat stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/ps -auwwx 

#netstat        stream  tcp     nowait  guest   /usr/sbin/tcpd  /bin/netstat    -f inet

 # 

# Time service is used for clock syncronization. 

time    stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.timed 

time    dgram   udp     wait    nobody  /usr/sbin/tcpd  in.timed 

# Authentication 

auth   stream  tcp     nowait    nobody    /usr/sbin/in.identd in.identd -l -e -o 

# End of inetd.conf 

 

linuxconf stream tcp wait root /bin/linuxconf linuxconf --http 

 

 inetd.conf 

相关文件:/etc/servicesSYSV/BSD/Linux相同) 

基本不用编辑,linux自带的已包含大部分服务,Solaris可能需要增加(POP3),参考相应的服务器安装说明,在此文件中列出了所有可用的网络服务。

 示例文件内容: 

# services      This file describes the various services that are 

#               available from the TCP/IP subsystem.  It should be 

#               consulted instead of using the numbers in the ARPA 

#               include files, or, worse, just guessing them. 

# Version:      @(#)/etc/services       2.00    04/30/93 

# Author:       Fred N. van Kempen,  

 文件格式:    服务名称      端口号/协议         服务别名 

tcpmux          1/tcp                           # rfc-1078 

echo            7/tcp 

echo            7/udp 

discard         9/tcp           sink null

 discard         9/udp           sink null 

systat          11/tcp          users 

daytime         13/tcp 

daytime         13/udp 

netstat         15/tcp 

qotd            17/tcp          quote 

chargen         19/tcp          ttytst source 

chargen         19/udp          ttytst source 

ftp-data        20/tcp 

ftp             21/tcp 

telnet          23/tcp 

smtp            25/tcp          mail

 time            37/tcp          timserver 

time            37/udp          timserver 

rlp             39/udp          resource        # resource location 

name            42/udp          nameserver

 whois           43/tcp          nicname         # usually to sri-nic 

domain          53/tcp 

domain          53/udp 

mtp             57/tcp                          # deprecated 

bootps          67/udp                          # bootp server 

bootpc          68/udp                          # bootp client 

tftp            69/udp 

gopher          70/tcp                          # gopher server 

rje             77/tcp 

finger          79/tcp 

http            80/tcp                          # www is used by some broken  

www             80/tcp                          # progs, http is more correct 

link            87/tcp          ttylink 

kerberos        88/udp          kdc             # Kerberos authentication--udp 

kerberos        88/tcp          kdc             # Kerberos authentication--tcp 

supdup          95/tcp                          # BSD supdupd(8) 

hostnames       101/tcp         hostname        # usually to sri-nic 

iso-tsap        102/tcp 

x400            103/tcp                         # ISO Mail 

x400-snd        104/tcp 

csnet-ns        105/tcp 

pop-2           109/tcp                         # PostOffice V.2 

pop-3           110/tcp                         # PostOffice V.3 

pop             110/tcp                         # PostOffice V.3 

sunrpc          111/tcp 

sunrpc          111/tcp         portmapper      # RPC 4.0 portmapper UDP 

sunrpc          111/udp 

sunrpc          111/udp         portmapper      # RPC 4.0 portmapper TCP 

auth            113/tcp         ident           # User Verification 

sftp            115/tcp 

uucp-path       117/tcp 

nntp            119/tcp         usenet          # Network News Transfer 

ntp             123/tcp                         # Network Time Protocol

 ntp             123/udp                         # Network Time Protocol 

netbios-ns      137/tcp         nbns 

netbios-ns      137/udp         nbns 

netbios-dgm     138/tcp         nbdgm 

netbios-dgm     138/udp         nbdgm 

netbios-ssn     139/tcp         nbssn 

imap            143/tcp                         # imap network mail protocol 

NeWS            144/tcp         news            # Window System 

snmp            161/udp 

snmp-trap       162/udp 

exec            512/tcp                         # BSD rexecd(8) 

biff            512/udp         comsat 

login           513/tcp                         # BSD rlogind(8) 

who             513/udp         whod            # BSD rwhod(8) 

 Shell           514/tcp         cmd             # BSD rshd(8) 

syslog          514/udp                         # BSD syslogd(8) 

printer         515/tcp         spooler         # BSD lpd(8) 

talk            517/udp                         # BSD talkd(8) 

ntalk           518/udp                         # SunOS talkd(8)

 efs             520/tcp                         # for LucasFilm 

route           520/udp         router routed   # 521/udp too 

timed           525/udp         timeserver 

tempo           526/tcp         newdate 

courier         530/tcp         rpc             # experimental 

conference      531/tcp         chat

 netnews         532/tcp         readnews 

netwall         533/udp                         # -for emergency broadcasts 

uucp            540/tcp         uucpd           # BSD uucpd(8) UUCP service 

klogin          543/tcp                         # Kerberos authenticated rlogin 

kShell          544/tcp         cmd             # and remote Shell 

new-rwho        550/udp         new-who         # experimental 

remotefs        556/tcp         rfs_server rfs  # Brunhoff remote filesystem 

rmonitor        560/udp         rmonitord       # experimental 

monitor         561/udp                         # xperimental 

pcserver        600/tcp                         # ECD Integrated PC board srvr 

mount           635/udp                         # NFS Mount Service 

pcnfs           640/udp                         # PC-NFS DOS Authentication 

bwnfs           650/udp                         # BW-NFS DOS Authentication 

kerberos-adm    749/tcp                         # Kerberos 5 admin/changepw 

kerberos-adm    749/udp                         # Kerberos 5 admin/changepw 

kerberos-sec    750/udp                         # Kerberos authentication--udp 

kerberos-sec    750/tcp                         # Kerberos authentication--tcp 

kerberos_master 751/udp                         # Kerberos authentication 

kerberos_master 751/tcp                         # Kerberos authenticati

ingreslock      1524/tcp 

tnet            1600/tcp                        # transputer net daemon 

cfinger         2003/tcp                        # GNU finger 

nfs             2049/udp                        # NFS File Service 

eklogin         2105/tcp                        # Kerberos encrypted rlogin 

krb524          4444/tcp                        # Kerberos 5 to 4 ticket xlator

 irc             6667/tcp                        # Internet Relay Chat 

dos             7000/tcp        msdos 

 

# End of services.

 linuxconf       98/tcp          # added by linuxconf RPM 

 

/etc/hosts.allow /etc/hosts.deny (Linux,或使用了tcpd, 参考inetd.conf) 

 

/etc/hosts.allow 设置允许使用inetd服务的机器,如:All:202.118即允许所有来自202. 118.x.x的请求 

/etc/hosts.deny 设置不允许使用inetd的机器 

这两个文件的设定顺序请参考在线文档:

 man tcpd 

man hosts.allow 

man hosts.deny 

Internet 网络服务访问控制文件,对于安全性要求较高的服务器建议采用xinetd替代inetdxinetd debian自带,其他的可以用源代码进行编译安装。 

 /etc/networks  /etc/netmasks 

文件功能:

 列出路由所需要的网络地址,相关命令/usr/sbin/route,当然也可以不使用这两个文件,在维护路由表时可直接使用IP地址及网络屏蔽位。 

Example: 

    /etc/networks 

    dlrin   202.199.128.0 

    /etc/netmasks 

    202.199.128.0 255.255.240.0 

 /etc/passwd 

用户口令文件: 

 /etc/shadow(如果有此文件,系统支持shadow机制) 

$ls -l /etc/shadow 

-rwx------   root   ....    /etc/shadow 

/etc/fstab 

 File System Table 

#设备名    MountPoint   Filesystem Type  加载选项 ... fsck标志 

/dev/hda1       /       ext2    defaults        1       1 

/dev/hda6       /home   ext2    defaults        1       2 

/dev/hda3       /usr    ext2    defaults        1       2 

/dev/hda5       /var    ext2    defaults        1       2 

/dev/hda2       swap    swap    defaults        0       0 

/dev/fd0        /mnt/floppy     auto    sync,user,noauto,nosuid,nodev,unhide   0 

    0 

/dev/cdrom      /mnt/cdrom      auto    user,noauto,nosuid,nodev,ro     0      0 

 none    /proc   proc    defaults        0       0     

   Solairs下对应文件:  /etc/vfstab 

 /etc/exports 

文件功能:NFSNetwork File SystemServer输出文件系统表,最好不使用NFS。 

nfs相关进程:  

     Solaris: mountd , nfsiod 

              /etc/init.d/nfs.server 

     Linux:  内核支持nfs, /proc/filesystem, 也可以通过加载modules实现,

  /etc/defaultrouter (Solaris 2.x) 

   内容为Default Routerip地址

   在linux

        Redhat 5.x: /etc/sysconfig/network 

                GATEWAY=202.118.66.1 

                GATEWAYDEV=eth0   

        Debian: /etc/init.d/network 

                #! /bin/sh 

                ifconfig lo 127.0.0.1 

                route add -net 127.0.0.0 

                IPADDR=202.118.66.88 

                NETMASK=255.255.255.0 

                NETWORK=202.118.66.0 

                BROADCAST=202.118.66.255 

                GATEWAY=202.118.66.1 

                ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast

 ${BROADCAST} 

                route add -net ${NETWORK} 

                [ "${GATEWAY}" ] && route add default gw ${GATEWAY} metric 1  

 /etc/bashrc /etc/csh.cshrc /etc/profile 

    /etc/bashrc  BASH(Bourne Again Shell) RunTime Command  

                Shell Script用的最多 

        系统用户默认的环境设置,PATHumaskTERM Type 

    /etc/csh.cshrc CSH Runtime COmmand  

 /etc/ftpaccess   

    FTP访问控制文件文件位置可变 通过 

    #egrep ftp /etc/inetd.conf 

    ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  in.ftpd -l -a  

ftp服务器守护进程文件名

     #which in.ftpd 

    /usr/sbin/in.ftpd 

    #strings  /usr/sbin/in.ftpd |egrep ftpaccess 

     /etc/ftpaccess  

    相关配置在ftp服务器配置中讲述。 

 /etc/ftpusers 

    不允许ftp的用户列表,一般包括root, uucp, bin等 

 /etc/ftpconvions /etc/ftpgroups   

     FTP服务器配置文件 

 /etc/group   

用户组文件

  /etc/sendmail.cf (Linux)    

SendmailEMAIL服务器)配置文件

     /etc/sendmail.cw           本地主机名 

                主机名: gingko.dlut.edu.cn 

                希望接收[email protected] 

                          [email protected] 

                           [email protected] 

    /etdc/aliases       邮件别名文件 

/etc/aliases.db     邮件别名二进制数据文件newaliases建立 

/etc/sendmail.hf    sendmail 帮助文件,  

     $telnet mailserver 25 

     Trying 202.118.66.8...

      Connected to gingko.

      Escape character is '^]'.

      220 gingko.dlut.edu.cn ESMTP Sendmail 8.9.1/8.9.1; Tue, 2 Feb 1999 10:41:20 +080 

     0 (CST)         

     HELP 

     214-This is Sendmail version 8.9.1 

     214-Topics: 

     214-    HELO    EHLO    MAIL    RCPT    DATA 

     214-    RSET    NOOP    QUIT    HELP    VRFY 

     214-    EXPN    VERB    ETRN    DSN 

     214-For more info use "HELP ". 

     214-To report bugs in the implementation send email to 

     214-    [email protected]

     214-For local information send email to Postmaster at your site.

      214 End of HELP info   

以上目录结构是Linux的目录结构, Solaris 2.x目录结构是:

     /etc/mail/sendmail.cf 

    /etc/mail/sendmail.cw 

    /etc/mail/sendmail.hf 

    /etc/mail/aliases 

    /etc/mail/aliases.db  

 /etc/issue.net

 telnet时显示信息( strings in.telnetd |egrep issue) 

    /etc/motd    用户进入系统后的提示信息

  /etc/named.boot 

     DNS(BIND 4.9.x) 启动文件

      示例文件:(Caching Only Server) 

     directory /etc/namedb 

     primary 0.0.127.in-addr.arpa  named.local 

     cache . root.cache 

     其中root.cache 文件可通过dig得到

     dig @ns.internic.net . ns > /etc/namedb/root.cache 

     named.local文件内容如下:

       @  IN      SOA localhost. root.localhost. ( 

                1999020301 

                10800 

                3600 

                86400 

                86400 ) 

         IN    NS       localhost.

      1  IN      PTR     localhost. 

     /etc/named.conf 

     DNS(BIND 8.1.x) 启动文件

      (Redhat 5.2下可用/usr/doc/bind-8.1.2/named-bootconf.plbind 4.9.x 

     的named.boot文件转换为bind8named.conf文件格式执行过程如下

     /usr/doc/bind-8.1.2/named-bootconf.pl /etc/named.boot > /etc/named.conf) 

       /etc/host.equiv 

    $HOME/.rhosts 

    R*(rlogin, rsh , rcp, rexec)服务信任主机 

    格式:

         主机名(FQDN)    用户列表 

   /etc/ld.so.conf (Linux) 

    动态链接库文件目录列表相应命令ldconfig 

     $LD_LIBRARY_PATH Solaris 下相应的环境变量 

     用ldd 列出相应文件所使用的动态链接库 

     /etc/default[119]ldd /usr/ucb/ls 

       libc.so.1 =>     /usr/lib/libc.so.1 

       libdl.so.1 =>    /usr/lib/libdl.so.1  

     *修改过此文件之后请使用命令ldconfig重新生成目录列表及连接库文件列表。

  /etc/pam.d/login ( Linux Redhat) 

        auth       required     /lib/security/pam_securetty.so  

    /etc/securetty (Linux Redhat, Debian) 

         root可登录的终端设备列表, tty[1-8] 为主控台上的设备

        ttyp* (Linux)远程登录终端(TELNET)设备 

    /etc/default/login (Solaris) 

        # If CONSOLE is set, root can only login on that device. 

        # Comment this line out to allow remote login by root. 

        # 

        CONSOLE=/dev/console   

    注释掉相应的记录即可允许超级用户root从远程主机telnet登录

     /etc/login.defs Linux Debian 登录控制文件 

 Linux Loader /etc/lilo.conf 

    多重启动文件,  

    **** 修改完此文件后一定需要执行lilo,  

    **** 重新编译安装新的linux kernel修改此文件并执行lilo 

 /etc/syslog.conf  

    syslogd configuration file,  

 /etc/smb.conf 

    SAMBA  服务器配置文件,linux的文件系统与Windows 9x/NT共享 

 /etc/nologin 

系统在要关机时不希望用户登录进来,就产生此文件,此文件内容为显示给用户的有关拒绝连接的信息,用户此时就不能进入系统。当系统重新启动时如果有此文件,则机器启动后任何用户不能使用系统,此时可考虑从软盘或光盘引导删除此文件,然后再重新启动系统。 

 /etc/security 

设定那些终端可以让root登录,一般情况下设定为只有console上的用户可能用root

 注意:使用了PAM机制后,相应的文件为/etc/securetty。 

 /etc/X11/* 

XFree86配置文件。 

 /etc/Shells 

用户可以使用的Shell列表,如果强行修改/etc/passwd文件,也可以使用不在列表中的Shell程序,但对于Shell不在此列表中的用户将无法使用FTP连接本系统。 

 /etc/mtab 

系统在启动时创建的信息文件,内容为已经mount的文件系统,此文件内容是动态更新的,参考/proc/mounts。 

10.3  目 录 管 理 

1.建立目录 

创建目录的命令为:mkdir。 

其格式为:mkdir   目录名 

mkdir命令可以同时创建多个子目录,如“mkdir dir1 dir2”,此时创建的子目录dir1dir2是当前目录的同级子目录。如果要同时创建子目录和它之下的子目录,则使用mkdir命令的“-p”选项,如“mkdir p dir1/dir2”,则dir2dir1的子目录。 

2.删除目录 

删除目录的命令为:rmdir

 其格式为:rmdir   目录名 

rmdir命令只能删除空目录。如果希望删除指定目录以及该目录下的所有文件和子目录,则使用rmdir命令的“-r”选项,如“rmdir r dir1”,则删除目录dir1,以及它之下的所有文件和它的子目录。 

3.显示目录内容 

显示目录内容使用的命令为:ls。 

其格式为:ls [选项] [目录名(文件名)

ls命令的具体情况在常用命令介绍一章中作了详细介绍,这里不在重复。 

4.移动目录及改名 

移动目录使用的命令为:mv

 其格式为:mv  源目录名 目标目录名 

如果目的目录名不存在,则把源目录名改为目标目录名,如果目标目录名已经存在,则把源目录移动到目标目录之下,作为它的子目录。 

5.复制目录 

复制目录使用的命令为:cp

 其格式为:cp r 源目录  目标目录 

注意:复制目录完成后,源目录和目标目录都存在,而移动目录完成后,源目录将不存在。

 6.确定当前目录 

确定当前目录使用的命令为:pwd 。它不带任何参数,显示用户当前所在的目录。 

7.改变工作目录 

改变工作目录使用的命令为:cd。 

其格式为:cd [路径名

其中路径名可以是绝对路径,也可以是相对路径。如果省略路径名,则转到用户的注册目录中。可以用“cd..”命令移回到父目录。此外,若路径名用“-”代替则转到上一次cd操作所在的目录。

 习题 

1Linux文件名中不能含有:(   )

 A.空格     B.“”      C.“*”     D.“?”      E.“$” 

2.系统正常运行时要改变的数据存放在:(   ) 

A. /        B. /proc    C. /dev     D/var 

3Linux_____表示当前目录。(   ) 

A*         B.        C..          D?  

 

 

11章  文件和目录操作

本章内容提要 

 

本章目的是使用户会列出文件,能删除和复制文件,会改变文件属性,能压缩和解压文件;能实现LinuxWindow9X资源共享。 

前面两章分别介绍了Linux文件系统及文件系统中的文件和目录。本章将详细介绍针对文件和目录的操作。

 

本章重点内容 

 

☆ ls列出文件 

☆ 文件的删除和复制

☆ 文件属性操作 

☆ 压缩和解压 

☆ 用fsck检查文件系统完整性 

☆ 用badblocks检查磁盘错误

☆ 文件碎片

☆ linux和 Window9X资源共享

☆ 文件系统疑难解决  

  

 

11.1  文件基本操作 

11.1.1  列文件 

列文件和目录的命令为:ls,其格式为: 

ls [option] [-color] [-help] [version] [filename] 

其中,option选项及其意义如下: 

-a:列出所有文件,包括那些以:“.”开头的文件。 

-b:强制显示非图形字符,并以八进制表示。 

-c:排序时不按字母顺序排列,而是按文件的最后时间排列。 

-d:如果后面接的是一个目录,那么使用该参数使得只输出该目录的名称。 

-f:不对目录中的文件排序,而是直接按照文件在磁盘中的存放顺序显示。 

-I:显示每个文件的索引节点。

 -k:以千字节为单位显示文件条目。

 -l:使用长模式显示文件条目,包括连接数目、所有者、大小、最后修改时间、权限等。

 -m:水平排列文件名,每行能放置多少文件名就放置多少。 

-n:列出每个文件的所有者的用户ID和组ID。 

-p:在文件名前面加上一个字母说明文件类型。

 -q:将文件名中的非图形字符显示为?。 

-r:按字母顺序反向显示文件条目。 

-s:以千字节为单位显示文件大小。 

-t:按文件修改时间进行排序,而不是使用文件名排序。 

-u:使用文件的最后访问时间进行排序。 

-x:强制多列输出,每一行进行排序。 

-A:功能与-a相同,但是不列出“.”,“..”目录。 

-B:不列出以“-”结尾的文件,除非是在命令行中特别指出。

 -C:强制多列输出,每一列进行排序。 

-F:在文件名末尾使用一个符号来表示文件类型。 

-G:当使用长格式显示时,不显示相关组信息。 

-N:不显示文件名。 

-R:递归列出所有目录及其子目录内容。

 -S:按文件大小排序,大的文件排在前面。 

164  11章  文件和目录操作

 -X:按文件扩展名排序,没有扩展名的文件排在前面。 

-l:按一行一个文件的形式显示文件。 

-color:切换到彩色显示模式。 

-help:显示ls的简单帮助。

 -version:打印版本信息后退出。 

11.1.2  复制文件 

复制文件使用的命令为:cp

 其格式如下:cp [选项源文件或目录 目标文件或目录 

该命令的功能是将选定的文件或目录拷贝到指定地点,它的功能非常强大。 

该命令的选项及其意义如下: 

-a:该选项通常在拷贝目录时使用,它尽可能保持原有的文件属性和目录结构。 

-d:复制时保留链接。 

-f:强制删除复制目标的所有文件而不给出提示。 

-I:和f选项相反,在覆盖一个文件之前将给出提示。 

-p:此时cp除复制源文件的内容外,还保留原文件的所有属性,如权限、所有者、组等等。

 -r:若给出的源文件是一目录文件,此时cp将递归复制所有的文件。 

-l:不作拷贝,只是链接文件。

 11.1.3  删除文件 

Linux中创建文件很容易,当文件变得没有用处时,用户可以用rm命令将其删除。

注意,当要删除一个文件时,首先用户必须拥有对该文件的读/写权限,或者用户就是该文件的所有者。rm命令格式如下: 

rm [option] 文件名; 

rm -r [option] 文件名;  

前一种格式用于删除文件,后一种格式用于删除目录,及其下的所有文件和子目录中的所有文件。对于链接文件,只是删除了链接,原有文件均保持不变。 

该命令中的选项及其意义如下:

 -f:当指定文件不存在时,不给出提示。 

-r:将参数中列出的目录和子目录,以及其下所有文件删除。

 -I:进行交互式删除。

 -v:显示被删除的文件的信息。 

使用rm命令要特别小心。一旦一个文件被删除,它是不能被恢复的。所以建议用户使用rm命令中的i选项来确认要删除的每个文件。如果用户输入y,文件将被删除。否则文件将被保留。 

11.1.4  移动和重命名文件 

用户可以使用mv命令来移动文件到另一个目录中,或者为文件重新命名。mv命令的格式如下: 

mv [option] 源文件 目标文件或目录 

如果第二个参数是一个已存在目录,则该命令把源文件移入该目录中,如果第二个参数是目标文件,则mv命令完成文件重命名。 

11.2  文件属性操作 

11.2.1  改变访问权限 

Linux使用chmod命令来改变文件访问权限,但是只有用户对某文件拥有“写”(w)权限时,才可以改变该文件的权限。超级用户可以改变所有文件的权限。用户可以利用Linux系统提供的chmod命令来改变文件或目录的访问权限。该命令有两种用法: 

1.文字设定法 

采用这种方法时,chmod命令格式如下:

 chmod [用户选项] [操作符] [模式文件名文件名2  

其中,用户选项可以是下面几种选择: 

u:文件或目录的所有者。

g:所有者同组的用户。 

o:其他用户。 

a:所有用户。

 操作符可以是下面几种选择: 

+:添加某个权限到原来的权限上。 

-:从原权限中取消某个权限。 

=:用给定权限替代其他所有权限。 

模式可以有下面几种选择: 

r:读权限。

w:写权限。

x:可执行权限。

 2.数字设定法 

除了使用字母“r”“w”和“x”设置权限外,也可以使用数字代替。用数字表示的属性的含义:0表示没有权限,1——可执行权限,2——可写权限,4——可读权限,然后将其相加。所以数字属性的格式应为3个从07的八进制数,其顺序是:所有者、同组用户、其他用户。例如,如果想让某个文件的所有者有“读//执行”三种权限,需要把4(可读)+2(可写)+1(可执行)=7(读//执行)。使用数字设定法,chmod命令的格式为:

 chmod [模式文件名 

其中,模式也可为:r,w,x。其含义与文字设定法中的相同。例如: 

$ chmod 644 aa.txt 

则文件aa的所有者有读/写权限,所有者同组用户有读权限,其他用户也有读权限。 

11.2.2  改变组属 

改变文件或目录所属的组使用chgrp命令,其格式为:

  chgrp [选项新组 文件名文件名2   

其中,选项的意义是: 

- R:递归式地改变指定目录及其下的所有子目录和文件的属组。 

该命令改变指定文件所属的用户组。其中新组可以是用户组的ID,也可以是用户组的组名。文件名支持通配符,如果用户不是该文件的所有者或超级用户,则不能改变该文件的组。要把某个用户设置为某文件的所有者,应该使用chown命令,该命令的格式为: 

  chown [选项用户/组 文件名文件名2  

其中,选项的意义是: 

- R:递归式地改变指定目录及其下的所有子目录和文件的拥有者。 

Chown:将指定文件的拥有者改为指定的用户或组。 

11.2.3  查看文件内容 

用户需要查看一个文件的内容时,可以选择以下的命令。 

1cat命令 

cat命令将一个文件的全部文本一次全部送往显示设备,所以cat命令适合与查看小文件。它的格式如下: 

cat [ option ] 文件 

其中选项及其意义如下: 

-v:用一种特殊形式显示控制字符,除去LFOTAB。 

-T:将TAB显示为“^I。该选项需要与- v选项一起使用。 

-E:在每行的末尾显示一个$符。该选项也需要与- v选项一起使用。

 -u:输出不经过缓冲区。 

-n:显示输出行的编号。 

-b:显示非空输出行的编号。  

-e:相当于- vE。  

-A:相当于- vET。 

-t:相当于- vT。  

2more命令 

当文件内容过多时,一般可用more等命令分屏显示,以免因屏幕滚动太快而无法看清。它一次只显示一屏的文本,显示满之后,停下来,按f键或【Space】可进入下一屏。more命令使用范围很广,功能强大。其格式为: 

more [ option ] 文件 

其中选项及其意义如下: 

more命令中各个选项的含义为: 

-p:显示下一屏之前先清屏。 

-c:作用同- p基本一样。

 -d:在每屏的底部显示更友好的提示信息:  

- - More- - XX%[Press space to contiune , q to quit . ]  

而且如果用户输入的命令不对,则会显示出错信息。

 -l:忽略< Ctrl+l >(换页符)。如果没有给出这个选项,那么在显示了一个包含有< Ctrl+l >字符的行后将会暂停显示,并等待接收命令。 

-s:把文件中连续的空白行压缩成一个空白行显示。 

此外,more命令在显示完一屏内容之后,将停下来等待用户输入某个命令。more命令在执行中用到的一些常用命令如,其中i代表的是行数。 

i空格:显示下面的i行,若不指定i值,则显示下一整屏。 

i回车:显示下面的i行;i的默认值为1。 

按【CtrlD】:显示下面的i行;i的默认值为11

id 同上 。 

iz 同“i空格”类似,不过i将成为以下每屏的默认行数。

Is:跳过下面的i行再显示一屏。i的默认值为1。 

if:跳过下面的i屏再显示一屏。i的默认值为1。 

按【CtrlB】:往回跳过i屏,再显示一屏。i的默认值为1。 

qQ:退出more。 

=:显示当前行号。 

h:显示各命令的帮助信息。 

·重复上次键入的命令。 

11.2.4  压缩和解压 

减少文件大小有两个明显的好处,一方面可以减少存储空间,另一方面可以减少网络传输的时间。在Linux系统中经常使用gzip命令对文件进行压缩和解压缩。gzip命令格式为: 

gzip [选项文件名 

其中,选项及其意义为: 

-c:将输出写到标准输出上,并保留原有文件。 

-d:将压缩文件解压。 

-l:对每个压缩文件,显示下列信息: 

压缩文件的大小 

未压缩文件的大小 

压缩比 

未压缩文件的名字 

-r:查找指定目录并压缩其中的所有文件或者把它们解压。 

-t:检查压缩文件是否完整。 

-v:对每一个压缩和解压的文件,显示文件名和压缩比。

-num 用指定的数字num调整压缩的速度,-1表示最快压缩方法,-9表示最慢压缩方法。系统默认值为-6。 

例如: 

$ gzip aa.txt 

aa.txt压缩成aa.txt.gz; 

$ gzip -d aa.txt 

aa.txt.gz 还原成aa.txt。 

11.2.5  fsck检查文件系统完整性 

文件系统很复杂,因此易于发生错误。可以用fsck命令检查文件系统是否正确和有效。它可以根据指令修复找到的小错误,并将未修复错误报告用户。幸运的是,文件系统的代码非常有效,所以极少出现问题,并且问题通常原因是电源失败、硬件失败或操作错误,例如没有正常关闭系统。  

大多数系统设置为启动时自动运行fsck ,因此任何错误将在系统使用前被检测到(并根据希望修正)。使用有错误的文件系统可能使问题变得更坏:如果数据结构有问题,使用这个文件系统可能使之更糟,导致更多的数据丢失。当然,在大的文件系统上运行fsck 会花一定的时间,如果系统正常关闭,几乎从不发生错误,因此有一些方法可以不进行检查。如果文件/etc/fastboot存在,就不检查。另外,如果ext2文件系统在超级块中有一个特定的标记告知该文件系统在上次mount后没有正常unmountezfsck检查系统;如果标记指出unmount正常完成(假设正常unmount指出没问题),e2fsckfsck ext2文件系统版)就不检查系统。/etc/fastboot 是否影响系统取决于您的启动方式,但ext2标记则在您使用e2fsck 时发生作用——基于一个e2fsck选项(参阅e2fsck手册页)。 

自动检查只对启动时自动mount的文件系统发生作用。使用fsck手工检查其他文件系统,比如软盘。如果fsck发现修复的问题,则需要深入了解文件系统的一般工作原理和有问题的文件系统的细节或好的备份。最后一个办法容易(虽然冗长)安排,如果自己不知道,有时可以通过朋友、Linux新闻组、电子邮件列表或其他支持源安排。  

fsck只能运行于未mount的文件系统,不要用于已mount的文件系统(除了启动时的只读根文件系统)。这是因为它存取原始磁盘,在操作系统不知道的情况下修改文件系统。

There will be trouble, if the operating system is confused.。 

11.2.6  badblocks检查磁盘错误 

应该周期性地用badblocks 命令检查坏块,它输出找到的所有坏块的编号的列表。列表将fsck 记录在文件系统数据结构中,使操作系统存储数据时不使用这些坏块。举例:  

$ badblocks /dev/fd0H1440 1440 > bad-blocks  

$ fsck -t ext2 -l bad-blocks /dev/fd0H1440  

Parallelizing fsck version 0.5a (5-Apr-94)  

e2fsck 0.5a, 5-Apr-94 for EXT2 FS 0.5, 94/03/10  

Pass 1: Checking inodes, blocks, and sizes  

Pass 2: Checking directory structure  

Pass 3: Checking directory connectivity  

Pass 4: Check reference counts.  

Pass 5: Checking group summary information.  

/dev/fd0H1440: ***** FILE SYSTEM WAS MODIFIED *****  

 /dev/fd0H1440: 11/360 files, 63/1440 blocks  

$  

如果badblocks报告一个块已经使用,e2fsck将试着将此块移到其他地方。如果该块真的坏了,而不是在坏块边缘,文件内容可能丢失。  

11.2.7  文件碎片 

文件写到磁盘时,不一定在连续的块中。没在连续块中的文件叫碎片。因为磁盘的读写头会更多地移动,所以读碎片文件会花较长的时间。虽然有好的读前缓冲系统将保证不会有什么问题,但最好还是避免碎片。  

Ext2文件系统试图使碎片最少,即使不能将一个文件的所有块存在连续扇区中,也尽量靠近。Ext2通常有效地安排里文件其他块最近的空闲块,因此很少需要关心碎片问题。

Ext2文件系统有一个消除碎片程序。  

有许多MS-DOS消碎片程序在文件系统中移动块以消除碎片。其他一些文件系统,消碎片必须通过备份——重产生——回存文件系统来完成。对于所有文件系统,消碎片应该备份文件系统,因为很多原因可能在消碎片过程中导致错误。  

11.2.8  ext2文件系统的其他工具 

除了产生文件系统的mke2fs 和检查文件系统的e2fsck直接或通过与文件系统类型无关的前端存取外,Ext2文件系统还有几个有用的工具。tune2fs将调整文件系统参数,一些有用的参数有:  

 最大mount数。当文件系统被mount过多少次以后,即使标志是干净的,e2fsck强制检查。对用于开发或测试的系统,应该降低这个限制数。  

 最大检查间隔。到达这个间隔时间,即使标志是干净的,e2fsck强制检查。如果文件系统不是经常mount,可以不使用这个功能。  

 保留给root的块数。Ext2root保留一些块,这样如果文件系统满了,还可能无须删除任何东西做系统管理。保留量默认是5%,这在大多数磁盘上不会造成浪费。当然,软盘没有理由保留块。  

11.3  LinuxWindows 9X资源共享 

11.3.1  Linux下共享Windows 9X的资源  

Linux下面读写Windows 9X/Windows 3.X/DOS的逻辑盘是相当容易的,无需安装任何其他软件,Linux自身就带有mount命令。读写前只要Mount上相应的分区就可以了。假设在Linux下要使用上述系统中Windows 98的某个文件,则只要以root身份运行以下命令:  

#mount /dev/hda1 /mnt  

位于Linux根目录下面的/mnt默认应该是空的,当然也可以建立其他的空目录,如用DOS_D来方便挂接其他设备。红旗linux内核均已经支持FAT32分区和Windows下的长文件名。mount后进入/mnt目录,就可以读写DOSC盘中的任何内容了。不过读者会发现,这样做没有长文件名。如果想在Linuxmount Windows分区后看到长文件名,还需要额外指定一下分区或文件系统类型,即运行以root运行mount -t vfat /dev/hda1 /mnt命令(如果已经mount了,请先运行umount将其卸载再mount。实际上,mount时应该指定分区类型的,不过现在的Linux也越来越智能化了。),这样就可以看到长文件名了。mount后,就可以开始安装在Windows下面下载的Linux软件,也可以用Linux下面的GTK see来看看Windows盘中的图形图像……,由于是可读可写的,因此几乎可以“为所欲为”。假设Linux分区中剩余空间少,而Windows中剩余空间还有一大堆,则可以将需要下载的大文件下载到Windows的分区中,然后再安装/使用。  

如果在Linux下面用vi编辑一个DOS/Windows下的文本文件,如CONFIG.SYS,可以发现在文件的每一行的最后面都有一个^M。这也是在Linux下面按【Enter】和DOS/Windows下按【Enter】的不同之处。DOS下的【Enter/Return】不但换行,而且回车(Carriage Return,即光标回到最前面),而Linux下面的Enter只是换行。熟悉vi的读者应该很容易就解决这个问题,只要做一下全程的替换就行了。除此以外,还有fromdos之类的命令可以处理这个问题。  

如果您的Windows/DOS所在的硬盘采用的是FAT16格式,则仍然可以用-t msdos方式进行mount,不过会丧失诸如长文件名等一些功能。要改进也很容易,只要自己编译一个高版本的内核即可。对熟手来说,编译内核相当简单,在这里就不多讲了。顺便讲一下,Linux下面要检验除显示方面以外的硬件的稳定程度,最好的办法就是编译内核。如果您的系统连续编译内核20次毫无问题,可以认为是稳如磐石的。)  

假如经常要在Linux下面使用DOS分区的内容,最好让Linux启动后自动将相应的分区mount上,只要修改/etc/fstab即可达到这个效果,下面是Linux/Windows系统中Linux/etc/fstab文件的内容,启动后,系统将自动mount Windows 9XD盘和E盘。  

# cat /etc/fstab 

/dev/hda3   /            ext2   defaults   1 1 

/dev/hda2   swap         swap   defaults   0 0 

/dev/fd0    /mnt/floppy  ext2   noauto     0 0 

none        /proc        proc   defaults   0 0 

 /dev/hda5   /dos_d       vfat   defauts    1 1 

/dev/hda6   /dos_e       vfat   defauts    1 1 

Linux下面,不但可以读写DOS/Windows 3.X/Windows 9X分区,还可以读Windows NTNTFS分区。不过目前对NTFS分区还只能读,不能写。 

11.3.2  Windows系统中使用Linux分区的资源  

目前在Windows 9X系统中使用Linuxext2分区的内容还限于只读,且需要安装额外的软件。可以安装的是fsdext2,它是基于GPL版权的,可以从http://www.globalxs.nl/home /p/pvs下载最新版本,作者的Email地址是[email protected]。国内许多有Linux资源的ftp服务器上都有这个软件,一般在LetWindowsReadLinuxWorkWithOtherOS之类的目录里面。这个软件相当小,安装使用也极其方便。  

1.安装  

从网上下载的应该是一个zip文件,用Unzip/PkunzipWinZip将其解压到一个目录内(如c:\mntlinux目录。用命令行的解压命令时,不要忘记加上“-d”参数以便恢复目录结构),然后进入此目录,运行里面的intall.bat即可完成安装。打开install.bat可以发现,install过程只是简单拷贝vext2d.vxd 到 Windows 9Xsystem目录,拷贝tsdext2.vxd Windows 9Xsystem\iosusbsys 目录。为使用方便,最好在autoexec.bat中将c:\mntlinux加入搜索路径中。然后只要将系统再重新启动一次就可以使用了。  

2.使用  

假设要在Windows 98中使用Linux分区下的内容,则只要在运行以下命令即可:mount /dev/hda6 h:  

此时打开My Computer(我的电脑),或者按一下【F5】对此进行刷新,可以看到F盘后面多了一个盘符H,这就是 Linux分区的内容。用Explorer打开看看,所有的文件都历历在目,甚至包括平时只有root 才能读写的/etc/shadow文件。不过要记住,目前fsdext2Linux分区还只是只读的,不能改写Linux分区中文件的内容,也不能往Linux分区中加入其他文件。运行mount命令时,也可以不指定盘符,此时系统会自动找第一个空余的盘符。  

如果想要卸载(umount),也很容易,如果Windowslinux分配的是G盘,只要在命

令行上运行mount /u g:mount g /u就可以将G盘卸载掉。如果提示出错,则看看是否打开了G盘中的文件,或者当前某个DOS窗口在还G盘的某个目录内,总而言之,此时需要卸载的盘不能处于“忙”的状态。检查一下,修正错误后可以立即再umount。  

11.4  文件系统疑难解决 

1.如何压缩可执行文件?  

Linux下有一个类似dos里的pklitelzexe 的命令——gzexe。而且压缩率一般都可以超过50%,在空间紧张时很有用。比如:/dosc/temp# ls -al 

total 148 

-rwxr-xr-x 1 root root 149564 Dec 8 15:33 gawk 

/dosc/temp# gzexe gawk 

gawk: 54.5% 

/dosc/temp# ls -al 

total 216 

-rwxr-xr-x 1 root root 68710 Dec 8 15:36 gawk 

-rwxr-xr-x 1 root root 149564 Dec 8 15:33 gawk~ 

/dosc/temp# 

2.如何查看Linux启动时的信息? 

Linux启动时屏幕显示的信息来不及看清就一闪而过,如果对这些信息感兴趣的话,可以在启动完后用命令dmesg查看。 

3.如何处理文件名内含有特殊字符的文件? 

如果想删除一个名叫 file的文件,键入rm -file会显示invalid option,原来由于文件名的第一个字符为-Linux把文件名当作选项了,可以用双引号把整个文件名括起来,这样就不会把-file当成命令参数了。

 4.如何一次处理一整个目录?  

Linux/UNIX 的很多常用命令如rmcp等都有一个参数-r,是递归的意思。命令里加了参数-r就可以对目标目录及其下所有子目录进行操作,如:rm -rf /testfforce意为强行),该命令完全删除根目录下的子目录test,作用类似于dos下的deltree,当然使用这个命令时要特别小心。再如:cp -r /test /test1有类似dosxcopy /s的作用。 

5.有哪些有用的别名?  

几个能方便操作和减少误操作的别名,建议把它们放到启动文件里,如/etc/bashrc。 

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

前三个别名的作用是在删除、覆盖文件之前先提示确认,红旗已经自动加上了,强烈建议Slackware的用户也加上,因为Linux/UNIX下文件一旦删除就再也无法恢复了。

alias l='ls -l' 

alias cd..='cd ..' 

alias utar='tar xvfz' #解 *.tar.gz 文件 

alias inforpm='rpm -qpi' #显示rpm包的信息 

alias instrpm='rpm -Uhv' #安装rpm

 alias listrpm='rpm -qpl' #rpm包内的文件 

alias uistrpm='rpm -e' #反安装rpm包 

6.如何使用命令补齐? 

所谓命令补齐(Command-Line Completion)是指当键入的字符足以确定目录下一个惟一的文件时只须按【Tab】键就可以自动补齐该文件名的剩下部分。例如要把目录/freesoft下的文件gcc-2.8.1.tar.gz 解包,当键入到tar xvfz /freesoft/g时如果该文件是该目录下惟一以起头的文件的话就可以按下【Tab】键,这时命令会被自动补齐为:tar xvfz /freesoft/ gcc-2.8.1.tar.gz,非常方便。 

7.如何拷贝与粘贴?

 字符界面:不管是Slackware 还是红旗,安装后每次启动时都会自动运行一个叫gpm的程序,该程序运行后就可以用鼠标来拷贝与粘贴了。具体做法是按住鼠标左键拖动使要拷贝的地方反白,这时反白的区域已经被拷贝,再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了。X Window下:拷贝的操作与字符界面下一样,三键鼠标的话,按中键粘贴,两键鼠标的话同时按左右键粘贴(须在配置XF86时在鼠标的设置里选择Emulate 3 Button)。

 8.如何快速进入某些目录?  

键入cd ~ 可进入用户的home目录。键入cd - 可进入上一个进入的目录。 

9.如何显示文件的类型?  

用命令file可以知道某个文件究竟是ELF格式的可执行文件还是Shell Script文件或是其他格式,例如:#file startx。 

10.如何命令文件的路径? 

当您键入一些命令如findshutdownmountstartx时是否想过要知道这些文件究竟放在哪个目录里,用命令whereis可以实现。如 #whereis startx。 

11.如何查找文件?  

find命令要加一些参数才能查到文件,如:#find /usr -name XF86Setup -print /usr里查找文件XF86Setup。如果想知道一个文件到底在哪个路径,可以用whereis filename。 

12.如何删除无用的core文件?  

程序运行出后有时候会产生一个名为core的文件,这个文件一般很大而且没什么用,可以删除掉以释放空间。

 13.如何一次解开.tar.gz文件?  

解开.tar.gz文件一般要先用gunzip解压再用tar解包,在Linux下可以一次完成,如:#tar zxpvf sample.tar.gz

 14.如何显示Windows 95分区里的长文件名?  

如果发现Windows 95分区里的长文件命不能显示,可以重新用vfat方式来mount。对于启动时就mount的分区可以修改文件/etc/fstab,将里面的msdos字样改为vfat。如果无法用vfat mount,则要重新编译一下核心,加入对vfat的支持。 

15.如何计算文件数和目录数  

下面的语句可以帮用户计算有多少个文件和多少个目录: 

# ls -l * |grep "^-"|wc -l ---- to count files  

# ls -l * |grep "^d"|wc -l ----- to count dir  

还可以将以上的语句变成Script

 16.如何只查看文件的某几行?  

如果只想看文件的前5行,可以使用head命令,如:  

head -5 /etc/passwd  

如果想查看文件的后10行,可以使用tail命令,如:  

tail -10 /etc/passwd  

查看文件中间一段可以使用sed命令,如:

 sed -n '5,10p' /etc/passwd  

这样就可以只查看文件的第5行到第10行。  

 17.某个分区mount出来是只读,如何解决?  

mount -v可以看到那个分区是可读写的,可是就是没法写进去,老是说这是一个read-only filesystem

 可按如下方法解决: 

A: mount -n -o remount,rw <安装点>  

习题 

1ls中的参数-a表示(   )。 

A.强制显示非图形字符,并以八进制表示 

B.排序时不按字母顺序排列,而是按文件的最后时间排列; 

C.如果后面接的是一个目录,那么使用该参数使得只输出该目录的名称; 

D. 列出所有文件,包括那些以:“.”开头的文件; 

2.检查文件系统完整性的命令是(   )。 

Afsck 

Bmv 

Cmount 

Dcp 

 

 

12章  核心升级和应用软件安装

章内容提要 

 

现在,有越来越多的人开始接触Linux、安装Linux、使用Linux,网络上,越来越多的企业使用Linux来架构自己的系统,同时也有越来越多的人讨论着与Linux相关的话题。

显然,Linux已经渐渐步入我们的生活了。 

现在人们接触因特网的机会越来越多,使用者可以方便地使uxFTP来获得新的软件。因此,通过各种渠道获得软件并自己动手将取得的软件安装到自己的Linux系统中,便显得越用来越重要。

 

本章重点内容 

 

☆ 软件升级和安装的一般步骤 础☆ 如何升级核心 

☆ 常见应用软件如Oraclee-office的安装 

☆ 重点掌握应用软件的安装和核心升级,掌握命令targzipmake等命令的使用

12.1  升级和安装概述 

12.1.1  取得Linux软件 

首先,从因特网中FTP服务器上下载的文件,其格式大多是下列几种中的一种: 

1*.tar -- 直接用tar将所有文件打包。  

2*.gz*.z -- 使用Gzipcompress压缩的文件。  

3*.tar.-- 先使用 tar 将文件打包后,再用 Gzip compress 将该文件压缩后的文件。  

为了节省储存空间以及提高传输效率,绝大部分软件都是经过压缩处理,才放在服务器上供人们下载的。因此,在获得这些软件后要做的第一件事,就是对该软件进行解压。

现在以一些常见的储存格式为例,来说明解包的方法。 

12.1.2  解包工具 

1tar:其功能是将多个文件打包成一个合并的文件。软件作者可将所有文件打包成一个文件。使用者也要用tar来将这些文件解包。 

2GzipGNU Zip是一个在UNIX系统中常用的压缩、解压缩命令。Gzip压缩过的文件大都会在文件名后面加上.gz.z。 

3compressUNIX系统中传统的压缩命令,它可以压缩文件以减小文件的大小,compress压缩过的文件名后会加上.Zcompress文件保留原文件的权限和一些时间属性。 

4zcatzcat命令的功能是解压缩由compressGzip命令产生的压缩文件,并把结果送标准输出设备,且保留原压缩文件。 

5zless:与zcat类似,可以直接查看一个由Gzip压缩的文件内容。

 这些是常用的文件打包、压缩工具,下面来看一些实际的例子。 

myfile.tar.gz为例,这种类型的文件是由tar打包后再由Gzip压缩的产物。对于这个文件的解包方法是,先使用Gzip将该文件解压缩为原始的tar文件,然后执行tar将这些被打包在一起的文件一一还原。  

1.用Gzip解压缩  

Gzip -d myfile.tar.gz  

Gzip d 文件名”是解压缩的使用方法,在执行过解压缩的处理后,原来的压缩文件将不存在,而仅仅保留解压缩后的文件,不会额外占用磁盘空间。所以在执行完此命令后,将看不到原先的myfile.tar.gz而只有 myfile.tar。 

2.执行tar将文件解开  

用“tar xvf 文件名”的方式将一个tar文件解开。tar对文件名没有特别规定,因此,在使用tar时,要给予完整的文件名,否则tar会找不到要处理的文件。  

tar xvf myfile.tar 

3.查看压缩文件的内容  

由于tar可将多个指定目录的文件打包产生成一个文件,在这个文件中不仅含有原文件的内容,也包括了文件目录以及文件属性,因此用户在解开一个tar格式的文件之前,最好也了解一下这个tar文件内的目录结构,以免解开后,文件产生到其他目录中。  

下面的命令可以让用户知道myfile.tar中究竟包含了哪些文件。  

tar tvf myfile.tar  

同样,Gzip也提供此类的功能,用户可以使用Gzip -l来查看压缩文件中的内容。  

Gzip -l myfile.tar.gz  

注意:在使用“tar xvf文件名”解开文件时, tar 会根据所记录的每个原始文件所在目录来解开这些文件, tar 在执行时,会先在当前目录里找这个目录,如果找不到就建立该目录,然后逐一建立文件。  

举个例子来说,现有一个tar文件要解开,可以先使用“tar tvf 文件名”的方式查看该内容,发现列出来的文件名开头都是usr/local/。在这个情况下,如果在$HOME目录下进行解包,那么tar将在该目录下分别建立usr/local/ 等目录。由此可见,此时用root身份在根目录解包比较恰当。所以在处理一个不知内容的tar文件前,先看一下文件内的目录结构是必要的。  

4.综合应用  

经过上面的说明,读者应该已经会正确地解开一个软件包了,不过上面的方法是最规矩的方式,或称之为分解动作,下面要讲的是其综合应用。  

例如,要查看/SOURCE中的myfile.tgz的内容:  

zcat /SOURCE/myfile.tgz | tar tvf -  

其中, 

1zcat将一个Gzip压缩文件解开并输出到标准输出设备;  

2)通过管道功能,将zcat的结果转向tar来处理;  

3tar tvf来查看文件内容;  

4)使用“-”是告诉 tar 要处理的文件资料是由标准输入设备而来的。 

要解开文件时使用:  

zcat /SOURCE/myfile.tgz | tar xvf -  

执行结果和原先分步执行结果不同的是:压缩文件仍然存在。这些都可以达到解开文件的目的,可以随个人喜好来选择不同的方法。  

12.1.3  安装和升级的限制 

下面开始安装软件。新软件的原始文件解开后,接下来就是查阅作者附在里面的一些文件,如README.xxxRELEASESETUPTODOdocINSTALLChangeLog等文件。因为,在这些文件里往往会有些主要功能的说明,由于编译时系统环境的限制,如OS版本、GNU C版本、内存以及软件环境参数设置的方式和软件安装的步骤各不相同。所以,必须要阅读这些资料以免造成遗憾,同时应注意以下几个方面。 

1Linux系统版本的限制 

Linux版本更新速度相当快,所以如果该软件使用到较新版本的特有功能时,则该软件无法在旧版本的Linux系统中执行。 

2GNU CC Runtime  Library版本的限制  

在直接安装软件的可执行文件时,如果Runtime Library的版本与作者编译该软件时的版本差异过大,就会产生错误导致无法执行。如果要重新编译该软件并且该软件用到一些新版才提供的函数时就会发生编译错误。因此,如果有此限制时,只有放弃该软件或升级系统两种选择。  

3.内存、硬盘的限制  

有一些软件在编译或执行时有特定的要求,如系统的内存或硬盘空间。如果没有注意到这一点,就有可能花了很多功夫结果得到的是一个错误讯息。   

4.其他相关软件  

有一些软件会使用到其他软件,因此,如果系统没有此相关软件,那也没法安装该软件。 

5.软件安装步骤说明  

对于较为复杂的软件,作者为了利于使用者正确安装,一般说来都会附上一份简要的安装说明。所以如果有这类文件最好看一下。

6.其他方面  

有些软件有多个更新版本,可能会附有文件来说明每个版本更新的主要内容以及错误修正的情况,像这类文件也可以参考。  

如果该软件是以可执行文件的方式安装,一切安装工作也就到此为止。如果是以源代码方式提供的话,那么就要编译软件,这是一件相当繁重的工作。究竟该怎么编译软件呢?说简单一点就是直接在软件的原代码所在目录敲入make就可以完成编译工作。通常作者在原代码目录中建立该软件编译所要的Makefile让使用者直接用make来完成编译工作。  

12.2  核 心 升 级 

核心是操作系统中最重要的部分。就DOS而言,它是指IO.sysMSDOS.sys;就Linux而言,它是指位于根目录(/)里的vmlinuz文件。  

它可以控制整台PC的运作,包括周边设备、软驱、硬盘、CDROM、声卡等。  

升级核心一般有几个原因: 

1)找到支援新硬件的驱动程序; 

2)更稳定的环境; 

3)更好的效能; 

4)了解Linux核心是如何建立的。 

12.2.1  核心升级步骤 

1.了解目前的版本 

要升级核心,首先要了解目前核心是几版,最新的又是多少版,以免自己的核心已是最新版了还在做升级操作。 

2.下载核心 

要升级核心,当然必须下载新的核心来用。用户可通过以下站点来下载。 

ftp://ftp.hk.kernel.org/pub/linux/kernel/  

http://www.kernel.org/  

也可到匿名ftp站获得更高级的内核,例如从ftp.funet.fi的 /pub/Linux/PEOPLE/Linus或是其他镜像(MIRROR)站中获得。文档名称一般标记成linux-x.y.z.tar.gz,其中的x.y.z 是版本编号。较新的版本以及修补版本一般是放在类似“v1.1”以及“v1.2”这样的子目录下。数字最大的是最新的版本,而且通常是“测试版”。如果您认为betaalpha版不安全的话,

则应该注重于主要的发行版本。 

不过最好找一些mirrorftp节点,而不要直接到ftp.funet.fi上下载内核。以下是一些mirrors以及其他节点的简要列表: 

USA:   sunsite.unc.edu:/pub/Linux/kernel 

USA:   tsx-12.mit.edu:/pub/linux/sources/system 

UK:      sunsite.doc.ic.ac.uk:/pub/UNIX/Linux/sunsite.unc-mirror/kernel 

Austria:  ftp.univie.ac.at:/systems/linux/sunsite/kernel 

Germany:   ftp.Germany.EU.net:/pub/os/Linux/Local.EUnet/Kernel/Linus 

Germany:  sunsite.informatik.rwth-aachen.de:/pub/Linux/PEOPLE/Linus 

France:  ftp.ibp.fr:/pub/linux/sources/system/patches 

Australia:  sunsite.anu.edu.au:/pub/linux/kernel 

3.了解硬件环境 

目前的核心已经可以辨识大部分的硬件,但并不是全部,使用者在升级核心前最好了解自己的硬件环境,应该知道哪项硬件使用的系统资源(IRQDMA)是什么,尤其是了解非PnP(即插即用)显示卡(display card)所使用IRQDMA是什么。建议内存至少有8 MB,这样才能较为顺利地编译核心。  

4.解开原始核心源代码的包装  

以“root”的身份登录,然后进入到/usr/src下。如果安装Linux时已经安装了核心原始程式码,则在这个目录下,应该已经存在一个“Linux”的子目录。这是旧版的Linux原始程式码。将该子目录改名或者清除掉,确保在解开全部的原始程式码之前,/usr/src目录下没有“Linux”这个子目录。  

/usr/src目录下,用`tar zxpvf linux-x.y.z.tar.gz' 解开原始程式码的包装(如果您拿到的是.tar 的文件类型,则不用.gz,命令为:`tar xpvf linux-x.y.z.tar')。完成后,在/usr/src将会出现一个新的“Linux”子目录。进入到Linux目录下,查看README文件,看是否有一段标题为“INSTALLING the kernel”或类似的文字。如果正确,依照说明里的指示,建立符号链接,删除过时的.o文件等。 

5.编译核心  

为了方便使用者编译核心,核心的编译与设定依据使用者下达的指令而有许多不同的进行方式。使用者可以使用的指令如下 :  

 make config:在文字模式下设定编译核心的选项。  

 make oldconfig:以旧版 /usr/src/linux-2.2.5/.config 文件记录的选项作为编译核心的选项。  

 make menuconfig:在文字模式的选单下设定编译核心的选顶。  

 make xconfig:在 X Window system 下设定编译核心的选项。  

 make clean:将一些不必要的文件删除。  

 make dep:将原始程序和硬件做连接的工作。  

 make zImage:编译核心,但不做其他的事。  

 make bzImage:如果 make zImage 建立的核心太大,使用者可以使用 make bzImage 编译核心。  

 make zdisk:编译核心,并且建立启动盘。  

 make zlilo:编译核心,并且建立有 LILO 的启动盘。  

使用者不论使用 make configmake menuconfig 或 make xconfig 指令设定编译核心的选项,只有操作界面的不同,设定的项目并没有改变。 

下面是重建内核选项时的一些参考。 

1processor family (386486/cx486586/k5/5x86/6x86pentinum/k6/tscppro/6x86)  

选择CPU的种类,BIOS可以自检得到,注意系统的启动信息。需要注意的是不能选择比自己的CPU类型还高级的CPU,否则可能不能正常工作。  

2math emulation  

模拟数学协处理器,如果您的机器没有数学协处理器,就可以选中它以提高性能,但“486”以后数学协处理器就集成到CPU内部了,应该是用不上的,所以一般的选择是N。当然选上也不会有什么问题,除了内核稍稍变大外。  

3mttrmemory type range registersupport  

这个选项是用来启动pentinum propentinum II 的特殊功能,如果您用的不是这类CPU就选N,否则也仅仅是使内核变大而已。  

4symmetric multi-processing support  

同步处理器支持,如果您有多个CPU就选上。  

5enable loadable module support  

这会启动动态载入额外模块的功能,所以一定选上。  

6set version information on all symbols for modules  

这个选项可以使为某个版本的内核而编译的模块在另一个版本的内核下使用,但一般用不上。  

7kernel module loader  

如果启用这个选项,用户可以通过kerneld程序的帮助,在需要的时候自动载入或卸载那些可载入式的模块。建议选择此项。  

8networking support  

如果您用到任何网络就应该选上。 

9pci bios support  

这个选项一般是应该选上的,除非使用没有任何PCI设备的机器。PCI BIOS是用来侦测并启用PCI设备的。  

10pci bridge optimizationv1.3) 

当这个选项被启动时,操作系统会对从CPU和系统内存在PCI总线来往的数据做最佳化,这个功能已经完成实验阶段,使用起来应该很安全,而且还可增进系统的效率。  

11system v ipc  

起用这个选项可以使内核支持System V 的进程间通信的功能(IPC),有些从System V转移过来的程序会需要这个功能,建议启用该功能。  

12sysctl support  

除非内存少的可怜,否则您应该启动这个功能,启用该选项后内核会大8KB,但能让您直接改变内核的参数而不必重新开机。  

13kernel support for elf binaries  

该选项让用户的系统得以执行用ELF格式存储的可执行文件,而ELF是现代Linux的可执行文件、目标文件和系统函数库的标准格式。当操作系统要和编译器以及连接器合作时会需要这些标准,所以应该回答Y。  

14compile kernel as elf  

这选项让您的内核本身以ELF的格式编译,如果系统上的过程gcc默认产生ELF格式的可执行文件,那么就应该启动这个选项,但应查看一下自己的编译器的版本再决定。  

15parallel port support  

如果用户有任何并行口的设备并且想让Linux使用,那么就可以启用这个选项。Linux不仅可以使用并口打印机,还可以支持PLIP(一种为并行口而设计的网络通讯协定),ZIP磁盘驱动器、扫描仪等。在大多情况下,需要额外的驱动程序才能使用外接的并口设备。  

16plug and play support  

支持PnP设备并非Microsoft的专利,如果要让Linux也支持PnP设备,只要启用该选项就可以,但有些情况下会和其他设备产生冲突(I/ODMAIRQ等)。这个选项对PCI设备没有影响,因为它们本生就是PnP设备。  

17normal floppy disk support  

除非不想在Linux下使用软盘,否则就应该回答Y。但对于一些不需要支持软盘驱动器的系统而言,这个选项可以节省一些内存。  

18enhanced ide/mfm/dll disk support  

除非不需要MFM/DLL/IDE硬盘的的支持,否则就应该回答Y,但如果只有SCSI的硬盘,关掉这个选项会比较安全。  

19enhanced ide/mfm/dll cdrom support  

和上面的类似,只不过是对CDROM的支持而已。  

20enhanced ide/mfm/dll tape support  

一般没有多少人在用磁带机,所以回答N是比较好的答案。  

21enhanced ide/mfm/dll floppy support  

这个设备一般没有人用,所以也可以回答N。  

22xt harddisk support  

如果用户有这种石器时代的XT硬盘,那么就可以回答Y。  

23parallel port ide device support  

Linux是支持这种很新的并口的IDE设备的,如果有的话就选Y。  

24networking options  

如果在前面选了支持网络的话,在这里会回答很多问题。除非有特别的需求,否则使用默认的选项应该就足够了。  

25scsi support  

如果有任何一种SCSI控制卡,这个选项就应该回答Y。事先搞清楚自己的硬件类型,因为这些问题都是针对特定的SCSI控制芯片和控制卡的,如果不确定自己使用的是哪一种,查看一下硬件的说明文件或者LinuxHOWTO文档。此处同样也会让用户回答很多SCSI设备的支持(硬盘、CDROMTapefloppy等),依据实际情况选择。如果没有SCSI设备的话,建议不要支持,因为这会节约很多内核空间。  

26network device support  

这里面有很多关于网络控制卡的问题,如果无法确定如何正确选择,查看硬件文档或LinuxHOWTO文档。  

27amateur radio support  

这个选项可以用来启动无线网络的基本支持。目前的无线网络可以通过公众频率传输数据,如果用户有此类设备就可以启用,具体请参考AX25HAM HOWTO 文档。  

28isdn subsystem  

如果有ISDN硬件就应该启用该选项并安装合适的硬件驱动程序,用户应该还会需要启用Support synchronous PPP选项(参考PPP over ISDN)。  

29old cd-rom drivers  

这是针对一些特殊光盘驱动器程序的问题,如果用户有IDESCSICDROM控制卡,那么就不用启用该选项了。  

30character devices  

Linux支持很多特殊的字符设备,例如并口、串口控制卡、QIC02磁带驱动器以及特定界面的鼠标,此外对于游戏杆和影像摄取和麦克等也在这里面,依据自己的情况选择。  

31filesystems  

这是一系列内核所支持的各文件系统的问题,对ext2 /proc文件系统是一定应该支持的,有光驱还应该支持ISO9660(或模块支持),有WindowsDOS分区并且想在Linux下访问他们也可以进行支持。  

32console drivers  

至少应该支持VGA text console,否则无法从控制台使用Linux。  

33sound card support  

在这里回答Y会出现很多关于声卡的问题,用户应该根据自己的情况来配置。  

34kernel profiling supportv1.3) 

这个选项可以开启内核做效率统计的功能,并且会提供其他在为系统侦错时有用的信息。这些功能会需要付出一些代价并造成系统执行得较为缓慢,除非用户正在研究内核的某个问题,否则应该回答N。  

35kernel hacking  

如果用户正打算深入研究自己系统上运行的Linux如何运作,这里有很多选项,但如果没有必要的话可以全部关掉。  

12.3  应用软件安装 

12.3.1  Oracle安装 

Oracle在推出Oracle 8.0.5 for Linux之后,又马不停蹄地将其最新旗舰产品Oracle 8i8.1.5Internet)移植到Linux上。Oracle 8i比其以前的产品更适应目前的Internet发展,对Internet的支持领先于其对手。Orcale 8i 比其早先版本有很大改变,特别是安装程序。Oracle 8i启用了新的安装程序OUIOracle Universal Installer),OUI是用Java写的,因此它可在任何JVM上运行,彻底改变了原有的基于字符方式的Orainst,这一点颇让广大Oracle用户感到不适。  

该版本(指在网上可供免费下载的)在发布时存在太多的bug,所以Oracle根据用户的反馈意见随即发布了一个补丁程序,基本解决了问题,所以在安装完毕后必须打补丁。 

根据Oracle关于Oracle 8i for Linux的发布公告,该版本是一个完整的软件发行版本。 

1.系统需求 

按照Oracle的发布公告(usr:clyancl passed iamclyan)中所要求的,Oracle 8i for Intel-Linux硬件和操作系统的要求是: 

内存:最小128MB,运行Java VM则需256MB或更多。  

 交换空间:建议三倍于内存,如内存超过1GB,则可减少为二倍于内存或更少。  

 内核版本:Linux kernel 2.2。  

 窗口管理器:任何窗口管理器,如fvwm。该版本不再支持基于字符的安装。  

 系统库:glibc 2.1redhat 6.0)。

  安装空间:最小约693MB,典型约765MB。  

 交换空间:建议三倍于内存,如内存超过1GB,则可减少为二倍于内存或更少。  

 JDK1.1.6V5

  其他需求:egcs-1.1.2tcl 7.5等。  

关于所需内存,不一定要128MB以上,实际上64MB内存也可以,只是运行速度较慢而已。为了能充分利用Oracle 8i提供的众多基于图形方式的实用程序和满足大数据库的查询处理,建议最好有128MB或更多的内存。 

2.准备工作 

1)下载Oracle 8i for Linux。用户可到OracleFTP站点上下载Oracle 8i企业版(815ship.tgz 245M)。 

2)下载Oracle 8i的补丁程序。用户可到OracleFTP站点下载Oracle 8i企业版的补丁程序。(linux_81501patch_ee.tgz 6.1M)。 

3)下载JDK 1.1.6v5。用户可到Blackdown.org查询下载的站点,也可下载JDK 1.1.6v5JRE 1.1.6v5,实际上安装只要jre即可。 

3.安装前

 首先检查是否有足够的硬盘剩余空间,建议用一个单独的分区安装Oracle 8i和数据库。如果用户使用Gnome/enlightenment窗口环境,必须检查一下enlightenment的版本: 

rpm -q enlightenment 

如果是enlightenment-0.15.5-32,则必须升级到0.15.5-37版本,可按上面介绍的方法升级。RedFlag同时提供GnomeKDE,在“/usr/X11R6/lib/X11/xinit”目录下有一个Xclients文件,修改它可选择运行Gnome还是KDE。本文使用KDE。 

本书假定:

 ORACLE_HOME=/u1/oracle/product/8.1.5 

ORACLE_SID=ORCL  安装JRE 1.1.6v5 

jre_1.1.6-v5-glibc-x86.tar.gz拷贝到/usr/local目录下,解压缩: 

tar zxvf jre_1.1.6-v5-glibc-x86.tar.gz 

ln -s jre116_v5 jre 

 创建oracle用户和组

 groupadd dba 

groupadd oper(该组是可选的,其ID可能是501) 

useradd oracle -g dba 

passwd oracle(修改口令) 

创建oracle的安装目录,本文将安装目录设为“/u1/oracle/product/8.1.5”。只需创建“/u1”即可,设置“/u1”的所有者: 

chown oracle.dba /u1 

再创建一个目录用于暂放Oracle 8i软件包815ship.tgz

 mkdir /ora_package 

chown oracle.dba /ora_package 

创建好oracle用户和相关组后,退出rootlogout),重新用oracle用户登录... 

cd /home/oracle (或 cd ~)进入oracle用户的主目录,创建该用户的自动执行文本

".bash_profile"。 

vi .bash_profile 

在该文件中加入下列内容: 

# Setup ORACLE environment

 ORACLE_HOME=/u1/oracle/product/8.1.5 

export ORACLE_HOME 

ORACLE_SID=ORCL 

export ORACLE_SID 

ORACLE_TERM=xterm 

export ORACLE_TERM 

ORACLE_OWNER=oracle 

export ORACLE_OWNER 

TNS_ADMIN=/home/oracle/config/8.1.5 

export TNS_ADMIN 

CLASSPATH=$ORACLE_HOME/jdbc/lib/classes112.zip 

export CLASSPATH 

# Set up the search paths: 

PATH=/usr/local/jre/bin:/usr/local/jdk/bin:/bin:/sbin 

PATH=$PATH:/usr/bin:/usr/sbin:/usr/local/bin:$ORACLE_HOME/bin 

PATH=$PATH:/usr/local/sbin:/usr/bin/X11:/usr/X11R6/bin:.

export PATH 

保存该文件,然后logout

 4.安装 

oracle用户登录,将下载的oracle 8i软件包815ship.tgz拷贝到已创建好的“/ora_package”目录下,解压缩:

 cp 815ship.tgz /ora_package 

cd /ora_package 

tar zxvf 815ship.tgz 

用户可以用ls看到oracle 8i的安装文件runInstaller。 

1)启动X Window,运行runInstaller 

startx 

启动X Window后,启用一个终端(kvt),在该终端中运行runInstaller: 

sh runInstaller

 这时可以看到用jre运行的全新的图形化的OUI的欢迎画面,按照提示继续安装进程:  

 File locations,确认正确后,点击【Next】按钮,OUI装载产品信息。  

 UNIX Group Name,默认为dba,如果不填,则只有root可以有oralce的系统管理员权限。  

 NextOUI出错,提示要以root权限运行“/tmp/orainstall/orainstRoot.sh”,打开另一个终端,键入下列命令:su(输入root口令),sh/tmp/orainstall/orainstRoot.sh,提示创建"/etc/oraInst.loc并将OraInventory文件的组名改为dba,返回OUI按【Retry】。  

 Available Products Oracle 8i Enterprise Edtion 8.1.5.0.0,按【Next】。  

 Installation Types(这里有一个小bug-典型安装所需的空间比最小安装“大”)选typical,按【Next】,出现安装Oracle Intelligent Agent,按【Next】,在右上角有一个进度标尺提示。  

 Database IdentificationGlobal Database Name:First.yanzi(任意)。SID保留ORCL,按【Next】。  

 Database File Location,任意目录,无特别要求,不妨设为“/u1/oracle/dbs”,按【Next】。出现Summary,对用户想要安装的产品作一个总结。  

按【Install】,出现Install画面,用户可以看到窗口底部提示的安装等log文件目录,可供以后查询。  

接着会弹出一个提示:执行“/u1/oracle/product/8.1.5/root.sh,在另一个终端窗口中(刚才su的那个即可)以root权限执行该文件,将默认的/usr/bin改为/usr/local/bin,执行完毕后,返回OUI,按【OK】。  

安装Configuration Tool,安装dbassist时出错,按【OK】忽略,按【Next】。  

 End of Installation,按Exit退出OUI,完成安装。  

修改/etc/ld.so.conf,加入如下内容: 

/u1/oracle/product/8.1.5/lib 

/u1/oracle/product/8.1.5/jdbc/lib 

保存该文件,执行ldconfig  -v。  

2)打补丁 

将下载的Oracle 8i企业版补丁程序linux_81501patch_ee.tgz拷贝到/ora_package/ora_ patch目录下,进入此目录,解压缩:  

mkdir /ora_package/ora_patch    

cp linux_81501patch_ee.tgz /ora_package/ora_patch  

cd /ora_package/ora_patch  

tar zxvf linux_81501patch_ee.tgz  

sh linux_81501patch_ee.sh  

补丁程序只能运行一次。 

3)创建数据库

 在Oracle 8i中提供一个图形界面的数据库助理dbassist,它也是基于Java的,利用它可以创建、修改和删除数据库。 

在一个终端窗口中运行dbassist:  

dbassist &,出错时按【OK】忽略,  

选择Create a database,按【Next】,  

选择Typical,按【Next】,  

选择Create new database files,按【Next】,  

选择Online Transaction PrecessingOLTP),按【Next】,  

并发用户15,按【Next】,  

数据库配置选项全部选中,按【Next】,  

输入Global Database Name: oracle1SID保留ORCL,按【Next】,  

现在可以直接创建数据库,也可保存为一个Shell脚本文件在字符方式下执行,该脚本保存在$ORACLE_HOME/install目录下,名字为sqlORCL.shsh $ORACLE_HOME/install/sqlORCL.

 sh)。  

创建好数据后,关闭数据库服务器。 

svrmgrl 

connect internal

 shutdown 

quit 

4)测试数据库

 数据库的测试可参照Oracle 8.0.5安装指南提供的方法进行。 

注意:system的默认口令是manager,而sys的默认口令是chang_on_install。 

关于Oracle 8i的网络配置,可使用新的图形界面的netasst,常用的网络协议用TCP/IPTCP端口1521,这些可在netasst中通过配置侦听器(listener)来实现,然后用lsnrctl start命令启动侦听程序。 

12.3.2  安装Sybase客户端  

首先从Microsoft SQL ServerSybase SQL Server的关系说起。两公司曾共同开发OS/2上的数据库SQL Server for OS/2,此后两公司又独立开发升级系统,Sybase的客户端可以访问Microsoft SQL Server。  

和其他数据库公司相比,可以说Sybase公司对Linux是最兼容的,它虽不提供Linux下的SQLServer,但提供了免费的CTLIB的客户端,这也可能是许多IT管理人员在为公司数据库选型时不再考虑OracleInformix的理由之一。 

Sybase公司发布的OpenClientforLinuxa.out格式的,在互联网上有人将其转化为ELF和动态链接的ELF格式,可从下列地址上下载:http://www.mbay.net/mpeppler。最好同时下载两个版本,正常使用时采用动态链接的版本,但有的程序在编译时可能需要一个库(libblk.a),只在ELF里面包含。  

下载以后,键入如下命令展开(假设当前目录是/usr/tmp),下载软件包为

Linux-df-dynamic.tar.gz。 

tar zxvf linux-df-dynamic.tar.gz 

然后将其移至/usr/local目录:  

mvsybase/usr/local  

编译和使用Sybase客户端需要进行如下的设置:  

 Interface文件举例如下:  

MSSQL  

querytcpethermysql1433  

其中: MSSQL是客户端使用的服务器名,以后引用MSSQL即可; mysql是服务器

的地址或名字,如果是名字,则系统能够查到其IP地址; 1433SQLServer的端口号,MicrosoftSQLServer的默认值是1433Sybase5000。  

 SYBASE环境变量,内容是Sybase客户端所在的目录:  

Export SYBASE=/usr/local/sybase  

如果编译Sybase客户端中的例子,则还要设置环境变量SYBPLATFORM:  

export SYBPLATFORM=Linux  

并且修改其头文件中关于服务器名称及用户名和口令的描述。  

使用SQSH界面访问SQLServer  

Sybase客户端提供了xisql工具,但更多的人使用的是SQSHSQSHSQShell的缩写,是改进了的isql,可从下列地址下载:http://www.voicenet.com/gray/。当前的最新版本是1.6.0。假设下载后的文件放在/usr/tmp目录下,下载软件包为sqsh-1.6.0.tar.gz

 Torr zxvf sqsh 1.6.0.tar.gz。 

cdsqsh1.6.0  

./configure  

make;makeinstall  

然后,将生成的可执行文件sqsh安装到/usr/local/bin/目录下。  

Sqsh的使用如下:  

sqsh--Uusername--Ppassword--Sservername  

其中usernamepassword是用户名和口令,servername是在interface文件中定义的服务器名(如例子中的MSSQL)。  

Sqsh是交互式的命令行界面,命令用输入go来执行,命令如果较长,可分成几行书写,按【Enter】键换行即可。  

以下是一个例子:  

1>usepubs  

2>go  

1>selectfromauthors  

2>go采用CTLIB编写应用程序  

由于SybaseLinux客户端不提供DBLibrary,所以应采用CTLibrary来编写应用程序,采用CTLibrary编写应用程序可参考上例,详细的编程说明可以参考Sybase的说明。  

 利用Sybperl编写应用程序  

SybperlSybasePerl扩展,可利用Perl语言来访问SQLServer,或者编写CGI程序。

Sybperl可从下列地址取得http://www.mbay.net/mpeppler。当前的最新版本是2.9.5。取得Sybperl的源代码展开以后,应该修改一下CONFIG文件。 

下一个要修改的文件是PWD,这是用来进行测试的,将其中的服务器名、用户名、用户口令设置成自己的配置即可。然后进行编译:  

perlMakefile.PL  

make;maketest;makeinstall  

194  12章  核心升级和应用软件安装 

安装成功以后,即可使用Sybperl进行编程。下面是一个简单的例子。  

!/usr/bin/perl  

useSybase::CTlib;  

dbh=newSybase::CTlib'sa','','MSSQL';  

dbh>ct_execute("selectau_id,au_lname, au_fnamefrompubs.dbo.authors");  

while(dbh>ct_results(restype)==CS_SUCCEED){  

nextunlessdbh>ct_fetchable(restype);  

while((au_id,au_lname,au_fname)=dbh>ct_fetch){  

print"au_id-$au_lnameau_fname\n";  

 }  

}  

可以看出,短短几行语句,就可以完成对数据库的操作。  

以上从几个方面对在Linux下访问MSSQLServer数据库进行了说明,介绍了基本的API编程、SQSH命令行访问、Perl访问。其实,在Linux下还可采用其他方式进行访问,如采用第四级的JDBC进行访问,这时除了JavaJDBC外,并不需要其他软件(具体信息可访问http://www.connectsw.com)。  

12.3.3  ApacheMySqlPHP安装 

1.安装 Apache 

现在该安装Apache了。假设用户下载的源文件在/tmp目录,应该确保以root账号登陆,以下是安装步骤: 

1)解包 

$ tar -zvxf apache_1.12.6.tar.gz 

$ cd apache_1.12.6 

$ ./configure --sysconfdir=/etc/httpd \ 

              --datadir=/home/httpd \ 

              --logfiledir=/var/log/httpd \ 

              --enable-module=most \ 

              --enable-shared=max \ 

              --disable-rule=WANTHSREGEX 

这告诉Apache把配置文件保存在/etc/httpd目录。其他文件(例如HTML手册文档,CGI-BIN目录)都保存在/home/httpd目录下。这也告诉Apache用户将使用最常用的模块,并把这些模块作为DSO模块编译,DSO就是Dynamic Shared Object的缩写。通过DSO支持的模式编译Apache,用户能够随时从Apache里面增加和移除模块,而不需要重新编译它,这可是非常方便的。如果对此有兴趣的话,您可以仔细参阅Apache DSO文档(在http://www.apache.org/docs/dso.htm中可以找到)。接着运行make进行编译。 

2)编译 

$ make 

这将耗费一段时间,一般现在使用的机器(大都是PII级别)都可以在很短时间内完成编译。完成后,必须把身份更改成root,以获得权限把编译后的文件复制到最终的目录下:

 $ su 

# make install 

一切正常的话,用户可以看到一连串的信息反映出您Apache是如何被安装的。从/usr/local/apache/bin/apachectl/etc/rc.d/init.d/httpd 建立一个符号连接:

 # ln -s /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd 

然后在此文件中添加以下几行(大概在文件顶部,约第二行的地方): 

# chkconfig: 2345 10 90 

# description: Activates/Deactivates Apache Web Server 

最后,运行chkconfigApache添加到系统的启动服务组里面:

 # /sbin/chkconfig --del httpd 

# /sbin/chkconfig --add httpd 

3)配置Apache 

Apache 1.12.4开始,3个配置文件:srm.conf, httpd.confaccess.conf的指令都已经集中在httpd.conf一个文件中。因此用文本编辑器打开httpd.conf并且更改以下指令为: 

Port 80 

DirectoryIndex index.html index.shtml index.cgi index.phtml index.php3 

AddType application/x-httpd-php3 .php3 .phtml 

AddType application/x-httpd-php6-source .phps 

搜索整个文件,更改那些您认为需要更改的指令。详细的指令介绍,请访问Apache官方站点并查阅相关文档。

 (4)测试Apache 

请运行: 

# /etc/rc.d/init.d/httpd start 

否则可以运行: 

# /usr/local/bin/apachectl start 

如果顺利,就可以从其他机器上的浏览器上连接到您的机器并将看到Apache的欢迎页面。并检查以下进程是否运行着: 

# ps ax | grep httpd 

运行该命令后可以看到 

14362 ? S 0:00 /usr/local/apache/bin/httpd 

14364 ? S 0:00 /usr/local/apache/bin/httpd 

14365 ? S 0:00 /usr/local/apache/bin/httpd 

14366 ? S 0:00 /usr/local/apache/bin/httpd 

14367 ? S 0:00 /usr/local/apache/bin/httpd 

14368 ? S 0:00 /usr/local/apache/bin/httpd 

2.安装MySQL 

现在可以开始正式的安装了。假设用户把所有必须的代源码或者包都放在了/tmp下,如果您下载的是RPM包的话,那比较简单;如果下载的是二进制包(没有rpm程序或者想自定义的话),那么会稍微麻烦一点。 

 RPM包安装 

您必须成为root用户才能使用rpm安装程序,以下是安装过程: 

$ cd /tmp 

$ su 

# rpm -Uvh MySQL*(安装和MySQL相关的所有包) 

这将安装您下载的所有3MySQL包。建议使用RPM安装方式,因为所有的工作都由rpm程序帮您搞好了。 

 源码安装 

相对于用RPM安装来讲,用二进制源码安装是稍微麻烦了点。但是用户可以在安装脚本中自定义安装的相关参数,而不用像rpm方式只能使用默认安装方式。 

 安装二进制源代码 

如果您下载的是二进制源代码,它的名字类似于:

mysql-12.22.21-pc-linux-gnu-i686.tar.gz。您必须成为root用户,然后解压到/usr/local目录,方法如下: 

$ cd /usr/local 

$ su 

# tar -zxvf /tmp/mysql-12.22.21-pc-linux-gnu-i686.tar.gz 

在所有文件解压完后,一个名字叫mysql-12.22.21-pc-linux-gnu-i686的目录将被创建出来。用户可以为这个目录做个符号链接,并给它一个更友好的名字mysql(免得叫mysql-12.22.21-pc-linux-gnu-i686这么长): 

# ln -s mysql-12.22.21-pc-linux-gnu-i686 mysql 

如果以后有新版本的MySQL的话,您可以只将源代码解压到新的路径,然后再做个符号链接就可以了。这样非常方便,数据也更加安全。 

 建立一个MySQL 用户

 现在用户就可以来建立一个能运行MySQL守护程序的用户账号,并且所有MySQL文件都归此账户拥有。使用Linuxconf或者useradd命令去添加一个叫mysql的账号,在添加之前,确保没有人注册了这个账户,还要暂时禁止login功能(不过一般都是在没有其他人登陆的情况下调试机器,因此这个步骤可免)。 

 为MySQL做准备 

首先将MySQL目录和文件的属主改成 mysql 用户和root组:

 # cd /usr/local 

# chown -R mysql:root mysql-12.22.21-pc-linux-gnu-i686 mysql 

然后运行一个小脚本程序,以建立初始化的MySQL数据库。请以一个mysql 用户的身份完成这个任务,这也是能够直接使用这个账户的惟一机会。 

# su mysql 

$ cd mysql 

$ scripts/mysql_install_db 

$ exit 

如果没有任何出错信息显示的话,那就可以了。 

 自动运行MySQL 

MySQL二进制包里面,有一个名为

你可能感兴趣的:(Linux)