Linux循序渐进+Linux初级篇


ks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux循序渐进+Linux 初级篇 ─────本文仅做参考学习 声明: 1,本教程在原chm制作者hwhuwww中原版转换成pdf格式。内容无任何更改。 2,本教程内容有些是有参考价值的,但有些已是2000年代的作品了。由于是原作者的作品,所以我并 无更改,在内容上学习者要有个数。 3,本书有些操作上可能与最新版本有一定的差距,这点是要强调的。 4,本人还是认为本书对了解Linux很有帮助的,广大Linux新人都有必要看看的。   内容基础,语言简短简洁   红联Linux论坛是致力于Linux技术讨论的站点,目前网站收录的文章及教程基本能满足不同水平 的朋友学习。   红联Linux门户: www.linux110.com   红联Linux论坛: www.linuxdiyf.com/bbs   下载:Linux电子书籍   http://www.linux286.com/linux/linuxdzsj.htm 博客:http://x.discuz.net/504112 1/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 目录 Linux循序(仅做参考学习) 第一课:什么是Linux 第二课:为什么使用Linux 第三课 Linux纵览 第四课 Linux的发展 第五课 Linux特性 Linux与其他操作系统的区别 第七课 TurboLinux简介 第八课 进入与退出系统 第九课 文件与目录操作 第十课(一) 文件和目录操作相关命令 第十课(二)文件内容查询命令 第十课(三) 文本处理命令 第十课(四) 文件内容统计命令 第十课(五) 文件比较命令 第十课(六) 文件的复制、删除和移动命令 第十课(八)目录的创建与删除命令 第十课(九) 改变文件或目录的访问权限命令 第十课(十)备份与压缩命令 第十一课 进程管理及作业控制(1) 第十二课 进程查看 第十三课 进程调度 Linux循序渐进(15) 与系统管理有关的命令 Linux下的打印工作 Linux循序渐进(18) shell是用户和Linux操作系统之间的接口 第二十一课 标准输入/输出和重定向 第二十二课 在Bash中的操作 Linux循序渐进(21) 第二十四课 全屏幕文本编辑器Vi Linux Vi中的行号 Linux循序渐进(24) 第二十九课 vi命令 Linux海量文章汇集 Linux海量文章汇集 博客:http://x.discuz.net/504112 2/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux循序(仅做参考学习) 第一课:什么是 Linux 发布时间 :2006-12-30 10:19:41   简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算 机上。这个系统是由全世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权 制约的、全世界都能自由使用的Unix兼容产品。   Linux的出现,最早开始于一位名叫Linus Torvalds的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学 生。他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示 教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的 全部功能,因而开始了Linux雏形的设计。   Linux以它的高效性和灵活性著称。它能够在PC计算机上实现全部的Unix特性,具有多任务、多用户的能 力。Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系统。Linux操作系统软件包不 仅包括完整的Linux操作系统,而且还包括了文本编辑器、高级语言编译器等应用软件。它还包括带有多个窗口 管理器的X-Windows图形用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系统 进行操作。   Linux之所以受到广大计算机爱好者的喜爱,主要原因有两个,一是它属于自由软件,用户不用支付任何费 用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿对它使用,无约束地继续 传播。另一个原因是,它具有Unix的全部功能,任何使用Unix操作系统或想要学习Unix操作系统的人都可以从 Linux中获益。 博客:http://x.discuz.net/504112 3/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第二课:为什么使用 Linux 发布时间 :2006-12-30 10:21:00   由于Linux是一套具有Unix全部功能的免费操作系统,它在众多的软件中占有很大的优势,为广大的计算机 爱好者提供了学习、探索以及修改计算机操作系统内核的机会。   操作系统是一台计算机必不可少的系统软件,是整个计算机系统的灵魂。一个操作系统是一个复杂的计算 机程序集,它提供操作过程的协议或行为准则。没有操作系统,计算机就无法工作,就不能解释和执行用户输 入的命令或运行简单的程序。大多数操作系统都是由一些主要的软件公司支持的商品化程序,用户只能有偿使 用。如果用户购买了一个操作系统,他就必须满足供应商所要求的一切条件。因为操作系统是系统程序,用户 不能擅自修改或试验操作系统的内核。这对于广大计算机爱好者来说无疑是一种束缚。   要想发挥计算机的作用,仅有操作系统还不够,用户还必须要有各种应用程序的支持。应用程序是用于处 理某些工作(如字处理)的软件包,通常它也只能有偿使用。每个应用程序的软件包都为特定的操作系统和机 器编写。使用者无权修改这些应用程序。使用Linux,可以将操作系统变成一种操作环境。   由于Linux是一套自由软件,用户可以无偿地得到它及其源代码,可以无偿地获得大量的应用程序,而且可 以任意地修改和补充它们。这对用户学习、了解Unix操作系统的内核非常有益。学习和使用Linux,能为用户节 省一笔可观的资金。Linux是目前唯一可免费获得的、为PC机平台上的多个用户提供多任务、多进程功能的操 作系统,这是人们要使用它的主要原因。就PC机平台而言,Linux提供了比其他任何操作系统都要强大的功能 ,Linux还可以使用户远离各种商品化软件提供者促销广告的诱惑,再也不用承受每过一段时间就升级之苦,因 此,可以节省大量用于购买或升级应用程序的资金。   Linux不仅为用户提供了强大的操作系统功能,而且还提供了丰富的应用软件。用户不但可以从Internet上 下载Linux及其源代码,而且还可以从Internet上下载许多Linux的应用程序。可以说,Linux本身包含的应用程 序以及移植到Linux上的应用程序包罗万象,任何一位用户都能从有关Linux的网站上找到适合自己特殊需要的 应用程序及其源代码,这样,用户就可以根据自己的需要下载源代码,以便修改和扩充操作系统或应用程序的 功能。这对Windows NT、Windows98、MS-DOS或OS/2等商品化操作系统来说是无法做到的。   Linux为广大用户提供了一个在家里学习和使用Unix操作系统的机会。尽管Linux是由计算机爱好者们开发 的,但是它在很多方面上是相当稳定的,从而为用户学习和使用目前世界上最流行的Unix操作系统提供了廉价 的机会。现在有许多CD-ROM供应商和软件公司(如RedHat和TurboLinux)支持Linux操作系统。Linux成为 Unix系统在个人计算机上的一个代用品,并能用于替代那些较为昂贵的系统。因此,如果一个用户在公司上班 的时候在Unix系统上编程,或者在工作中是一位Unix的系统管理员,他就可以在家里安装一套Unix的兼容系统 ,即Linux系统,在家中使用Linux就能够完成一些工作任务。 博客:http://x.discuz.net/504112 4/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第三课  Linux 纵览 发布时间 :2006-12-30 10:42:10   Linux一般有四个主要部分:内核、Shell、文件结构和实用工具。      1. Linux内核      内核是系统的心脏,运行程序和管理像磁盘和打印机等硬件设备的核心程序。它从用户那里接受命令并把 命令送给内核去执行。      2. Linux Shell      Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入 内核去执行。      实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的 编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多 特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效 果。      Linux提供了像Microsoft Windows那样的可视的命令输入界面--X Window的图形用户界面(GUI)。它提 供了很多窗口管理器,其操作就象Windows一样,有窗口、图标和菜单,所有的管理都是通过鼠标控制。现在 比较流行的窗口管理器是KDE和GNOME。      每个Linux系统的用户可以拥有他自己的用户界面或Shell,用以满足他们自己专门的Shell需要。      同Linux本身一样,Shell也有多种不同的版本。目前主要有下列版本的Shell:      Bourne Shell:是贝尔实验室开发的。      BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。      Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。      C Shell:是SUN公司Shell的BSD版本。         3. Linux文件结构      文件结构是文件存放在磁盘等存储设备上的组织方法。主要体现在对文件和目录的组织上。目录提供了管 理文件的一个方便而有效的途径。我们能够从一个目录切换到另一个目录,而且可以设置目录和文件的权限, 设置文件的共享程度。      使用Linux,用户可以设置目录和文件的权限,以便允许或拒绝其他人对其进行访问。Linux目录采用多级 树形结构,图1.1表示了这种树形等级结构。用户可以浏览整个系统,可以进入任何一个已授权进入的目录,访 问那里的文件。    博客:http://x.discuz.net/504112 5/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   文件结构的相互关联性使共享数据变得容易,几个用户可以访问同一个文件。Linux是一个多用户系统,操 作系统本身的驻留程序存放在以根目录开始的专用目录中,有时被指定为系统目录。图1.1中那些根目录下的目 录就是系统目录。      内核,Shell和文件结构一起形成了基本的操作系统结构。它们使得用户可以运行程序,管理文件以及使用 系统。此外,Linux操作系统还有许多被称为实用工具的程序,辅助用户完成一些特定的任务。         4. Linux实用工具      标准的Linux系统都有一套叫做实用工具的程序,它们是专门的程序,例如编辑器、执行标准的计算操作等 。用户也可以产生自己的工具。      实用工具可分三类:      编辑器:用于编辑文件。      过滤器:用于接收数据并过滤数据。      交互程序:允许用户发送信息或接收来自其他用户的信息。      Linux的编辑器主要有:Ed、Ex、Vi和Emacs。Ed和Ex是行编辑器,Vi和Emacs是全屏幕编辑器。      Linux的过滤器(Filter)读取从用户文件或其他地方的输入,检查和处理数据,然后输出结果。从这个意 义上说,它们过滤了经过它们的数据。Linux有不同类型的过滤器,一些过滤器用行编辑命令输出一个被编辑的 文件。另外一些过滤器是按模式寻找文件并以这种模式输出部分数据。还有一些执行字处理操作,检测一个文 件中的格式,输出一个格式化的文件。过滤器的输入可以是一个文件,也可以是用户从键盘键入的数据,还可 以是另一个过滤器的输出。过滤器可以相互连接,因此,一个过滤器的输出可能是另一个过滤器的输入。在有 些情况下,用户可以编写自己的过滤器程序。      交互程序是用户与机器的信息接口。Linux是一个多用户系统,它必须和所有用户保持联系。信息可以由系 统上的不同用户发送或接收。信息的发送有两种方式,一种方式是与其他用户一对一地链接进行对话,另一种 是一个用户对多个用户同时链接进行通讯,即所谓广播式通讯。 博客:http://x.discuz.net/504112 6/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第四课  Linux 的发展 发布时间 :2006-12-30 10:42:47   Linux是专门为个人计算机所设计的操作系统。它最早是由Linus Torvalds设计的。当时Linux是他的一项个 人研究项目,其目的是为Minix用户设计一个比较有效的Unix PC版本。Linus Torvalds称它为Linux。Minix是由 Andrew Tannebaum教授开发的,发布在Internet上,免费给全世界的学生使用。Minix具有较多Unix的特点, 但与Unix不完全兼容,Linus打算为Minix用户设计一个较完整的Unix PC版本,于1991年发行了Linux 0.11版本 ,并将它发布在Internet上,免费供人们使用。      以后几年,其他Linux爱好者根据自己的使用情况,综合现有的Unix标准和Unix系统中应用程序的特点,修 改并增加了一些内容,使得Linux的功能更完善。      Linux设计了与所有主要的窗口管理器的接口,提供了大量Internet工具,如FTP,TELNET和SLIP等。     Linux提供比较完整的程序开发工具,最常用的是C++编译器和调试器。        尽管Linux拥有Unix的全部功能和特点,但它却是最小最稳定和最快速的操作系统。在最小配置下,它可以 运行在仅4MB的内存上。        Linux是在Internet开放环境中开发的,它由世界各地的程序员不断完善,而且免费供用户使用。尽管如此, 它仍然遵循商Unix版本的标准,因为前几十年里,Unix版本大量出现,电子电气工程协会(IEEE)开发了一个 独立的Unix标准,这个新的ANSI Unix标准被称为计算机环境的可移植性操作系统界面(PSOIX)。这个标准 限定了Unix系统如何进行操作,对系统调用也做了专门的论述。PSOIX限制所有Unix版本必须依赖大众标准, 现有大部分Unix和流行版本都是遵循POSIX标准的,而Linux从一开始就遵循POSIX标准。 博客:http://x.discuz.net/504112 7/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第五课  Linux 特性 发布时间 :2006-12-30 10:50:09   Linux操作系统在短短的几年之内得到了非常迅猛的发展,这与Linux具有的良好特性是分不开的。Linux包 含了Unix的全部功能和特性。简单的说,Linux具有以下主要特性:   1开放性   开放性是指系统遵循世界标准规范,特别是遵循开放系统互连(OSI)国际标准。凡遵循国际标准所开发 的硬件和软件,都能彼此兼容,可方便地实现互连。   2多用户   多用户是指系统资源可以被不同用户各自拥有使用,即每个用户对自己的资源(例如:文件、设备)有特 定的权限,互不影响。Linux和Unix都具有多用户的特性。   3多任务   多任务是现代计算机的最主要的一个特点。它是指计算机同时执行多个程序,而且各个程序的运行互相独 立。Linux系统调度每一个进程平等地访问微处理器。由于CPU的处理速度非常快,其结果是,启动的应用程 序看起来好像在并行运行。事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这 个程序之间只有很短的时间延迟,用户是感觉不出来的。   4良好的用户界面   Linux向用户提供了两种界面:用户界面和系统调用。Linux的传统用户界面是基于文本的命令行界面,即 shell,它既可以联机使用,又可存在文件上脱机使用。shell有很强的程序设计能力,用户可方便地用它编制程 序,从而为用户扩充系统功能提供了更高级的手段。可编程Shell是指将多条命令组合在一起,形成一个Shell程 序,这个程序可以单独运行,也可以与其他程序同时运行。   系统调用给用户提供编程时使用的界面。用户可以在编程时直接使用系统提供的系统调用命令。系统通过 这个界面为用户程序提供低级、高效率的服务。   Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施,给用户呈现一个直观、易 操作、交互性强的友好的图形化界面。   5设备独立性   设备独立性是指操作系统把所有外部设备统一当作成文件来看待,只要安装它们的驱动程序,任何用户都 可以象使用文件一样,操纵、使用这些设备,而不必知道它们的具体存在形式。   具有设备独立性的操作系统,通过把每一个外围设备看作一个独立文件来简化增加新设备的工作。当需要 增加新设备时、系统管理员就在内核中增加必要的连接。这种连接(也称作设备驱动程序)保证每次调用设备 提供服务时,内核以相同的方式来处理它们。当新的及更好的外设被开发并交付给用户时,操作允许在这些设 备连接到内核后,就能不受限制地立即访问它们。设备独立性的关键在于内核的适应能力。其他操作系统只允 许一定数量或一定种类的外部设备连接。而设备独立性的操作系统能够容纳任意种类及任意数量的设备,因为 每一个设备都是通过其与内核的专用连接独立进行访问。 博客:http://x.discuz.net/504112 8/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   Linux是具有设备独立性的操作系统,它的内核具有高度适应能力,随着更多的程序员加入Linux编程,会 有更多硬件设备加入到各种Linux内核和发行版本中。另外,由于用户可以免费得到Linux的内核源代码,因此 ,用户可以修改内核源代码,以便适应新增加的外部设备。   6供了丰富的网络功能   完善的内置网络是Linux的一大特点。Linux在通信和网络功能方面优于其他操作系统。其他操作系统不包 含如此紧密地和内核结合在一起的连接网络的能力,也没有内置这些联网特性的灵活性。而Linux为用户提供了 完善的、强大的网络功能。   支持Internet是其网络功能之一。Linux免费提供了大量支持Internet的软件,Internet是在Unix领域中建立 并繁荣起来的,在这方面使用Linux是相当方便的,用户能用Linux与世界上的其他人通过Internet网络进行通信 。   文件传输是其网络功能之二。用户能通过一些Linux命令完成内部信息或文件的传输。   远程访问是其网络功能之三。Linux不仅允许进行文件和程序的传输,它还为系统管理员和技术人员提供了 访问其他系统的窗口。通过这种远程访问的功能,一位技术人员能够有效地为多个系统服务,即使那些系统位 于相距很远的地方。   7可靠的系统安全   Linux采取了许多安全技术措施,包括对读、写进行权限控制、带保护的子系统、审计跟踪、核心授权等, 这为网络多用户环境中的用户提供了必要的安全保障。   8良好的可移植性   可移植性是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。   Linux是一种可移植的操作系统,能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。可移 植性为运行Linux的不同计算机平台与其他任何机器进行准确而有效的通信提供了手段,不需要另外增加特殊的 和昂贵的通信接口。 博客:http://x.discuz.net/504112 9/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux 与其他操作系统的区别 发布时间 :2006-12-30 12:44:25   Linux可以与MS-DOS、OS/2、Windows等其他操作系统共存于同一台机器上。它们均为操作系统,具有 一些共性,但是互相之间各有特色,有所区别。   目前运行在PC机上的操作系统主要有Microsoft的MS-DOS、Windows、Windows NT、IBM的OS/2等。早 期的PC机用户普遍使用MS-DOS,因为这种操作系统对机器的硬件配置要求不高,而随着计算机硬件技术的飞 速发展,硬件设备价格越来越低,人们可以相对容易地提高计算机的硬件配置,于是开始使用Windows、 Windows NT等具有图形界面的操作系统。Linux是新近被人们所关注的操作系统,它正在逐渐为PC机的用户所 接受。那么,Linux与其他操作系统的主要区别是什么呢?下面从两个方面加以论述。   首先看一下Linux与MS-DOS之间的区别。   在同一系统上运行Linux和MS-DOS已很普遍,就发挥处理器功能来说,MS-DOS没有完全实现x86处理器 的功能,而Linux完全在处理器保护模式下运行,并且开发了处理器的所有特性。Linux可以直接访问计算机内 的所有可用内存,提供完整的Unix接口。而MS-DOS只支持部分Unix的接口。   就使用费用而言,Linux和MS-DOS是两种完全不同的实体。与其他商业操作系统相比,MS-DOS价格比较 便宜,而且在PC机用户中有很大的占有率,任何其他PC机操作系统都很难达到MS-DOS的普及程度,因为其 他操作系统的费用对大多数PC机用户来说都是一个不小的负担。Linux是免费的,用户可以从internet上或者其 他途径获得它的版本,而且可以任意使用,不用考虑费用问题。   就操作系统的功能来说,MS-DOS是单任务的操作系统,一旦用户运行了一个MS-DOS的应用程序,它就 独占了系统的资源,用户不可能再同时运行其他应用程序。而Linux是多任务的操作系统,用户可以同时运行多 个应用程序。   再看一下Linux与OS/2、Windows、Windows NT之间的区别。   从发展的背景看,Linux与其他操作系统的区别是,Linux是从一个比较成熟的操作系统发展而来的,而其 他操作系统,如Windows NT等,都是自成体系,无对应的相依托的操作系统。这一区别使得Linux的用户能大 大地从Unix团体贡献中获利。因为Unix是世界上使用最普遍、发展最成熟的操作系统之一,它是七十年代中期 发展起来的微机和巨型机的多任务系统,虽然有时接口比较混乱,并缺少相对集中的标准,但还是发展壮大成 为了最广泛使用的操作系统之一。无论是Unix的作者还是Unix的用户,都认为只有Unix才是一个真正的操作系 统,许多计算机系统(从个人计算机到超级计算机)都存在Unix版本,Unix的用户可以从很多方面得到支持和 帮助。因此,Linux做为Unix的一个克隆,同样会得到相应的支持和帮助,直接拥有Unix在用户中建立的牢固的 地位。   从使用费用上看,Linux与其他操作系统的区别在于Linux是一种开放、免费的操作系统,而其他操作系统 都是封闭的系统,需要有偿使用。这一区别使得我们能够不用花钱就能得到很多Linux的版本以及为其开发的应 用软件。当我们访问Internet时,会发现几乎所有可用的自由软件都能够运行在Linux系统上。有来自很多软件 商的多种Unix实现,Unix的开发、发展商以开放系统的方式推动其标准化,但却没有一个公司来控制这种设计 。因此,任何一个软件商(或开拓者)都能在某种Unix实现中实现这些标准。OS/2和Windows NT等操作系统 是具有版权的产品,其接口和设计均由某一公司控制,而且只有这些公司才有权实现其设计,它们是在封闭的 环境下发展的。 博客:http://x.discuz.net/504112 10/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第七课  TurboLinux 简介 发布时间 :2006-12-30 12:45:26   TurboLinux是拓林思公司最近发行的linux版本,已在日本和中国取得了巨大的成功,在美国也有一定的业 绩。当前版本为4.0,是基于linux 2.2.10内核的。      TurboLinux的优点   简单易用的图形安装程序;   友好的图形桌面界面KDE、GNOME等;   丰富的软件包,包括:系统管理工具、网络分析程序、服务程序包(如:Apache)等等;   提供了完整的源代码程序;   提供了预配置安装功能。      TurboLinux的特色   TurboPNPCfg-TurboLinux的ISA即插即用配置工具,可以很容易地设置所有的ISA PnP插件;   所有系统组件都采用RPM软件包管理系统;   TurboPkg-TurboLinux有完善的RPM前端,即便是FTP,也可以进行系统组件的简单安装、升级和拆卸;   Xfree86 3.3.3;   TurboXCfg-TurboLinux先进的配置工具;   一套完整高效的应用程序,包括:   GIMP(Photoshop型程序)   Xpaint(图形程序)   yx (排版工具)   WingZ(电子表格)   Netscape(通讯程序)   Emacs和Xemacs (编辑器) 博客:http://x.discuz.net/504112 11/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   Xessite(电子表格)   多种游戏、屏幕保护程序、仿真程序和其他娱乐性程序;   完整网络客户程序-除了如tenet、ftp、rsh等标准程序外,TurboLinux还提供了如tkined、基于SNMP的图 形网络管理器的程序。   大量的服务器软件包提供如下的服务:   基本的端口监视服务程序(tenet、ftp、rsh等)   Web服务程序(Apache)   DNS名字服务器(bind)   E-mail   TurboLinux的一般用途   防火墙   路由器   工作站   Intranet或Internet服务器   TurboLinux具有设置服务器、开发者和办公系统所需的一切功能。   1.对于服务器TurboLinux是一套很完整的系统,它具有建立一个商业Internet站点所需的各种软件。您可以 将TurboLinux用作带有限客户的工作组服务器,也可以把它当作成熟的,能够同时接收数百个连接请求的 Internet站点。   2.对于开发者TurboLinux为开发者提供了常用的编辑器、编译器、调试器和编程工具。另外,TurboLinux 具有强健的应用程序开发环境,提供了各种开发应用程序的工具,具有对多种语言如: C、C++、Java、Per 、 Tc/tk、Python和Fortran 77的编译器/解释器以及集成开发环境、调试和其他开发工具。   3.对于办公系统TurboLinux包含了办公室运转所需的一切。如:Netscape Navigator、WordPerfect 8、 Wingz(电子表格)、Gimp(Photoshop类程序)和Xpaint(图形程序),一共有几百种程序。   谁从TurboLinux获益   开发者   程序员   系统管理员   系统分析员   管理人员 博客:http://x.discuz.net/504112 12/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   最终用户   TurboLinux的站点   · http://www.turbolinux.com(美国)   · http://www.turbolinux.com.cn(中国)   · http://www.turbolinux.co.jp(日本) 博客:http://x.discuz.net/504112 13/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第八课 进入与退出系统 发布时间 :2006-12-30 12:46:04   TurboLinux是一个多用户的操作系统,用户要使用该系统,首先必须登录系统,使用完系统后,必须退出 系统。本章主要讨论登录和退出系统的方法。   用户登录系统时,为了使系统能够识别自己,必须输入用户名和密码,经系统验证无误后方能进入系统。 在系统安装过程中可以创建两种帐号:   1)root--超级用户帐号,使用这个帐号可以在系统中做任何事情。   2)普通用户--这个帐号供普通用户使用,可以进行有限的操作。   一般的Linux使用者均为普通用户,而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只 需要完成一些由普通帐号就能完成的任务,建议不要使用超级用户帐号,以免无意中破坏系统。   用户登录分两步进行:第一步,输入用户的登录名,系统根据该登录名来识别用户;第二步,输入用户的 口令,该口令是用户自己选择的一个字符串,对其他用户是保密的,是在登录时系统用来辨别真假用户的关键 字。   在Linux系统中,系统管理员在为用户建立新帐号时赋给用户一个用户名和一个初始的口令。另外,Linux 系统给计算机赋予一个主机名。主机名用于在网络上识别独立的计算机(即使用户的计算机没有联网,也应� 糜幸桓鲋骰����TurboLinux系统给出的缺省主机名为:localhost。在下面的例子中,我们假设用户名为 "xxq",系统的主机名为"localhost"。   进入系统(登录)   超级用户登录   超级用户的用户名为root,密码在安装系统时已设定。系统启动成功后,屏幕显示下面的提示:   localhost login:   这时输入超级用户名"root",然后键入回车键。此时,用户会在屏幕上看到输入口令的提示:   localhost login:root   Password:   这时,需要输入口令。输入口令时,口令不会在屏幕上显示出来。如果用户输入了错误的口令,就会在屏 幕上看到下列信息:   login incorrect.   这时需要重新输入。当用户正确地输入用户名和口令后,就能合法地进入系统。屏幕显示:   [root@loclhost /root] # 博客:http://x.discuz.net/504112 14/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   此时该用户已经登录到系统中,可以进行操作了。这里"#"是超级用户的系统提示符。普通用户登录建立了 普通用户帐号以后,就可以进行登录了。      在登录时,用户会在屏幕上看到类似下面的提示:   localhost login:   这时输入用户名"xxq",然后键入回车键。此时,用户会在屏幕上看到输入口令的提示:   localhost login:xxq   Password:   这时,需要输入口令。输入口令时,口令不会在屏幕上显示出来。如果用户输入了错误的口令,就会在屏 幕上看到下列信息:   login incorrect.   这时需要重新输入。当用户正确地输入用户名和口令后,就能合法地进入系统。屏幕显示:   [xxq@loclhost xxq] $   此时说明该用户已经登录到系统中,可以进行操作了。   修改口令   为了更好的保护用户帐号的安全,Linux允许用户随时修改自己的口令,修改口令的命令是passwd,它将 提示用户输入旧口令和新口令,之后还要求用户再次确认新口令,以避免用户无意中按错键。如果用户忘记了 口令,可以请系统管理员为自己重新设置一个。   虚拟控制台   Linux是一个真正的多用户操作系统,这表示它可以同时接受多个用户登录。Linux还允许一个用户进行多 次登录,这是因为Linux和许多版本的UNIX一样,提供了虚拟控制台的访问方式,允许用户在同一时间从控制 台(系统的控制台是与系统直接相连的监视器和键盘)进行多次登录。   虚拟控制台的选择可以通过按下Alt键和一个功能键来实现,通常使用F1-F6。   例如,用户登录后,按一下Alt-F2键,用户又可以看到"login:"提示符,说明用户看到了第二个虚拟控制台 。然后只需按Alt-F1键,就可以回到第一个虚拟控制台。一个新安装的Linux系统允许用户使用Alt-F1到Alt-F6键 来访问前六个虚拟控制台。   虚拟控制台可使用户同时在多个控制台上工作,真正感受到Linux系统多用户的特性。用户可以在某一虚拟 控制台上进行的工作尚未结束时,切换另一虚拟控制台开始另一项工作。例如,开发软件时,可以在一个控制 台上进行编辑,在另一个控制台上进行编译,在第三个控制台上查阅信息。   退出系统   不论是超级用户,还是普通用户,需要退出系统时,在shell提示符下,键入下列命令即可。   下面以普通用户的退出为例,说明退出系统的过程: 博客:http://x.discuz.net/504112 15/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   [xxq@loclhost xxq] $ exit   还有其他退出系统的方法,但上面一种是最安全的。 博客:http://x.discuz.net/504112 16/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第九课 文件与目录操作 发布时间 :2006-12-30 12:47:14   用户的数据和程序大多以文件的形式保存。用户使用Linux系统的过程中,需要经常对文件和目录进行操作 。本章讲述了文件与目录的基本概念,有关文件和目录操作的命令以及如何在Linux环境下运行DOS命令。   文件与目录的基本概念   文件与文件名   在多数操作系统中都有文件的概念。文件是Linux用来存储信息的基本结构,它是被命名(称为文件名)的 存储在某种介质(如磁盘、光盘和磁带等)上的一组信息的集合。Linux文件均为无结构的字符流形式。文件名 是文件的标识,它由字母、数字、下划线和圆点组成的字符串来构成。用户应该选择有意义的文件名。Linux要 求文件名的长度限制在255个字符以内。   为了便于管理和识别,用户可以把扩展名作为文件名的一部分。圆点用于区分文件名和扩展名。扩展名对 于将文件分类是十分有用的。用户可能对某些大众已接纳的标准扩展名比较熟悉,例如,C语言编写的源代码 文件总是具有C的扩展名。用户可以根据自己的需要,随意加入自己的文件扩展名。   以下例子都是有效的Linux文件名。   preface   chapter1.txt   xu.c   xu.bak   文件的类型   Linux系统中有三种基本的文件类型:普通文件、目录文件和设备文件。   1.普通文件普通文件是用户最经常面对的文件。它又分为文本文件和二进制文件。   1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存 储方式。   2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相 应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。   2.目录文件设计目录文件的主要目的是用于管理和组织系统中的大量文件。它存储一组相关文件的位置、 大小等与文件有关的信息。目录文件往往简称为目录。   3.设备文件设备文件是Linux系统很重要的一个特色。Linux系统把每一个I/O设备都看成一个文件,与普通 文件一样处理,这样可以使文件与设备的操作尽可能统一。从用户的角度来看,对I/O设备的使用和一般文件的 使用一样,不必了解I/O设备的细节。设备文件可以细分为块设备文件和字符设备文件。前者的存取是以一个个 博客:http://x.discuz.net/504112 17/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 字符块为单位的,后者则是以单个字符为单位的。   目录   树型目录结构   在计算机系统中存有大量的文件,如何有效的组织与管理它们,并为用户提供一个使用方便的接口是文件 系统的一大任务。Linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将所有文件 的说明信息采用树型结构组织起来--即我们常说的目录。也就是说,整个文件系统有一个"根"(root),然后在 根上分"杈"(directory),任何一个分杈上都可以再分杈,杈上也可以长出"叶子"。"根"和"杈"在Linux中被称为 是"目录"或"文件夹"。而"叶子"则是一个个的文件。实践证明,此种结构的文件系统效率比较高。   如前所述,目录也是一种类型的文件。Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形 成了Linux文件系统的树型层次结构。以根目录为起点,所有其他的目录都由根目录派生而来。一个典型的 Linux系统的树型目录结构如图3.1所示。用户可以浏览整个系统,可以进入任何一个已授权进入的目录,访问 那里的文件。      上图中,我们只给出了目录结点名称,而没有给出各个目录"之下"的每一个文件。实际上,各个目录结点" 之下 "都会有一些文件和子目录。并且,系统在建立每一个目录时,都会自动为它设定两个目录文件,一个是 ".",代表该目录自己,另一个是"..",代表该目录的父目录,对于根目录,"."和".."都代表其自己。   Linux目录提供了管理文件的一个方便途径。每个目录里面都包含文件。用户可以为自己的文件创建自己的 目录,也可以把一个目录下的文件移动或复制到另一目录下,而且能移动整个目录,并且和系统中的其他用户 共享目录和文件。也就是说。我们能够方便地从一个目录切换到另一个目录,而且可以设置目录和文件的管理 权限,以便允许或拒绝其他人对其进行访问。同时文件目录结构的相互关联性使分享数据变得十分容易,几个 用户可以访问同一个文件。因此允许用户设置文件的共享程度。   需要说明的是,根目录是Linux系统中的特殊目录。Linux是一个多用户系统,操作系统本身的驻留程序存 放在以根目录开始的专用目录中,有时被指定为系统目录。在图3.1中那些根目录下的目录就是系统目录。   工作目录、用户主目录与路径   如前所述,目录是Linux系统组织文件的一种特殊文件。为使用户更好地使用目录,我们介绍有关目录的一 些基本概念。   I.工作目录与用户主目录   从逻辑上讲,用户在登录到Linux系统中之后,每时每刻都"处在"某个目录之中,此目录被称作工作目录或 当前目录(Working Directory)。工作目录是可以随时改变的。用户初始登录到系统中时,其主目录(Home Directory)就成为其工作目录。工作目录用"."表示,其父目录用".."表示。   用户主目录是系统管理员增加用户时建立起来的(以后也可以改变),每个用户都有自己的主目录,不同 用户的主目录一般互不相同。   用户刚登录到系统中时,其工作目录便是该用户主目录,通常与用户的登录名相同。   用户可以通过一个"~"字符来引用自己的主目录。   例如命令   /home/WANG$ cat ~/class/software_1 博客:http://x.discuz.net/504112 18/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   和下面的命令   /home/WANG$ cat /home/WANG/class/software_1意义相同。shell将用用户主目录名来替换"~"字符。目 录层次建立好之后,用户就可以把有关的文件放到相应的目录中,从而实现对文件的组织。   对文件进行访问时,需要用到"路径"(Path)的概念。   II.路径   顾名思义,路径是指从树型目录中的某个目录层次到某个文件的一条道路。此路径的主要构成是目录名称 ,中间用"/"分开。任一文件在文件系统中的位置都是由相应的路径决定的。   用户在对文件进行访问时,要给出文件所在的路径。路径又分相对路径和绝对路径。绝对路径是指从"根" 开始的路径,也称为完全路径;相对路径是从用户工作目录开始的路径。   应该注意到,在树型目录结构中到某一确定文件的绝对路径和相对路径均只有一条。绝对路径是确定不变 的,而相对路径则随着用户工作目录的变化而不断变化。这一点对于我们以后使用某些命令如cp和tar等大有好 处。   用户要访问一个文件时,可以通过路径名来引用。并且可以根据要访问的文件与用户工作目录的相对位置 来引用它,而不需要列出这个文件的完整的路径名。例如,用户WANG有一个名为class的目录,该目录中有两 个文件:software_1和hardware_1。若用户WANG想显示出其class目录中的名为software_1的文件,可以使 用下列命令:   /home/WANG$ cat /home/WANG/class/software_1   用户也可以根据文件software_1与当前工作目录的相对位置来引用该文件。这时命令为:   /home/WANG$ cat class/software_1 博客:http://x.discuz.net/504112 19/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (一)  文件和目录操作相关命令 发布时间 :2006-12-30 12:48:24 显示文件内容命令 用户需要查看一个文件的内容时,可以根据显示要求的不同选用以下的命令。 cat命令 功能1:在标准输出上显示文件。 语法:cat [ - 选项 ] 文件 说明:该命令功能之一是用来显示文件。它依次读取其后所指文件的内容并将其输出到标准输出。 cat命令中各个选项的含义为: - v 用一种特殊形式显示控制字符,LFD与TAB除外。 加了- v选项后,- T和- E选项将起作用。其中: - T 将TAB显示为“ù I”。该选项需要与- v选项一起使用。即如果没有使用- v选项,则这个选项将被忽略。 - E 在每行的末尾显示一个$符。该选项需要与- v选项一起使用。 - u 输出不经过缓冲区。 - A 等于- vET。 - t 等于- vT。 - e 等于- vE。 例1:$ cat example.txt 则在屏幕上显示出example.txt 文件的内容。 本想今天去香山看红叶,无奈天公不作美没去成,真遗憾,但愿明天艳阳高照,使我们梦想成真。   例2:$ cat - A exam2.txt 则在屏幕上显示出exam2.txt 文件的内容,而且如果文件中含有特殊字符的话,一并显示。 博客:http://x.discuz.net/504112 20/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v I am a boy ! ù I You are a cute boy$ 功能2:连接两个或多个文件 说明:该命令功能之二是用来将两个或多个文件连接起来。 例3:$ cat file1 file2 > file3 这样就把文件filel和文件file2的内容合并起来,放入文件file3中。(此时在屏幕上并不能直接看到该命令执行后 的结果。若想看到连接后的文件内容,可以再使用“cat file3”。) 需要说明的是,当文件内容过多时,就带来一个问题,因为文本在屏幕上迅速地闪过,用户来不及看清其内容 。因此,当文件内容较大时,一般可用more等命令分屏显示,以免因屏幕滚动太快而无法看清。 more命令 功能:在终端屏幕按屏显示文本文件。 语法: more [ - 选项 ] 文件 说明: 该命令一次显示一屏文本,显示满之后,停下来,并在终端底部打印出- - More- - ,系统还将同时显示 出已显示文本占全部文本的百分比,若要继续显示,按回车或空格键即可。 more命令中各个选项的含义为: - p 显示下一屏之前先清屏。 - c 作用同- p基本一样。 - d 在每屏的底部显示更友好的提示信息: - - More- - (XX%)[Press space to contiune , ‘q’ to quit . ] 而且若用户输入了-个错误命令则显示出错信息,而不是简单地鸣响终端。 - l 不处理< Ctrl+l >(换页符)。如果没有给出这个选项,则more命令在显示了一个包含有< Ctrl+l >字符的行 后将暂停显示,并等待接收命令。 - s 文件中连续的空白行压缩成一个空白行显示。 执行中的命令 在more命令的执行过程中,用户可以使用more自己的一系列命令动态地根据需要来选择显示的部分。more在 显示完一屏内容之后,将停下来等待用户输入某个命令。下表列出了more指令在执行中用到的一些常用命令, 而有关这些命令的完整内容,可以在more执行时按h查看。这些命令的执行方法是先输入i(行数)的值,再打 所要的命令,不然它会以预设值来执行命令。 i空格 若指定i,显示下面的i行;否则,显示下一整屏。 i回车 若指定i,显示下面的i行;否则,显示下一行。 iù D 按,若指定i,显示下面的i行;否则,往下显示半屏(一般为11行)。 博客:http://x.discuz.net/504112 21/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v id 同iù D 。 iz 同“i空格”类似,只是i将成为以下每个满屏的缺省行数。 is 跳过下面的i行再显示一个整屏。预设值为1。 if 跳过下面的i屏再显示一个整屏。预设值为1。 iù B 按,往回跳过(即向文件首回跳)i屏,再显示一个满屏。预设值为1。 b 与iù B相同。 ’ 回到上次搜索的地方  q或Q 退出more。 = 显示当前行号。 v 在当前行启动/usr/bin/vi对之进行编辑修改。 h 显示各命令的帮助信息。 i/pattern 查找匹配该模式的第i行。预设值为1。 in 查找符合表达式的倒数i行。预设值为1。 ! 或 :! 在子shell中执行命令。 i:n 在命令行中指定了多个文件名的情况下,可用此命令使之显示第i个文件,若i过大(出界),则显示文件 名列表中的最后一个文件。 i:p 在命令行中指定了多个文件名的情况下,可用此命令使之显示倒数第i个文件。若i过大(出界),则显示 第一个文件。 i:f 显示当前文件的文件名和行数。 · 重复上次键人的命令。 例1:用分页的方式显示一个文件的内容。 $ more example1.c /*-------------------------------------------*/ /* example1.c */ /*-------------------------------------------*/ /* author f opus.BBS@BBS.cs.nthu.edu.tw */ /* target f BBS main/login/top-menu routines */ 博客:http://x.discuz.net/504112 22/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v /* create f 99/10/23 */ /* update f 99/12/15 */ /*-------------------------------------------*/ #define _MAIN_C_ #inc1ude < BBS. h > jmp_buf byebye; int talkrequest=NA; static uschar Enter_uflag i #ifdef SHOW_IDLE_TIME --More- (3%)   例2:显示一个文件的内容,但显示之前先清屏,并且在显示器的最下方显示完整的百分比。 $ more - dc example1.c 执行该命令后,先清屏,然后显示文件example.c的内容。 /*-------------------------------------------*/ /* example1.c */ /*-------------------------------------------*/ /* author f opus.BBS@BBS.cs.nthu.edu.tw */ /* target f BBS main/login/top-menu routines */ /* create f 99/10/23 */ /* update f 99/12/15 */ /*-------------------------------------------*/ #define _MAIN_C_ #inc1ude < BBS. h > jmp_buf byebye; int talkrequest=NA; 博客:http://x.discuz.net/504112 23/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v static uschar Enter_uflag i #ifdef SHOW_IDLE_TIME char fromhost( ); --More- (3%)[Press space to continue , ‘q’ to quit .]   例3:显示一个文件的内容,要求每十行显示一次,且显示之前先清屏。 $ more - c - 10 example1.c 执行该命令后,先清屏,然后将以每十行每十行的方式显示文件example.c的内容。 /*-------------------------------------------*/ /* example1.c */ /*-------------------------------------------*/ /* author f opus.BBS@BBS.cs.nthu.edu.tw */ /* target f BBS main/login/top-menu routines */ /* create f 99/10/23 */ /* update f 99/12/15 */ /*-------------------------------------------*/ #define _MAIN_C_ inc1ude < BBS. h > --More- (3%) less命令 less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户 既可以向前又可以向后翻阅文件。 less命令的使用与more命令类似,在此就不赘述了,用户如有不清楚的地方可直接查看联机帮助。 用less命令显示文件时,若需要在文件中往前移动,按< b >键;要移动到用文件的百分比表示的某位置,则指 定一个0到100之间的数,并按< p >即可。 例如,需要按页显示test文件 $ less test 博客:http://x.discuz.net/504112 24/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   head命令 如果用户希望查看一个文件究竟保存的是什么内容,可以只查看文件的头几行,而不必浏览整个文件。用head 命令只显示文件或标准输入的头几行。 语法:head [- n ] 文件 功能:显示指定文件的前若干行。 说明:该命令显示每个指定文件的前面n行。如果没有给出n值,缺省设置为10。如果没有指定文件,head就 从标准输入读取。例如显示文件example.c的前3行。 $ head - 3 example.c /*-------------------------------------------*/ /* example1.c */ /*-------------------------------------------*/   tail命令 同样,如果用户想查看文件的尾部,可以使用tail命令。 语法:tail [+ / - num ] [参数] 文件 说明:该命令显示一个文件的指定内容。它把指定文件的指定显示范围内的内容显示在标准输出上。如果没有 给定文件名,则使用标准输入文件。 tail命令中各个选项的含义为: +num 从第num行以后开始显示。 - num 从距文件尾num行处开始显示。如果省略num参数,系统默认值为10。 l 以文本行为num的计数单位。与参数选项+num或- num选项同时使用时,num表示要显示的文本行行数。 c 以字节为num的计数单位。与参数选项+num或- num选项同时使用时,num表示要显示的字符数。 (l、c选项可以省略,系统默认值为l,即按行计数)。 例如: $ tail -4 example 将显示文件example的最后4行。   博客:http://x.discuz.net/504112 25/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v od命令 用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制 和ASCII码来显示文件。 语法:od [选项] 文件⋯ 命令中各选项的含义: - A 指定地址基数,包括: d 十进制 o 八进制(系统默认值) x 十六进制 n 不打印位移值 - t 指定数据的显示格式,主要的参数有: c ASCII字符或反斜杠序列 d 有符号十进制数 f 浮点数 o 八进制(系统默认值为02) u 无符号十进制数 x 十六进制数 除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。 说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Dump)。但这不是最有用的显 示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。 例如: $ od - Ax - tcx1 wh5 000000 F i l e s y s t e m 46 69 6c 65 73 79 73 74 65 6d 20 20 20 20 20 20 000010 1 k - b l o c k s 20 20 20 20 20 31 6b 2d 62 6c 6f 63 6b 73 20 20 000020 U s e d A v a i l a b 博客:http://x.discuz.net/504112 26/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 20 20 20 20 55 73 65 64 20 41 76 61 69 6c 61 62 000030 l e U s e % M o u n t e d 6c 65 20 55 73 65 25 20 4d 6f 75 6e 74 65 64 20 000040 o n \n / d e v / h d a 8 6f 6e 0a 2f 64 65 76 2f 68 64 61 38 20 20 20 20 000050 3 0 4 4 4 20 20 20 20 20 20 20 20 20 20 20 33 30 34 34 34 000060 0 5 0 6 8 9 2 30 20 20 20 20 20 35 30 36 38 39 20 20 20 20 32 000070 3 8 0 2 8 1 8 % / \n / d e 33 38 30 32 38 20 20 31 38 25 20 2f 0a 2f 64 65 000080 v / h d a 9 76 2f 68 64 61 39 20 20 20 20 20 20 20 20 20 20 000090 5 4 6 3 6 9 20 20 20 20 20 35 34 36 33 36 39 20 20 20 20 20 0000a0 8 7 7 6 5 0 9 3 7 1 20 38 37 37 36 20 20 20 20 35 30 39 33 37 31 20 0000b0 2 % / h o m e \n \n \n 20 20 32 25 20 2f 68 6f 6d 65 0a 0a 0a 0000bd 博客:http://x.discuz.net/504112 27/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (二) 文件内容查询命令 发布时间 :2006-12-30 12:50:25   grep、fgrep和egrep命令   这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所 有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式 ;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表 达式,是快速搜索命令。   这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,您可以 用它们来搜索文件中包含的这些关键词。编写程序时,可以用它来寻找某一个函数,或是相关的词组。grep命 令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能。有关正则表达式请 参见shell一章。   该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本 行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索 到指定模式的文件名,并且可以指定在查找模式时忽略大小写。   这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况 下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。   语法:   grep [选项] [查找模式] [文件名1,文件名2,⋯⋯]   egrep [选项] [查找模式] [文件名1,文件名2,⋯⋯]   fgrep [选项] [查找模式] [文件名1,文件名2,⋯⋯]   这组命令各选项的含义为:   - E 每个模式作为一个扩展的正则表达式对待。   - F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。   - b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。   - c 只显示匹配行的数量。   - i 比较时不区分大小写。   - h 在查找多个文件时,指示grep不要将文件名加入到输出之前。   - l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文 件名。 博客:http://x.discuz.net/504112 28/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   - n 在输出前加上匹配串所在行的行号(文件首行行号为1)。   - v 只显示不包含匹配串的行。   - x 只显示整行严格匹配的行。   - e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。   - f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。   对该组命令的使用还需注意以下方面:   在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如“*”等, 用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用 来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而grep命令 将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式 “text file”。   $ grep ’text file’ example    用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符“*” 用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式 匹配的行。   $ grep data *    特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您 可以用“*.c”来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这 些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行:   $ grep goto *.c   用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个 搜索模式占一行。如果经常要搜索一组常见字符串时,这个功能非常有用。在下面的例子中,用户要在文件 exam中搜索字符串“editor”和“create”,就把要搜索的模式放置在文件mypats中,然后,grep命令从文件 mypats中读取要搜索的模式。   $ cat mypats   editor   create   $ grep -f mypats exam   文件查找命令   find命令   功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。   语法:find 起始目录 寻找条件 操作 博客:http://x.discuz.net/504112 29/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取 相关的操作。   该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not 的含义为:   (1)and:逻辑与,在命令中用“-a”表示,是系统缺省的选项,表示只有当所给的条件都满足时,寻找 条件才算满足。例如:   $ find �Cname ’tmp’ �Cxtype c -user ’inin’   该命令寻找三个给定条件都满足的所有文件。   (2)or:逻辑或,在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时,寻找条件就算 满足。例如:   $ find �Cname ’tmp’ �Co �Cname ’mina*’     该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。   (3)not:逻辑非,在命令中用“!”表示。该运算符表示查找不满足所给条件的文件。例如:   $ find ! �Cname ’tmp’   该命令查询文件名不是’tmp’的所有文件。   需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起 误解,在话号前需要加转义字符“”来去除括号的意义。   例:$ find (�Cname ’tmp’ �Cxtype c -user ’inin’ )   寻找条件有以下选项:   首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:   +20 表示20以后(21,22,23等)   -20 表示20以前(19,18,17等)   20 表示正好是20   1. 以名称和文件属性查找。   - name ’字串’ 查找文件名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。   - lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件,字串内可用通配符*、?、[ ]。   -gid n 查找属于ID号为n的用户组的所有文件。   -uid n 查找属于ID号为n的用户的所有文件。   -group ’字串’ 查找属于用户组名为所给字串的所有的文件。 博客:http://x.discuz.net/504112 30/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   -user ’字串’ 查找属于用户名为所给字串的所有的文件。   -empty 查找大小为0的目录或文件。   -path ’字串’ 查找路径名匹配所给字串的所有文件,字串内可用通配符*、?、[ ]。   -perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。   -size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b,代表512字节的块。   -type x 查找类型为x的文件,x为下列字符之一:   b 块设备文件   c 字符设备文件   d 目录文件   p 命名管道(FIFO)   f 普通文件   l 符号链接文件(symbolic links)   s socket文件   -xtype x 与-type基本相同,但只查找符号链接文件。   2. 以时间为条件查找   - amin n 查找n分钟以前被访问过的所有文件。   - atime n 查找n天以前被访问过的所有文件。   - cmin n 查找n分钟以前文件状态被修改过的所有文件。   - ctime n 查找n天以前文件状态被修改过的所有文件。   - mmin n 查找n分钟以前文件内容被修改过的所有文件。   - mtime n 查找n天以前文件内容被修改过的所有文件。   3. 可执行的操作   - exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令,而不询问用户是否需要执行该命令。{}表示 命令的参数即为所找到的文件;命令的末尾必须以“ ;”结束。   - ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行 该命令。   - ls 详细列出所找到的所有文件。 博客:http://x.discuz.net/504112 31/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   - fprintf 文件名 将找到的文件名写入指定文件。   - print 在标准输出设备上显示查找出的文件名。   - printf 格式 格式的写法请参考有关C语言的书。   例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。   $ find . - name ‘main*’ - exec more {} ;   例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。   $ find . (- name a.out - o - name ‘*.o’)   > - atime +7 - exec rm {} ;   说明如下:   命令中的“.”表示当前目录,find将从当前目录开始,逐个在其子目录中查找满足后面指定条件的文件。 (和)表示括号(),其中的“”称为转义符。之所以这样写是由于对Shell而言,(和)另有不同的含义,而 不是这里的用于组合条件的用途。“- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要 查找所有名字以 .o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以 .o结 尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前 (条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ };)。其中{ }代表当前查到的符合条件的文件 名,;则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时,可输入一 个,之后系统将显示一个>,指示用户继续输入命令。   locate命令   locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作 (crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。   该命令的一般形式为:   locate 相关字   例如:查找相关字issue   $ locate issue   /etc/issue   /etc/issue.net   /usr/man/man5/issue.5   /usr/man/man5/issue.net.5 博客:http://x.discuz.net/504112 32/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (三)  文本处理命令 发布时间 :2006-12-30 12:54:05   Sort命令   sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据 库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来 管理内容类似数据库记录的文件。   Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符 ,如果还相同,将继续进行比较。   语法:   sort [选项] 文件   说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用 “- ”,则表示排序内容来自标准输入。   sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小 的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。   改变缺省设置的选项主要有:   - m 若给定文件已排好序,合并文件。   - c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。   - u 对排序后认为相同的行只留其中一行。   - o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件 的内容写入一个临时文件,然后再排序和写输出结果。   改变缺省排序规则的选项主要有:   - d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。   - f 将小写字母与大写字母同等对待。   - I 忽略非打印字符。   - M 作为月份比较:“JAN”<“FEB”result   以第2个字段作为排序关键字对文件example的内容进行排序。   $ sort +1-2 example   对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。   $ sort -r -o outfile +1.0 -1.1 example   sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文 件送给sort进行排序,排序关键字是第6个至第8个字段。   $ ls - l | sort +5 - 7   sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行 博客:http://x.discuz.net/504112 34/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 排序,您可以首先用命令cat把多个文件合并,然后用管道操作把合并后的文本行输入给命令sort,sort命令将 输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件fruitlist的文本行经过合并与排序后被保 存到文件clist中。   $ cat veglist fruitlist | sort > clist   uniq命令   文件经过处理后在它的输出文件中可能会出现重复的行。例如,使用cat命令将两个文件合并后,再使用 sort命令进行排序,就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除,只留下每条 记录的唯一样本。   语法:uniq [选项] 文件   说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去, 行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须 不同。如果输入文件用“- ”表示,则从标准输入读取。   该命令各选项含义如下:、   - c 显示输出中,在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。   - d 只显示重复行。   - u 只显示文件中不重复的各行。   - n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表 符和空格隔开(字段从0开始编号)。   +n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。   - f n 与- n相同,这里n是字段数。   - s n 与+n相同,这里n是字符数。   例如:   1. 显示文件example中不重复的行。   uniq - u example   2. 显示文件example中不重复的行,从第2个字段的第2个字符开始做比较。   uniq - u - 1 +1 example 博客:http://x.discuz.net/504112 35/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (四)  文件内容统计命令 发布时间 :2006-12-30 12:55:01   wc命令   wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。   语法:wc [选项] 文件⋯   说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时 也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。   该命令各选项含义如下:   - c 统计字节数。   - l 统计行数。   - w 统计字数。   这些选项可以组合使用。   输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。   行数、字数、字节数、文件名   如果命令行中没有文件名,则输出中不出现文件名。   例如:   $ wc - lcw file1 file2   4 33 file1   7 52 file2   11 11 85 total   省略任选项-lcw,wc命令的执行结果与上面一样。 博客:http://x.discuz.net/504112 36/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (五)  文件比较命令 发布时间 :2006-12-30 12:55:55   这组命令可以用来比较两个文件内容的差别。   Comm命令   如果想对两个有序的文件进行比较,可以使用comm命令。   语法:comm [- 123 ] file1 file2   说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文 件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名 用“- ”,则表示从标准输入读取。   选项1、2或3抑制相应的列显示。例如comm - 12就只显示在两个文件中都存在的行;comm - 23只显示在 第一个文件中出现而未在第二个文件中出现的行;comm - 123则什么也不显示。   例如:假设要对文件myfile1和myfile2进行比较   $ cat myfile1   main( )     {   float a,b, i, j ,z ;   a=i=10 ; b=j=5 ;   z= i + j ;   printf(“z=%d\n”,z) ;   }   $ cat myfile2   #include   main( )   {   float i, j ,z ;   i=10 ; j=5 ; 博客:http://x.discuz.net/504112 37/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   z= i + j ;   printf(“z=%f\n”,z) ;   }   $ comm - 12 myfile1 myfile2   main( )   {   z= i + j ;   }   就只显示文件myfile1和myfile2中共有的行。   Diff命令   该命令的功能为逐行比较两个文本文件,列出其不同之处。它比comm命令完成更复杂的检查。它对给出 的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。   语法:diff [选项] file1 file2   说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“- ”表示file1 或 fiie2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。例如:   diff /usr/xu mine   把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。   通常输出由下述形式的行组成:   n1 a n3,n4   n1,n2 d n3   n1,n2 c n3,n4   这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行 号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。   在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于第一个文件,以“>”打头的 行属于第二个文件。   diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。   如果file1和file2都是目录,则diff会产生很多信息。如果一个目录中只有一个文件,则产生一条信息,指出 该目录路径名和其中的文件名。   diff各选项的含义如下: 博客:http://x.discuz.net/504112 38/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   - b 忽略行尾的空格,而字符串中的一个或多个空格符都视为相等。如How are you与How are you被视为 相同的字符串。   - c 采用上下文输出格式(提供三行上下文)。   - C n 采用上下文输出格式(提供n行上下文)。   - e 产生一个合法的ed脚本作为输出。   - r 当file1和file2是目录时,递归作用到各文件和目录上。   例如,文件ml.c的内容为(左边行号是有意加上的,以便前后对照):   1 main( )   {   printf(“Hello!\n”);   }   5   文件m2.c的内容为:   1 main()   2 {   3 int n , m ;   4 n= 10 ;   5 printf ( “ % d \ n ” , m = n * 10);   6 }   输入命令:   $ diff m1.c m2.c   屏幕上显示:   3,5 c 3,6   printf(“Hello!\n”); 博客:http://x.discuz.net/504112 39/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   }   <5   >3 int n,m;   >4 n=10 ;   >5 printf ( “ % d \ n ” , m = n * 10);   >6 }   表示把文件m1.c的3至5行改成m2.c的3至6行后,两个文件相同。 博客:http://x.discuz.net/504112 40/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (六)  文件的复制、删除和移动命令 发布时间 :2006-12-30 12:56:34   cp命令   该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令一样,功能非常 强大。   语法: cp [选项] 源文件或目录 目标文件或目录   说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。   该命令的各选项含义如下:   - a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组 合。   - d 拷贝时保留链接。   - f 删除已经存在的目标文件而不提示。   - i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷 贝。   - p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。   - r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为 一个目录名。   - l 不作拷贝,只是链接文件。   需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名是一个 已存在的文件名,用cp命令拷贝文件后,这个文件就会被新拷贝的源文件覆盖,因此,建议用户在使用cp命令 拷贝文件时,最好使用i选项。   $ cp - i exam1.c /usr/wang/shiyan1.c   该命令将文件exam1.c拷贝到/usr/wang 这个目录下,并改名为 shiyan1.c。若不希望重新命名,可以使用 下面的命令:   $ cp exam1.c /usr/ wang/   $ cp - r /usr/xu/ /usr/liu/   将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中。 博客:http://x.discuz.net/504112 41/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   mv命令   用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的 ren和move的组合。   语法:mv [选项] 源文件或目录 目标文件或目录   说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移 至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以 是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时, 源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时, mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。   命令中各选项的含义为:   - I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回 答y或n,这样可以避免误覆盖文件。   - f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作 用。   如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户在不经意的情况 下用mv命令破坏另一个文件,建议用户在使用mv命令移动文件时,最好使用i选项。   需要注意的是,mv与cp的结果不同。mv好象文件“搬家”,文件个数并末增加,而cp对文件进行复制, 文件个数增加了。   例1:将/usr/xu中的所有文件移到当前目录(用“.”表示)中:   $ mv /usr/xu/ * .   例2:将文件wch.txt重命名为wjz.doc   $ mv wch.txt wjz.doc   rm命令   在linux中创建文件很容易,系统中随时会有文件变得过时且毫无用处。用户可以用rm命令将其删除。该命 令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除 。对于链接文件,只是删除了链接,原有文件均保持不变。   rm命令的一般形式为:   rm [选项] 文件⋯   如果没有使用- r选项,则rm不会删除目录。   该命令的各选项含义如下:   - f 忽略不存在的文件,从不给出提示。   - r 指示rm将参数中列出的全部目录和子目录均递归地删除。 博客:http://x.discuz.net/504112 42/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   - i 进行交互式删除。   使用rm命令要格外小心。因为一旦一个文件被删除,它是不能被恢复的。例如,用户在输入cp,mv或其 他命令时,不小心误输入了rm命令,当用户按了回车键并认识到自己的错误时,已经太晚了,文件已经没有了 。为了防止此种情况的发生,可以使用rm命令中的 i选项来确认要删除的每个文件。如果用户输入y,文件将被 删除。如果输入任何其他东西,文件将被保留。在下一个例子中,用户要删除文件test和example。然后会被要 求对每个文件进行确认。用户最终决定删除example文件,保留test文件。   $ rm - ii test example   Remove test ?n   Remove example ?y   第十课(七) 文件链接命令 ln命令   该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名 称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。   如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使 我们删除这个链接,也不会破坏原来的目录。   语法:ln [选项] 目标 [链接名]      ln [选项] 目标 目录   链接有两种,一种被称为硬链接(Hard Link),一种被称为符号链接(Symbolic Link)。建立硬链接时 ,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不 存在这个问题。默认情况下,ln产生硬链接。   在硬链接的情况下,参数中的“目标”被链接至[链接名]。如果[链接名]是一个目录名,系统将在该 目录之下建立一个或多个与“目标”同名的链接文件,链接文件和被链接文件的内容完全相同。如果[链接名 ]为一个文件,用户将被告知该文件已存在且不进行链接。如果指定了多个“目标”参数,那么最后一个参数 必须为目录。   如果给ln命令加上- s选项,则建立符号链接。如果[链接名]已经存在但不是目录,将不做链接。[链接 名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它与“目标”不在同一个文件系统 中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与“目标”同名的文件,此新 建的文件实际上是指向原“目标”的符号链接文件。   例:$ ln - s lunch /home/xu   用户为当前目录下的文件lunch创建了一个符号链接/home/xu。 博客:http://x.discuz.net/504112 43/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (八) 目录的创建与删除命令 发布时间 :2006-12-30 12:57:34 mkdir命令 功能:创建一个目录(类似DOS下的md命令)。 语法:mkdir [选项] dirname 说明:该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中(dirname的父目录中)具有写权 限,并且dirname不能是当前目录中已有的目录或文件名称。 命令中各选项的含义为: - m 对新建目录设置存取权限。也可以用chmod命令设置。 - p 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后,系统将自动建立好那些尚不存 在的目录,即一次可以建立多个目录。 例如:在当前目录中建立inin 和inin下的/mail目录,也就是连续建两个目录。 $ mkdir - p - m 700 ./inin/mail/ 该命令的执行结果是在当前目录中创建嵌套的目录层次inin /mail,权限设置为只有文件主有读、写和执行权限 。 rmdir 命令 功能:删除空目录。 语法:rmdir [选项] dirname 说明:dirname表示目录名。该命令从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被 删除之前必须是空的。(注意,rm - r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具有对 父目录的写权限。 命令中各选项的含义为: - p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某 种原因保留部分路径,则系统在标准输出上显示相应的信息。 例如: $ rmdir - p /usr/xu/txt 将/usr/xu/txt目录删除。 博客:http://x.discuz.net/504112 44/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 改变工作目录、显示目录内容命令 cd 命令 功能:改变工作目录。 语法:cd [directory] 说明:该命令将当前目录改变至directory所指定的目录。若没有指定directory,则回到用户的主目录。为了改 变到指定目录,用户必须拥有对指定目录的执行和读权限。 该命令可以使用通配符(通配符含义请参见第十章)。 例如:假设用户当前目录是:/home/xu,现需要更换到/home/xu/pro目录中, $ cd pro 此时,用户可以执行pwd命令来显示工作目录。 $ pwd /home/xu/pro pwd 命令 在Linux层次目录结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一 个目录转换到另一个目录。然而,没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录, 可以使用pwd命令,该命令显示整个路径名。 语法:pwd 说明:此命令显示出当前工作目录的绝对路径。 例:$ pwd /home/xu 显示的路径名为/home/xu,每个目录名都用“/”隔开,根目录以开头的“/”表示。 ls 命令 ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令之一,因为用户需要不时地查 看某个目录的内容。该命令类似于DOS下的dir命令。 语法:ls [选项] [目录或是文件] 对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他 信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。 命令中各选项的含义如下: - a 显示指定目录下所有子目录与文件,包括隐藏文件。 博客:http://x.discuz.net/504112 45/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v - A 显示指定目录下所有子目录与文件,包括隐藏文件。但不列出“.”和“..”。 - b 对文件名中的不可显示字符用八进制逃逸字符显示。 - c 按文件的修改时间排序。 - C 分成多列显示各项。 - d 如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使用,以得到目录的详细信息。 - f 不排序。该选项将使lts选项失效,并使aU选项有效。 - F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标 记“|”,socket文件后面标记“=”。 - i 在输出的第一列显示文件的i节点号。 - l 以长格式来显示文件的详细信息。这个选项最常用。每行列出的信息依次是: 文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间 名字 对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。 对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。目录中的总块数显示在长格式列表 的开头,其中包含间接块。 - L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。 - m 输出按字符流格式,文件跨页显示,以逗号分开。 - n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和GID号来表示,而不是实际的名 称。 - o 与l选项相同,只是不显示拥有者信息。 - p 在目录后面加一个“/”。 - q 将文件名中的不可显示字符用“?”代替。 - r 按字母逆序或最早优先的顺序显示输出结果。 - R 递归式地显示指定目录的各个子目录中的文件。 - s 给出每个目录项所用的块数,包括间接块。 - t 显示时按修改时间(最近优先)而不是按名字排序。若文件修改时间相同,则按字典顺序。修改时间取决于 是否使用了c或u选顶。缺省的时间标记是最后一次修改时间。 - u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。即将-t的时间标记修改为最后一次访问的时 间。 - x 按行显示出各排序项的信息。 博客:http://x.discuz.net/504112 46/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类 型之一: - 普通文件 d 目录 l 符号链接 b 块设备文件 c 字符设备文件 后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户 的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。 各权限如下所示: r 读 w 写 x 执行。对于目录,表示进入权限。 s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。 t 设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者 或文件属主删除。如果它是可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它 时,系统就能更快地装入该文件。 - 没有设置权限。 例1:列出当前目录的内容。 $ ls -F bin/ lib/ var/ etc/ tmp/ index. html 例2:列出某个目录的内容。 $ ls �CF /home/xu Mai1/ map1e/ mm/ ptr/ telnetd* fd/ mbox mount sobsrc. tgz tmp/ 例3:列出某个目录下所有的文件(包括隐藏文件)。 $ 1s -aF /home/xu 博客:http://x.discuz.net/504112 47/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v ./ . .e1m/ .netscape/ map1e ptr/ ../ .fvwin2rc95 .term/ mbox sobsrc. tgz .Xauthority .kermrc Mai1/ mm/ te1netd* .bash-history .ncftp/ fd/ mount tmp/   例4:用长格式列出某个目录下所有的文件(包括隐藏文件)。 $ 1s -laF /home/xu total 584 drwxr-xr-x l2 root root 1024 Nov 02 22:07 ./ drwxr-xr-x 15 bbs bbs 1024 Jul 29 07:08 ../ -rw-r--r-- 1 yu users 4343 Ju1 29 22:20 .bash-history drwx------ 2 yu users 1024 May 17 06:36 .e1m/ --rw------ 1 root root 4628 Jun 2 1l:34 mbox lrwxrwxrwx 1 root root l4 Ju1 29 03:08 mount->/mnt drwxrwxr-x 4 root root 1024 Ju1 23 03:43 ptr/ -rw--r--r- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz -rwxr-xr-x l root users 60177 Jun 8 01:29 telnetd* drwxr-xr-x 2 root root 1024 Mar 6 22:32 tmp/   例5:用长格式列出某个目录下所有的文件包括隐藏文件和它们的i节点号。并把文件属主和属组以UID号和GID 号的形式显示。 $ 1s -1ainF /home/xu tota1 584 399672 drwxr-xr-x l2 0 0 l024 Nov 30 22:07 ./ 333907 drwxr-xr-x 15 9999 99 l024  Ju1 29 07:08 ../ 39980l -rw------- l 0 0 0 Jun 2 2:09 .Xauthority 399679 -rw-r--r-- 1 505 l00 4343 Jul 29 22:20 .bash-hist0ry 博客:http://x.discuz.net/504112 48/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 30l763 drwxr----- 2 505 100 l024  May 17 06:36 .e1m/ 博客:http://x.discuz.net/504112 49/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (九)  改变文件或目录的访问权限命令 发布时间 :2006-12-30 12:58:33 Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操 作。 文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对 其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有 对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任 何组合。 有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创 建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况 下,系统中每一位用户都能访问该用户拥有的文件或目录。 每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的 用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时 ,最左边的一列为文件的访问权限。例如: $ ls -l sobsrc. tgz -rw-r--r-- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz 横线代表空许可。r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型 。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表 示是一个目录。 例如: - rw- r-- r-- 普通文件 文件主 组用户 其他用户 是文件sobsrc.tgz 的访问权限,表示sobsrc.tgz是一个普通文件;sobsrc.tgz的属主有读写权限;与sobsrc.tgz 属主同组的用户只有读权限;其他用户也只有读权限。 确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以 利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。 下面分别对这些命令加以介绍。   chmod 命令 chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。 该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 博客:http://x.discuz.net/504112 50/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 1. 文字设定法 chmod [who] [+ | - | =] [mode] 文件名? 命令中各选项的含义为: 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。它是系统默认值。 操作符号可以是: + 添加某个权限。 - 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。 设置mode所表示的权限可用下述字母的任意组合: r 可读。 w 可写。 x 可执行。 X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设 置组ID位。 t 保存程序的文本到交换设备上。 u 与文件属主拥有一样的权限。 g 与和文件属主同组的用户拥有一样的权限。 o 与其他用户拥有一样的权限。 文件名:以空格分开的要改变权限的文件列表,支持通配符。 在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example 使同组和其他用户对文件example 有读权限。 2. 数字设定法 博客:http://x.discuz.net/504112 51/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读 权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。 例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。 数字设定法的一般形式为: chmod [mode] 文件名? 例子: (1)文字设定法: 例1:$ chmod a+x sort 即设定文件sort的属性为: 文件属主(u) 增加执行权限 与文件属主同组用户(g) 增加执行权限 其他用户(o) 增加执行权限   例2:$ chmod ug+w,o-x text 即设定文件text的属性为: 文件属主(u) 增加写权限 与文件属主同组用户(g) 增加写权限 其他用户(o) 删除执行权限   例3:$ chmod u+s a.out 假设执行chmod后a.out的权限为(可以用ls �C l a.out命令来看): �Crws--x--x 1 inin users 7192 Nov 4 14:22 a.out 并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“�Crw-------”,即该文件只有其属主具 有读写权限。 当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以 他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。 因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的 安全,避免因为某些程序的bug而使系统遭到入侵。 例4:$ chmod a�Cx mm.txt 博客:http://x.discuz.net/504112 52/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v $ chmod �Cx mm.txt $ chmod ugo�Cx mm.txt   以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。 (2)数字设定法: 例1: $ chmod 644 mm.txt $ ls �Cl 即设定文件mm.txt的属性为: -rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt 文件属主(u)inin 拥有读、写权限 与文件属主同组人用户(g) 拥有读权限 其他人(o) 拥有读权限   例2: $ chmod 750 wch.txt $ ls �Cl -rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt 即设定wchtxt这个文件的属性为: 文件主本人(u)inin 可读/可写/可执行权 与文件主同组人(g) 可读/可执行权 其他人(o) 没有任何权限 chgrp命令 功能:改变文件或目录所属的组。 语法:chgrp [选项] group filename? 该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名 。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不 能改变该文件的组。 该命令的各选项含义为: 博客:http://x.discuz.net/504112 53/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v - R 递归式地改变指定目录及其下的所有子目录和文件的属组。 例1:$ chgrp - R book /opt/local /book 改变/opt/local /book/及其子目录下的所有文件的属组为book。 chown 命令 功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu ,为了让用户 xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文 件。 语法:chown [选项] 用户或组 文件 说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。 文件是以空格分开的要改变权限的文件列表,支持通配符。 该命令的各选项含义如下: - R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。 - v 显示chown命令所做的工作。 例1:把文件shiyan.c的所有者改为wang。 $ chown wang shiyan.c 例2:把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users。 $ chown - R wang.users /his 博客:http://x.discuz.net/504112 54/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十课 (十) 备份与压缩命令 发布时间 :2006-12-30 12:59:36   用户经常需要备份计算机系统中的数据,为了节省存储空间,常常将备份文件进行压缩。下面分别介绍备 份与压缩的命令。   tar命令   tar可以为文件和目录创建档案。利用tar,用户可以为某一特定文件创建档案(备份文件),也可以在档案 中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创 建档案,如软盘。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文 件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。   语法:tar [主选项+辅选项] 文件或者目录   使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。   主选项:   c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。   r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件,又发现还有一个目录或是一些文 件忘记备份了,这时可以使用该选项,将忘记的目录或文件追加到备份文件中。   t 列出档案文件的内容,查看已经备份了哪些文件。   u 更新文件。就是说,用新增的文件取代原备份文件,如果在备份文件中找不到要更新的文件,则把它追 加到备份文件的最后。   x 从档案文件中释放文件。   辅助选项:   b 该选项是为磁带机设定的。其后跟一数字,用来说明区块的大小,系统预设值为20(20*512 bytes)。   f 使用档案文件或设备,这个选项通常是必选的。   k 保存已经存在的文件。例如我们把某个文件还原,在还原的过程中,遇到相同的文件,不会进行覆盖。   m 在还原文件时,把所有文件的修改时间设定为现在。   M 创建多卷的档案文件,以便在几个磁盘中存放。   v 详细报告tar处理的文件信息。如无此选项,tar不报告文件信息。   w 每一步都要求确认。 博客:http://x.discuz.net/504112 55/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   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选项:   $ tar xf /dev/fd0   如果用户备份的文件大小超过设备可用的存贮空间,如软盘,您可以创建一个多卷的tar备份文件。M选项 指示tar命令提示您使用一个新的存贮设备,当使用M选项向一个软驱进行存档时,tar命令在一张软盘已满的时 候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。   $ tar cMf /dev/fd0 /home   要恢复几张盘中的档案,只要将第一张放入软驱,然后输入有x和M选项的tar命令。在必要时您会被提醒 放入另外一张软盘。   $ tar xMf /dev/fd0   gzip命令   减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时 间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。   语法:gzip [选项] 压缩(解压缩)的文件名   各选项的含义:   -c 将输出写到标准输出上,并保留原有文件。 博客:http://x.discuz.net/504112 56/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   -d 将压缩文件解压。   -l 对每个压缩文件,显示下列字段:   压缩文件的大小   未压缩文件的大小   压缩比   未压缩文件的名字   -r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。   -t 测试,检查压缩文件是否完整。   -v 对每一个压缩和解压的文件,显示文件名和压缩比。   -num 用指定的数字num调整压缩的速度,-1或--fast表示最快压缩方法(低压缩比),-9或--best表示最慢 压缩方法(高压缩比)。系统缺省值为6。   假设一个目录/home下有文件mm.txt、sort.txt、xx.com。   例1:把/home目录下的每个文件压缩成.gz文件。   $ cd /home   $ gzip *   $ ls   m.txt.gz sort.txt.gz xx.com.gz   例2:把例1中每个压缩的文件解压,并列出详细的信息。   $ gzip -dv *   mm.txt.gz 43.1%-----replaced with mm.txt   sort.txt.gz 43.1%-----replaced with sort.txt   xx.com.gz 43.1%-----replaced with xx.com   $ ls   mm.txt sort.txt xx.com   例3:详细显示例1中每个压缩的文件的信息,并不解压。   $ gzip -l * 博客:http://x.discuz.net/504112 57/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   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   $ gzip usr.tar   $ ls   usr.tar.gz   unzip命令   用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢?可以用unzip命令,该命令用于 解扩展名为.zip的压缩文件。   语法:unzip [选项] 压缩文件名.zip   各选项的含义分别为:   -x 文件列表 解压缩文件,但不包括指定的file文件。   -v 查看压缩文件目录,但不解压。   -t 测试文件有无损坏,但不解压。   -d 目录 把压缩文件解到指定目录下。   -z 只显示压缩文件的注解。   -n 不覆盖已经存在的文件。   -o 覆盖已存在的文件且不要求用户确认。   -j 不重建文档的目录结构,把所有文件解压到同一目录下。   例1:将压缩文件text.zip在当前目录下解压缩。   $ unzip text.zip   例2:将压缩文件text.zip在指定目录/tmp下解压缩,如果已有相同的文件存在,要求unzip命令不覆盖原先 的文件。 博客:http://x.discuz.net/504112 58/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   $ unzip -n text.zip -d /tmp   例3:查看压缩文件目录,但不解压。   $ unzip -v text.zip   zgrep命令   这个命令的功能是在压缩文件中寻找匹配的正则表达式,用法和grep命令一样,只不过操作的对象是压缩 文件。如果用户想看看在某个压缩文件中有没有某一句话,便可用zgrep命令。 博客:http://x.discuz.net/504112 59/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十一课 进程管理及作业控制 (1) 发布时间 :2006-12-30 13:03:55 Linux是一个多任务的操作系统,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。 使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。本章详细介绍进程管理及作业 控制的命令,包括启动进程、查看进程、调度作业的命令。 进程及作业的概念 Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指 Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。 操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主存,但一个系统可能有多个二 级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当您提出一个请求时,给 您造成一种假象,好象系统只被您独自占用。而实际上操作系统监控着一个等待执行的任务队列,这些任务包 括用户作业、操作系统任务、邮件和打印作业等。操作系统根据每个任务的优先级为每个任务分配合适的时间 片,每个时间片大约都有零点几秒,虽然看起来很短,但实际上已经足够计算机完成成千上万的指令集。每个 任务都会被系统运行一段时间,然后挂起,系统转而处理其他任务;过一段时间以后再回来处理这个任务,直 到某个任务完成,从任务队列中去除。 Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程,都可以称之为进 程。Linux用分时管理方法使所有的任务共同分享系统资源。我们讨论进程的时候,不会去关心这些进程究竟是 如何分配的,或者是内核如何管理分配时间片的,我们所关心的是如何去控制这些进程,让它们能够很好地为 用户服务。 进程的一个比较正式的定义是:在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的,进程 不是程序,虽然它由程序产生。程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可 能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。 Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。   交互进程——由一个 shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。 批处理进程——这种进程和终端没有联系,是一个进程序列。 监控进程(也称守护进程)—— Linux系统启动时启动的进程,并在后台运行。 上述三种进程各有各的作用,使用场合也有所不同。 进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是 当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。 作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。 shell将记录所有启动的进程情况,在每个进程过程中,用户可以任意地挂起进程或重新启动进程。作业控制是 许多shell(包括bash和tcsh)的一个特性,使用户能在多个独立作业间进行切换。 一般而言,进程与作业控制相关联时,才被称为作业。 博客:http://x.discuz.net/504112 60/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 在大多数情况下,用户在同一时间只运行一个作业,即它们最后向shell键入的命令。但是使用作业控制,用户 可以同时运行多个作业,并在需要时在这些作业间进行切换。这会有什么用途呢?例如,当用户编辑一个文本 文件,并需要中止编辑做其他事情时,利用作业控制,用户可以让编辑器暂时挂起,返回shell提示符开始做其 他的事情。其他事情做完以后,用户可以重新启动挂起的编辑器,返回到刚才中止的地方,就象用户从来没有 离开编辑器一样。这只是一个例子,作业控制还有许多其他实际的用途。 启动进程 键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一 个进程号,用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动,后者是事先进行 设置,根据用户要求自行启动。 手工启动 由用户输入命令,直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种,根据启动的进程 类型不同、性质不同,实际结果也不一样,下面分别介绍。 1. 前台启动 这或许是手工启动一个进程的最常用的方式。一般地,用户键入一个命令“ls �Cl”,这就已经启动了一个进 程,而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。或许有些用户会疑惑:我只启动了一 个进程而已。但实际上有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。还有的用户 在键入“ls �Cl”命令以后赶紧使用“ps �Cx”查看,却没有看到ls进程,也觉得很奇怪。其实这是因为ls这 个进程结束太快,使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程: find / -name fox.jpg 然后再把该进程挂起,使用ps查看,就会看到一个find进程在里面。     2. 后台启动 直接从后台手工启动一个进程用得比较少一些,除非是该进程甚为耗时,且用户也不急着需要结果的时候。假 设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪 ”状态,从后台启动这个进程是明智的选择。 [例1] $ troff �Cme notes > note_form & [1] 4513 $ 由上例可见,从后台启动进程其实就是在命令结尾加上一个&号。键入命令以后,出现一个数字,这个数字就 是该进程的编号,也称为PID,然后就出现了提示符。用户可以继续其他工作。 上面介绍了前、后台启动的两种情况。实际上这两种启动方式有个共同的特点,就是新进程都是由当前shell这 个进程产生的。也就是说,是shell创建了新进程,于是就称这种关系为进程间的父子关系。这里shell是父进程 博客:http://x.discuz.net/504112 61/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v ,而新进程是子进程。一个父进程可以有多个子进程,一般地,子进程结束后才能继续父进程;当然如果是从 后台启动,那就不用等待子进程结束了。 一种比较特殊的情况是在使用管道符的时候。例如: nroff -man ps.1|grep kill|more 这时候实际上是同时启动了三个进程。请注意是同时启动的,所有放在管道两边的进程都将被同时启动,它们 都是当前shell的子程序,互相之间可以称为兄弟进程。 以上介绍的是手工启动进程的一些内容,作为一名系统管理员,很多时候都需要把事情安排好以后让其自动运 行。因为管理员不是机器,也有离开的时候,所以有些必须要做的工作而恰好管理员不能亲自操作,这时候就 需要使用调度启动进程了。 调度启动 有时候需要对系统进行一些比较费时而且占用资源的维护工作,这些工作适合在深夜进行,这时候用户就可以 事先进行调度安排,指定任务运行的时间或者场合,到时候系统会自动完成这一切工作。 要使用自动启动进程的功能,就需要掌握以下几个启动命令。 at命令 用户使用at命令在指定时刻执行指定的命令序列。也就是说,该命令至少需要指定一个命令、一个执行时间才 可以正常运行。at命令可以只指定时间,也可以时间和日期一起指定。需要注意的是,指定时间有个系统判别 问题。比如说:用户现在指定了一个执行时间:凌晨3:20,而发出at命令的时间是头天晚上的20:00,那么究竟 是在哪一天执行该命令呢?如果用户在3:20以前仍然在工作,那么该命令将在这个时候完成;如果用户3:20以 前就退出了工作状态,那么该命令将在第二天凌晨才得到执行。下面是at命令的语法格式: at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间 at -c 作业 [作业...] at允许使用一套相当复杂的指定时间的方法,实际上是将POSIX.2标准扩展了。它可以接受在当天的hh:mm( 小时:分钟)式的时间指定。如果该时间已经过去,那么就放在第二天执行。当然也可以使用midnight(深夜) ,noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。用户还可以采用12小 时计时制,即在时间后面加上AM(上午)或者PM(下午)来说明是上午还是下午。 也可以指定命令执行的具体日期,指定格式为month day(月 日)或者mm/dd/yy(月/日/年)或者dd.mm.yy( 日.月.年)。指定的日期必须跟在指定时间的后面。 上面介绍的都是绝对计时法,其实还可以使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指 定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里可以是 minutes(分钟) 、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。 还有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。下面通过一些例 子来说明具体用法。 [例2] 指定在今天下午5:30执行某命令。假设现在时间是中午12:30,1999年2月24日,其命令格式如下: at 5:30pm 博客:http://x.discuz.net/504112 62/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v at 17:30 at 17:30 today at now + 5 hours at now + 300 minutes at 17:30 24.2.99 at 17:30 2/24/99 at 17:30 Feb 24   以上这些命令表达的意义是完全一样的,所以在安排时间的时候完全可以根据个人喜好和具体情况自由选择。 一般采用绝对时间的24小时计时法可以避免由于用户自己的疏忽造成计时错误的情况发生,例如上例可以写成 : at 17:30 2/24/99 这样非常清楚,而且别人也看得懂。 对于at命令来说,需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。如果at命令是 从一个使用su命令切换到用户shell中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送 给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时shell的所有者。 [例3] $ at -f work 4pm + 3 days 在三天后下午4点执行文件work中的作业。 $ at -f work 10am Jul 31 在7月31日上午10点执行文件work中的作业。 在任何情况下,超级用户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于两个文件: /etc/at.allow和/etc/at.deny。如果/etc/at.allow文件存在的话,那么只有在其中列出的用户才可以使用at命令; 如果该文件不存在,那么将检查/etc/at.deny文件是否存在,在这个文件中列出的用户均不能使用该命令。如果 两个文件都不存在,那么只有超级用户可以使用该命令;空的/etc/at.deny文件意味着所有的用户都可以使用该 命令,这也是默认状态。 下面对命令中的参数进行说明。 -V 将标准版本号打印到标准错误中。 -q queue 使用指定的队列。队列名称是由单个字母组成,合法的队列名可以由a-z或者A-Z。a队列是at命令的 默认队列。 -m 作业结束后发送邮件给执行at命令的用户。 博客:http://x.discuz.net/504112 63/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -f file 使用该选项将使命令从指定的file读取,而不是从标准输入读取。 -l atq命令的一个别名。该命令用于查看安排的作业序列,它将列出用户排在队列中的作业,如果是超级用户, 则列出队列中的所有工作。 命令的语法格式如下: atq [-V] [-q 队列] [-v] -d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列,语法格式如下: atrm [-V] 作业 [作业...] -c 将命令行上所列的作业送到标准输出。 [例4] 找出系统中所有以txt为后缀名的文件,并且进行打印。打印结束后给用户foxy发出邮件通知取件。指 定时间为十二月二十五日凌晨两点。 首先键入: $ at 2:00 12/25/99 然后系统出现at>提示符,等待用户输入进一步的信息,也就是需要执行的命令序列: at> find / -name “*.txt”|lpr at> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy 输入完每一行指令然后回车,所有指令序列输入完毕后,使用组合键结束at命令的输入。这时候屏幕将出现如 下信息: warning:command will be executed using /bin/sh. job 1 at 1999-12-25 02:00 提醒用户将使用哪个shell来执行该命令序列。 实际上如果命令序列较长或者经常被执行的时候,一般都采用将该序列写到一个文件中,然后将文件作为at命 令的输入来处理。这样不容易出错。   [例5] 上面的例子可以修改如下: 将命令序列写入到文件/tmp/printjob,语句为: $ at -f /tmp/printjob 2:00 12/25/99 这样一来,at命令将使用文件中的命令序列,屏幕显示如下: Warning:command will be executed using /bin/sh. 博客:http://x.discuz.net/504112 64/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v job 2 at 1999-12-25 02:00 当然也可以采用以下命令: $ at< /tmp/printjob 2:00 12/25/99 来完成同样的任务。也就是使用输入重定向的办法将文件定向为命令输入。 batch命令 batch 用低优先级运行作业,该命令几乎和at命令的功能完全相同,唯一的区别在于,at命令是在指定时间,很 精确的时刻执行指定命令;而batch却是在系统负载较低,资源比较空闲的时候执行命令。该命令适合于执行占 用资源较多的命令。 batch命令的语法格式也和at命令十分相似,即 batch [-V] [-q 队列] [-f 文件名] [-mv] [时间] 具体的参数解释请参考at命令。一般地说,不用为batch命令指定时间参数,因为batch本身的特点就是由系统 决定执行任务的时间,如果用户再指定一个时间,就失去了本来的意义。 [例6] 使用例4,键入: $ batch at> find / -name *.txt|lpr at> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy 现在这个命令就会在合适的时间进行了,进行完后会发回一个信息。 仍然使用组合键来结束命令输入。而且batch和at命令都将自动转入后台,所以启动的时候也不需要加上&符号 。 cron命令 前面介绍的两条命令都会在一定时间内完成一定任务,但是要注意它们都只能执行一次。也就是说,当指定了 运行命令后,系统在指定时间完成任务,一切就结束了。但是在很多时候需要不断重复一些命令,比如:某公 司每周一自动向员工报告头一周公司的活动情况,这时候就需要使用cron命令来完成任务了。 实际上,cron命令是不应该手工启动的。cron命令在系统启动时就由一个shell脚本自动启动,进入后台(所以 不需要使用&符号)。一般的用户没有运行该命令的权限,虽然超级用户可以手工启动cron,不过还是建议将 其放到shell脚本中由系统自行启动。 首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这 种文件将载入内存。例如一个用户名为foxy的用户,它所对应的crontab文件就应该是/var/spool/cron/foxy。也 就是说,以该用户命名的crontab文件存放在/var/spool/cron目录下面。cron命令还将搜索/etc/crontab文件,这 个文件是用不同的格式写成的。 cron启动以后,它将首先检查是否有用户设置了crontab文件,如果没有就转入“休眠”状态,释放系统资源。 所以该后台进程占用资源极少。它每分钟“醒”过来一次,查看当前是否有需要运行的命令。命令执行结束后 博客:http://x.discuz.net/504112 65/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v ,任何输出都将作为邮件发送给crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。 上面简单介绍了一些cron的工作原理,但是cron命令的执行不需要用户干涉;需要用户修改的是crontab中要执 行的命令序列,所以下面介绍crontab命令。 crontab命令 crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。也就是说,用户把需要执行的命令序列放 到crontab文件中以获得执行。每个用户都可以有自己的crontab文件。下面就来看看如何创建一个crontab文件 。 在/var/spool/cron下的crontab文件不可以直接创建或者直接修改。crontab文件是通过crontab命令得到的。现 在假设有个用户名为foxy,需要创建自己的一个crontab文件。首先可以使用任何文本编辑器建立一个新文件, 然后向其中写入需要运行的命令和要定期执行的时间。 然后存盘退出。假设该文件为/tmp/test.cron。再后就是使用crontab命令来安装这个文件,使之成为该用户的 crontab文件。键入: crontab test.cron 这样一个crontab 文件就建立好了。可以转到/var/spool/cron目录下面查看,发现多了一个foxy文件。这个文件 就是所需的crontab 文件。用more命令查看该文件的内容可以发现文件头有三行信息: #DO NOT EDIT THIS FILE -edit the master and reinstall. #(test.cron installed on Mon Feb 22 14:20:20 1999) #(cron version --$Id:crontab.c,v 2.13 1994/01/17 03:20:37 vivie Exp $) 大概意思是: #切勿编辑此文件——如果需要改变请编辑源文件然后重新安装。 #test.cron文件安装时间:14:20:20 02/22/1999 如果需要改变其中的命令内容时,还是需要重新编辑原来的文件,然后再使用crontab命令安装。 可以使用crontab命令的用户是有限制的。如果/etc/cron.allow文件存在,那么只有其中列出的用户才能使用该 命令;如果该文件不存在但cron.deny文件存在,那么只有未列在该文件中的用户才能使用crontab命令;如果 两个文件都不存在,那就取决于一些参数的设置,可能是只允许超级用户使用该命令,也可能是所有用户都可 以使用该命令。 crontab命令的语法格式如下: crontab [-u user] file crontab [-u user]{-l|-r|-e}   第一种格式用于安装一个新的crontab 文件,安装来源就是file所指的文件,如果使用“-”符号作为文件名,那 博客:http://x.discuz.net/504112 66/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 就意味着使用标准输入作为安装来源。 -u 如果使用该选项,也就是指定了是哪个具体用户的crontab 文件将被修改。如果不指定该选项,crontab 将默 认是操作者本人的crontab ,也就是执行该crontab 命令的用户的crontab 文件将被修改。但是请注意,如果使 用了su命令再使用crontab 命令很可能就会出现混乱的情况。所以如果是使用了su命令,最好使用-u选项来指 定究竟是哪个用户的crontab文件。 -l 在标准输出上显示当前的crontab。 -r 删除当前的crontab文件。 -e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文 件将自动安装。 [例7] # crontab -l #列出用户目前的crontab。 10 6 * * * date 0 */2 * * * date 0 23-7/2,8 * * * date # 在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执 行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下: minute hour day-of-month month-of-year day-of-week commands 第一项是分钟,第二项是小时,第三项是一个月的第几天,第四项是一年的第几个月,第五项是一周的星期几 ,第六项是要执行的命令。这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用*代 替。因为*是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。在表4-1中给出 了每项的合法范围。   表4-1 指定时间的合法范围 时间 合法值 minute 00-59 hour 00-23,其中00点就是晚上12点 day-of-month 01-31 博客:http://x.discuz.net/504112 67/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v month-of-year 01-12 day-of-week 0-6,其中周日是0   这样用户就可以往crontab 文件中写入无限多的行以完成无限多的命令。命令域中可以写入所有可以在命令行 写入的命令和符号,其他所有时间域都支持列举,也就是域中可以写入很多的时间值,只要满足这些时间值中 的任何一个都执行命令,每两个时间值中间使用逗号分隔。 [例8] 5,15,25,35,45,55 16,17,18 * * * command 这就是表示任意天任意月,其实就是每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、 55 min时执行命令。 [例9] 在每周一,三,五的下午3:00系统进入维护状态,重新启动系统。那么在crontab 文件中就应该写入 如下字段: 00 15 * * 1,3,5 shutdown -r +5 然后将该文件存盘为foxy.cron,再键入crontab foxy.cron安装该文件。 [例10] 每小时的10分,40分执行用户目录下的innd/bbslin这个指令: 10,40 * * * * innd/bbslink [例11] 每小时的1分执行用户目录下的bin/account这个指令: 1 * * * * bin/account [例12] 每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔): 20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st) [例13] 每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加 在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。 12,55 3 4-9 1,4 * /bin/rm -f expire.1st>>mm.txt [例14] 我们来看一个超级用户的crontab文件: #Run the ‘atrun’ program every minutes #This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’. 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun 博客:http://x.discuz.net/504112 68/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 40 7 * * * updatedb 8,10,22,30,39,46,54,58 * * * * /bin/sync 进程的挂起及恢复命令bg、fg 作业控制允许将进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只 要在键盘上按,即可挂起当前的前台作业。 [例15] $ cat > text.file [1] + stopped cat > text.file $ jobs [1]+ stopped cat > text.file 在键盘上按后,将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号 以及作业当前所处的状态。 恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行 。 [例16] 用户正在使用Emacs,突然需要查看系统进程情况。就首先使用组合键将Emacs进程挂起,然后使 用bg命令将其在后台启动,这样就得到了前台的操作控制权,接着键入“ps �Cx”查看进程情况。查看完毕 后,使用fg命令将Emacs带回前台运行即可。其命令格式为: $ bg emacs $ ps �Cx $ fg emacs 默认情况下,fg和bg命令对最近停止的作业进行操作。如果希望恢复其他作业的运行,可以在命令中指定要恢 复作业的作业号来恢复该作业。例如: $ fg 1 cat > text.file 灵活使用上述命令,将给自己带来很大的方便。 博客:http://x.discuz.net/504112 69/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十二课 进程查看 发布时间 :2006-12-30 13:05:18 本节中要介绍的不只是进程查看方面的内容,由于Linux是个多用户系统,有时候也要了解其他用户现在在干什 么,所以在本节中还将接触多用户方面的内容。同时Linux是一个多进程系统,经常需要对这些进程进行一些调 配和管理;而要进行管理,首先就要知道现在的进程情况:究竟有哪些进程?进程情况如何?等等。所以需要 进程查看方面的工作。 who命令 该命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即时通讯,比如 使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希 望监视每个登录的用户此时此刻的所作所为,也要使用who命令。 who命令的常用语法格式如下: who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--message] [--mesg] [--version ] [--writable] [file] [am i] 所有的选项都是可选的,也就是说可以单独使用who命令。不使用任何选项时,who命令将显示以下三项内容 : login name:登录用户名; terminal line:使用终端设备; login time:登录到系统的时间。 如果给出的是两个非选项参数,那么who命令将只显示运行who程序的用户名、登录终端和登录时间。通常这 两个参数是“am i”,即该命令格式为:“who am i”。 下面对who命令的常用参数进行说明。 -m 和“who am i”的作用一样,显示运行该程序的用户名。 -q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。 -s 忽略。主要是用于和其他版本的who命令兼容。 -i,-u,--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。 其中“.”符号代表该用户在前1秒仍然处于活动状态;“old”则表示该用户空闲已经超过了24小时。 -H,--heading 显示一行列标题。常用的标题如表4-2所示。 表4-2 who命令输出常用标题 标 题 说 明 博客:http://x.discuz.net/504112 70/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v USER 用户登录帐号 LINE 用户登录使用终端 LOGIN-TIME 用户登录时间 IDLE 用户空闲时间,即未进行操作的时间 PID 用户登录shell的进程ID FROM 用户网络地址   -w,-T--mesg,--message,--writable 和-s选项一样,在登录帐号后面显示一个字符来表示用户的信息状态: +:允许写信息; -:不允许写信息; ?:不能找到终端设备。 --help 在标准输出上显示帮助信息。 --version 在标准输出上显示版本信息。 下面介绍who命令的一些基本用法。 如果需要查看在系统上究竟有哪些用户,可以直接使用who命令。 [例17] 查看登录到系统的用户情况 $ who root tty1 Mar 17 13:49 foxy tty2 Mar 17 13:49 root tty3 Mar 17 13:49 bbs ttyp0 Mar 17 13:49 (river.net) 可以看到,现在系统一共有四个用户。第一列是登录用户的帐号;第二列是登录所使用的终端;第三列是登录 时间;第四列是用户从什么地方登录的网络地址,这里是域名。 博客:http://x.discuz.net/504112 71/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 一般来说,这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观,因为没有标题说明,不 容易看懂,这时就需要使用-H选项了。 [例18] 查看登录用户的详细情况,键入: $ who -uH 显示如下: USER LINE LOGIN-TIME IDLE FROM root tty1 Mar 17 13:49 . foxy tty2 Mar 17 13:49 00:01 root tty3 Mar 17 13:49 00:01 bbs ttyp0 Mar 17 13:49 00:01 (river.net) 这样一目了然。其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。第一个root用户的IDLE项是 一个“.”,这就说明该用户在前1秒仍然是活动的,而其他用户后面都有一个时间,称为空闲时间。 最后来看看使用“who am i”格式命令的结果: 233.river.net!root tty1 Mar 17 13:49 可见只显示出了运行该who命令的用户情况,当然这时候不存在空闲时间。 who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。 w命令 该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁 登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学, 可以认为w命令就是who命令的一个增强版。 w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5 秒和 15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名 、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。 其中JCPU时间指的是和该终端(tty)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间 ,但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程(即在WHAT项中显示的进 程)所占用的时间。下面介绍该命令的具体用法和参数。 语法格式如下: w -[husfV] [user] 下面对参数进行说明: -h 不显示标题。 博客:http://x.discuz.net/504112 72/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。 -s 使用短模式。不显示登录时间、JCPU和PCPU时间。 -f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一 些修改使得显示该项成为默认值。 -V 显示版本信息。 User 只显示指定用户的相关情况。 [例19] 显示当前登录到系统的用户的详细情况 $ w 2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 2:49pm 0:00s 0.56s 0.10s w foxy tty2 2:49pm 1:09 0.42s 0.42s bash root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3 bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net ps命令 1. ps简介 前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题。要对 进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时 也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程 有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。 2. ps命令及其参数 ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行 通信的,所以如果需要检测其情况,便可以使用ps命令了。 该命令语法格式如下: ps [选项] 下面对命令选项进行说明: -e 显示所有进程。 -f 全格式。 -h 不显示标题。 博客:http://x.discuz.net/504112 73/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -l 长格式。 -w 宽输出。 a 显示终端上的所有进程,包括其他用户的进程。 r 只显示正在运行的进程。 x 显示没有控制终端的进程。 O[+|-] k1 [,[+|-] k2 [,⋯]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列 表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中“+”字符是 可选的,“-”字符是倒转指定键的方向。 pids 只列出指定进程的情况。各进程ID之间使用逗号分隔。该进程列表必须在命令行参数的最后一个选项后面 紧接着给出,中间不能插入空格。比如:ps -f1,4,5。 以下介绍长命令行选项,这些选项都使用“--”开头: --sort X[+|-] key [,[+|-] key [,⋯]] 从SORT KEYS段中选一个多字母键。“+”字符是可选的,因 为默认的方向就是按数字升序或者词典顺序。比如: ps -jax -sort=uid,-ppid,+pid。 --help 显示帮助信息。 --version 显示该命令的版本信息。 在前面的选项说明中提到了排序键,接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的 内部值,并非仅用于某些输出格式的伪值。排序键列表见表4-3。 表4-3 排序键列表 短格式 长格式 说 明 c cmd 可执行的简单名称 C cmdline 完整命令行 f flags 长模式标志 g pgrp 进程的组ID G 博客:http://x.discuz.net/504112 74/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v tpgid 控制tty进程组ID j cutime 累计用户时间 J cstime 累计系统时间 k utime 用户时间 K stime 系统时间 m min_flt 次要页错误的数量 M maj_flt 主要页错误的数量 n cmin_flt 累计次要页错误 N cmaj_flt 累计主要页错误 o session 对话ID p pid 进程ID P ppid 父进程ID r rss 驻留大小 R 博客:http://x.discuz.net/504112 75/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v resident 驻留页 s size 内存大小(千字节) S share 共享页的数量 t tty tty次要设备号 T start_time 进程启动的时间 U uid UID u user 用户名 v vsize 总的虚拟内存数量(字节) y priority 内核调度优先级 3. 常用ps命令参数 前面两节介绍的参数可能让读者觉得有些可怕,实际上这是一个非常容易使用的命令,一般的用户只需掌握一 些最常用的命令参数就可以了。 最常用的三个参数是u、a、x,下面将通过例子来说明其具体用法。 [例20] 以root身份登录系统,查看当前进程状况 $ ps PID TTY TIME COMMAND 5800 ttyp0 00:00:00 bash 5835 ttyp0 00:00:00 ps 博客:http://x.discuz.net/504112 76/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 可以看到,显示的项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、 COMMAND(该进程的命令行输入)。 可以使用u选项来查看进程所有者及其他一些详细信息,如下所示: $ ps u USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u 在bash进程前面有条横线,意味着该进程便是用户的登录shell,所以对于一个登录用户来说带短横线的进程只 有一个。还可以看到%CPU、%MEM两个选项,前者指该进程占用的CPU时间和总时间的百分比;后者指该进 程占用的内存和总内存的百分比。 在这种情况下看到了所有控制终端的进程;但是对于其他那些没有控制终端的进程还是没有观察到,所以这时 就需要使用x选项。使用x选项可以观察到所有的进程情况。 [例21] 下面是使用x选项的例子: $ ps x PID TTY STAT TIME COMMAND 5800 ttyp0 S 0:00 -bash 5813 ttyp1 S 0:00 -bash 5921 ttyp0 S 0:00 man ps 5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz | / 5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz 5924 ttyp0 S 0:00 /usr/bin/less -is 5941 ttyp1 R 0:00 ps x 可以发现突然一下子就多出了那么多的进程。这些多出来的进程就是没有控制终端的进程。 前面看到的所有进程都是test用户自己的。其实还有许多其他用户在使用着系统,自然也就对应着其他的很多 进程。如果想对这些进程有所了解,可以使用a选项来查看当前系统所有用户的所有进程。经常使用的是aux组 合选项,这可以显示最详细的进程情况。   [例22] $ ps aux 博客:http://x.discuz.net/504112 77/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1136 64 ? S Nov25 0:02 init [3] root 2 0.0 0.0 0 0 ? SW Nov25 0:00 [kflushd] root 3 0.0 0.0 0 0 ? SW Nov25 0:03 [kupdate] root 4 0.0 0.0 0 0 ? SW Nov25 0:00 [kpiod] root 5 0.0 0.0 0 0 ? SW Nov25 0:00 [kswapd] root 163 0.0 0.1 1628 332 ? S Nov25 0:02 sshd root 173 0.0 0.0 1324 200 ? S Nov25 0:00 syslogd root 181 0.0 0.0 1420 0 ? SW Nov25 0:00 [klogd] daemon 191 0.0 0.1 1160 312 ? S Nov25 0:00 /usr/sbin/atd root 201 0.0 0.1 1348 492 ? S Nov25 0:00 crond root 212 0.0 0.0 1292 68 ? S Nov25 0:00 inetd ⋯⋯ 在显示的最前面是其他用户的进程情况,可以看到有root、daemon等用户以及他们所启动的进程。 在上面的例子中,介绍了ps命令最常见的一些选项和选项组合,用户可以根据自己的需要选用。 top命令 top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可 以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。 比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表 。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命 令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。 下面是该命令的语法格式: top [-] [d delay] [q] [c] [s] [S] [i] d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运 行。 S 指定累计模式。 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 博客:http://x.discuz.net/504112 78/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名 top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。显示的各项目为: uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。 processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种 类。进程和状态显示可以通过交互命令t来实现。 CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用 CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100% 。 Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。 Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。 PID 每个进程的ID。 PPID 每个进程的父进程ID。 UID 每个进程所有者的UID 。 USER 每个进程所有者的用户名。 PRI 每个进程的优先级别。 NI 该进程的优先级值。 SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。 TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。 DSIZE 数据和堆栈的大小。 TRS 文本驻留大小。 D 被标记为“不干净”的页项目。 LIB 使用的库页的大小。对于ELF进程没有作用。 RSS 该进程占用的物理内存的总数量,单位是KB。 SHARE 该进程使用共享内存的数量。 STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T 代表停止或跟踪状态。 TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所 占用的时间。且标题会变成CTIME。 博客:http://x.discuz.net/504112 79/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v %CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。 %MEM 该进程占用的物理内存占总内存的百分比。 COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。 下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还 重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。 <空格> 立即刷新显示。 Ctrl+L 擦除并且重写屏幕。 h或者? 显示帮助画面,给出一些简短的命令总结说明。 k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止 进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此 命令被屏蔽。 i 忽略闲置和僵死进程。这是一个开关式命令。 q 退出程序。 r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一 个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。 S 切换到累计模式。 s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0 值则系统将不断刷新,默认值是 5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本 来不及看清显示的情况,而且系统负载也会大大增加。 f或者F 从当前显示中添加或者删除项目。 o或者O 改变显示项目的顺序。 l 切换显示平均负载和启动时间信息。 m 切换显示内存信息。 t 切换显示进程和CPU状态信息。 c 切换显示命令名称和完整命令行。 M 根据驻留内存大小进行排序。 P 根据CPU使用百分比大小进行排序。 T 根据时间/累计时间进行排序。 W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。 博客:http://x.discuz.net/504112 80/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此 。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际 使用的情况。   [例23] 键入top命令查看系统状况 $ top 1:55pm up 7 min, 4 user, load average:0.07,0.09,0.06 29 processes:28 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idle Mem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buff Swap: 33228K av, 0K used, 33228K free, 11820K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top 1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init 2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd 3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd 4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread 5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread 312 root 1 0 636 636 488 S 0 0.0 1.6 0:00 telnet 285 root 6 0 1140 1140 804 S 0 0.0 2.9 0.00 bash 286 root 0 0 1048 1048 792 S 0 0.0 2.6 0.00 bash 25 root 0 0 364 364 312 S 0 0.0 0.9 0.00 kerneld 153 root 0 0 456 456 372 S 0 0.0 1.1 0.00 syslogd 160 root 0 0 552 552 344 S 0 0.0 1.4 0.00 klogd 169 daemon 0 0 416 416 340 S 0 0.0 1.0 0.00 atd 178 root 2 0 496 496 412 S 0 0.0 1.2 0.00 crond 187 bin 0 0 352 352 284 S 0 0.0 0.9 0.00 portmap 博客:http://x.discuz.net/504112 81/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 232 root 0 0 500 500 412 S 0 0.0 1.2 0.00 rpc.mountd 206 root 0 0 412 412 344 S 0 0.0 1.0 0.00 inetd 215 root 0 0 436 436 360 S 0 0.0 1.1 0.00 icmplog 第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行为进程情况,依次 为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行为CPU状态,依次为用户占用、系 统占用、优先进程占用、闲置进程占用。第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共 享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量 。然后下面就是和ps相仿的各进程情况列表了。 总的来说,top命令的功能强于ps,但需要长久占用前台,所以用户应该根据自己的情况来使用这个命令。 博客:http://x.discuz.net/504112 82/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第十三课 进程调度 发布时间 :2006-12-30 13:05:55   kill命令   当需要中断一个前台进程的时候,通常是使用组合键;但是对于一个后台进程恐怕就不是一个组合键所能 解决的了,这时就必须求助于kill命令。该命令可以终止后台进程。至于终止后台进程的原因很多,或许是该进 程占用的CPU时间过多;或许是该进程已经挂死。总之这种情况是经常发生的。   kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号,那么默认值为TERM信号。 TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用kill(9)信号 了,该信号是不能被捕捉的。   kill命令的语法格式很简单,大致有以下两种方式:   kill [-s 信号 | -p ] [ -a ] 进程号 ...   kill -l [信号]   -s 指定需要送出的信号。既可以是信号名也可以对应数字。   -p 指定kill命令只是显示进程的pid,并不真正送出结束信号。   -l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。   kill命令的使用   下面看看该命令的使用。   [例24] 在执行一条find指令时由于时间过长,决定终止该进程。   首先应该使用ps命令来查看该进程对应的PID,键入ps,显示如下:   PID TTY TIME COMMAND   285 1 00:00:00 -bash   287 3 00:00:00 -bash   289 5 00:00:00 /sbin/mingetty tty5   290 6 00:00:00 /sbin/mingetty tty6   312 3 00:00:00 telnet bbs3   341 4 00:00:00 /sbin/mingetty tty4 博客:http://x.discuz.net/504112 83/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   345 1 00:00:00 find / -name foxy.jpg   348 1 00:00:00 ps   可以看到该进程对应的PID是345,现在使用kill命令来终止该进程。键入:   # kill 345   再用ps命令查看,就可以看到,find进程已经被杀掉了。     [例25] 杀掉进程11721   # ps   PID TTY TIME COMMAND   11668 p1 00:00:00 -tcsh   11721 p1 00:00:00 cat   11737 p1 00:00:00 ps   # kill 11721   [1] Terminated cat   #   有时候可能会遇到这样的情况,某个进程已经挂死或闲置,使用kill命令却杀不掉。这时候就必须发送信号 9,强行关闭此进程。当然这种“野蛮”的方法很可能会导致打开的文件出现错误或者数据丢失之类的错误。 所以不到万不得已不要使用强制结束的办法。如果连信号9都不响应,那恐怕就只有重新启动计算机了。   控制多个进程命令   Linux可使用户同时运行多个进程,还允许用户或系统管理员能控制正在运行的进程。   nohup命令   理论上,我们一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如您 正在编辑一个很长的程序,但是您下班或是有事需要先退出系统,这时您又不希望系统把您编辑那么久的程序 结束掉,希望退出系统时,程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续 执行。   一般这些进程我们都是让它在后台执行,结果则会写到用户自己的目录下的nohup.out这个文件里(也可 以使用输出重定向,让它输出到一个特定的文件)。[例26]   $ nohup sort sales.dat &   这条命令告诉sort命令忽略用户已退出系统,它应该一直运行,直到进程完成。利用这种方法,可以启动 一个要运行几天甚至几周的进程,而且在它运行时,用户不需要去登录。   nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出重定向,则只有错误信息放 博客:http://x.discuz.net/504112 84/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 在nohup.out文件中。   renice命令   renice命令允许用户修改一个正在运行进程的优先权。   利用renice命令可以在命令执行时调整其优先权。其格式如下:   $ renice -number PID   其中,参数number与nice命令的number意义相同。   注:   (1) 用户只能对自己所有的进程使用renice命令。   (2) root用户可以在任何进程上使用renice命令。   (3) 只有root用户才能提高进程的优先权。 博客:http://x.discuz.net/504112 85/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux循序渐进 (15) 发布时间 :2006-12-30 13:06:43    在Linux系统中,如何有效地对存储空间加以使用和管理,是一项非常重要的技术。本章讲述如何查看系统中存 储空间的使用情况、如何进行文件的转储、以及如何进行软盘的格式化。   磁盘空间管理   系统软件和应用软件,都要以文件的形式存储在计算机的磁盘空间中。因此,应该随时监视磁盘空间的使 用情况。Linux系统提供了一组有关磁盘空间管理的命令。   df命令   功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多 少空间等信息。   语法:df [选项]   说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。   该命令各个选项的含义如下:   -a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。   -k 以k字节为单位显示。   -i 显示i节点信息,而不是磁盘块。   -t 显示各指定类型的文件系统的磁盘空间使用情况。   -x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。   -T 显示文件系统类型。   例1:列出各文件系统的磁盘空间使用情况。   $ df   Filesystem 1 K-blocks Used Available Use% Mounted on   /dev/hda2 1361587 1246406 44823 97% /   df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列给出 分区包含的数据块(1024字节)的数目;第3,4列分别表示已用的和可用的数据块数目。用户也许会感到奇怪 的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用 。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use% 列表示 博客:http://x.discuz.net/504112 86/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后, Mounted on列表示文件系统的安装点。   例2:列出各文件系统的i节点使用情况。   $ df -ia   Filesystem Inodes IUsed IFree Iused% Mounted on   /dev/ hda2 352256 75043 277213 21% /   none 0 0 0 0% /proc   localhost:(pid221) 0 0 0 0% /net   例3:列出文件系统的类型。   $ df -T   Filesystem Type 1K-blocks Used Available use% Mounted on   /dev/hda2 ext2 1361587 1246405 44824 97% /   本例中的文件系统是ext2类型的。   du命令   du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况。   功能:统计目录(或文件)所占磁盘空间的大小。   语法:du [选项] [Names⋯]   说明:该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。 若没有给出Names,则对当前目录进行统计。   该命令的各个选项含义如下:   -s 对每个Names参数只给出占用的数据块总数。   -a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只 显示Names中的每一个目录及其中的各子目录所占的磁盘块数。   -b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。   -k 以1024字节为单位列出磁盘空间使用情况。   -c 最后再加上一个总计(系统缺省设置)。   -l 计算所有的文件大小,对硬链接文件,则计算多次。   -x 跳过在不同文件系统上的目录不予统计。 博客:http://x.discuz.net/504112 87/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   下面举例说明du命令的使用:   例1:查看/mnt目录占用磁盘空间的情况。 $ cd /mnt $ ls -lFR total 10 -rwxrwxrwx 2 root root ll0 Ju1 3l 00:33 aa*   drwxr-xr-x 2 root root l024 Ju1 20 14:16 dev/   -rw-r--r-- 1 root root 6229 Aug 2 0l:39 s1ack   drwxrwxrwx 2 root root 1024 Aug 2 02:09 var/   1rwxrwxrwx 1 root root l0 Aug 2 0l:51 wei->/home/wei/   dev:   tota1 0   lrwxrwxrwx 1 root root 8 Ju1 20 l4:l6 cdrom->/dev/hdb   var:   tata1 37   -r-xr-xr-x l root root 36064 Aug 2 02:09 rawrite. exe*     例2:列出各目录所占的磁盘空间,但不详细列出每个文件所占的空间。   $ du   l ./dev   38 ./var   48 .   输出清单中的第一列是以块为单位计的磁盘空间容量,第二列列出目录中使用这些空间的目录名称。   注意不带选项的du命令将从当前目录开始沿着目录结构向下工作直到列出所有目录的容量为止。这可能是 一个很长的清单,有时只需要一个总数。这时可在du命令中加-s选项来取得总数:   $ du �Cs /mnt   /mnt   例3:列出所有文件和目录所占的空间(使用a选项),而且以字节为单位(使用b选项)来计算大小。   $ du -ab   8 ./dev/cdrom 博客:http://x.discuz.net/504112 88/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   l032 ./dev   36064 ./var/rawrite. exe   37088 ./var   6229 ./s1ack   1l0 ./aa   l0 ./wei   45493 .   磁 盘 操 作   dd命令   功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令 实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件 写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉。系统默 认使用标准输入文件和标准输出文件。   语法:dd [选项]   if =输入文件(或设备名称)。   of =输出文件(或设备名称)。   ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。   skip = blocks 跳过读入缓冲区开头的ibs*blocks块。   obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。   bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。   cbs = byte 一次转换bytes字节。   count=blocks 只拷贝输入的blocks块。   conv = ASCII 把EBCDIC码转换为ASCIl码。   conv = ebcdic 把ASCIl码转换为EBCDIC码。   conv = ibm 把ASCIl码转换为alternate EBCDIC码。   conv = block 把变动位转换成固定字符。   conv = ublock 把固定位转换成变动位。   conv = ucase 把字母由小写转换为大写。 博客:http://x.discuz.net/504112 89/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   conv = lcase 把字母由大写转换为小写。   conv = notrunc 不截短输出文件。   conv = swab 交换每一对输入字节。   conv = noerror 出错时不停止处理。   conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。   例1:要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入 下述命令:   $ dd if =/dev/fd0 ō f = /tmp/tmpfile   拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:   $ dd if = /tmp/tmpfile ō f =/dev/fd0   软盘拷贝完成后,应该将临时文件删除:   $ rm /tmp/tmpfile   例2:把net.i这个文件写入软盘中,并设定读/写缓冲区的数目。   (注意:软盘中的内容会被完全覆盖掉)   $ dd if = net.i ō f = /dev/fd0 bs = 16384   例3:将文件sfile拷贝到文件 dfile中。   $ dd if=sfile ō f=dfile   fdformat 命令   软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作,然后可以用tar、dd、cpio等命令 存储数据,也可以在软盘上建立可安装的文件系统。   功能:低级格式化软盘   语法:format [-n] device   说明:该命令的作用是对软盘进行格式化。   -n 软盘格式化后不作检验。   device 指定要进行格式化的设备,通常是下述设备之一:   /dev/fd0d360   /dev/fd0h1200 博客:http://x.discuz.net/504112 90/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   /dev/fd0D360   /dev/fd0H360   /dev/fd0D720   /dev/fd0H720   /dev/fd0h360   /dev/fd0h720   /dev/fd0H1440 博客:http://x.discuz.net/504112 91/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 与系统管理有关的命令 发布时间 :2006-12-30 13:07:31 wall命令 这个命令的功能是对全部已登录的用户发送信息,用户可以先把要发送的信息写好存入一个文件中,然后输入 : # wall < 文件名 这样就能对所有的用户发送信息了。 在上面的例子中符号“<”表示输入重定向,有关它的含义和用法请参阅第十章的有关内容。 例如: # wall ‘Thank you!’ Broadcast message from root (tty1) Fri Nov 26 14:15:07 1999⋯ Thank you! # 执行以上命令后,用户的屏幕上显示出“Thank you!”信息后,并不出现系统提示符$(#),再次按回车键后 ,屏幕出现系统提示符。 write命令 write命令的功能是向系统中某一个用户发送信息。 该命令的一般格式为: write 用户帐号 [终端名称] 例如: $ write xxq hello 此时系统进入发送信息状态,用户可以输入要发送的信息,输入完毕,希望退出发送状态时,按组合键即可。 上述命令执行的结果是,用户xxq的屏幕上会显示: message from test@test.tlc.com.cn tty1 at 15:51⋯ 博客:http://x.discuz.net/504112 92/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v hello EOF mesg指令 mesg命令设定是否允许其他用户用write命令给自己发送信息。如果允许别人给自己发送信息,输入命令: # mesg y 否则,输入: # mesg n 对于超级用户,系统的默认值为 n;而对于一般用户系统的默认值为y。 如果mesg后不带任何参数,则显示当前的状态是y还是n,如: $ mesg is y 或: # mesg is n sync命令 sync命令是在关闭Linux系统时使用的。 用户需要注意的是,不能用简单的关闭电源的方法关闭系统,因为Linux象其他Unix系统一样,在内存中缓存了 许多数据,在关闭系统时需要进行内存数据与硬盘数据的同步校验,保证硬盘数据在关闭系统时是最新的,只 有这样才能确保数据不会丢失。一般正常的关闭系统的过程是自动进行这些工作的,在系统运行过程中也会定 时做这些工作,不需要用户干预。 sync命令是强制把内存中的数据写回硬盘,以免数据的丢失。用户可以在需要的时候使用此命令。该命令的一 般格式为: sync shutdown命令 shutdown 命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信 息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确 时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据 同步的工作。该命令的一般格式为: shutdown [选项] [时间] [警告信息] 命令中各选项的含义为: 博客:http://x.discuz.net/504112 93/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v - k 并不真正关机,而只是发出警告信息给所有用户。 - r 关机后立即重新启动。 - h 关机后不重新启动。 - f 快速关机,重启动时跳过fsck。 - n 快速关机,不经过init程序。 - c 取消一个已经运行的shutdown。 需要特别说明的是,该命令只能由超级用户使用。 例1:系统在十分钟后关机,并且马上重新启动。 # shutdown �C r +10   例2:系统马上关机,并且不重新启动。 # shutdown �C h now free命令 free命令的功能是查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享 内存和被核心使用的缓冲区。该命令的一般格式为: free [-b | -k | -m] 命令中各选项的含义如下: -b 以字节为单位显示。 -k 以K字节为单位显示。 -m 以兆字节为单位显示。 例: $ free total used free shared buffers cached Mem: 63076 32020 31056 8204 16360 6048 -/+ buffers/cache: 9612 53464 Swap: 64476 2240 62236 uptime命令 博客:http://x.discuz.net/504112 94/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v uptime命令显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前 有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。该命令的一般格式为: uptime 例: # uptime 4:43pm up 1 day, 5:51, 2 user, load average: 0.01, 0.01, 0.00 与用户有关的命令 passwd命令 出于系统安全考虑,Linux系统中的每一个用户除了有其用户名外,还有其对应的用户口令。因此使用useradd 命令增加时,还需使用 passwd命令为每一位新增加的用户设置口令;用户以后还可以随时用passwd命令改 变自己的口令。该命令的一般格式为: passwd [用户名] 其中用户名为需要修改口令的用户名。只有超级用户可以使用“passwd 用户名”修改其他用户的口令,普通 用户只能用不带参数的passwd命令修改自己的口令。该命令的使用方法如下: 输入passwd< Enter>; 在(current) UNIX passwd:下输入当前的口令 在new password:提示下输入新的口令(在屏幕上看不到这个口令): 系统提示再次输入这个新口令。 输入正确后,这个新口令被加密并放入/etc/shdow文件。选取一个不易被破译的口令是很重要的。选取口令应 遵守如下规则: 口令应该至少有六位(最好是八位)字符; 口令应该是大小写字母、标点符号和数字混杂的。 超级用户修改其他用户(xxq)的口令的过程如下, # passwd xxq New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully # su命令 博客:http://x.discuz.net/504112 95/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户的 身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。如要离开当前用户的身份,可 以打exit。 该命令的一般形式为: su [选项] [? ] [使用者帐号] 说明:若没有指定使用者帐号,则系统预设值为超级用户root。 该命令中各选项的含义分别为: ? c 执行一个命令后就结束。 ? 加了这个减号的目的是使环境变量和欲转换的用户相同。 ? m 保留环境变量不变。 例1: 变成root用户 $ su ? password: 【输入超级用户的密码】 例2: 变成xu使用者,并执行一个命令就结束。 $ su -xu ? c “rmdir cat1” 其他命令 echo命令 echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。该命令的一般格式为: echo [ -n ] 字符串 其中选项n表示输出文字后不换行;字符串可以加引号,也可以不加引号。用echo命令输出加引号的字符串时 ,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符 串之间用一个空格分割。 例1: $ echo ‘Thank you !’ Thank you ! 例2: $ echo Thank you ! Thank you ! 博客:http://x.discuz.net/504112 96/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v cal命令 cal命令的功能是显示某年某月的日历。该命令的一般格式为: cal [选项] [月 [年]] 命令中各选项的含义为: - j 显示出给定月中的每一天是一年中的第几天(从1月1日算起)。 - y 显示出整年的日历。   例1 显示1999年11月的日历。 $ cal 11 1999 November 1999 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 例2 显示1999年11月的每一天是一年中的第几天。 $ cal �C j 11 1999 November 1999 Sun Mon Tue Wed Thu Fri Sat 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 date命令 博客:http://x.discuz.net/504112 97/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v date命令的功能是显示和设置系统日期和时间。该命令的一般格式为: date [选项] 显示时间格式(以+开头,后面接格式) date 设置时间格式 命令中各选项的含义分别为: -d datestr, --date datestr 显示由datestr描述的日期 -s datestr, --set datestr 设置datestr 描述的日期 -u, --universal 显示或设置通用时间 时间域 % H 小时(00..23) % I 小时(01..12) % k 小时(0..23) % l 小时(1..12) % M 分(00..59) % p 显示出AM或PM % r 时间(hh:mm:ss AM或PM),12小时 % s 从1970年1月1日00:00:00到目前经历的秒数 % S 秒(00..59) % T 时间(24小时制)(hh:mm:ss) % X 显示时间的格式(%H:%M:%S) % Z 时区 日期域 % a 星期几的简称( Sun..Sat) % A 星期几的全称( Sunday..Saturday) % b 月的简称(Jan..Dec) % B 月的全称(January..December) % c 日期和时间( Mon Nov 8 14:12:46 CST 1999) 博客:http://x.discuz.net/504112 98/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v % d 一个月的第几天(01..31) % D 日期(mm/dd/yy) % h 和%b选项相同 % j 一年的第几天(001..366) % m 月(01..12) % w 一个星期的第几天(0代表星期天) % W 一年的第几个星期(00..53,星期一为第一天) % x 显示日期的格式(mm/dd/yy) % y 年的最后两个数字( 1999则是99) % Y 年(例如:1970,1996等) 需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。 例1:用指定的格式显示时间。 $ date ‘+This date now is =>%x ,time is now =>%X ,thank you !’ This date now is =>11/12/99 ,time is now =>17:53:01 ,thank you ! 例2:用预定的格式显示当前的时间。 # date Fri Nov 26 15:20:18 CST 1999 例3:设置时间为下午14点36分。 # date -s 14:36:00 Fri Nov 26 14:15:00 CST 1999 例4:设置时间为1999年11月28号。 # date -s 991128 Sun Nov 28 00:00:00 CST 1999 clear命令 clear命令的功能是清除屏幕上的信息,它类似于DOS中的 cls命令。清屏后,提示符移动到屏幕左上角。 例如:$ clear 博客:http://x.discuz.net/504112 99/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux 下的打印工作 发布时间 :2006-12-30 13:08:20 在Linux下采用假脱机(spooling)打印方法,当用户需要打印一个文件时,该文件并不直接送到打印机,而是 送到spool目录下,然后由一个负责打印的后台进程把这些数据送入打印机。 Linux对每台打印机都定义了一个打印缓冲区,打印机守护程序经常扫描打印缓冲区以查看有无要打印的新文件 。如果存在,就按先进先出的顺序打印缓冲区中的文件。 Linux系统除了可以在本地打印机上打印外,还可以通过网络打印机远程打印。 用于打印的命令 Linux系统提供了一组有关打印的命令。一般情况下,打印命令使用默认打印机;如果用户定义了PRINTER环 境变量,打印命令就使用这个变量定义的打印机;另外,用户还可以在命令行上指定要使用的打印机。 lpr命令 lpr命令是脱机打印命令,该命令将打印作业放到打印缓冲队列中。为Linux系统指定的每台打印机都有自己的 打印缓冲目录,每个目录中的minfree文件指定保存打印文件的磁盘块的数量。 lpr同lpd守护进程通讯,lpd扫描/etc/printcap文件,查询打印机对应的缓存目录,然后由lpd控制打印,将需要 打印的数据送到实际打印机上。如果没有指定文件,lpr就使用标准输入。 lpr命令的格式为: lpr [-P printer] [#num] [其他选项] [name⋯] 命令中各选项的含义如下: -P 指定打印机。如果不用此选项,则使用缺省打印机或环境变量PRINTER指定的打印机。 -m 打印完毕后发送email。 -#num 打印num份。 lpq命令 lpq是缓冲队列检查命令,它通过lpd在缓冲区中检查打印文件,报告指定作业的状态或指定用户的所有作业。 不带任何参数的lpq命令显示现在队列中的任何作业。lpq命令的显示结果中一个重要的信息就是作业标识号( 作业ID),它标识一个特定的作业。如果用户想取消一个挂起的作业,就必须在命令中指定这个标识号。 lpq命令的格式为: lpq [-l] [-P printer] [job #] [user⋯] 命令中各选项的含义如下: 博客:http://x.discuz.net/504112 100/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -P 指定一个打印机,否则使用缺省打印机或环境变量PRINTER指定的打印机。 -l 打印组成作业的所有文件的信息。 对提交的每一个作业,lpq报告用户名、在队列中的级别、组成作业的文件、作业标识以及总的大小等信息。 lprm命令 lprm命令用于从缓冲队列中删除打印作业,用户可以使用该命令从缓冲队列中删除属于自己的一个或多个打印 作业。 lprm命令的格式为: lprm [-P printer] [-] [job #] [user⋯] 命令中各选项的含义如下: -P 指定一个打印机,否则使用缺省打印机或环境变量PRINTER指定的打印机。 - 删除用户所有的打印作业。 user 删除队列中属于用户user的作业(只有超级用户可以这样做)。 job # 通过指定作业号#删除某个打印作业,作业号可以通过lpq命令得到,如: $ lpq �Cl lst:ken [job #013ucbarpa] (standard input) 100 bytes $ lprm 13 打印缓冲区目录 对打印而言,有一个非常重要的目录,就是打印缓冲区目录,要打印的数据在被打印之前都集中到这里。通常 一台打印机对应一个打印缓冲区目录,这样比较容易管理打印机。例如,系统使用/var/spool/lpd作为主打印缓 冲区,每个单独的打印机都在主打印缓冲区下有一个与这台打印机同名的目录。因此,名为ps_nff的打印机把 /var/spool/lpd/ps_nff作为它的打印缓冲区目录。 博客:http://x.discuz.net/504112 101/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux循序渐进 (18) 发布时间 :2006-12-30 13:09:20 netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作 。 该命令的一般格式为: netstat [选项] 命令中各选项的含义如下: -a 显示所有socket,包括正在监听的。 -c 每隔1秒就重新显示一遍,直到用户中断它。 -i 显示所有网络接口的信息,格式同“ifconfig -e”。 -n 以网络IP地址代替名称,显示出网络连接情形。 -r 显示核心路由表,格式同“route -e”。 -t 显示TCP协议的连接情况。 -u 显示UDP协议的连接情况。 -v 显示正在进行的工作。 [例]在本地机上使用netstat命令。 $ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 1 [ ] STREAM CONNECTED 270 @00000008 unix 1 [ ] STREAM CONNECTED 150 @00000002 unix 1 [ ] STREAM CONNECTED 104 @00000001 unix 1 [ ] STREAM CONNECTED 222 @00000004 博客:http://x.discuz.net/504112 102/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v unix 1 [ ] STREAM CONNECTED 171 @00000003 unix 1 [ ] STREAM CONNECTED 271 /dev/log unix 1 [ ] STREAM CONNECTED 225 /dev/log unix 1 [ ] STREAM CONNECTED 223 /dev/log unix 1 [ ] STREAM CONNECTED 203 /dev/log unix 1 [ ] STREAM CONNECTED 105 /dev/log ⋯⋯ nslookup命令 nslookup命令的功能是查询一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名服务。 如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。 该命令的一般格式为: nslookup [IP地址/域名] [例]在本地机上使用nslookup命令。 $ nslookup Default Server: name.tlc.com.cn Address: 192.168.1.99 > 在符号“>”后面输入要查询的IP地址或域名并回车即可。如果要退出该命令,输入exit并回车即可。 finger命令 finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、 登录shell等信息。如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机 名]的格式,不过要查询的网络主机需要运行finger守护进程。 该命令的一般格式为: finger [选项] [使用者] [用户@主机] 命令中各选项的含义如下: -s 显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。 -l 除了用-s选项显示的信息外,还显示用户主目录、登录shell、邮件状态等信息,以及用户主目录下的.plan、 .project和.forward文件的内容。 博客:http://x.discuz.net/504112 103/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -p 除了不显示.plan文件和.project文件以外,与-l选项相同。   [例]在本地机上使用finger命令。 $ finger xxq Login: xxq Name: Directory: /home/xxq Shell: /bin/bash Last login Thu Jan 1 21:43 (CST) on tty1 No mail. No Plan.   $ finger Login Name Tty Idle Login Time Office Office Phone root root *1 28 Nov 25 09:17 ⋯⋯ ping命令 ping命令用于查看网络上的主机是否在工作,它向该主机发送ICMP ECHO_REQUEST包。有时我们想从网络 上的某台主机上下载文件,可是又不知道那台主机是否开着,就需要使用ping命令查看。 该命令的一般格式为: ping [选项] 主机名/IP地址 命令中各选项的含义如下: -c 数目 在发送指定数目的包后停止。 -d 设定SO_DEBUG的选项。 -f 大量且快速地送网络封包给一台机器,看它的回应。 -I 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。 -l 次数 在指定次数内,以最快的方式送封包数据到指定机器(只有超级用户可以使用此选项)。 -q 不显示任何传送封包的信息,只显示最后的结果。 -r 不经由网关而直接送封包到一台机器,通常是查看本机的网络接口是否有问题。 博客:http://x.discuz.net/504112 104/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -s 字节数 指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。 第十八课 在 线 帮 助      2000年/5月/15日 TurboLinux系统提供了大量命令和许多实用工具软件,本书由于篇幅的关系,主要介绍了TurboLinux的一些常 用命令和实用软件。读者可以使用系统提供的联机帮助手册获取更多的信息。 TurboLinux系统的联机手册中有大量的可用信息,根据其内容分成若干节。在Linux联机帮助手册上,几乎每个 命令都有说明。因此,当用户对于Linux上的一个命令不会用或是不太了解时,就请使用联机帮助命令。 本章主要介绍几个常用的联机帮助命令。包括: man 查询每个命令的使用方法 help 查询Shell命令 whereis 查询某个命令的位置 locate 查询某个文件的位置 man命令 这个命令应该是每个Linux系统上都有的。它格式化并显示在线的手册页。通常使用者只要在命令man后,输入 想要获取的命令的名称(例如 ls),man就会列出一份完整的说明,其内容包括命令语法、各选项的意义以及 相关命令等。 该命令的一般形式为: man [选项] 命令名称 命令中各选项的含义分别为: -M 路径 指定搜索man手册页的路径,通常这个路径由环境变量MANPATH预设,如果在命令行上指定另外的 路径,则覆盖MANPATH的设定。 -P 命令 指定所使用的分页程序,缺省使用/usr/bin/less�Cis,在环境变量MANPAGER中预设。 -S 章节 由于一个命令名称可能会有很多类别,至于类别,列出如下:   章节 说明 1 一般使用者的命令 2 系统调用的命令 3 C语言函数库的命令 4 有关驱动程序和系统设备的解释 5 配置文件的解释 博客:http://x.discuz.net/504112 105/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 6 游戏程序的命令 7 其他的软件或是程序的命令 有关系统维护的命令   -a 显示所有的手册页,而不是只显示第一个。 -d 这个选项主要在检查时使用,如果用户加入了一个新的文件,就可以用这个选项检查是否出错,这个选项并 不会列出文件内容。 -f 只显示出命令的功能而不显示其中详细的说明文件。 -p string 设定运行的预先处理程序的顺序,共有下列几项: e eqn t tbl g grap r refer p pic v vgrind -w 不显示手册页,只显示将被格式化和显示的文件所在位置。 例如:查看cd命令的使用方法。 $ man cd cd(n) Tcl Built-In Commands cd(n) _________________________________________________________________ NAME cd - Change working directory SYNOPSIS cd ?dirName? _________________________________________________________________ DEscrī ptION Change the current working directory to dirName, or to the home directory (as specified in the HOME environment vari- able) if dirName is not given. Returns an empty string. 博客:http://x.discuz.net/504112 106/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v KEYWORDS working directory Tcl 1 (END) 可以按q键退出man命令。 help命令 help命令用于查看所有Shell命令。用户可以通过该命令寻求Shell命令的用法,只需在所查找的命令后输入help 命令,就可以看到所查命令的内容了。   例如:查看od命令的使用方法。 $ od --help  whereis命令 这个程序的主要功能是寻找一个命令所在的位置。例如,我们最常用的ls命令,它是在/bin这个目录下的。如果 希望知道某个命令存在哪一个目录下,可以用whereis命令来查询。 该命令的一般形式为: whereis [选项] 命令名 说明:一般直接使用不加选项的whereis命令,但用户也可根据特殊需要选用它的一些选项。 该命令中各选项的含义分别为: b 只查找二进制文件 m 查找主要文件 s 查找来源 u 查找不常用的记录文件 例如:查找ls命令在什么目录下。 $ whereis ls ls:/bin/ls/usr/man/man1/ls.1 博客:http://x.discuz.net/504112 107/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v shell是用户和Linux 操作系统之间的接口 发布时间 :2006-12-30 13:11:51 shell是用户和Linux操作系统之间的接口。Linux中有多种shell,其中缺省使用的是Bash。本章讲述了shell的工 作原理,shell的种类,shell的一般操作及Bash的特性。  什么是shell Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序 设计语言的统称。 shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层 。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。 shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在 提示符下输入的命令都由shell先解释然后传给Linux核心。 有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm ,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在 shell内部还是一 个单独的程序。 shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实 用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里 寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并 且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程 序将被分解为系统调用并传给Linux内核。   shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言 中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入 的命令都能放到一个可执行的shell程序中。 当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值( TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符 。 一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费 了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常 结束之前,中止它的执行)。 当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结 束登录。 我们来实习一下shell是如何工作的。 $ make work 博客:http://x.discuz.net/504112 108/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v make:***No rule to make target ‘work’. Stop. $ 注释:make是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后,shell便执行它。本例中, 由于输入的命令参数不正确,系统返回信息后停止该命令的执行。 在例子中,shell会寻找名为make的程序,并以work为参数执行它。make是一个经常被用来编译大程序的程序 ,它以参数作为目标来进行编译。在“make work”中,make编译的目标是work。因为make找不到以work为 名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。 另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如 果用户键入: $ myprog bash:myprog:command not found $ 可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息。 shell的种类 Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。 三种shell各有优缺点。Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在 shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是 Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。 Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和 命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友 好的用户界面。 C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供 了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换 、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参 数。 Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩 展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。 Linux并没有冷落其他shell用户,还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途,有些shell 是有专利的,有些能从 Internet网上或其他来源获得。要决定使用哪个shell,只需读一下各种shell的联机帮 助,并试用一下。 用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如: # fgrep lisa /etc/passwd lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash shell被列每行的末尾(/bin/bash)。 博客:http://x.discuz.net/504112 109/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 由于Bash是Linux上缺省的shell,本章主要介绍Bash及其相关知识。 第二十课 shell命令      2000年/5月/22日 命令行 用户登录到Linux系统时,可以看到一个shell提示符,标识了命令行的开始。用户可以在提示符后面输入任何命 令及参数。例如: $ date 二 11 23 01:34:58 CST 1999 $ 用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个 字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如 下: $ Command Option Arguments 选项和参数 选项是包括一个或多个字母的代码,它前面有一个减号(减号是必要的,Linux用它来区别选项和参数),选项 可用于改变命令执行的动作的类型。例如: $ ls motd passwd $ 这是没有选项的ls命令,可列出当前目录中所有文件,只列出各个文件的名字,而不显示其他更多的信息。 $ ls -l total 2 -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd $ 加入-l选项,将会为每个文件列出一行信息,诸如数据大小和数据最后被修改的时间。 大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词,例如: $ ls -l text -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd 博客:http://x.discuz.net/504112 110/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd $ 将显示text目录下的所有文件及其信息。 有些命令,如ls可以带参数,而有一些命令可能需要一些最小数目的参数。例如,cp命令至少需要两个参数, 如果参数的数目与命令要求不符,shell将会给出出错信息。例如: $ cp -i mydata newdata 注意:命令行中选项先于参数输入。 命令行特征 命令行实际上是可以编辑的一个文本缓冲区,在按回车之前,可以对输入的文本进行编辑。比如利用 BACKSPACE键可以删除刚键入的字符,可以进行整行删除,还可以插入字符,使得用户在输入命令,尤其是 复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。 利用上箭头可以重新显示刚执行的命令,利用这一功能可以重复执行以前执行过的命令,而无须重新键入该命 令。 bash保存着以前键入过的命令的列表,这一列表被称为命令历史表。按动上箭头,便可以在命令行上逐次显示 各条命令。同样,按动下箭头可以在命令列表中向下移动,这样可以将以前的各条命令显示在命令行上,用户 可以修改并执行这些命令。这一特征将在10.4节中进行详细的论述。 在一个命令行中还可以置入多个命令,用分号将各个命令隔开。例如: $ ls -F;cp -i mydata newdata 也可以在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。 $ cp �Ci mydata newdata   上面的cp命令是在三行中输入的,开始的两行以反斜杠结束,把三行作为一个命令行。 shell中的特殊字符 shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含 义和作用范围。下面分别对这些特殊字符加以介绍。 通配符 通配符用于模式匹配,如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中 的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,在执行过程 中进行模式匹配。 * 代表任何字符串(长度可以不等),例如:“f*”匹配以f打头的任意字符串。但应注意,文件名前的圆点(. 博客:http://x.discuz.net/504112 111/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v )和路经名中的斜线( /)必须显式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。 ? 代表任何单个字符。 [ ] 代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文件名 就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、 终止字符及中间的连字符(-)组成。例如,f [a- d] 与f [abcd]的作用相同。Shell将把与命令行中指定的 模式串相匹配的所有文件名都作为命令的参数,形成最终的命令,然后再执行这个命令。 下面我们给出表10-1说明这些通配符的具体含义。 表10-1 通配符含义举例 模式串 意 义 * 当前目录下所有文件的名称。 *Text* 当前目录下所有文件名中包含有Text的文件的名称。 [ab-dm]* 当前目录下所有以a、b、c、d、m开头的文件的名称。 [ab-dm]? 当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件的名称。 /usr/bin/?? 目录/usr/bin下所有名称为两个字符的文件的名称。   特别需要注意的是,连字符“-”仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了。而* 和 ?只在方括号外面是通配符,若出现在方括号之内,它们也失去通配符的能力,成为普通字符了。例如, 模式“- a[*?]abc”中只有一对方括号是通配符,*和?均为普通字符,因此,它匹配的字符串只能是- a*abc 和 - a?abc。 最后说明一下使用通配符时需要注意的一些问题。由于*、?和[ ]对于shell来说具有比较特殊的意义,因此在 正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们,否则Shell匹配起来可能会无穷的递归下 去。另外要注意的一点是:如果目录中没有与指定的模式串相匹配的文件名,那么Shell将使用此模式串本身作 为参数传给有关命令。这可能就是命令中出现特殊字符的原因所在。 引号 在shell中引号分为三种:单引号,双引号和反引号。 单引号 ‘ 由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普 通字符解释。例如: $ string=’$PATH’ 博客:http://x.discuz.net/504112 112/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v $ echo $string $PATH $ 可见$保持了其本身的含义,作为普通字符出现。 双引号 “ 由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普 通字符对待。对于$来说,就是用其后指定的变量的值来代替这个变量和$;对于而言,是转义字符,它告诉 shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上的 只有四个字符$,,’和”本身。而对”号,若其前面没有加,则Shell会将它同前一个”号匹配。 例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令: $ TestString=”$PATH\”$PATH” $ echo $TestString .:/usr/bin:/ bin”$PATH $ 读者可以自己试一下在第二个双引号之前不加会产生什么结果。   反引号 ` 反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符 串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两 个反引号)部分。例如: $ pwd /home/xyz $ string=”current directory is `pwd`” $ echo $string current directour is /home/xyz $ shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替 换后的整个结果。 利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如: $ today=`date` 博客:http://x.discuz.net/504112 113/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v $ echo Today is $today Today is Mon Apr 15 16:20:13 CST 1999 $ 反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线()将其转义。例如: $ abc=`echo The number of users is `who| wc-l`` $ echo $abc The number of users is 5 $ 在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执行``中指 定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且``所包含的可以是任何一个合 法的Shell命令,如: $ ls note readme.txt Notice Unix.dir $ TestString=”`echo $HOME ` ` ls [nN]*`” $ echo $TestString /home/yxz note Notice $ 其他情况,读者可自行试之。 注释符 在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示 注释行。 此外还有一些特殊字符如:用于输入/输出重定向与管道的<、>、<<、>>和|;执行后台命令的&;命令执行操 作符&&和||及表示命令组的{}将在下面各小节中加以介绍。 博客:http://x.discuz.net/504112 114/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第二十一课 标准输入/ 输出和重定向 发布时间 :2006-12-30 13:12:52 1. 标准输入与输出 我们知道,执行一个shell命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的 键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准 输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。 我们以cat命令为例,cat命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。若 使用如下命令: $ cat config 将会把文件config的内容依次显示到屏幕上。但是,如果cat的命令行中没有参数,它就会从标准输入中读取数 据,并将其送到标准输出。例如: $ cat Hello world Hello world Bye Bye $ 用户输入的每一行都立刻被cat命令输出到屏幕上。 博客:http://x.discuz.net/504112 115/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 另一个例子,命令sort按行读入文件正文(当命令行中没有给出文件名时,表示从标准输入读入),将其排序 ,并将结果送到标准输出。下面的例子是从标准输入读入一个采购单,并将其排序。 $ sort bananas carrots apples apples bananas carrots $ 这时我们在屏幕上得到了已排序的采购单。 直接使用标准输入/输出文件存在以下问题: 输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且 在终端上输入时,若输入有误修改起来不是很方便。 输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进 一步的处理等。 为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。 输入重定向 输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘 ,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输 入的输入源。 博客:http://x.discuz.net/504112 116/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 例如,命令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 < /etc/passwd 20 23 726 $ 另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用 <<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。下例将一对分隔符delim之间的正 文作为wc命令的输入,统计出正文的行数、单词数和字符数。 $ wc< >this text forms the content >of the here document,which >continues until the end of >text delimter 博客:http://x.discuz.net/504112 117/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v >delim 4 17 98 在<<操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一 直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结 束的分隔符)将重新定向送给命令wc作为它的标准输入。 由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此 ,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定 向解决问题。 输出重定向 输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的 输出就不显示在屏幕上,而是写入到指定文件中。 输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕 上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息 ;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一 个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。 输出重定向的一般形式为:命令>文件名。例如: $ ls > directory.out $ cat directory.out ch1.doc ch2.doc ch3.doc chimp config mail/ test/ $ 将ls命令的输出保存为一个名为directory.out的文件。 注:如果>符号后边的文件已存在,那么这个文件将被重写。 为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,shell提供了输出重定向的一种追加手段 。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序 )的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。 博客:http://x.discuz.net/504112 118/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。形式为:命令>>文件名 。例如: $ ls *.doc>>directory.out $ cat directory.out ch1.doc ch2.doc ch3.doc chimp config mail/ test/ ch1.doc ch2.doc ch3.doc $ 和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误 输出设备重定向。例如下面的命令: $ ls /usr/tmp 2> err.file 可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。 还可以使用另一个输出重定向操作符(&>)将标准输出和错误输出同时送到同一文件中。例如: $ ls /usr/tmp &> output.file 利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列: $ ls /usr/bin > /tmp/dir $ wc �Cw < /tmp/dir 459 统计了/usr/bin目录下的文件个数。 管 道 博客:http://x.discuz.net/504112 119/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或 程序结合在一起,例如上个例子中的/tmp/dir文件将ls和wc命令联在一起;另一种是Linux所提供的管道功能。 这种方法比前一种方法更好。 管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命 令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输 出(如果命令行中未使用输出重定向)。 通过使用管道符“|”来建立一个管道行。用管道重写上面的例子: $ ls /usr/bin|wc -w 1789 再如: $ cat sample.txt|grep "High"|wc -l 管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词High,grep命令的输 出则是所有包含单词High的行,这个输出又被送给wc命令,wc命令统计出输入中的行数。假设sample.txt文件 的内容如下: Things to do today: Low:Go grocery shopping High:Return movie High:Clear level 3 in Alien vs. Predator Medium:Pick up clothes from dry cleaner 那么该管道行的结果是2。 命令替换 命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格 博客:http://x.discuz.net/504112 120/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 式为: command1 `command2` 其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令 执行,执行后的结果作为command1的参数。例如: $ cd `pwd` 该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。 博客:http://x.discuz.net/504112 121/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第二十二课 在 Bash 中的操作 发布时间 :2006-12-30 13:13:25 命令和文件名扩展特性 Bash命令行具有命令和文件名扩展特性。当输入一个还没完成的命令或文件名时,只需键入Tab键就能激活命 令和文件名扩展特性,从而完成该命令的剩余输入。如果有多个命令或文件的前缀相同,Bash将响铃并等待用 户输入足够的字符,以便选择唯一的命令或文件名,如果找到,系统将自动补齐搜索到的命令或文件名,用户 按回车键后,系统将执行这条指令。例如: $ cat pre $ cat preface Bash也能列出当前目录下部分匹配的文件名来完成文件名扩展。如果键入Esc,然后键入?,shell将列出所有 与输入的字符串相匹配的文件名。例如下例,在没有完成的输入后键入Esc ?,shell将列出所有与输入的字符 串相匹配的字符串,然后shell回显命令行,根据列出的文件名,可以键入要输入的文件名或按下Tab键来完成 文件名扩展。例如: $ ls document docudrama $ cat doc document docudrama $ cat docudrama [例】下面是一个目录包含的文件列表: Firebird2.7.tgz Firebird.README Firebird2.60.tgz 博客:http://x.discuz.net/504112 122/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v FireBird Firebird2.60.tgz.README 现在要删除Firebird2.60.tgz.README文件,键入: $ rm �Cf Fi 系统会发出警报声,并且自动将命令行补全为: $ rm �Cf Fire 并等待用户进一步输入文件名的后面部分。现在再键入: b 系统再次发出警报声,并且自动将命令行补全为: $ rm �Cf Firebird 并等待用户进一步输入文件名的后面部分。现在再键入: 2.6 系统再次发出警报声,并且自动将命令行补全为: $ rm �Cf Firebird2.60.tgz 并等待用户进一步输入文件名的后面部分。现在再键入: . 此时命令将被补全为: $ rm �Cf Firebird2.60.tgz..README 从上例可以看到,bash总是尽力根据用户输入的信息来补全命令。当无法根据现有信息补全命令时,则提示用 博客:http://x.discuz.net/504112 123/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 户再给出更多的信息,然后再根据用户的提示来进一步补全命令。作为用户最好是能够一次性给出足够的信息 以便于bash进行命令补全;否则多按几次,时间也就消耗掉了。 命令行编辑 在Bash中可以对命令行进行编辑,以便用户在执行所键入的命令之前能够修改所键入的命令。如果在键入命令 时出现拼写错误,只需在运行所键入的命令之前,使用编辑命令来纠正编辑错误,然后执行它,而不用重新输 入整行命令。这个功能对以长路径文件名作参数的命令特别有用。 表10-2是对命令行编辑操作的一个总结。 表10-2 命令行编辑操作   命令行编辑操作 功能 Ctrl+b或左箭头键 左移一个字符(移至前一个字符) Ctrl+f或右箭头键 右移一个字符(移至后一个字符) Ctrl+a 移至行首 Ctrl+e 移至行尾 Esc b 左移一个单词 Esc f 右移一个单词 Del 删除光标所在处的字符 博客:http://x.discuz.net/504112 124/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Ctrl+d 删除光标所在处的字符 BACKSPACE或Ctrl+h 删除光标左边的字符 Ctrl+k 删除至行尾   命令历史 在Bash中,history命令能够保存最近所执行的命令。这些命令的历史记录号从1开始,只有有限个命令可以被 保存起来,最多500个,即history命令的历史记录号缺省值为500。要查看最近执行的命令,只要键入history命 令,然后键入回车键,最近执行过的命令即按先后顺序被显示出来(各条命令前的数字为历史记录号)。 [例】 $ history 1 cp mydata today 2 vi mydata 3 mv mydata reports 4 cd reports 5 ls ⋯ 所有这些命令都被称为事件(event),一个事件表示一个操作已经发生,即一个命令已被执行。这些事件根据 它们被执行的先后顺序用数字标识,这一标识称为历史事件号。最后执行的历史事件的事件号最大。每个事件 都可由它的历史事件号或命令的初始字符或字符串等确定。 博客:http://x.discuz.net/504112 125/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 利用history命令能够查询以前的事件,并可把它们显示到命令行上执行这一事件。最简便的方法就是利用上下 箭头键,把先前的事件逐次显示到命令行。这个操作不需要运行history命令就可以执行。按动一下上箭头键, 那么上一次执行的一个事件就将出现在命令行上,再按一下,上一次的前一事件又会出现在命令行上;按动一 下下箭头键,将会使当前事件的下一事件出现在命令行上。 Bash也可以通过键入Esc、Tab键来完成对历史事件的字符扩展。和标准命令行扩展特性一样,键入历史事件 的部分字符串,然后键入Esc,再键入Tab键,与刚才键入的字符串相匹配的历史事件将自动扩展并回显到命令 行处。如果不止一个事件与输入的字符串相匹配,就会听到一声响铃,继续键入字符或字符串,shell将会唯一 确定用户所要键入的历史事件。 还有一个查询和执行历史事件的命令—— !命令。在!命令后键入与历史事件相关联的字符,这个关联字符可以 是历史事件的历史事件号,也可以是该事件的前几个字符。在下面的例子中,查询到历史事件号为3的事件, 然后又用其开头的几个字符去匹配,也查询到该命令。 [例】 $ !3 mv mydata reports $ !mv mv mydata reports 也可以用一个偏移量(相对于历史事件列表中最后一个事件)来查询历史事件。负的偏移量将从历史事件列表 表尾向前偏移。在下面的例子中,历史事件号为2的事件“vi mydata”就是用一个负的偏移量查询到的。必须 注意的是,这个偏移量是相对于历史事件列表中的最后一个事件的。在本例中,历史事件列表中最后一个事件 是事件5,历史事件列表中第一个事件为1。从历史事件号为5的事件,往前偏移4,即是历史事件号为2的事件 。 [例】 $ !-4 vi mydata 如果键入!!,则系统默认为上一事件。下面的例子中,用户在命令行上键入!!命令,系统将执行上一事件:“ls ”命令。 博客:http://x.discuz.net/504112 126/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v [例】 $ !! ls mydata today reports 也可以用“模式”来搜索一个历史事件。搜索的“模式”必须用符号“?”括起来。下例是用“模式”“ ?myd?”来搜索历史事件号为3的历史事件“vi mydata”。 [例】 $ !?myd? vi mydata 查询历史事件 可以在命令行上编辑历史事件列表中的事件。表10-3列出了查询历史事件列表的各种操作。 表10-3 查询历史事件操作 查询历史事件操作 功能 Ctrl+n或向下光标键 移至历史事件列表中当前事件的下一历史事件 Ctrl+p或向上光标键 移至历史事件列表中当前事件的前一历史事件 Esc < 移至历史事件列表表首 Esc > 移至历史事件列表表尾 博客:http://x.discuz.net/504112 127/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v !event_num 用历史事件号来定位一个历史事件 !characters 用历史事件的字符前缀来查询一个历史事件 !?pattern 用“模式”来查询历史事件列表中的事件 !-event_num 通过偏移量来定位历史事件 配置history:HISTFILE及HISTSIZE 系统保存的历史事件数被保存在一个特定的系统变量中,这个变量就是HISTSIZE。这个变量的缺省值通常被 设置为500。这个值可以被修改。例如: $ HISTSIZE=10 将HISTSIZE的值重新设置为10。 历史事件被保存在一个文件中,文件名由变量HISTFILE指定。通常这个文件的缺省名是.bash_history。通过给 变量HISTFILE赋值,可以指定新的文件名。 [例】 $ echo $HISTFILE /home/lisa/.bash_history $ HISTFILE=”/home/lisa/newhist” $ echo $HISTFILE /home/lisa/newhist 以上操作先显示变量HISTFILE的值,然后赋予它新的值“/home/lisa/newhist”,以后所有的历史事件将被保 存在newhist文件中。 博客:http://x.discuz.net/504112 128/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux循序渐进 (21) 发布时间 :2006-12-30 13:14:22 还有一个使工作变得轻松的方法是使用命令别名。命令别名通常是其他命令的缩写,用来减少键盘输入。 命令格式为: alias [alias-name=’original-command’] 其中,alias-name是用户给命令取的别名,original-command是原来的命令和参数。需要注意的是,由于Bash 是以空格或者回车来识别原来的命令的,所以如果不使用引号就可能导致 Bash只截取第一个字,从而出现错 误。如果alias命令后面不使用任何参数,则显示当前正在使用的被别名化的命令及其别名。为命令取的别名在 该次登录期间始终有效。如果用户需要别名在每次登录时都有效,那么就将alias命令写到初始化脚本文件中。 [例]如果经常要键入如下的命令,最好为它建立一个别名来减少工作量。 $ cd /usr/X11/lib/X11 假如为这个长命令建立一个名为goconfig的别名,在Bash提示符下键入如下命令: $ alias goconfig=’cd /usr/X11/lib/X11’ 现在,除非您退出Bash,键入goconfig将和原来的长命令有同样的作用。如果想取消别名,可以使用下面的命 令: $ unalias goconfig 这是一些很多人认为有用的别名,可以把它们写入初始化脚本文件中来提高工作效率: alias ll=’ls �Cl’ alias log=’logout’ 博客:http://x.discuz.net/504112 129/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v alias ls=’ls �CF’ 如果您是一名DOS用户并且习惯了DOS命令,可以用下面的别名定义使Linux表现得象DOS一样: alias dir=’ls’ alias copy=’cp’ alias rename=’mv’ alias md=’mkdir’ alias rd=’rmdir’ 注意:在定义别名时,等号两边不能有空格,否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字 符时才需要引号。 如果键入不带任何参数的alias命令,将显示所有已定义的别名。 提示符 Bash有两级提示符。第一级提示符是经常见到的Bash在等待命令输入时的情况。第一级提示符的默认值是$符 号。如果用户不喜欢这个符号,或者愿意自己定义提示符,只需修改PS1变量的值。例如将其改为: PS1=”Enter a command:” 第二级提示符是当Bash为执行某条命令需要用户输入更多信息时显示的。第二级提示符默认为>。如果需要自 己定义该提示符,只需改变PS2变量的值。例如将其改为: PS2=”More information:” 上面的两个例子都是设定提示符为静态字符串的情况。其实用户也可以使用一些事先已经定义好的特殊字符。 这些特殊字符将使提示符中包含当前时间之类的信息。表10-4列出了最常用的一些特殊字符及其含义。 表10-4 bash提示符常用特殊字符 博客:http://x.discuz.net/504112 130/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v   特殊字符 说 明 ! 显示该命令的历史编号 # 显示shell激活后,当前命令的历史编号 $ 显示一个$符号,如果当前用户是root则显示#符号 \ 显示一个反斜杠 d 显示当前日期 h 显示运行该shell的计算机主机名 n 打印一个换行符,这将导致提示符跨行 s 显示正在运行的Shell的名称 t 显示当前时间 u 显示当前用户的用户名 W 显示当前工作目录基准名 w 博客:http://x.discuz.net/504112 131/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 显示当前工作目录   这些特殊字符可以组合起来,为用户提供一些提示符,提供很有用的信息。下面来看几个实际例子: PS1=”t” 将使提示符变成如下所示: 02:16:15 而 PS1=t 将使提示符变成如下所示: t 若PS1=”t\” 将使提示符变成如下所示: 02:16:30 该例就是使用两个特殊字符的组合得到的。 控制shell的运行方式 Bash有一些特殊变量,能控制shell以不同的方式工作。例如,变量noclobber能防止在重定向输出时意外地覆 盖一个文件。通过set命令可以设置noclobber变量的有效或无效。set命令有两个参数:一个是指定变量开(on )或关( off)的选项,一个是特殊变量的变量名。要使某一特殊变量开(有效),用-o选项,要使其关(无 效),用+o选项。例如: $ set �Co noclobber // 使noclobber变量开 博客:http://x.discuz.net/504112 132/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v $ set +o noclobber // 使noclobber变量关 三个最常用的shell特殊变量有:ignoreeof、noclobber及noglob。 ignoreeof ignoreeof变量用来禁止使用ctrl+d来退出shell(ctrl+d不仅用来退出shell,而且可以终止用户直接输往标准输出 上的输入。该操作经常在一些shell实用命令中使用,例如实用命令cat。在这些实用程序操作中,非常容易误操 作而意外地退出shell。ignoreeof特殊变量正是用来防止这种意外的退出。例如: $ set �Co ignoreeof 之后,用户只能用logout或exit命令退出shell。 noclobber noclobber变量可以在重定向输出时保护已存在的文件,防止被意外地覆盖。在下例中,用户设置noclobber为 有效,在重定向时,用户试图去覆盖已经存在的文件myfile,此时系统将返回一个错误信息。 [例] $ set �Co noclobber $ cat preface>myfile bash: myfile: cannot overwrite existing file $ noglob 设置noglob变量后,shell将不扩展文件名中一些特殊的字符或字符串。如字符*、?、[ ]等将不再作为通配符 。如果用户希望列出结尾为?的文件名answer?,可通过如下步骤:首先,用户使noglob变量为无效,然后再列 出文件名。可以看到,目前命令行上的问号?被认为是文件名中的一个字符,而不再被看作通配符。 $ set �Co noglob 博客:http://x.discuz.net/504112 133/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v $ ls answer? answer? 子shell与export命令 用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以 创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。此时,系统中将有两个shell,一个 是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,它的脚本 shell将终止,可以返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多shell,每个shell都是由 某个shell(称为父shell)派生的。 在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行 时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其 他shell中被改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell 时定义这个变量的一个拷贝。这个过程称之为变量输出。 [例]在本例中,变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell ,例如当执行 printfile脚本程序时产生的子shell。 dispfile脚本程序清单: /**************begin dispfile**************/ myfile=”List” export myfile echo “Displaying $myfile” pr �Ct �Cn $myfile printfile /**************end dispfile***************/   博客:http://x.discuz.net/504112 134/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v printfile脚本程序清单: /**************begin printfile**************/ echo “Printing $myfile” lpr $myfile& /**************end printfile**************/ $dispfile Displaying List 1 screen 2 modem 3 paper Printing List $ 定制Bash 在本节中已经介绍了很多定制Bash的方法,但是迄今为止,这些方法都只是对当前Bash对话有用。只要用户 退出登录,所做的一切改变都会丢失。所以应该在Bash的初始化文件中做永久性的修改。 用户可以将每次启动Bash所需要执行的命令放入初始化文件中,最常见的命令就是alias命令和变量定义两种。 系统中的每个用户在其主目录中都有一个.bash_profile文件,Bash每次启动时都将读取该文件,其中包含的所 有命令都将被执行。 下面便是默认.bash_profile文件的代码: #.bash_profile 博客:http://x.discuz.net/504112 135/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v #Get the aliases and functions if [-f ~/.bashrc ];then .~/.bashrc fi #User specific environment and startup programs PATH=$PATH:$HOME/bin ENV=$HOME/.bashrc USERNAME=”” Export USERNAME ENV PATH 博客:http://x.discuz.net/504112 136/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第二十四课 全屏幕文本编辑器 Vi 发布时间 :2006-12-30 13:15:06 本章介绍Linux上最常用的文本编辑器Vi。文本编辑器是所有计算机系统中最常使用的一种工具。用户在使用计 算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工 作都离不开编辑器。 Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、Vi和Emacs等,按功能它们可以分为两大类:行编 辑器(Ed、Ex)和全屏幕编辑器(Vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便。而 全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,克 服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。 Vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人 们主要使用的文本编辑工具,足见其生命力之强,而强大的生命力是其强大的功能带来的。 本章中,我们将循序渐进地介绍如何使用Vi来建立、编辑、显示以及处理文件。(注:文中的大写字母为[ shift]键+相应的小写字母的组合)  Vi简介 Vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、 查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有 的。 Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文 本编辑程序。 Vi没有菜单,只有命令,且命令繁多。Vi有三种基本工作模式:命令行模式、文本输入模式和末行模式。 命令行模式 任何时候,不管用户处于何种模式,只要按一下键,即可使Vi进入命令行模式;我们在shell环境(提示符为$ )下输入启动 Vi命令,进入编辑器时,也是处于该模式下。 在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做 编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是, 博客:http://x.discuz.net/504112 137/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。 文本输入模式 在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输 入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入 过程中,若想回到命令模式下,按键即可。 末行模式 末行模式也称ex转义模式。 Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在 Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令 模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显 示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑 缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。例如: :1,$s / A / a / g 则从文件第一行至文件尾将大写A全部替换成小写a。 若在末行模式下输入命令过程中改变了主意,可按键,或用退格键将输入的命令全部删除之后,再按一下退格 键,即可使Vi回到命令模式下。 Vi编辑器的三种工作模式之间的转换如图11-1所示。   如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令 模式下输入“:”即可切换到末行模式,然后输入命令。 第二十五课 Vi的进入与退出      2000年/6月/13日 Vi 的进入 博客:http://x.discuz.net/504112 138/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 用户登录到系统中之后,系统给出提示符“$”。在提示符后键入Vi和想要编辑(或建立)的文件名,便可进入 Vi。 [例1] 键入命令: $ vi example.c 屏幕显示如下: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 博客:http://x.discuz.net/504112 139/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v “ example.c” [New File] 如果只键入Vi,而不带文件名,也可以进入Vi。之后在光标处键入文件内容,退出Vi时,只需在退出命令后输 入文件名即可。 进入Vi之后,首先进入的就是命令模式,也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命 令来解释。光标停在屏幕第一行首位上(用 表示),其余各行行首均有一个“~”符号,表示该行为空行。最 后一行也称状态行,显示出当前正在编辑的文件名以及其状态。如本例是[New File],表示example.c是一个 新建的文件。如果example.c文件已在系统中存在,那么输入上述命令后,则在屏幕上显示出该文件的内容, 并且光标停在第一行的首位,在状态行显示出该文件的文件名、行数和字符数。 [例2] 键入命令: $ vi example.c 然后键入: #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; x++ ; printf(“x = %d\n”, x); } 博客:http://x.discuz.net/504112 140/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v ~ ~ ~ ~ “ example.c” [ New File] 注意,在这里我们为了节省篇幅起见,屏幕只显示15行。事实上,初始的显示行数与用户所用终端有关,一般 的CRT终端可显示25行。在窗口系统中,显示行数与运行Vi的那个窗口有关。然而我们可以对显示行数进行设 置。例如,在能显示25行的CRT终端上,让Vi只显示15行。设置的方法将在本节后面介绍。 当用Vi建立一个新文件时,在进入Vi的命令中也可以不给出文件名,当编辑完文件需要保存数据时,再由用户 指定文件名。 进入Vi时,用户不仅可以指定一个待编辑的文件名,而且还有许多附加操作。 如果希望在进入Vi之后,光标处于文件中特定的某行上,可在Vi后加上任选项+n,其中n为指定的行数。 [例3] 键入命令: $ vi +5 example1.c 后,屏幕显示如下: #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); 博客:http://x.discuz.net/504112 141/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v } add( ) { static int x=0; x++ ; printf(“x = %d\n”, x); } ~ ~ ~ ~ ~ “ example.c” 12 lines, 125 characters 光标将位于文件example1.c中的第5行上。 如果希望在进入Vi之后光标处于文件最末行,则只需把命令中附加项“+”后面的数字n省略掉即可。 在进入Vi时,除了可以指定一个光标起始行号之外,还可以在命令中指定一个模式串,此时在进入Vi后,光标 就处于文件中第一个与指定模式串相匹配的那行上。 [例4] 键入命令: $ vi +/int example1.c 博客:http://x.discuz.net/504112 142/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 屏幕显示如下: #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; x++ ; printf(“x = %d\n”, x); } ~ ~ ~ ~ ~ “ example.c” 12 lines, 125 characters 光标将位于文件example1.c中的第3行上。 博客:http://x.discuz.net/504112 143/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 使用Vi可以同时编辑多个文件,只要在进入Vi的命令中写入所要操作的文件即可,还可以使用通配符。 [例5] 键入命令: $ vi *.cat 就可以编辑所有后缀为cat的文件了。当然,您还可以使用shell中内置的模式匹配来装载文件,这样会更富技巧 性。一旦您在命令行中包含了所有的待编辑文件名,就可以在Vi中方便地移来移去。 退出Vi 当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。 在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell; 若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。 在末行模式下,输入命令 :w Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个 新的文件名。 [例6] :w newfile 此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则 Vi在显示窗口的状态行给出提示信息: File exists (use ! to override) 此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令 博客:http://x.discuz.net/504112 144/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v :w! newfile 否则可选择另外的文件名来保存当前文件。 在末行模式下,输入命令 :q 系统退出Vi返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信 息: No write since last change (use ! to overrides) 提示用户该文件被修改后没有保存,然后Vi并不退出,继续等待用户命令。若用户就是不想保存被修改后的文 件而要强行退出Vi时,可使用命令 :q! Vi放弃所作修改而直接退到shell下。 在末行模式下,输入命令 :wq Vi将先保存文件,然后退出Vi返回到shell。 在末行模式下,输入命令 :x 该命令的功能同命令模式下的ZZ命令功能相同。 博客:http://x.discuz.net/504112 145/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux Vi 中的行号 发布时间 :2006-12-30 13:16:09 Vi中的行号 Vi中的许多命令都要用到行号及行数等数值。若编辑的文件较大时,自己去数是非常不方便的。为此Vi提供了 给文本加行号的功能。这些行号显示在屏幕的左边,而相应行的内容则显示在行号之后。 使用的命令为:在末行方式下输入命令: :set number 需要说明的是,这里加的行号只是显示给用户看的,它们并不是文件内容的一部分。 在一个较大的文件中,用户可能需要了解光标当前行是哪一行,在文件中处于什么位置,可在命令模式下用组 合键,此时Vi会在显示窗口的最后一行显示出相应信息。该命令可以在任何时候使用。 [例7] #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; 博客:http://x.discuz.net/504112 146/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v x++ ; printf(“x = %d\n”, x); } ~ ~ ~ ~ ~ “ example.c” [Modified] lines 4 of 10 --40%-- col 11 在末行方式下,我们可以输入命令nu(单词number的缩写)来获得光标当前行的行号与该行内容。 光标移动操作 全屏幕文本编辑器中,光标的移动操作无疑是最经常使用的操作了。用户只有熟练地使用移动光标的这些命令 ,才能迅速准确地到达所期望的位置处进行编辑。 Vi中的光标移动既可以在命令模式下,也可以在文本输入模式下,但操作的方法不尽相同。 在文本输入模式下,可直接使用键盘上的四个方向键移动光标。 在命令模式下,有很多移动光标的方法。不但可以使用四个方向键来移动光标,还可以用h、j、k、l这四个键 代替四个方向键来移动光标,这样可以避免由于不同机器上的不同键盘定义所带来的矛盾,而且使用熟练后可 以手不离开字母键盘位置就能完成所有操作,从而提高工作效率。另外还可以用、、和四个键或组合键移动光 标。且以上这三种键在实现功能上是等价的。除此之外,还有一些移动光标的命令。下面对它们的工作方式介 绍如下: 、? (均称为右向键) 博客:http://x.discuz.net/504112 147/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 右向键的作用是将光标向右移动一个位置。若在向右键前先输入一个数字n,那么光标就向右移动n个位置。例 如5l表示光标向右移动5个位置。需要注意的是,光标移动不能超过当前行的末尾。若给定的n超过光标当前位 置至行尾的字符个数,如果用右向键,光标只能移到行尾;如果用,光标移到下面一行或几行的适当位置。 h、、? (向左键) 执行一次向左键,光标向左移动一个位置。同向右键一样,也可以在向左键的前面输入一个数字n,那么光标 就向左移动n个位置。需要注意的是,如果用左向键,光标左移不能超出该行的开头;如果用,光标移到上面 一行或几行的适当位置。 j、、ˉ (向下键) 执行一次向下键光标向下移动一个位置(即一行),但光标所在的列不变。当这些命令前面加上数字n,则光 标下移n行。 Vi除了可以用向下键将光标下移外,还可以用键和“+”键将光标下移一行或n行(不包括本行在内),但此时 光标下移之后将位于该行的第一个字符处。例如: 3j 光标下移3行,且光标所在列的位置不变。 3+或3 光标下移3行,且光标位于该行的行首。 k、、- (向上键) 执行一次向上键光标向上移动一个位置(即一行),但光标所在的列不变。同样在这些命令前面加上数字n, 则光标上移n行。 若希望光标上移之后,光标位于该行的行首,则可以使用命令“- ”。 L (移至行首) L 命令是将光标移到当前行的开头,即将光标移至当前行的第一个非空白处(非制表符或非空格符)。 $(移至行尾) 该命令将光标移到当前行的行尾,停在最后一个字符上。若在$命令之前加上一个数字n,则光标下移n-1行并 到达行尾。 博客:http://x.discuz.net/504112 148/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v [行号] G(移至指定行) 该命令将光标移至指定行号所指定的行的行首。这种移动称为绝对定位移动。 [例8] #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; x++ ; printf(“x = %d\n”, x); } ~ ~ ~ ~ ~ 博客:http://x.discuz.net/504112 149/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v “ example.c” 12 lines, 125 characters 键入命令:6G后,屏幕显示如下: #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; x++ ; printf(“x = %d\n”, x); } ~ ~ ~ ~ ~ “ example.c” 12 lines, 125 characters 博客:http://x.discuz.net/504112 150/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 光标移到了第6行的行首。 若省略行号,则光标移至该文件的最后一行的行首,即无论该文件有多少屏,都跳至最后一行。 第二十七课 vi命令   2000年/6月/26日   在屏幕上移动 Vi提供了三个关于光标在全屏幕上移动并且文件本身不发生滚动的命令。它们分别是H、M和L命令。 H命令 该命令将光标移至屏幕首行的行首(即左上角),也就是当前屏幕的第一行,而不是整个文件的第一行。利用 此命令可以快速将光标移至屏幕顶部。若在H命令之前加上数字n,则将光标移至第n行的行首。 [例9] 屏幕显示如下内容: #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; x++ ; printf(“x=%d\n”, x); } 博客:http://x.discuz.net/504112 151/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v ~ ~ ~ ~ ~ “ example.c” [ New File] 在命令模式下输入4H命令后,光标移到以for开头的这一行的字母f上。 值得一提的是,使用命令dH将会删除从光标当前所在行至所显示屏幕首行的全部内容。 M命令 该命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行;如果 并未充满,则移动到文本的那些行的中间行。利用此命令可以快速地将光标从屏幕的任意位置移至屏幕显示文 件的中间行的行首。例如,在上面屏幕显示的情况下(不论光标在屏幕的何处),在命令模式下,输入命令M 之后,光标都将移到 add这一行的字母a上。 同样值得一提的是,使用命令dM将会删除从光标当前所在行至屏幕显示文件的中间行的全部内容。 L命令 当文件显示内容超过一屏时,该命令将光标移至屏幕上的最底行的行首;当文件显示内容不足一屏时,该命令 将光标移至文件的最后一行的行首。可见,利用此命令可以快速准确地将光标移至屏幕底部或文件的最后一行 。若在L命令之前加上数字n,则将光标移至从屏幕底部算起第n行的行首。例如,在上面屏幕显示的情况下( 不论光标在屏幕的何处),在命令模式下,输入命令3L之后,光标都将移到x++这一行的字母x上。 同样值得一提的是,使用命令dL将会删除从光标当前行至屏幕底行的全部内容。 按字移动光标 首先介绍一下Vi中“字”的概念。在Vi中“字”有两种含义。一种是广义的字,它可以是两个空格之间的任何 内容。 [例10] 在文件example.c 中的第4行: 博客:http://x.discuz.net/504112 152/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v {int k; 它只有2个字,一个是{int ,另一个是k; Vi中另一种字是狭义上的字,在此种意义之下,英文单词、标点符号和非字母字符(如!、@、#、$、%、^、& 、 *、(、)、-、+、{、}、[、]、~、|、\、<、>、/等)均被当成是一个字。因此,上面那一行中就包括{ 、 int、k、;这4个字。 Vi中使用大写命令一般就是指将字作为广义来对待,使用小写命令就是作为狭义对待。 搞清楚Vi中字的含义后,我们就可以介绍按字移动光标的命令了。 Vi 一共提供了三组关于按字移动光标的命令,分别是: w和W命令 将光标右移至下一个字的字首; [例11] 屏幕上显示如下: printf(“Hello Mr.Huang!\n”); 现在使用w命令,把光标移到下一个字(狭义)的字首“(”上: printf(“Hello Mr.Huang!\n”); 下面使用W命令,将把光标移到下一个字(广义)的字首“M”上: printf(“Hello Mr.Huang!\n”); e和E命令 如果光标起始位置处于字内(即非字尾处),则该命令将把光标移到本字字尾;如果光标起始位置处于字尾, 则该命令将把光标移动到下一个字的字尾。 b和B 如果光标处于所在字内(即非字首),则该命令将把光标移至本字字首;如果光标处于所在字字首,则该命令 将把光标移到上一个字的字首。 博客:http://x.discuz.net/504112 153/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v [例12] 屏幕显示如下: printf(“Hello Mr.Huang!\n”); 现在使用b命令,由于光标处于该字中间,所以光标移动到本字字首“H”处: printf(“Hello Mr.Huang!\n”); 如果使用B命令,则如下所示: printf(“Hello Mr.Huang!\n”); 按句移动光标 在Vi中,一个句子被定义为是以逗号(,)、句号(.)、问号(?)和感叹号(!)结尾,且其后面跟着至少两个 以上(含两个)空格或一个换行符的字符序列。 Vi提供了关于按句移动光标的两个命令,分别为: 1. ( 命令 将光标移至上一个句子的开头。 2. ) 命令 该命令将光标移至下一个句子的开头。 按段移动光标 在Vi中,一个段被定义为是以一个空白行开始和结束的片段。Vi提供了关于按段移动光标的两个命令,分别为 : 1. { 命令 该命令将光标向前移至上一个段的开头; 博客:http://x.discuz.net/504112 154/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 2. } 命令 该命令将光标向后移至下一个段的开头。 屏幕滚动 屏幕命令是以屏幕为单位移动光标的,常用于文件的滚屏和分页。需要注意的是,屏幕命令不是光标移动命令 ,不能作为文本限定符用于删除命令中。 在命令模式下和文本输入模式下均可以使用屏幕滚动命令。   1. 滚屏命令 关于滚屏命令有两个: · < Ctrl+u > 将屏幕向前(文件头方向)翻滚半屏; · < Ctrl+d > 将屏幕向后(文件尾方向)翻滚半屏。 可以在这两个命令之前加上一个数字n,则屏幕向前或向后翻滚n行。并且这个值被系统记住,以后再用< Ctrl+u >和< Ctrl+d >命令滚屏时,还滚相应的行数。 2. 分页命令 关于分页命令也有两个: · < Ctrl+f > 将屏幕向文件尾方向翻滚一整屏(即一页); · < Ctrl+b > 将屏幕向文件首方向翻滚一整屏(即一页)。 同样也可以在这两个命令之前加上一个数字n,则屏幕向前或向后移动n页。 3. 状态命令< Ctrl+G > 博客:http://x.discuz.net/504112 155/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 命令显示在vi状态行上的vi状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之 前的行占整个文件的百分比。 4. 屏幕调零命令 Vi 提供了三个有关屏幕调零的命令。它们的格式分别为: · [行号] z [行数] <回车> · [行号] z [行数] . · [行号] z [行数] _ 若省略了行号和行数,这三个命令分别为将光标所在的当前行作为屏幕的首行、中间行和最末行重新显示;若 给出行号,那么该行号所对应的行就作为当前行显示在屏幕的首行、中间行和最末行;若给出行数,则它规定 了在屏幕上显示的行数。 [例13] 8z16<回车> :将文件中的第8行作为屏幕显示的首行,并一共显示16行。 15z . :将文件中的第15行作为屏幕显示的中间行,显示行数为整屏。 15z 5_ :将文件中的第15行作为屏幕显示的最末行,显示行数为5行。 文本插入操作 在命令模式下用户输入的任何字符都被Vi当作命令加以解释执行,如果用户要将输入的字符当作是文本内容时 ,则首先应将Vi的工作模式从命令模式切换到文本输入模式。切换的方式是使用下面的命令。   插入(Insert)命令 Vi提供了两个插入命令:i和 I。 博客:http://x.discuz.net/504112 156/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v     i命令 插入文本从光标所在位置前开始,并且插入过程中可以使用键删除错误的输入。此时Vi处于插入状态,屏幕最下 行显示“--INSERT--”(插入)字样。 [例14] 有一正在编辑的文件,如下所示: Welcome to vi world!Come on! ~ ~ 光标位于第一个“!”上,需在其前面插入: This is an example! 使用i命令,并输入相应文本后,屏幕显示如下: Welcome to vi world This is an example!!Come on! ~ ~ 由此例可以看到,光标本来是在第一个“!”处,但是由于是从光标所在位置前开始插入,所以这个“!”就被 挤到了新插入的文本之后。 I命令 该命令是将光标移到当前行的行首,然后在其前插入文本。 博客:http://x.discuz.net/504112 157/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux循序渐进 (24) 发布时间 :2006-12-30 13:16:48 在屏幕上移动 Vi提供了三个关于光标在全屏幕上移动并且文件本身不发生滚动的命令。它们分别是H、M和L命令。 H命令 该命令将光标移至屏幕首行的行首(即左上角),也就是当前屏幕的第一行,而不是整个文件的第一行。利用 此命令可以快速将光标移至屏幕顶部。若在H命令之前加上数字n,则将光标移至第n行的行首。 [例9] 屏幕显示如下内容: #include main ( ) { int k ; for ( k=0 ; k<3 ; k++) add( ); } add( ) { static int x=0; x++ ; printf(“x=%d\n”, x); } ~ 博客:http://x.discuz.net/504112 158/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v ~ ~ ~ ~ “ example.c” [ New File] 在命令模式下输入4H命令后,光标移到以for开头的这一行的字母f上。 值得一提的是,使用命令dH将会删除从光标当前所在行至所显示屏幕首行的全部内容。 M命令 该命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行;如果 并未充满,则移动到文本的那些行的中间行。利用此命令可以快速地将光标从屏幕的任意位置移至屏幕显示文 件的中间行的行首。例如,在上面屏幕显示的情况下(不论光标在屏幕的何处),在命令模式下,输入命令M 之后,光标都将移到 add这一行的字母a上。 同样值得一提的是,使用命令dM将会删除从光标当前所在行至屏幕显示文件的中间行的全部内容。 L命令 当文件显示内容超过一屏时,该命令将光标移至屏幕上的最底行的行首;当文件显示内容不足一屏时,该命令 将光标移至文件的最后一行的行首。可见,利用此命令可以快速准确地将光标移至屏幕底部或文件的最后一行 。若在L命令之前加上数字n,则将光标移至从屏幕底部算起第n行的行首。例如,在上面屏幕显示的情况下( 不论光标在屏幕的何处),在命令模式下,输入命令3L之后,光标都将移到x++这一行的字母x上。 同样值得一提的是,使用命令dL将会删除从光标当前行至屏幕底行的全部内容。 按字移动光标 首先介绍一下Vi中“字”的概念。在Vi中“字”有两种含义。一种是广义的字,它可以是两个空格之间的任何 内容。 [例10] 在文件example.c 中的第4行: {int k; 博客:http://x.discuz.net/504112 159/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 它只有2个字,一个是{int ,另一个是k; Vi中另一种字是狭义上的字,在此种意义之下,英文单词、标点符号和非字母字符(如!、@、#、$、%、^、& 、 *、(、)、-、+、{、}、[、]、~、|、\、<、>、/等)均被当成是一个字。因此,上面那一行中就包括{ 、 int、k、;这4个字。 Vi中使用大写命令一般就是指将字作为广义来对待,使用小写命令就是作为狭义对待。 搞清楚Vi中字的含义后,我们就可以介绍按字移动光标的命令了。 Vi 一共提供了三组关于按字移动光标的命令,分别是: w和W命令 将光标右移至下一个字的字首; [例11] 屏幕上显示如下: printf(“Hello Mr.Huang!\n”); 现在使用w命令,把光标移到下一个字(狭义)的字首“(”上: printf(“Hello Mr.Huang!\n”); 下面使用W命令,将把光标移到下一个字(广义)的字首“M”上: printf(“Hello Mr.Huang!\n”); e和E命令 如果光标起始位置处于字内(即非字尾处),则该命令将把光标移到本字字尾;如果光标起始位置处于字尾, 则该命令将把光标移动到下一个字的字尾。 b和B 如果光标处于所在字内(即非字首),则该命令将把光标移至本字字首;如果光标处于所在字字首,则该命令 将把光标移到上一个字的字首。 [例12] 屏幕显示如下: 博客:http://x.discuz.net/504112 160/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v printf(“Hello Mr.Huang!\n”); 现在使用b命令,由于光标处于该字中间,所以光标移动到本字字首“H”处: printf(“Hello Mr.Huang!\n”); 如果使用B命令,则如下所示: printf(“Hello Mr.Huang!\n”); 按句移动光标 在Vi中,一个句子被定义为是以逗号(,)、句号(.)、问号(?)和感叹号(!)结尾,且其后面跟着至少两个 以上(含两个)空格或一个换行符的字符序列。 Vi提供了关于按句移动光标的两个命令,分别为: 1. ( 命令 将光标移至上一个句子的开头。 2. ) 命令 该命令将光标移至下一个句子的开头。 按段移动光标 在Vi中,一个段被定义为是以一个空白行开始和结束的片段。Vi提供了关于按段移动光标的两个命令,分别为 : 1. { 命令 该命令将光标向前移至上一个段的开头; 2. } 命令 博客:http://x.discuz.net/504112 161/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 该命令将光标向后移至下一个段的开头。 屏幕滚动 屏幕命令是以屏幕为单位移动光标的,常用于文件的滚屏和分页。需要注意的是,屏幕命令不是光标移动命令 ,不能作为文本限定符用于删除命令中。 在命令模式下和文本输入模式下均可以使用屏幕滚动命令。   1. 滚屏命令 关于滚屏命令有两个: · < Ctrl+u > 将屏幕向前(文件头方向)翻滚半屏; · < Ctrl+d > 将屏幕向后(文件尾方向)翻滚半屏。 可以在这两个命令之前加上一个数字n,则屏幕向前或向后翻滚n行。并且这个值被系统记住,以后再用< Ctrl+u >和< Ctrl+d >命令滚屏时,还滚相应的行数。 2. 分页命令 关于分页命令也有两个: · < Ctrl+f > 将屏幕向文件尾方向翻滚一整屏(即一页); · < Ctrl+b > 将屏幕向文件首方向翻滚一整屏(即一页)。 同样也可以在这两个命令之前加上一个数字n,则屏幕向前或向后移动n页。 3. 状态命令< Ctrl+G > 命令显示在vi状态行上的vi状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之 前的行占整个文件的百分比。 博客:http://x.discuz.net/504112 162/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 4. 屏幕调零命令 Vi 提供了三个有关屏幕调零的命令。它们的格式分别为: · [行号] z [行数] <回车> · [行号] z [行数] . · [行号] z [行数] _ 若省略了行号和行数,这三个命令分别为将光标所在的当前行作为屏幕的首行、中间行和最末行重新显示;若 给出行号,那么该行号所对应的行就作为当前行显示在屏幕的首行、中间行和最末行;若给出行数,则它规定 了在屏幕上显示的行数。 [例13] 8z16<回车> :将文件中的第8行作为屏幕显示的首行,并一共显示16行。 15z . :将文件中的第15行作为屏幕显示的中间行,显示行数为整屏。 15z 5_ :将文件中的第15行作为屏幕显示的最末行,显示行数为5行。 文本插入操作 在命令模式下用户输入的任何字符都被Vi当作命令加以解释执行,如果用户要将输入的字符当作是文本内容时 ,则首先应将Vi的工作模式从命令模式切换到文本输入模式。切换的方式是使用下面的命令。   插入(Insert)命令 Vi提供了两个插入命令:i和 I。     博客:http://x.discuz.net/504112 163/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v i命令 插入文本从光标所在位置前开始,并且插入过程中可以使用键删除错误的输入。此时Vi处于插入状态,屏幕最下 行显示“--INSERT--”(插入)字样。 [例14] 有一正在编辑的文件,如下所示: Welcome to vi world!Come on! ~ ~ 光标位于第一个“!”上,需在其前面插入: This is an example! 使用i命令,并输入相应文本后,屏幕显示如下: Welcome to vi world This is an example!!Come on! ~ ~ 由此例可以看到,光标本来是在第一个“!”处,但是由于是从光标所在位置前开始插入,所以这个“!”就被 挤到了新插入的文本之后。 I命令 该命令是将光标移到当前行的行首,然后在其前插入文本。 } 博客:http://x.discuz.net/504112 164/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 第二十九课 vi 命令 发布时间 :2006-12-30 13:17:33 附加(append)命令 Vi提供了两个附加插入命令:a和A。 a命令 该命令用于在光标当前所在位置之后追加新文本。新输入的文本放在光标之后,在光标后的原文本将相应地向 后移动。光标可在一行的任何位置。 [例15] 以例14原始情况为例,使用a命令,并输入相应文本,屏幕显示如下: Welcome to vi world!This is an example!Come on! ~ ~ 本例中光标后的文本“Come on!”被新输入的文本挤到了后面。 A命令 该命令与a命令不同的是,A命令将把光标挪到所在行的行尾,从那里开始插入新文本。当输入A命令后,光标 自动移到该行的行尾。 a和A命令是把文本插入到行尾的唯一方法。   打开(open)命令 不论是Insert命令也好,还是append命令也好,所插入的内容都是从当前行中的某个位置开始的。若我们希望 在某行之前或某行之后插入一些新行,则应使用open命令。 博客:http://x.discuz.net/504112 165/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Vi提供了两个打开命令:o和O。 o命令 该命令将在光标所在行的下面新开一行,并将光标置于该行的行首,等待输入文本。要注意,当使用删除字符 时只能删除从插入模式开始的位置以后的字符,对于以前的字符不起作用。而且还可以在文本输入方式下输入 一些控制字符,例如,Ctrl+l即是插入分页符,显示为^L。 [例16] 以例14的原始情况为例,只是这次要在当前行下面一行输入文本。使用o命令,并输入相应文本,屏 幕显示如下: Welcome to vi world!Come on! This is an example! ~ ~ 新输入的文本出现在原来文本所在行的下一行。 O命令 和o命令相反,O命令是在光标所在行的上面插入一行,并将光标置于该行的行首,等待输入文本。 [例17] 与例14的原始情况相同,要在当前行的上面一行输入文本。使用O命令并输入文本后,屏幕显示如下 : This is an example! Welcome to vi world!Come on! ~ ~ 文本插入到了当前行之上。 11.3.4 文本修改 博客:http://x.discuz.net/504112 166/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 在命令模式下可以使用Vi提供的各种有关命令对文本进行修改,包括对文本内容的删除、复制、取代和替换等 。     文本删除 在编辑文本时,经常需要删除一些不需要的文本,我们可以用键将输错或不需要的文本删除,但此时有一个限 制就是当删到行头之后,再想删上面那行的内容是不可能的。 在命令模式下,Vi提供了许多删除命令。这些命令大多是以d开头的。常用的有: 1. 删除单个字符 x: 删除光标处的字符。若在x之前加上一个数字n,则删除从光标所在位置开始向右的n个字符。 X:删除光标前面的那个字符。若在X之前加上一个数字n,则删除从光标前面那个字符开始向左的n个字符。 显然这两个命令是删除少量字符的快捷方法。 2. 删除多个字符 dd:删除光标所在的整行。在dd前可加上一个数字n,表示删除当前行及其后n-1行的内容。 D或d$:两命令功能一样,都是删除从光标所在处开始到行尾的内容。 d0:删除从光标前一个字符开始到行首的内容。 dw:删除一个单词。若光标处在某个词的中间,则从光标所在位置开始删至词尾。同dd命令一样,可在dw之 前加一个数字n,表示删除n个指定的单词。 如果用户不小心进行了误删除操作,也不要紧,Vi提供了恢复误操作的命令,并且可以将恢复的内容移动,放 在文本的任何地方。恢复命令用2 np,其中n为寄存器号。这是因为Vi内部有9个用于维护删除操作的寄存器, 分别用数字1,2,? ,9表示,它们分别保存以往用dd命令删除的内容。这些寄存器组成一个队列,例如最近 一次使用dd命令删除的内容被放到寄存器1中;当下次再使用dd命令删除文本内容时,Vi将把寄存器1的内容转 博客:http://x.discuz.net/504112 167/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 存到寄存器2中,而寄存器1中又将是最近一次dd命令删除的内容。以此类推,Vi可以保存有最近九次用dd命令 删除的内容,而前面的用dd命令删除的内容则被抛弃。 [例18] 假设当前编辑文件为xu.c /* this is a example */ #include void main( ) { int i , j ; printf( “ please input a number : / n ” ); scanf ( “ % d ” , &i ) ; j = i + 100 ; printf ( “ /n j = % d /n ” , j ) ; return ; } 我们对其进行如下操作: 将光标移至文件第一行,按dd命令,此时文件第一行的内容被删除,且被删除的内容保存在寄存器1中; 按5j使光标下移至第一个printf语句行; 按dd命令将该行删除,此时寄存器1中将保存刚刚被删除的内容: printf (“ please input a number :\ n ” ); 而寄存器1原有的内容: 博客:http://x.discuz.net/504112 168/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v /* this is a example */ 则被保存到寄存器2中; 在最末行模式下,也可以对文件内容进行删除,但它只能删除整行,一次可将某个指定范围内(起始行号,终 止行号)的所有行全部删除。需要注意的是,用此种方法进行删除时,Vi并不把所删内容放入寄存器中,因而 当发生误删除操作时,不能用2 np命令恢复,只能用u命令进行有限的恢复。 最后提一下,如何在文本输入方式时将所输入文本删除。用户使用组合键即可,此时光标将返回插入开始的位 置,并且Vi仍处于文本输入方式。   取消上一命令(Undo) 取消上一命令(Undo),也称复原命令,是非常有用的命令,它可以取消前一次的误操作或不合适的操作对文 件造成的影响,使之回复到这种误操作或不合适操作被执行之前的状态。 取消上一命令有两种形式,在命令模式下键入字符u和U。它们的功能都是取消刚才输入的命令,恢复到原来的 情况。小写u和大写U在具体细节上有所不同,二者的区别在于,大写U命令的功能是恢复到误操作命令前的情 况,即如果插入命令后使用U命令,就删除刚刚插入的内容;如果删除命令后使用U命令,就相当于在光标处又 插入刚刚删除的内容。这里把所有修改文本的命令都视为插入命令。也就是说,U命令只能取消前一步操作, 如果用U命令撤消了前一步操作,当再按U键时,并不是撤消再前一步的操作,而是撤消了刚才U命令执行的操 作,也就是又恢复到第一次使用U命令之前的状态,结果是什么都没做。而小写u命令的功能是把当前行恢复成 被编辑前的状态,而不管此行被编辑了多少次。   [例19] 原来屏幕显示内容为: #include main ( ) { } 博客:http://x.discuz.net/504112 169/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 在命令模式下输入命令o,插入一新行,输入需要插入的内容后再按回到命令模式,屏幕显示内容为: #include main ( ) { printf ( “ How do you do ! ” ) ; } 若想取消这一插入操作,请按命令U后,屏幕恢复到原来显示的情况。 注意:对于取消命令仍可以再使用取消命令。这时会产生一种“负负得正”的效果,文件状态将恢复到第一次 执行取消命令之前的状态,如同没做任何操作一般。例如在上例中,再使用一次命令U,屏幕将显示的内容仍 为插入后的内容。   重复命令(Redo) 重复命令也是一个非常常用的命令。在文本编辑中经常会碰到需要机械地重复一些操作,这时就需要用到重复 命令。它可以让用户方便地再执行一次前面刚完成的某个复杂的命令。 重复命令只能在命令模式下工作,在该模式下按“.”键既可。执行一个重复命令时,其结果是依赖于光标当前 位置的。 [例20] 屏幕显示内容为: #include main ( ) { 博客:http://x.discuz.net/504112 170/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v } 输入命令o,并输入一行内容后,再< Esc >返回到命令模式下,屏幕显示内容为: #include main ( ) { printf ( “ How do you do ! ” ) ; } 此时输入命令“.”,屏幕显示内容为: #include main ( ) { printf ( “ How do you do ! ” ) ; printf ( “ How do you do ! ” ) ; } 博客:http://x.discuz.net/504112 171/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v Linux海量文章汇集 Linux 海量文章汇集 发布时间 :2006-12-30 13:18:26 下面是linux技术文章快速入口。需要联网: Linux 技术交流 http://www.linuxdiyf.com/bbs/forum-3-1.html Linux 应用 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=1 Linux 安装及学习指导 http://www.linuxdiyf.com/bbs/forum-45-1.html Linux 系统安装 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=45&filter=type&typeid=11 Linux 学习指导 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=45&filter=type&typeid=12 Linux 软件安装 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=45&filter=type&typeid=13 shell http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=3 Linux 壁纸 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=4 红旗 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=5 Redhat http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=6 SuSE http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=7 Linux 认证 http://www.linuxdiyf.com/bbs/forumdisplay.php?fid=3&filter=type&typeid=9 Linux下载分享{酷件、书籍、视频分享 } http://www.linuxdiyf.com/bbs/forum-6-1.html 服务器应用 http://www.linuxdiyf.com/bbs/forum-7-1.html 数据库应用 http://www.linuxdiyf.com/bbs/forum-8-1.html Linux 编程与内核 http://www.linuxdiyf.com/bbs/forum-9-1.html UniX 技术文章 http://www.linuxdiyf.com/bbs/forum-32-1.html Linux 业界声音、新闻 http://www.linuxdiyf.com/bbs/forum-11-1.html Linux 人才招聘信息 http://www.linuxdiyf.com/bbs/forum-46-1.html 博客:http://x.discuz.net/504112 172/173 制作于:2006-12-30 Powered by X-Spaceks2886v的个人空间 Linux循序渐进+Linux初级篇 作者:ks2886v 制作:红联Linux论坛 祝您阅读愉快! 感谢原创作者带来的好文! 博客:http://x.discuz.net/504112 173/173 制作于:2006-12-30 Powered by X-Space
还剩172页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

persevere

贡献于2013-10-29

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf