About eText Wizard

eTextWizard

目录：

一、关于eText Wizard（电子文档处理器）:

  1. 软件开发目的及软件用途
  2. 软件的主要功能
  3. 软件的安装及卸载
  4. 软件的注册
  5. 软件的下载地址

二、“国华软件工作室”的其他软件：

三、我的主页及联系方式：
一、关于eText Wizard: Top
1.软件开发目的及软件用途 Top
相信各位在上网一段时间后，硬盘里一定积攒了大量的电子文本，如：
技巧集锦、教程、技术文章、编程指南、小说、散文、传记等等，这些
精彩文件平时大量占用你的硬盘空间，一到用的时候，怎么也找不到；
读起来也很费力，一部《三国》你至少要打开一百二十个文件；而且
第二天也找不到昨天读到那里了，你说急人不急人！
   终于有一天想把他们作成帮助文件，但是，面对某个目录下的几千个
文本文件，才发现所谓的“所见即所得”的帮助文件制作软件竟然要
一个又一个地“手工重复劳作”........
  我曾经用Help&Manual手工作了一个包含两千多条Delphi技巧的帮助文件，
历时两三周终于完成，可是...手抽筋，眼发晕，食欲不振.......
  有时，真的希望有人把我想要的文本全处理好再放到网上，可是...
  面对网上成兆亿的文本难道只有手工处理吗？
  由此，萌发了我的软件开发方向：电子文档处理。
  “电子文档处理器”同时也是一个强大的HELP和CHM格式电子书批量制作工具。

“把繁重而又重复乏味的工作全部交给电脑去做吧！
    人的智慧在于告诉它应该怎么做！”
                                —xxx如是说。

2.软件的主要功能 Top

                功能
                 | 简介

                Txt->Help
                 | 文本文件转帮助文件，支持UNIX格式的TXT，自动添加标题、目录、索引。

                Txt->Html
                 | 文本文件转网页，自动处理URL&EMAIL

                Txt->Chm
                 | 文本文件转网页帮助文件，自动添加目录、索引、
                前页、后页等

                Html->Txt
                 | 网页文件转文本，转换完成比较干净彻底
                （可处理&nbsp;等），支持部分ASP文件。

                Html->Chm
                 | 网页文件转网页帮助文件，自动添加目录、索引。

                VBcode->Html
                 | VB源程序转为网页文件便于浏览。

                FileRenamer
                 | 批量文件改名，可预览结果，众多实用选项。

                Index Maker
                 | 对一个或多个目录下的所有或部分文件作索引，
                自动提取网页的<Title>作为标题，自动提取
                TXT第一行作为标题，多种输出格式。

                Dir Maker
                 | 批量目录建造。 *

                Title Editor
                 | 文本文件的标题编辑器及文件预览器。*

                Find&Replace
                 | 批量文件字符串查找替换器
                *

                Big5->GB

       注解：带*的项目尚未最终完成

3.软件的安装及卸载 Top

运行环境： MS win95;win98;win2000. win98以前的版本运行需要VB5.0
          的链接库文件MSVBVM50.DLL。

安装：

直接运行完全安装版即可（建议初次安装使用完全安装版）；
如果你以前安装过eTextWizard，直接下载新版本的主执行文件
eTextWizard.exe覆盖原来的即可。

卸载：

运行“控制面版”的“添加和删除程序”，找到“电子文档处理器”，
  选“卸载”，再依屏幕操作即可。

4.软件的注册 Top

本软件为“共享软件”，即“先试后买”的软件。

由于目前正处于测试阶段，故软件价格待定。

5.软件的下载地址:

本软件将会不定期更新版本，请留意！

http://www.ebook007.com/softdown.htm

二、“国华软件工作室”的其他软件： Top

TextVampire(网络即时贴) v1.0：Top
浏览文本或网页时，随时把你喜欢的文字很方便地存成.Txt文件。
你要做的只是选好文本，再按一下CTRL-C，这时，点击“网络即时贴”的
粘贴并生成文本文件”钮，TextVampire会自动截取所选文本的第一行（非空）
作为文件名保存起来，方便你将来收集整理、查找；同时也简化了你的击键次数。

http://www.ebook007.com/softdown.htm

三、我的主页及联系方式： Top

我的主要站点：

http://www.ebook007.com/
 (北极星书库)

http://go.163.com/~guohua99/(电子文档处理器)

镜像站点：

http://chmbook.363.net/

eMail:

fengguohua@hotmail.com

警告：Top

对重要文件请先作好备份，以免造成不必要的损失；
用户试用此软件的同时由用户个人承担试用此软件的一切风险，如用户不接受
此项要求请马上把本程序从你的硬盘删除； TXT转HELP结束后，程序会自动删除
已处理过的目录下的所有RTF文件，请在运行前
检查该目录下是否有重要的RTF文件，请作好备份。
请不要使用本软件制作非法电子出版物，否则一切后果由制作人自行承担，与本软件作者无关。
请不要修改本软件的版权信息（包括随软件发布的一切文档），否则作者将保留追究其法律责任的权利。
在不修改作者版权信息及保证软件完整性的前提下，任何个人或组织可随意发布或试用本软件的免费共享版，
但不得对本软件做任何逆向工程（指反汇编、反编译，公布注册码、散发正式版等）。
本文档中所指“程序”或“本程序”均指eTextWizard(中文名：电子文档处理器)。

注：MS,Windows Help(hcw.exe,hcrtf.exe),Html Help(hhw.exe,hhc.exe)的版权均归美国微软公司所有。

All Rights Reserved, Fengguohua of North Star, 2000-05-03

Top


北极星书库-Linux教程-www.ebook007.com

Linux 教程
File Name
第一课　什么是Linux
第二课　为什么使用Linux
第三课　Linux纵览
第四课　Linux的发展
第五课　Linux特性
第六课　Linux与其他操作系统的区别
第七课　TurboLinux简介
第八课　进入与退出系统
第九课　文件与目录操作
第十课　(10)Linux备份与压缩命令
第十课　(1)Linux文件和目录操作相关命令
第十课　(2)Linux文件内容查询命令
第十课　(3)Linux文本处理命令
第十课　(4)Linux文件内容统计命令
第十课　(5)Linux文件比较命令
第十课　(6)Linux文件的复制、删除和移动命令
第十课　(7)Linux文件链接命令
第十课　(8)Linux目录的创建与删除命令
第十课　(9)Linux改变文件或目录的访问权限命令
第十一课　Linux进程管理及作业控制
第十二课　Linux进程查看
第十三课　Linux进程调度
第十四课　Linux磁盘管理
第十五课 (1)Linux系统管理命令
第十五课 (2)Linux与用户有关的命令
第十五课 (3)Linux其它命令
Linux的冲击和操作系统的革命

北极星书库-http://www.ebook007.com


Get Update News

Update Link:
http://www.ebook007.com/softdown.htm

“电子文档处理器”会经常更新，请登陆“北极星书库”以得到最新版本。如有任何意见和建议也请给我发Email。

我的Email地址： fengguohua@hotmail.com。


Goto eTextWizard's Homepage

My Homepage:
http://www.ebook007.com/

“北极星书库”有海量的已经经过我的“电子文档处理器”处理过的Windows帮助文件或Windows HtmlHelp格式的小说、传记等作为电子书范本供大家参考。欢迎大家试用“电子文档处理器”--他不仅是一个强大的批量文本转换工具、文档制作工具，同时也是一款少见的具有强大功能的电子书批量制作工具，“北极星书库”的所有HELP和CHM格式电子书全部用“电子文档处理器”批量制作完成！！


北极星书库-第一课 什么是Linux

北极星书库
第一课　什么是Linux

第一课　什么是Linux
2000年5月30日 转载自

      简单地说，Linux是一套免费使用和自由传播的类Unix操作系统，它主要用于基于Intel x8 6系列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中获益。


北极星书库-第二课 为什么使用Linux -www.ebook007.com

第二课　为什么使用Linux

第二课　为什么使用Linux
2000年5月30日 转载自

      由于Linux是一套具有Unix全部功能的免费操作系统，它在众多的软件中占有很大的优势，为广大的计算机爱好者提供了学习、探索以及修改计算机操作系统内核的机会。

      操作系统是一台计算机必不可少的系统软件，是整个计算机系统的灵魂。一个操作系统是一个复杂的计算机程序集，它提供操作过程的协议或行为准则。没有操作系统，计算机就无法工作，就不能解释和执行用户输入的命令或运行简单的程序。大多数操作系统都是由一些主要的软件公司支持的商品化程序，用户只能有偿使用。如果用户购买了一个操作系统，他就必须满足供应商所要求的一切条件。因为操作系统是系统程序，用户不能擅自修改或试验操作系统的内核。这对于广大计算机爱好者来说无疑是一种束缚。

      要想发挥计算机的作用，仅有操作系统还不够，用户还必须要有各种应用程序的支持。应用程序是用于处理某些工作（如字处理）的软件包，通常它也只能有偿使用。每个应用程序的软件包都为特定的操作系统和机器编写。使用者无权修改这些应用程序。使用Linux，可以将操作系统变成一种操作环境。

      由于Linux是一套自由软件，用户可以无偿地得到它及其源代码，可以无偿地获得大量的应用程序，而且可以任意地修改和补充它们。这对用户学习、了解Unix操作系统的内核非常有益。 学习和使用Linux，能为用户节省一笔可观的资金。Linux是目前唯一可免费获得的、为PC机平台上的多个用户提供多任务、多进程功能的操作系统，这是人们要使用它的主要原因。就PC机平台而言，Linux提供了比其他任何操作系统都要强大的功能，Linux还可以使用户远离各种商品化软件提供者促销广告的诱惑，再也不用承受每过一段时间就升级之苦，因此，可以节省大量用于购买或升级应用程序的资金。

      Linux不仅为用户提供了强大的操作系统功能，而且还提供了丰富的应用软件。用户不但可以从Inte rnet上下载Linux及其源代码，而且还可以从Internet上下载许多Linux的应用程序。可以说，Lin ux本身包含的应用程序以及移植到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就能够完成一些工作任务


北极星书库-第三课 Linux纵览

第三课　Linux纵览

第三课　Linux纵览
2000年5月30日 转载自

    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表示了这种树形等级结构。用户可以浏览整个系统，可以进入任何一个已授权进入的目录，访问那里的文件。

    文件结构的相互关联性使共享数据变得容易，几个用户可以访问同一个文件。Linux是一个多用户系统，操作系统本身的驻留程序存放在以根目录开始的专用目录中，有时被指定为系统目录。图1.1中那些根目录下的目录就是系统目录。

    内核，Shell和文件结构一起形成了基本的操作系统结构。它们使得用户可以运行程序，管理文件以及使用系统。此外，Linux操作系统还有许多被称为实用工具的程序，辅助用户完成一些特定的任务。

    4. Linux实用工具

    标准的Linux系统都有一套叫做实用工具的程序,它们是专门的程序，例如编辑器、执行标准的计算操作等。用户也可以产生自己的工具。

    实用工具可分三类:

    编辑器：用于编辑文件。

    过滤器：用于接收数据并过滤数据。

    交互程序：允许用户发送信息或接收来自其他用户的信息。

    Linux的编辑器主要有：Ed、Ex、Vi和Emacs。Ed和Ex是行编辑器，Vi和Emacs是全屏幕编辑器。

    Linux的过滤器（Filter）读取从用户文件或其他地方的输入，检查和处理数据，然后输出结果。从这个意义上说，它们过滤了经过它们的数据。Linux有不同类型的过滤器，一些过滤器用行编辑命令输出一个被编辑的文件。另外一些过滤器是按模式寻找文件并以这种模式输出部分数据。还有一些执行字处理操作，检测一个文件中的格式，输出一个格式化的文件。 过滤器的输入可以是一个文件，也可以是用户从键盘键入的数据，还可以是另一个过滤器的输出。过滤器可以相互连接，因此，一个过滤器的输出可能是另一个过滤器的输入。在有些情况下，用户可以编写自己的过滤器程序。

    交互程序是用户与机器的信息接口。Linux是一个多用户系统，它必须和所有用户保持联系。信息可以由系统上的不同用户发送或接收。信息的发送有两种方式，一种方式是与其他用户一对一地链接进行对话，另一种是一个用户对多个用户同时链接进行通讯，即所谓广播式通讯。


北极星书库-第四课 Linux的发展

第四课　Linux的发展

第四课　Linux的发展
2000年5月30日 转载自

    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标准。


北极星书库-第五课 Linux特性

第五课　Linux特性

第五课　Linux特性
2000年5月30日 转载自

    Linux操作系统在短短的几年之内得到了非常迅猛的发展，这与Linux具有的良好特性是分不开的。Linux包含了Unix的全部功能和特性。简单的说，Linux具有以下主要特性：

    1 开放性

    开放性是指系统遵循世界标准规范，特别是遵循开放系统互连（OSI）国际标准。凡遵循国际标准所开发的硬件和软件，都能彼此兼容，可方便地实现互连。

    2 多用户

    多用户是指系统资源可以被不同用户各自拥有使用，即每个用户对自己的资源（例如：文件、设备）有特定的权限，互不影响。Linux和Unix都具有多用户的特性。

    3 多任务

    多任务是现代计算机的最主要的一个特点。它是指计算机同时执行多个程序，而且各个程序的运行互相独立。Linux系统调度每一个进程平等地访问微处理器。由于CPU的处理速度非常快，其结果是，启动的应用程序看起来好像在并行运行。事实上，从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟，用户是感觉不出来的。

    4 良好的用户界面

    Linux向用户提供了两种界面：用户界面和系统调用。Linux的传统用户界面是基于文本的命令行界面，即shell，它既可以联机使用，又可存在文件上脱机使用。shell有很强的程序设计能力，用户可方便地用它编制程序，从而为用户扩充系统功能提供了更高级的手段。可编程Shell是指将多条命令组合在一起，形成一个Shell程序，这个程序可以单独运行，也可以与其他程序同时运行。

    系统调用给用户提供编程时使用的界面。用户可以在编程时直接使用系统提供的系统调用命令。系统通过这个界面为用户程序提供低级、高效率的服务。

    Linux还为用户提供了图形用户界面。它利用鼠标、菜单、窗口、滚动条等设施，给用户呈现一个直观、易操作、交互性强的友好的图形化界面。

    5 设备独立性

    设备独立性是指操作系统把所有外部设备统一当作成文件来看待，只要安装它们的驱动程序，任何用户都可以象使用文件一样，操纵、使用这些设备，而不必知道它们的具体存在形式。

    具有设备独立性的操作系统，通过把每一个外围设备看作一个独立文件来简化增加新设备的工作。当需要增加新设备时、系统管理员就在内核中增加必要的连接。这种连接（也称作设备驱动程序）保证每次调用设备提供服务时，内核以相同的方式来处理它们。当新的及更好的外设被开发并交付给用户时，操作允许在这些设备连接到内核后，就能不受限制地立即访问它们。设备独立性的关键在于内核的适应能力。其他操作系统只允许一定数量或一定种类的外部设备连接。而设备独立性的操作系统能够容纳任意种类及任意数量的设备，因为每一个设备都是通过其与内核的专用连接独立进行访问。

    Linux是具有设备独立性的操作系统，它的内核具有高度适应能力，随着更多的程序员加入Linux编程，会有更多硬件设备加入到各种Linux内核和发行版本中。另外，由于用户可以免费得到Linux的内核源代码，因此，用户可以修改内核源代码，以便适应新增加的外部设备。

    6 供了丰富的网络功能

    完善的内置网络是Linux的一大特点。 Linux在通信和网络功能方面优于其他操作系统。其他操作系统不包含如此紧密地和内核结合在一起的连接网络的能力，也没有内置这些联网特性的灵活性。而Linux为用户提供了完善的、强大的网络功能。

    支持Internet是其网络功能之一。Linux免费提供了大量支持Internet的软件，Internet是在Unix领域中建立并繁荣起来的，在这方面使用Linux是相当方便的，用户能用Linux与世界上的其他人通过Internet网络进行通信。

    文件传输是其网络功能之二。用户能通过一些Linux命令完成内部信息或文件的传输。

    远程访问是其网络功能之三。Linux不仅允许进行文件和程序的传输，它还为系统管理员和技术人员提供了访问其他系统的窗口。通过这种远程访问的功能，一位技术人员能够有效地为多个系统服务，即使那些系统位于相距很远的地方。

    7 可靠的系统安全

    Linux采取了许多安全技术措施，包括对读、写进行权限控制、带保护的子系统、审计跟踪、核心授权等，这为网络多用户环境中的用户提供了必要的安全保障。

    8 良好的可移植性

    可移植性是指将操作系统从一个平台转移到另一个平台使它仍然能按其自身的方式运行的能力。

    Linux是一种可移植的操作系统，能够在从微型计算机到大型计算机的任何环境中和任何平台上运行。可移植性为运行Linux的不同计算机平台与其他任何机器进行准确而有效的通信提供了手段，不需要另外增加特殊的和昂贵的通信接口。


北极星书库-第六课 Linux与其他操作系统的区别

第六课　Linux与其他操作系统的区别

第六课　Linux与其他操作系统的区别
2000年5月30日 转载自

    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等操作系统是具有版权的产品，其接口和设计均由某一公司控制，而且只有这些公司才有权实现其设计，它们是在封闭的环境下发展的。


北极星书库-第七课 TurboLinux简介 -www.ebook007.com

第七课　TurboLinux简介

第七课　TurboLinux简介
2000年5月30日 转载自

    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　（编辑器）

             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获益

              开发者

              程序员

              系统管理员

              系统分析员

              管理人员

              最终用户


北极星书库-第八课 进入与退出系统 -www.ebook007.com

第八课　进入与退出系统

第八课　进入与退出系统
2000年5月30日 转载自

    TurboLinux是一个多用户的操作系统，用户要使用该系统，首先必须登录系统，使用完系统后，必须退出系统。本章主要讨论登录和退出系统的方法。

    用户登录系统时，为了使系统能够识别自己，必须输入用户名和密码，经系统验证无误后方能进入系统。在系统安装过程中可以创建两种帐号：

    1）root--超级用户帐号，使用这个帐号可以在系统中做任何事情。

    2）普通用户--这个帐号供普通用户使用，可以进行有限的操作。

    一般的Linux使用者均为普通用户，而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一些由普通帐号就能完成的任务，建议不要使用超级用户帐号，以免无意中破坏系统。

    用户登录分两步进行：第一步，输入用户的登录名，系统根据该登录名来识别用户；第二步，输入用户的口令，该口令是用户自己选择的一个字符串，对其他用户是保密的，是在登录时系统用来辨别真假用户的关键字

    。

    在Linux系统中，系统管理员在为用户建立新帐号时赋给用户一个用户名和一个初始的口令。另外，Linux系统给计算机赋予一个主机名。主机名用于在网络上识别独立的计算机（即使用户的计算机没有联网，也应该有一个主机名）。TurboLinux系统给出的缺省主机名为：localhost。在下面的例子中，我们假设用户名为"xxq"，系统的主机名为"localhost"。

    进入系统（登录）

    超级用户登录

    超级用户的用户名为root，密码在安装系统时已设定。系统启动成功后，屏幕显示下面的提示： 　　　 localhost login:

    这时输入超级用户名"root"，然后键入回车键。此时，用户会在屏幕上看到输入口令的提示：

    localhost login:root

    Password:

    这时，需要输入口令。输入口令时，口令不会在屏幕上显示出来。如果用户输入了错误的口令，就会在屏幕上看到下列信息：

    login incorrect.

    这时需要重新输入。 当用户正确地输入用户名和口令后，就能合法地进入系统。屏幕显示：

    [root@loclhost /root] #

    此时说明该用户已经登录到系统中，可以进行操作了。这里"#"是超级用户的系统提示符。 普通用户登录 建立了普通用户帐号以后，就可以进行登录了

    。

    在登录时，用户会在屏幕上看到类似下面的提示：

    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提示符下，键入下列命令即可。

    下面以普通用户的退出为例，说明退出系统的过程：

    [xxq@loclhost xxq] $ exit

    还有其他退出系统的方法，但上面一种是最安全的。


北极星书库-第九课 文件与目录操作 -www.ebook007.com

第九课　文件与目录操作

第九课　文件与目录操作
2000年5月30日 转载自

    用户的数据和程序大多以文件的形式保存。用户使用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设备的细节。设备文件可以细分为块设备文件和字符设备文件。前者的存取是以一个个字符块为单位的，后者则是以单个字符为单位的。

    目录

    树型目录结构

    在计算机系统中存有大量的文件，如何有效的组织与管理它们，并为用户提供一个使用方便的接口是文件系统的一大任务。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

    和下面的命令

    /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://www.ebook007.com


北极星书库-第十课 (2)Linux文件内容查询命令

第十课　(2)Linux文件内容查询命令

第十课　(2)Linux文件内容查询命令
2000年5月30日 转载自

    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 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时，不重复显示此文件名。

    - 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 起始目录 寻找条件 操作

    说明：find命令从指定的起始目录开始，递归地搜索其各个子目录，查找满足寻找条件的文件并对之采取相关的操作。

    该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为：

    （1）and：逻辑与，在命令中用“-a”表示，是系统缺省的选项，表示只有当所给的条件都满足时，寻找条件才算满足。例如：

    $ find –name ’tmp’ –xtype c -user ’inin’

    该命令寻找三个给定条件都满足的所有文件。

    （2）or：逻辑或，在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时，寻找条件就算满足。

    例如：

    $ find –name ’tmp’ –o –name ’mina*’

    该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。

    （3）not：逻辑非，在命令中用“！”表示。该运算符表示查找不满足所给条件的文件。

    例如：

    $ find ! –name ’tmp’

    该命令查询文件名不是’tmp’的所有文件。

    需要说明的是：当使用很多的逻辑选项时，可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解，在话号前需要加转义字符“\\”来去除括号的意义。

    例：$ find \\（–name ’tmp’ –xtype 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 ’字串’ 查找属于用户组名为所给字串的所有的文件。

    -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 详细列出所找到的所有文件。

    - 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 。


北极星书库-第十课 (3)Linux文本处理命令 -www.ebook007.com

第十课　(3)Linux文本处理命令

第十课　(3)Linux文本处理命令
2000年5月30日 转载自

    Sort命令

    sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项，这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上，sort命令可以被认为是一个非常强大的数据管理工具，用来管理内容类似数据库记录的文件。

    Sort命令将逐行对文件中的内容进行排序，如果两行的首字符相同，该命令将继续比较这两行的下一字符，如果还相同，将继续进行比较。

    语法：

    sort [选项] 文件

    说明：sort命令对指定文件中所有的行进行排序，并将结果显示在标准输出上。如不指定输入文件或使用“- ”，则表示排序内容来自标准输入。

    sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。

    改变缺省设置的选项主要有：

    - m 若给定文件已排好序，合并文件。

    - c 检查给定文件是否已排好序，如果它们没有都排好序，则打印一个出错信息，并以状态值1退出。

    - u 对排序后认为相同的行只留其中一行。

    - o 输出文件 将排序输出写到输出文件中而不是标准输出，如果输出文件是输入文件之一，sort先将该文件的内容写入一个临时文件，然后再排序和写输出结果。

    改变缺省排序规则的选项主要有：

    - d 按字典顺序排序，比较时仅字母、数字、空格和制表符有意义。

    - f 将小写字母与大写字母同等对待。

    - I 忽略非打印字符。

    - M 作为月份比较：“JAN”<“FEB”

    - r 按逆序输出排序结果。

    ＋posl - pos2 指定一个或几个字段作为排序关键字，字段位置从posl开始，到pos2为止（包括posl，不包括pos2）。如不指定pos2，则关键字为从posl到行尾。字段和字符的位置从0开始。

    - b 在每行中寻找排序关键字时忽略前导的空白（空格和制表符）。

    - t separator 指定字符separator作为字段分隔符。

    下面通过几个例子来讲述sort的使用。

    用sort命令对text文件中各行排序后输出其结果。请注意，在原文件的第二、三行上的第一个单词完全相同，该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。

    $ cat text

    vegetable soup

    fresh vegetables

    fresh fruit

    lowfat milk

    $ sort text

    fresh fruit

    fresh vegetables

    lowfat milk

    vegetable soup

    用户可以保存排序后的文件内容，或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。

    $ sort text>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命令也可以对标准输入进行操作。例如，如果您想把几个文件文本行合并，并对合并后的文本行进行排序，您可以首先用命令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


北极星书库-第十课 (4)Linux文件内容统计命令

第十课　(4)Linux文件内容统计命令

第十课　(4)Linux文件内容统计命令
2000年5月30日 转载自

    wc命令

    wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。

    语法：wc [选项] 文件…

    说明：该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名，则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。

    该命令各选项含义如下：

    - c 统计字节数。

    - l 统计行数。

    - w 统计字数。

    这些选项可以组合使用。

    输出列的顺序和数目不受选项的顺序和数目的影响。

    总是按下述顺序显示并且每项最多一列。

    行数、字数、字节数、文件名

    如果命令行中没有文件名，则输出中不出现文件名。

    例如：

    $ wc - lcw file1 file2

    4 33 file1

    7 52 file2

    11 11 85 total

    省略任选项-lcw，wc命令的执行结果与上面一样。


北极星书库-第十课 (5)Linux文件比较命令 -www.ebook007.com

第十课　(5)Linux文件比较命令

第十课　(5)Linux文件比较命令
2000年5月30日 转载自

    这组命令可以用来比较两个文件内容的差别。

    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< stdio.h >

    main（ ）

    {

    float i, j ,z ;

    i=10 ; j=5 ;

    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各选项的含义如下：

    - 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”）；

    }

    ＜5

    ＞3

    int n，m；

    ＞4 n＝10 ;

    ＞5 printf （ “ % d \\\\ n ” , m = n * 10）;

    ＞6 }

    表示把文件m1.c的3至5行改成m2.c的3至6行后，两个文件相同。


北极星书库-第十课 (6)Linux文件的复制、删除和移动命令

第十课　(6)Linux文件的复制、删除和移动命令

第十课　(6)Linux文件的复制、删除和移动命令
2000年5月30日 转载自

    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中。

    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将参数中列出的全部目录和子目录均递归地删除。

    - i 进行交互式删除。

    使用rm命令要格外小心。因为一旦一个文件被删除，它是不能被恢复的。例如，用户在输入cp，mv或其他命令时，不小心误输入了rm命令，当用户按了回车键并认识到自己的错误时，已经太晚了，文件已经没有了。为了防止此种情况的发生，可以使用rm命令中的 i选项来确认要删除的每个文件。如果用户输入y，文件将被删除。如果输入任何其他东西，文件将被保留。在下一个例子中，用户要删除文件test和example。然后会被要求对每个文件进行确认。用户最终决定删除example文件，保留test文件。

    $ rm - ii test example Remove test ?n

    Remove example ?y


北极星书库-第十课 (7)Linux文件链接命令 -www.ebook007.com

第十课　(7)Linux文件链接命令

第十课　(7)Linux文件链接命令
2000年5月30日 转载自

    ln命令

    该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名，我们可以为之指定不同的访问权限，以控制对信息的共享和安全性的问题。 如果链接指向目录，用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且，即使我们删除这个链接，也不会破坏原来的目录。

    语法：ln [选项] 目标 [链接名]

    ln [选项] 目标 目录

    链接有两种，一种被称为硬链接（Hard Link），另一种被称为符号链接（Symbolic Link）。建立硬链接时，链接文件和被链接文件必须位于同一个文件系统中，并且不能建立指向目录的硬链接。而对符号链接，则不存在这个问题。默认情况下，ln产生硬链接。

    在硬链接的情况下，参数中的“目标”被链接至[链接名]。如果[链接名]是一个目录名，系统将在该目录之下建立一个或多个与“目标”同名的链接文件，链接文件和被链接文件的内容完全相同。如果[链接名]为一个文件，用户将被告知该文件已存在且不进行链接。如果指定了多个“目标”参数，那么最后一个参数必须为目录。

    如果给ln命令加上- s选项，则建立符号链接。如果[链接名]已经存在但不是目录，将不做链接。[链接名]可以是任何一个文件名（可包含路径），也可以是一个目录，并且允许它与“目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录，系统将在该目录下建立一个或多个与“目标”同名的文件，此新建的文件实际上是指向原“目标”的符号链接文件。

    例：$ ln - s lunch /home/xu

    用户为当前目录下的文件lunch创建了一个符号链接/home/xu。


北极星书库-第十课 (8)Linux目录的创建与删除命令

第十课　(8)Linux目录的创建与删除命令

第十课　(8)Linux目录的创建与删除命令
2000年5月30日 转载自

    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目录删除。

    改变工作目录、显示目录内容命令

    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 显示指定目录下所有子目录与文件，包括隐藏文件。

    - 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 按行显示出各排序项的信息。

    用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 –F /home/xu Mai1/

    map1e/ mm/ ptr/ telnetd*

    fd/ mbox mount sobsrc. tgz tmp/

    例3：列出某个目录下所有的文件（包括隐藏文件）。

    $ 1s -aF /home/xu

    ./ . .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 30l763

    drwxr----- 2 505 100 l024 　May 17 06:36 .e1m/ ……


北极星书库-第十课 (9)Linux改变文件或目录的访问权限命令

第十课　(9)Linux改变文件或目录的访问权限命令

第十课　(9)Linux改变文件或目录的访问权限命令
2000年5月30日 转载自

    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命令是非常重要的，用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。

    该命令有两种用法。一种是包含字母和操作符表达式的文字设定法；另一种是包含数字的数字设定法。

    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. 数字设定法

    我们必须首先了解用数字表示的属性的含义：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 – l a.out命令来看）：

    –rws--x--x 1 inin users 7192 Nov 4 14:22 a.out

    并且这个执行文件要用到一个文本文件shiyan1.c，其文件存取权限为“–rw-------”，即该文件只有其属主具有读写权限。

    当其他用户执行a.out这个程序时，他的身份因这个程序暂时变成inin（由于chmod命令中使用了s选项），所以他就能够读取shiyan1.c这个文件（虽然这个文件被设定为其他人不具备任何权限），这就是s的功能。

    因此，在整个系统中特别是root本身，最好不要过多的设置这种类型的文件（除非必要）这样可以保障系统的安全，避免因为某些程序的bug而使系统遭到入侵。

    例4：$ chmod a–x mm.txt

    $ chmod –x mm.txt

    $ chmod ugo–x mm.txt

    以上这三个命令都是将文件mm.txt的执行权限删除，它设定的对象为所有使用者。

    （2）数字设定法：

    例1： $ chmod 644 mm.txt

    $ ls –l

    即设定文件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 –l

    -rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt

    即设定wchtxt这个文件的属性为：

    文件主本人（u）inin 可读/可写/可执行权

    与文件主同组人（g） 可读/可执行权

    其他人（o） 没有任何权限

    chgrp命令

    功能：改变文件或目录所属的组。

    语法：chgrp [选项] group filename?

    该命令改变指定指定文件所属的用户组。其中group可以是用户组ID，也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表，支持通配符。如果用户不是该文件的属主或超级用户，则不能改变该文件的组。

    该命令的各选项含义为：

    - 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


北极星书库-第十课 (10)Linux备份与压缩命令

第十课　(10)Linux备份与压缩命令

第十课　(10)Linux备份与压缩命令
2000年5月30日 转载自

    用户经常需要备份计算机系统中的数据，为了节省存储空间，常常将备份文件进行压缩。下面分别介绍备份与压缩的命令。

    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 每一步都要求确认。

    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 将输出写到标准输出上，并保留原有文件。

    -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 *

    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命令不覆盖原先的文件。

    $ unzip -n text.zip -d /tmp

    例3：查看压缩文件目录，但不解压。

    $ unzip -v text.zip

    zgrep命令

    这个命令的功能是在压缩文件中寻找匹配的正则表达式，用法和grep命令一样，只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话，便可用zgrep命令。

    第十课(十一)　　在Linux环境下运行DOS命令　 　 2000年/3月20日

    Linux系统提供了一组称为mtools的可移植工具，可以让用户轻松地从标准的DOS软盘上读、写文件和目录。它们对DOS和Linux环境之间交换文件非常有用。它们是不具备共同的文件系统格式的系统之间交换文件的有力手段。对于一个MS-DOS的软盘，只要把软盘放在软驱中，就可以利用mtools提供的命令来访问软盘上的文件。

    mtools的主要命令如下：

    mcd 目录名 改变MSDOS目录；

    mcopy 源文件 目标文件 在MSDOS和Unix之间复制文件；

    mdel 文件名 删除MSDOS文件；

    mdir 目录名 显示MSDOS目录；

    mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统；

    rnlabel 驱动器号 产生MSDOS卷标；

    mmd 目录名 建立MSDOS目录；

    mrd 目录名 删除MSDOS目录；

    mren 源文件 目标文件 重新命名已存在的MSDOS文件；

    mtype 文件名 显示MSDOS文件的内容。

    这些命令和对应的不加 m的 MSDOS命令非常相似。

    例1：在Linux环境下看DOS盘最上层的目录的内容：

    $ mdir a:

    Volume in drive A has no label

    Volume Serial Number is 15F6-3362

    Directory of A:\

    SS6 CPP 331 09-24-99 7:41 ss6.cpp

    CH9

11-20-99 16:22 ch9

    XXQ 0 11-20-99 16:24 xxq

    95CZXTA DOC 36,864 06-15-98 22:51 95czxta.doc

    95CZXTB DOC 39,936 06-16-98 7:18 95czxtb.doc

    HTCA DOC 27,136 01-08-99 0:13 htca.doc

    HTCB DOC 27,136 01-08-99 0:12 htcb.doc

    6 file（s） 131,403 bytes

    1 dir（s） 1,295,872 bytes free

    例2：将DOS盘上的文件xxq复制到当前目录下，并用ls命令进行验证。

    $ mcopy a:\htca.doc

    $ ls –l htca.doc

    -rw-r— -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.doc

    思　考　题

    1. 如何找到用户主目录的绝对路径名？在自己的系统上，用户主目录的绝对路径名是什么？

    2. 将当前工作目录从/home/xxq转到/home/wang需要使用什么命令？

    3. 如何显示当前目录？

    4. 如何在当前目录下建立子目录text？

    5. 如何删除子目录text？

    6. 如何查看当前目录下的内容？

    7. 如何将文件text的权限设定为：text属主可读、可写、可执行，同组用户可读、可执行，其他用户可执行？

    8. 如何将当前目录包括所有子目录全部做备份文件，备份文件名为first.tar？

    9. 如何将目录/home下每一个文件压缩成.gz文件？

    10. 如何把上例中每个压缩的文件解压，并列出详细的信息？

    11. 如何将当前目录下的text文件拷贝到DOS软盘上，并用什么命令可以进行验证？

    12. 如何将DOS盘上的example文件复制到当前目录下，并用什么命令可以进行验证？

    13. 假设你以普通用户身份访问系统，显示文件系统中所有文件名为core的文件清单。

    14. TurboLiunx系统提供了哪些有关文件显示的命令，它们从功能上来说有何区别？

    15. 如何将目录/home/xxq下的文件text复制到目录/home/wang下，并将文件名重新命名为example，最后将目录/home/xxq下的文件text删除。


北极星书库-第十一课 Linux进程管理及作业控制

第十一课　Linux进程管理及作业控制

第十一课　Linux进程管理及作业控制
2000年5月30日 转载自

    Linux是一个多任务的操作系统，系统上同时运行着多个进程，正在执行的一个或多个相关进程称为一个作业。使用作业控制，用户可以同时运行多个作业，并在需要时在作业之间进行切换。本章详细介绍进程管理及作业控制的命令，包括启动进程、查看进程、调度作业的命令。

    进程及作业的概念

    Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统；多任务是指Linux可以同时执行几个任务，它可以在还未执行完一个任务时又执行另一项任务。 操作系统管理多个用户的请求和多个任务。

    大多数系统都只有一个CPU和一个主存，但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源，当您提出一个请求时，给您造成一种假象，好象系统只被您独自占用。而实际上操作系统监控着一个等待执行的任务队列，这些任务包括用户作业、操作系统任务、邮件和打印作业等。操作系统根据每个任务的优先级为每个任务分配合适的时间片，每个时间片大约都有零点几秒，虽然看起来很短，但实际上已经足够计算机完成成千上万的指令集。每个任务都会被系统运行一段时间，然后挂起，系统转而处理其他任务；过一段时间以后再回来处理这个任务，直到某个任务完成，从任务队列中去除。

    Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程，都可以称之为进程。Linux用分时管理方法使所有的任务共同分享系统资源。我们讨论进程的时候，不会去关心这些进程究竟是如何分配的，或者是内核如何管理分配时间片的，我们所关心的是如何去控制这些进程，让它们能够很好地为用户服务。

    进程的一个比较正式的定义是：在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的，进程不是程序，虽然它由程序产生。程序只是一个静态的指令集合，不占系统的运行资源；而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。

    Linux操作系统包括三种不同类型的进程，每种进程都有自己的特点和属性。

    交互进程——由一个shell启动的进程。交互进程既可以在前台运行，也可以在后台运行。

    批处理进程——这种进程和终端没有联系，是一个进程序列。

    监控进程（也称守护进程）——Linux系统启动时启动的进程，并在后台运行。

    上述三种进程各有各的作用，使用场合也有所不同。

    进程和作业的概念也有区别。一个正在执行的进程称为一个作业，而且作业可以包含一个或多个进程，尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。

    作业控制指的是控制正在运行的进程的行为。比如，用户可以挂起一个进程，等一会儿再继续执行该进程。shell将记录所有启动的进程情况，在每个进程过程中，用户可以任意地挂起进程或重新启动进程。作业控制是许多shell（包括bash和tcsh）的一个特性，使用户能在多个独立作业间进行切换。

    一般而言，进程与作业控制相关联时，才被称为作业。

    在大多数情况下，用户在同一时间只运行一个作业，即它们最后向shell键入的命令。但是使用作业控制，用户可以同时运行多个作业，并在需要时在这些作业间进行切换。这会有什么用途呢？例如，当用户编辑一个文本文件，并需要中止编辑做其他事情时，利用作业控制，用户可以让编辑器暂时挂起，返回shell提示符开始做其他的事情。其他事情做完以后，用户可以重新启动挂起的编辑器，返回到刚才中止的地方，就象用户从来没有离开编辑器一样。这只是一个例子，作业控制还有许多其他实际的用途。

    启动进程

    键入需要运行的程序的程序名，执行一个程序，其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号，用于系统识别和调度进程。启动一个进程有两个主要途径：手工启动和调度启动，后者是事先进行设置，根据用户要求自行启动。

    手工启动

    由用户输入命令，直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种，根据启动的进程类型不同、性质不同，实际结果也不一样，下面分别介绍。

    1. 前台启动

    这或许是手工启动一个进程的最常用的方式。一般地，用户键入一个命令“ls –l”，这就已经启动了一个进程，而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。或许有些用户会疑惑：我只启动了一个进程而已。但实际上有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。还有的用户在键入“ls –l”命令以后赶紧使用“ps –x”查看，却没有看到ls进程，也觉得很奇怪。其实这是因为ls这个进程结束太快，使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程:

    find / -name fox.jpg

    然后再把该进程挂起，使用ps查看，就会看到一个find进程在里面。

    2. 后台启动

    直接从后台手工启动一个进程用得比较少一些，除非是该进程甚为耗时，且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态，从后台启动这个进程是明智的选择。

    [例1]

    $ troff –me notes > note_form &

    [1] 4513

    $

    由上例可见，从后台启动进程其实就是在命令结尾加上一个&号。键入命令以后，出现一个数字，这个数字就是该进程的编号，也称为PID，然后就出现了提示符。用户可以继续其他工作。

    上面介绍了前、后台启动的两种情况。实际上这两种启动方式有个共同的特点，就是新进程都是由当前shell这个进程产生的。也就是说，是shell创建了新进程，于是就称这种关系为进程间的父子关系。这里shell是父进程，而新进程是子进程。一个父进程可以有多个子进程，一般地，子进程结束后才能继续父进程；当然如果是从后台启动，那就不用等待子进程结束了。

    一种比较特殊的情况是在使用管道符的时候。例如：

    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

    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命令的用户。

    -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.

    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文件，如果没有就转入“休眠”状态，释放系统资源。所以该后台进程占用资源极少。它每分钟“醒”过来一次，查看当前是否有需要运行的命令。命令执行结束后，任何输出都将作为邮件发送给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所指的文件，如果使用“-”符号作为文件名，那就意味着使用标准输入作为安装来源。

    -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

    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>> m.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

    40 7 * * * updatedb

    8,10,22,30,39,46,54,58 * * * * /bin/sync

    进程的挂起及恢复命令bg、fg

    作业控制允许将进程挂起并可以在需要时恢复进程的运行，被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按，即可挂起当前的前台作业。

    [例15]

    $ cat >

    < ctrl+z>

    text.file [1] + stopped cat > text.file

    $ jobs [1]+ stopped cat >text.file

    在键盘上按后，将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单，包括具体的作业、作业号以及作业当前所处的状态。

    恢复进程执行时，有两种选择：用fg命令将挂起的作业放回到前台执行；用bg命令将挂起的作业放到后台执行。

    [例16]

    用户正在使用Emacs，突然需要查看系统进程情况。就首先使用组合键将Emacs进程挂起，然后使用bg命令将其在后台启动，这样就得到了前台的操作控制权，接着键入“ps –x”查看进程情况。查看完毕后，使用fg命令将Emacs带回前台运行即可。其命令格式为：

    < ctrl+z>

    $ bg emacs

    $ ps –x

    $ fg emacs

    默认情况下，fg和bg命令对最近停止的作业进行操作。如果希望恢复其他作业的运行，可以在命令中指定要恢复作业的作业号来恢复该作业。例如：

    $ fg 1

    cat > text.file

    灵活使用上述命令，将给自己带来很大的方便。


北极星书库-第十二课 Linux进程查看 -www.ebook007.com

第十二课　Linux进程查看

第十二课　Linux进程查看
2000年5月30日 转载自

    本节中要介绍的不只是进程查看方面的内容，由于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 在登录时间后面显示该用户最后一次对系统进行操作至今的时间，也就是常说的“发呆”时间。

    -H，--heading 显示一行列标题。常用的标题如表4-2所示。

    表4-2who命令输出常用标题

    标 题

    说 明

    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）

    可以看到，现在系统一共有四个用户。第一列是登录用户的帐号；第二列是登录所使用的终端；第三列是登录时间；第四列是用户从什么地方登录的网络地址，这里是域名。

    一般来说，这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观，因为没有标题说明，不容易看懂，这时就需要使用-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 不显示标题。

    -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 不显示标题。

    -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

    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

    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

    可以看到，显示的项目共分为四项，依次为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

    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命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

    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。

    %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配置文件的推荐方法。

    从上面的介绍中可以看到，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

    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相仿的各进程情况列表了。


北极星书库-第十三课 Linux进程调度 -www.ebook007.com

第十三课　Linux进程调度

第十三课　Linux进程调度
2000年5月30日 转载自

    kill命令

    当需要中断一个前台进程的时候，通常是使用< Ctrl+c >组合键；但是对于一个后台进程恐怕就不是一个组合键所能解决的了，这时就必须求助于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

    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文件中。若将输出重定向，则只有错误信息放在nohup.out文件中。

    renice命令

    renice命令允许用户修改一个正在运行进程的优先权。 利用renice命令可以在命令执行时调整其优先权。其格式如下：

    $ renice -number PID

    其中，参数number与nice命令的number意义相同。

    注：

    （1） 用户只能对自己所有的进程使用renice命令。

    （2） root用户可以在任何进程上使用renice命令。

    （3） 只有root用户才能提高进程的优先权。

    思　考　题

    1. 什么是进程？进程与作业有何区别？

    2. 进程启动的方式有哪几种？

    3. at命令与batch命令有何本质区别？

    4. cron命令在何时执行？如何改变其执行状态？

    5. 何谓前台作业、后台作业？如何挂起当前的前台作业？如果要恢复其运行又如何做？

    6. 进程的查看命令有哪些？各有什么不同？

    7. 如何中断一个后台进程？

    8. 如何在用户退出Linux系统时，使一个进程仍然能继续执行？

    9. 如何修改一个作业的优先权？

    10. 编写和检验完成下列各项功能的命令管道行：

    （1）显示当前系统中的登录名的数目。

    （2）显示当前系统中有多少个进程。

    11. 说明下列管道行分别完成什么功能：

    （1）df -a | wc -l

    （2）who | wc -


北极星书库-第十四课 Linux磁盘管理 -www.ebook007.com

第十四课　Linux磁盘管理

第十四课　Linux磁盘管理
2000年5月30日 转载自

    第十四课　磁盘管理

    在Liunx系统中，如何有效地对存储空间加以使用和管理，是一项非常重要的技术。本章讲述如何查看系统中存储空间的使用情况、如何进行文件的转储、以及如何进行软盘的格式化。

    磁盘空间管理

    系统软件和应用软件，都要以文件的形式存储在计算机的磁盘空间中。因此，应该随时监视磁盘空间的使用情况。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% 列表示普通用户空间使用的百分比，即使这一数字达到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 跳过在不同文件系统上的目录不予统计。

    下面举例说明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 –s /mnt

    /mnt

    例3：列出所有文件和目录所占的空间（使用a选项），而且以字节为单位（使用b选项）来计算大小。

    $ du -ab

    8 ./dev/cdrom

    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 把字母由小写转换为大写。

    conv = lcase 把字母由大写转换为小写。

    conv = notrunc 不截短输出文件。

    conv = swab 交换每一对输入字节。

    conv = noerror 出错时不停止处理。

    conv = sync 把每个输入记录的大小都调到ibs的大小（用NUL填充）。

    例1：要把一张软盘的内容拷贝到另一张软盘上，利用/tmp作为临时存储区。把源盘插入驱动器中，输入下述命令：

    $ dd if =/dev/fd0 of = /tmp/tmpfile

    拷贝完成后，将源盘从驱动器中取出，把目标盘插入，输入命令：

    $ dd if = /tmp/tmpfile of =/dev/fd0

    软盘拷贝完成后，应该将临时文件删除：

    $ rm /tmp/tmpfile

    例2：把net.i这个文件写入软盘中，并设定读/写缓冲区的数目。 （注意：软盘中的内容会被完全覆盖掉）

    $ dd if = net.i of = /dev/fd0 bs = 16384

    例3：将文件sfile拷贝到文件 dfile中。

    $ dd if=sfile of=dfile

    fdformat 命令

    软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作，然后可以用tar、dd、cpio等命令存储数据，也可以在软盘上建立可安装的文件系统。

    功能：低级格式化软盘

    语法：format [-n] device

    说明：该命令的作用是对软盘进行格式化。

    -n 软盘格式化后不作检验。

    device 指定要进行格式化的设备，通常是下述设备之一：

    /dev/fd0d360

    /dev/fd0h1200

    /dev/fd0D360

    /dev/fd0H360

    /dev/fd0D720

    /dev/fd0H720

    /dev/fd0h360

    /dev/fd0h720

    /dev/fd0H1440

    思　考　题

    1. 显示出你的系统磁盘空间使用情况。

    2. 显示出你的当前目录下所有文件所占的空间。

    3. 请格式化一张软盘，并把text这个文件写入软盘中。


北极星书库-第十五课 (1)Linux系统管理命令 -www.ebook007.com

第十五课 (1)Linux系统管理命令

第十五课 (1)Linux系统管理命令
2000年5月30日 转载自

    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

    此时系统进入发送信息状态，用户可以输入要发送的信息，输入完毕，希望退出发送状态时，按组合键< Ctrl+c>即可。

    上述命令执行的结果是，用户xxq的屏幕上会显示：

    message from test@test.tlc.com.cn tty1 at 15:51…

    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 [选项] [时间] [警告信息] 命令中各选项的含义为：

    - k 并不真正关机，而只是发出警告信息给所有用户。

    - r 关机后立即重新启动。

    - h 关机后不重新启动。

    - f 快速关机，重启动时跳过fsck。

    - n 快速关机，不经过init程序。

    - c 取消一个已经运行的shutdown。

    需要特别说明的是，该命令只能由超级用户使用。

    例1：系统在十分钟后关机，并且马上重新启动。

    # shutdown – r +10

    例2：系统马上关机，并且不重新启动。

    # shutdown – 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命令

    uptime命令显示系统已经运行了多长时间，它依次显示下列信息：现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

    该命令的一般格式为： uptime

    例：

    # uptime

    4:43pm up 1 day, 5:51, 2 user, load average: 0.01, 0.01, 0.00


北极星书库-第十五课 (2)Linux与用户有关的命令

第十五课 (2)Linux与用户有关的命令

第十五课 (2)Linux与用户有关的命令
2000年5月30日 转载自

    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命令

    这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限，也可以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。如要离开当前用户的身份，可以打exit。

    该命令的一般形式为： su [选项] [? ] [使用者帐号]

    说明：若没有指定使用者帐号，则系统预设值为超级用户root。 该命令中各选项的含义分别为：

    ? c 执行一个命令后就结束。

    ? 加了这个减号的目的是使环境变量和欲转换的用户相同。

    ? m 保留环境变量不变。

    例1： 变成root用户

    $ su ?

    password: 【输入超级用户的密码】

    例2： 变成xu使用者，并执行一个命令就结束。

    $ su -xu ? c “rmdir cat1”


北极星书库-第十五课 (3)Linux其它命令 -www.ebook007.com

第十五课 (3)Linux其它命令

第十五课 (3)Linux其它命令
2000年5月30日 转载自

    其他命令

    echo命令

    echo命令的功能是在显示器上显示一段文字，一般起到一个提示的作用。

    该命令的一般格式为： echo [ -n ] 字符串

    其中选项n表示输出文字后不换行；字符串可以加引号，也可以不加引号。用echo命令输出加引号的字符串时，将字符串原样输出；用echo命令输出不加引号的字符串时，将字符串中的各个单词作为字符串输出，各字符串之间用一个空格分割。

    例1：

    $ echo ‘Thank you !’

    Thank you !

    例2：

    $ echo Thank you !

    Thank you !

    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 – 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命令

    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）

    % 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

    思　考　题

    1. 验证新用户wch是否已注册成功，并修改该用户的口令。

    2. 如果希望系统在五分钟后关机，并马上重新启动，应该如何操作？

    3. 如果你是以普通用户身份访问系统，是否可以查看当前系统内存的使用情况？如果可以，如何查看？

    4. 如何显示当前系统的时间？

    5. 如何将系统时间设置为1999年12月25日上午10点16分？

    6. 请显示2000年1月的日历，在显示之前请先清屏


北极星书库-Linux的冲击和操作系统的革命 -www.ebook007.com

Linux的冲击和操作系统的革命

Linux的冲击和操作系统的革命
2000年5月30日 转载自

    今天，自由软件Linux正越来越显示出其咄咄逼人的气势。在传统由微软的Windows NT、Novell的Netware和UNIX占据的网络操作系统市场上，Linux正日益成为一个令人生畏的对手。据估计现在全球已有800万Linux用户，有29%的互联网服务器采用了Linux系统，这一数字超过微软Windows NT 6个百分点。在1998年Linux的增幅达212%，权威机构预计，未来五年内，Linux将保持25%的年均增长率，超过其他操作系统增长的总和。

    所有这一切都说明，Linux已摆脱了其最初仅限于Linux爱好者和研究机构使用的业余软件的身份，更多地受到企业用户的重视。这一方面得益于其开放源码的措施，通过Internet上成千上万爱好者和开发者的不懈努力，Linux比以往任何时候都更健壮、更稳定、更可靠。另一方面，则得益于众多像RedHat这样的商业软件公司积极进入Linux产品化及服务领域，这大大地加快了Linux的商品化步伐，企业用户可以更放心、更有保障地布置他们的Linux系统。随着以IBM、Intel、Oracle、CA、网景为代表的众多IT巨头们纷纷宣布支持Linux，那些曾经对Linux不屑一顾的著名软件公司的老板们不得不回过头来重新审视这个由Internet上的一群业余选手开发出来的操作系统。

    Linux到底有什么过人之处？

    Linux是一个遵循POSIX标准的免费的多任务、多用户操作系统，具有BSD和SYS V的扩展特性。其在外表和性能上同常见的UNIX非常相像，但是所有系统核心代码已经全部被重新编写了。Linux继承了UNIX不少优点，但是也具有自身的一些独特的特点，下面简要予以介绍。

    多平台。虽然Linux主要在x86平台上运行，但是目前已经移植到下列平台：Alpha、Sparc。RedHat公司已经推出了这两个平台的发行套件。Linux对其他硬件平台的移植也在进行之中。

    对x86平台支持多种CPU，包括：Intel/AMD/Cyrix的386/486/Pentium系列；Pentium II；K6/M2/Cyrix 6x86等。

    对应用程序使用的内存进行保护。在 Linux下应用软件无法访问系统分配的内存以外的内存区域。这样，一个软件的错误操作不会造成整个系统的瘫痪，在Windows 95下经常出现的一个软件把整个系统锁死的情况在Linux下是非常罕见的。

    "按需取盘”。在Linux下任何一个执行文件在执行时，只有那些确实被用到的代码段才会被系统读取到内存中，这样节约了大量的读取磁盘时间，自然也就加快程序执行速度。并且这是在操作系统级实现的，而不像DOS下是要靠应用程序smartdrive来管理，性能的差别是很大的。

    共享内存页面。在Linux下，多个进程可以使用同一块内存页面（每片大小为4K），只有在某一个进程试图对这块页面执行写操作时，Linux才把这块页面为该进程复制到内存的另一块区域（copy-on-write），这样做的好处是不仅加快了程序运行的时间，还节约了宝贵的物理内存。

    优秀的磁盘缓冲调度功能。Linux最突出的一个优点就是它的磁盘I/O速度，因为它将系统没有用到的剩余物理内存全部用来作硬盘的高速缓冲，当有对内存要求比较大的应用程序运行时，它将会自动地将这部分的内存释放出来给应用程序使用。同DOS/Windows下的smartdrv只能呆板使用固定大小的缓冲区相比要先进得多。

    动态链接共享库。同Windows 95的DLL一样，Linux也使用动态链接共享库（同时当然也提供静态链接库）。这个特性可以大大减小Linux应用程序的大小，并且被很多程序同时调用的一段代码只被加载一次，由众多程序共享。

    支持的硬件多。Linux支持的硬件相当广泛，从硬盘驱动器、软盘驱动器、主板、显示卡，到SCSI卡、声卡、磁带机、光驱/光盘刻录机、网卡、ZIP/MO驱动器、video设备等等。

    支持多种文件系统。Linux支持的文件系统的种类包括minix，ext，ext2，xiafs，hpfs，fat，msdos，umsdos，vfat，proc，nfs，iso9660，smbfs，ncpfs，affs，ufs，romfs，sysv，xenix，cohernet，Linux可以将这些文件系统直接装载（mount）为系统的一个目录。Linux自己的文件系统ext2fs是非常先进的，最多可以支持到2T的硬盘，文件名长度的限制为255个字符。同时在DOS和Windows 95/NT下也都有工具来直接读取Linux文件系统上的文件。同时Linux还支持以只读方式打开HPFS-2格式的OS/2 2.1的文件系统和HFS格式的Macintosh文件系统。

    强大的网络功能。支持所有常见的网络服务，包括ftp、telnet、NFS等。Linux在最新发展的核心中包含的基本协议有TCP、IPv4、IPv6、AX.25、X.25、IPX、DDP(Appletalk)、NetBEUI、Netrom等。稳定的核心中目前包含的网络协议有TCP、IPv4、IPX、DDP、AX等协议。另外还提供Netware的客户机和服务器，以及现在最热门的Samba（让用户共享Mircosoft Network资源）。Linux还包括Appletalk服务器。

    其他的特点还包括：支持POSIX的任务控制；软件移植性好；与其他UNIX系统有良好的兼容性等。

    Linux的版本

    任何一个软件都有版本号，Linux也不例外。Linux的版本号又分为两部分：内核（kernel）与发行套件(distribution)版本。发行套件最常见的有Slackware、RedHat、Debian、S.u.s.E.等。值得高兴的是不久前已有两套中文Linux套件——Xteam Linux和TurboLinux在国内正式发行，受到国内广大爱好者的热烈欢迎，其极高的性能价格比对国内操作系统市场是否会造成冲击现在还是个未知数。

    Walnut Creek Slackware

    网址：http://www.cdrom.com/titles/os/slack96.htm

    FTP：ftp://ftp.cdrom.com/pub/linux/slackware

    Slackware Linux是最早出现的Linux发行套件之一，其特点是安装简单，目录结构清楚，版本更新快，在1997年一年就推出了好几个版本。其缺点是软件种类不如RedHat和Debian多，并且其安装不如RedHat快速、简洁、直观。Slackware只提供字符方式的安装界面，并且需要用户自己去寻找针对不同硬件的启动盘。其升级方式也不如RedHat和Debian简单，同RPM和DEB相比，Slackware只有一个相对简陋的pkgtool，经常会出现卸载软件后其他软件使用不了的故障。

    RedHat Linux

    网址：http://www.redhat.com

    FTP：ftp://ftp.redhat.com

    RedHat Linux是由RedHat公司发行的目前应用最广泛的Linux套件。从4.0版起便同时支持Intel、Alpha、Sparc三种硬件平台。其所有的软件包都是以RPM（Redhat Package Manager）方式包装的，用户可以轻松地进行软件升级，彻底卸除应用软件和系统部件。RedHat提供一套X Window下的系统管理软件，让用户可以在图形方式下进行增加/删除用户、改变系统设置、安装新软件、安装打印机等系统管理方面的工作，非常直观和方便。RedHat收集的软件包非常完整和精美，不仅包括大量的GNU和自由软件，还包括了一些优秀的ShareWare软件。

    Debian Linux

    网址：http://www.debian.org/

    FTP：ftp://ftp.debian.org/debian/

    由GNU发行的Linux发行套件，完全由网络上的Linux爱好者负责维护，其所有的组成部分都是自由软件。Debian Linux的特点是软件极其丰富，升级容易，软件之间的关联性强，开放式的开发环境。Debian是一个动态的Linux发行套件。它每三个月发布一个“Snapshop”版本，其ftp服务器是每天更新的。

    S.u.S.E. Linux

    网址：http://www.suse.de

    S.u.S.E. 是一个德国系统，是在欧洲大陆上使用最广泛的Linux套件，其特点是易于安装使用，并且包含有一些其它发行套件不具有的一些软件，例如S.u.S.E. Xserver，比Xfree86支持更多显示卡，例如最新的SIS、MedoaGX、NeoMagic、SaX，并且S.u.S.E.是采用新软件最多的一种发行套件，例如他们的窗口管理器就是最新的KDE 1.0，另外在标准的S.u.S.E. 5CD的版本中还包括850个最新的软件，随CD还有400页的使用说明书。

    TurboLinux 中文版

    网址：http://www.turbolinux.com.cn

    FTP：ftp://turbolinux.com.cn/pub/turbolinux

    TurboLinux 3.0.2中文版是由北京拓林思软件公司汉化并发行的中文Linux套件。使用 2.0.36版的核心，利用ZWinPro外挂式中文平台，给Linux用户提供一个从安装到使用的完整中文环境。实现了在Linux系统下的中文多内码显示、输入、打印的全面解决。包括大量系统管理软件，网络分析软件，网络安全软件和极其完善的开发环境，提供C++、Java、Perl、Tcl/Tk、Python、Fortran77 等语言的编译器/解释器。大量的最新集成开发环境，调试器和其他开发工具。

    另外TurboLinux集群服务器是目前Linux上较少采用Cluster集群技术的企业级产品。是一种性能超群，极其可靠，扩充性好的解决方案。

    Xteam Linux

    网址：http://www.xteamlinux.com.cn/

    FTP：ftp://ftp.xteamlinux.com.cn/pub/current

    Xteam Linux是由北京冲浪平台软件公司在充分考虑了国内Linux用户的需求后，开发并发行的一套中文Linux套件。采用最新核心，提供了一套智能化的图形安装环境和智能安装助手，使用户可以体验到象安装Windows一样的轻松和方便。

    由于采用了最新内核，因此它具有以下优点：支持多种非Intel处理器；对多处理器的支持更好，系统运行效率有很大提高；支持更多的应用程序；提高了自动识别硬件的能力；提供了软件模拟的磁盘冗余阵列，可以把多个硬盘当做一个大硬盘来用；提高了对硬盘资源的使用效率。

    Xteam Linux采用了以内核汉化为主、外挂平台为辅的方式。采用了最新的KDE版本作为标准的中文图形用户界面。根据国内用户的使用特点，对系统的内核、系统的配置、操作方式等都作了相应的优化。

    面临的问题

    虽然Linux已取得了令人瞩目的进展，但它想更多的进入企业级应用市场与目前主流的网络操作系统竞争，还需解决以下几个问题。

    1．企业级技术支持。通常认为技术支持和售后服务是自由软件的薄弱之处，对于企业级应用来说，Linux的松散结构不太可靠，这不免使一些IT专业人员心生顾虑，企业用户习惯于从固定的渠道获取支持。Caldera和RedHat等公司的加盟有助于改善这一情况。

    2．更多应用程序支持。微软的Windows系列产品之所以能取得今天的市场地位，是与其上拥有众多的应用软件分不开的。在Linux产品中也必须装有先进的应用软件，在这方面，进展虽有，但太过缓慢。如果没有足够的需求，销售商们不会采用Linux，而如果没有足够的应用程序，就不会有需求。因此，应用程序这一关攻不下来，Linux就难以为继。

    3．标准化。UNIX最初也是一个自由软件，但发展到今天，已被各大厂商把持，版本繁多，互不兼容，这实际上阻碍了UNIX的发展。目前Linux也面临这样的问题。要使崇尚独立的Linux统一标准何其难也，但Linux要想获得持续健康的发展，避免走上UNIX的老路，标准化已成为当务之急。

    结束语

    Linux的出现绝不仅仅是为用户带来了一种价廉物美的产品，使他们多了一种选择，其在更深层次上的意义是，将给传统的软件版权制度、软件开发模式及企业经营模式带来革命性的影响。我们已经习惯于花费高昂费用买来的软件产品却不得不忍受其中的bug，所有能做的只是抱怨和等待，现存的版权制度实际上更大程度上是牺牲了广大用户的利益而保护了少数大公司的利益。Linux的开放源码使用户拥有了知情权和参与权，更符合用户的希望和需求，将成为软件业未来的发展方向。

    另一方面，Linux是中国软件业摆脱目前低水平的二次开发，快速、健康发展的难得机遇。从以往的经验教训来看，没有自主版权的操作系统就要受制于人，整个软件业就好像踩在棉花团上，不可能获得良好的自主发展的空间。Linux给我们提供了这样一个大好时机，我们应当抓住它。