“十二五”国家重点图书出版规划项目

Linux指令从入门到精通

宋磊　宋馥莉　雷文利　编著

人民邮电出版社

北京

前言

Linux 属于开源的自由软件，程序员和爱好者可以根据自己的喜好参与到其设计和开发工作中并且任意传播，因此它受到广大计算机爱好者的喜爱。除此之外，由于UNIX操作系统是收费的，任何使用UNIX操作系统或想要学习UNIX操作系统的人都需要支付高额的费用，而Linux是开源的类UNIX操作系统，具有UNIX的所有功能，程序员可以从Linux着手学习。对于很多用惯了Windows系统图形界面且刚开始接触Linux的用户来说，一本Linux指令速查宝典是必备的工具书。

笔者基于上述考虑编写了本书，希望对Linux爱好者和初学者有所帮助。

本书特点

1．常见指令全面

本书共讲解了444个Linux指令，覆盖了Linux指令中绝大多数常见的指令。

2．实例丰富

本书共列举了716个范例，书中绝大多数的指令都配有应用范例，并且辅以讲解和说明，以帮助读者加深对指令的理解。

3．索引方便

本书提供的命令按照两种方式进行索引，一是按照指令的功能进行索引；二是按照指令的首字母顺序进行索引，可方便用户查找使用。

要点说明

本书对Linux指令的讲解由5部分组成：学习目标、语法、功能说明、参数说明、基础应用。

学习目标：在开始学习某个指令之前，帮助读者树立学习本指令的目标，并目的性很强地去学习这一指令。

语法：详细地介绍Linux指令使用时的法则和规范。

功能说明：详细介绍Linux指令具体能实现哪些主要功能。

参数说明：介绍指令可能会使用的参数以及相应参数对应的具体功能。参数又分为必要参数和选择性参数，必要参数是实现某项功能必须要使用的参数，选择性参数是辅助性的参数，如创建、修改或从档案文件中提取文件指令“ar”。

基础应用：介绍具体使用指令的方法，可使读者轻而易举地掌握具体指令的使用方法。应用范例均是在命令行下的操作，并有详细的解释。比如：

[root@localhost ～]# adduser -r adminis　　　//创建一个系统用户adminis

[root@localhost ～]# adduser –p 12345678 adminis //为用户 adminis 设置密码

adduser：user adminis exists

[root@localhost ～]#

执行指令“adduser –r adminis”新建一个用户名为 adminis 的系统用户，然后再执行指令“adduser –p 12345678 adminis”为新用户设置密码，当然也可以用 passwd 指令来设置该用户的密码。

适合的读者

Linux 初学者；

Linux 爱好者；

大中专院校的学生；

Linux 系统管理员。

本书由宋磊主编、统稿，宋馥莉参与编写了第6～8章、刘慧慧参与编写了第9章和第10章。在此向参与编写、资料整理和代码编写的人员致以诚挚的谢意。

本书在编写过程中，经过多次修改，但由于水平有限、时间仓促，错误和疏漏之处在所难免，恳请广大读者批评指正。本书责任编辑的联系方式：fudaokun@ptpress.com.cn。

编者

2013年11月

第1章 Linux的安装和基本配置

1.1 Linux的安装

Linux系统的安装和Windows系统的安装不大一样，有不少需要注意的地方。下面将简要介绍安装Linux的过程以及一些注意事项。

系统配置要求：Linux可以在配置较低的系统上运行并提供高效率的系统服务，安装Linux并没有严格的系统配置要求，只要有Pentium以上的CPU、64MB以上的内存、1GB左右的硬盘空间即可正常安装基本的Linux系统并能运行一些系统服务。要顺畅地运行Linux的图形界面，建议内存在 128MB 以上，当然如果要运行一些其他耗资源的软件就需要按要求提高系统的配置。

Linux的硬件支持：Linux目前支持几乎所有的处理器（CPU）。但有一些较早版本的Linux可能只支持很少的显卡、声卡类型，所以在安装时尽量选择新版本的Linux。

安装方式：通常的系统安装都有两种方式：一种是光盘安装，插入光盘按提示进行即可；另一种是硬盘安装，即从网上直接下载 ISO 映像文件。Linux 的安装文件一共包括三个：shrike-i386-disc1.iso、shrike-i386-disc2.iso和shrike-i386-disc3.iso，使用虚拟光驱按顺序安装，找到dosutils目录，执行里面的autoboot.bat批处理文件即可。

Linux的图形安装过程很简单，首先是选择语言及键盘鼠标类型，然后一步一步执行就好了。

1.2 Shell命令行简介

Shell是Linux中的命令解释程序，有了它用户就能通过键盘直接输入指令来操作计算机。Shell 会执行用户输入的命令，并且在显示器上显示执行结果。Shell 与其他图形化操作不同，它是面向命令行的用户界面，称为 CLI（Command Line Interface）。Shell是 Linux 中一个非常有用的工具，是学习 Linux 必不可少的。下面将介绍 Shell 的一些基本应用。

在 Linux 启动后，Shell 其实已经在后台运行了，只是不显示而已。要想进入 Shell操作界面，可以通过组合键的方式来实现：<Ctrl> + <Alt> + <F2>，回到图形界面则按下组合键<Ctrl> + <Alt> + <F7>。在 Linux系统中运行【开始】→【应用程序】→【附件】→【系统终端】，也可以执行Shell命令。

1.3 Linux的基本配置指令

1.3.1 alias 指令：设置指令的别名

学习目标 使用该指令对已存在的指令设置一个更便于用户记忆的别名

语法 alias [别名[=指令名] ]

功能说明 利用 alias 指令用户可以为已经存在的系统指令设置别名，然后运行自己设置的别名来实现指令的功能调用。在指令中指令名需要用单引号括起来，它可以是单个的指令名称，也可以是像“adduser–r adminis”一样完整的命令。若指令中无任何参数，只输入alias，则显示当前系统下已经设置的指令别名。一旦系统重启，用户设置的别名就不再生效，如果用户想要设置永久生效，可以通过编辑文件.bashrc来实现。

基础应用

范例1 设置指令的别名。

[root@localhost～]# alias p=’passwd’　　//设置别名

[root@localhost～]# alias a=’adduser -d /home/she–p 12345678　sun’　//设置别名

[root@localhost～]# alias　　　　//列出当前已经设置的别名

alias a=’adduser -d /home/she–p 12345678　sun’

alias cp=’cp -i’

alias l.=’ls–d.* –color=tty’

alias ll=' ls–l–color=tty'

alias ls='ls --color=tty'

alias mv='mv -i'

alias p=’passwd’

alias rm='rm -i'

[root@localhost～]#

1.3.2 aumix：设置系统音效

学习目标 使用 aumix 指令来设置音频设备

语法 aumix [-可选参数]

功能说明 aumix 指令可以用来调整音频设备的信号强度，指定播放与录音的装置设置。它可在命令行和脚本模式中使用，也可以图形界面的方式运行，此时用户可通过键盘或鼠标与其交互。

参数说明 可选参数及其说明如下：

基础应用

范例2 在命令行模式下直接设置音效设备。

[root@localhost ～]# aumix +2　　//设置音效强度

用户如果在命令行模式下输入指令“aumix +2”，系统将在原有的强度上加指定值。

范例3 进入aumix图形界面。

[root@localhost ～]# aumix　　//进入图形界面

在命令行下直接输入指令“aumix”将进入图形界面，这时用户只需用鼠标拖动上面的白色圆圈，就可以直接设置相应的选项。

1.3.3 bind 指令：显示或者设置按键组合

学习目标 显示或设置键盘按键与其相关的功能

语法 bind [-可选参数]

功能说明 利用 bind 指令来显示按键组合，用户可以了解自己的系统中有哪些按键组合及它们都有什么功能。当然还可以自行设置按键组合来代表某些特殊的功能。

参数说明 可选参数及其说明如下：

基础应用

范例4 显示系统中所有按键组合的功能。

[root@localhost ～]# bind -l　　　//显示所有按键组合的功能

abort

accept-line

alias-expand-line

arrow-key-prefix

backward-byte

backward-char

backward-delete-char

backward-kill-line

backward-kill-word

backward-word

beginning-of-history

beginning-of-line

call-last-kbd-macro

capitalize-word

character-search

character-search-backward

clear-screen

complete

complete-command

complete-filename

complete-hostname

complete-into-braces

complete-username

complete-variable

copy-backward-word

copy-region-as-kill

delete-char

delete-char-list

----------- //省略部分输出

vi-yank-to

yank

yank-last-arg

yank-nth-arg

yank-pop

[root@localhost ～]#

范例5 设置快捷键。

[root@localhost ～]# bind–m”\C-m” : "ls "　//设置快捷键”C-m”的功能

快捷键“C-m”即“Ctrl+m”。

范例6 显示指定功能的按键或者按键组合。

[root@localhost ～]# bind -q ls　//列出功能ls的按键及按键组合

abort can be invoked via "\C-m"

[root@localhost ～]#

1.3.4 chkconfig指令：设置系统的应用程序

学习目标 使用 chkconfig 命令来检查、设置系统的各种服务

语法 chkconfig [-可选参数][系统服务程序][on/off/reset]

功能说明 chkconfig 指令可以用来为系统管理增加新的服务、为系统管理移除服务、列出当前服务的启动信息、改变服务的启动信息和检查特殊服务的启动状态。当单独运行chkconfig指令而不加任何参数时，它将显示服务的使用信息。

同时，chkconfig指令还可以设置系统服务的运行等级。我们知道在Linux系统中有7个运行等级，而运行等级的改变可以通过init命令来切换。在Linux运行等级的切换过程中，系统会自动寻找对应运行等级的目录/etc/rc[0-6].d下的K和S开头的文件，按后面的数字顺序执行这些脚本。chkconfig指令就提供了一个维护/etc/rc[0～6].d文件脚本的工具，可以更新和查询不同运行等级上的系统服务。

参数说明 可选参数及其说明如下：

基础应用

范例7 列出当前运行等级下所有的系统服务。

[root@localhost ～]# chkconfig -list　//列出所有的系统服务

NetworkManager　　0:off　1:off　2:off　3:off　4:off　5:off 6:off

NetworkManagerDispatcher　　　0:off 1:off 2:off 3:off 4:off 5:off　6:off

acpid　　　0:off　1:off　2:off　3:on　4:on　5:on　6:off

anacron　　0:off　1:off　2:on　3:on　4:on　5:on　6:off

apmd　　　0:off　1:off　2:on　3:on　4:on　5:on　6:off

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

----------------------------------------　　　　//省略了部分结果

Xfs　　　0:off　1:off　2:on　3:on　4:on　5:on　6:off

ypbind　　0:off　1:off　2:off　3:off　4:off　5:off　6:off

yum-updatesd　0:off　1:off　2:on　3:on　4:on　5:on　6:off

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

----------------------------------------　　　　//省略了部分结果

time:　　　off

time-udp:　　off

uucp:　　　off

[root@localhost ～]#

1.3.5 clock：设置系统 RTC 时间

学习目标 使用 clock 指令来调整 RTC 时间

语法 clock [-可选参数]

功能说明 clock 指令可以显示当前的时刻、调整电脑硬件时钟的时间、将系统时间设成与硬件时钟时间一致，或是把系统时间回存到硬件时钟。当第一次使用clock指令的“--set”或“--systohc”参数来设置硬件时钟时，指令会在/etc目录下自动生成一个名为adjtime的文件。当用户再次使用“--set”或“--systohc”参数来调整硬件时钟时，前后两次调整的差异就会被记录在该文件中，作为日后调整硬件时钟时间的参数。

参数说明 可选参数及其说明如下：

基础应用

范例8 显示当前的系统时间。

[root@localhost ～]# clock　　　　//显示当前的时间

执行指令“clock”将直接显示当前系统的时间信息。

1.3.6 login：登录系统

学习目标 掌握 login 指令切换登录账号

语法 login [-可选参数] [用户名]

功能说明 在系统运行状态下输入 login 指令，将先对当前用户进行销号，然后在系统提供的登录界面中使用不同的身份重新登录系统。为了方便起见，用户也可以直接在指令后加入用户名，再根据系统提示输入密码，即可重新登录系统。

参数说明 可选参数及其说明如下：

基础应用

范例9 用户使用新的身份重新登录系统。

[root@localhost ～]# login

执行指令“login”，将进入系统登录界面，在界面下输入用户名和密码即可以新的身份登录系统。

1.3.7 logout：退出系统

学习目标 掌握如何使用 logout 指令退出当前 Shell

语法 logout

功能说明 logout 指令和 login 指令是一对，logout 指令将使用户退出当前系统。

基础应用

范例10 退出系统

[root@ localhost～]# logout

执行logout指令退出系统。

1.3.8 halt：关闭系统

学习目标 在 Shell 命令行模式下关闭系统

语法 halt [-可选参数]

功能说明 halt 指令的默认操作是关闭系统，而不是关闭电源，它的操作等同于指令“shutdown–h” 和指令“init 0”将系统挂起。执行 halt 指令将先把本次关机操作记录到文件/var/logs/wtmp，然后通知内核是挂起操作系统、重启系统，还是关闭电源。

参数说明 可选参数及其说明如下：

基础应用

范例11 关闭系统。

[root@localhost～]# halt　　　　//关闭系统

执行指令“halt”将挂起当前操作系统。如果用户想要重新启动系统，按下reset键即可重新启动系统。

范例12 关闭系统同时关闭电源。

[root@localhost～]# halt -p　　　　//关闭系统并关闭电源

执行指令“halt -p”将关闭系统并切断计算机的电源，等同于指令“poweroff”。

1.3.9 hwclock：设置系统的硬件时钟

学习目标 掌握 hwclock 指令的用法，能使用该指令来设定硬件时钟

语法 hwclock [-可选参数]

功能说明 hwclock 指令是一个硬件时钟管理工具，它不仅可设置硬件时钟，还可实现系统时钟和硬件时钟的同步。在Linux系统中有两种时钟，分别是硬件时钟与系统时钟。其中硬件时钟是指主板上的时钟，通常可在BIOS中进行设定，而系统时钟则是指内核（kernel）的时钟，所有的Linux相关指令多数读取的都是系统时钟。hwclock指令和clock指令可用来直接对硬件时钟进行存取。

参数说明 可选参数及其说明如下：

基础应用

范例13 显示当前系统的硬件时间。

[root@localhost～]# hwclock　　　　//显示当前系统的硬件时间

Mon 4 Jan 2009 21:31:47 PM CST -0.687086 seconds

[root@localhost～]#

执行指令“hwclock”将读取当前系统的硬件时钟信息，并输出到标准输出设备。

[root@localhost～]# hwclock–-set　　　　//显示当前系统的硬件时间

Mon 4 Jan 2009 21:31:49 PM CST -0.687086 seconds

执行指令“hwclock --show”将显示当前系统的硬件时间，与指令“hwclock”和“clock--show”执行效果相同。

范例14 设置系统的硬件时钟。

[root@localhost～]# hwclock --set --date=”01/04/2009 15:42:00” //设置当前系统的硬件时间

执行指令“hwclock --show --date="01/04/2009 15:42:00"将当前系统的硬件时间重新设置为“01/04/2009 15:42:00”。通用格式为：“月/日/年时：分：秒”。

[root@localhost～]# hwclock --hctosys　　//将系统时钟调整为与当前的硬件时钟一致

在Linux启动时，系统会去读取硬件时钟，并根据硬件时钟来设置系统时钟。在系统的硬件时钟改变后需要执行“hwclock --hctosys”来手动同步系统时钟和硬件时钟，--hctosys 就是 Hardware Clock to SYStem clock 。

1.3.10 insmod 指令:载入模块

学习目标 学习如何使用 insmod 指令来向系统内核载入模块

语法 insmod [-可选参数] [模块文件]

功能说明 insmod 指令可以在需要时向 Linux 的内核中添加模块。在 Linux 系统中许多功能都是以模块的形式存在的，管理员用户可以自己编写c文件并进行编译，然后将编译后的.o文件作为模块添加到系统内核中，也可以通过该指令加载需要的设备驱动程序。

参数说明 可选参数及其说明如下：

基础应用

范例15 加载指定模块。

[root@localhost ～]#insmod WLdriver.o　　　//加载模块

执行指令“insmod WLdriver.o”将指定的无限网卡的驱动模块加载到 Linux 系统的内核中。但insmod指令不能处理模块之间的依赖关系，而modprobe指令将模块载入系统内核时可自动处理各模块之间的依赖关系，并进行加载。

1.3.11 timeconfig：设置时区

学习目标 使用 timeconfig 指令来设置系统时区

语法 timeconfig [-可选参数] [时区]

功能说明 timeconfig 指令具有图形化的互动式界面，用户可以使用方向键和空格键来设置系统时间所属的时区。

参数说明 可选参数及其说明如下：

基础应用

范例16 设置系统时区。

[root@localhost ～]# timeconfig　　　　　　//设置时区

在Shell命令行模式下输入“timeconfig”指令将进入图形化的互动界面模式，在该界面下用户可以很轻松地进行设置。

1.3.12 kbdconfig：设置键盘

学习目标 使用 kbdconfig 指令来设置键盘

语法 kbdconfig [-可选参数]

功能说明 kbdconfig 指令是 Red Hat Linux 指令，它提供图形化的操作界面，来修改相应的键盘配置文件/etc/sysconfig/keyboard。

参数说明 可选参数及其说明如下：

基础应用

范例17 键盘设置。

[root@localhost ～]# kdbconfig　　　　　//设置键盘配置

1.3.13 mouseconfig：设置鼠标

学习目标 使用 mouseconfig 指令来设置相关的鼠标参数

语法 mouseconfig [-可选参数]

功能说明 mouseconfig 是 Red Hat Linux 下的鼠标设置程序。使用该指令不仅可设置相关参数，还可以在交互模式下使用键盘的方向键来设置选项。

参数说明 可选参数及其说明如下：

基础应用

范例18 在命令行模式中运行鼠标设置程序。

[root@localhost～]# mouseconfig -noui–device ttys0

1.3.14 sndconfig：设置声卡

学习目标 了解 sndconfig 指令的功能

语法 sndconfig [-可选参数]

功能说明 sndconfig 指令是 PnP 声卡设置工具，它可自动检测或设置 PnP 声卡。

参数说明 可选参数及其说明如下：

基础应用

范例19 使用sndconfig指令设置声卡。

[root@localhost ～]# sndconfig　　　//运行sndconfig程序自动检测PnP声卡

1.3.15 help：显示系统内建指令的帮助信息

学习目标 通过 help 命令输出的帮助信息来了解 Shell 程序的内建指令信息

语法 help [指令]

功能说明 利用 help 指令来显示指定指令的帮助信息。如果指令中未指定 Shell 内建指令，将显示所有支持该功能的指令。与指令中的--help参数相比，使用help指令显示的帮助信息更加详细。

基础应用

范例20 使用help显示指令的帮助信息。

[root@localhost～]# help　　　　　//显示所有支持该功能的指令

在此我们省略了指令的输出结果。用户也可以通过在指令中指定要显示的 Shell 指令来显示需要的信息。

[root@localhost～]# help　help　　　　//显示help指令本身的帮助信息

1.3.16 man：显示指令的帮助手册

学习目标 运用 man 指令查看 Shell 指令的帮助信息

语法 man [-可选参数]指令名

功能说明 man 指令可用来查找 Linux 系统中已安装完成的各指令的帮助手册。Man 指令查找帮助信息的路径是由配置文件/etc/man.config来指定的。

参数说明 可选参数及其说明如下：

基础应用

范例21 显示帮助主题。

[root@localhost～]# man help　　　　//显示帮助主题

执行指令“man help”将显示 help 指令帮助手册的信息。

1.3.17 apropos 指令：查找使用手册的名字和相关描述

学习目标 使用 apropos 指令通过关键字来查找一个你不知道的能完成某种特殊任务的命令名称

语法 apropos[必要参数][选择性参数]关键词

功能说明 每个指令的使用手册都有一个简短的描述，通过 apropos 指令可以查找相关关键字的描述。若退出状态为0，则说明程序成功执行；若退出状态为1，则说明用法、语法或者配置有错误；若退出状态为2，则说明操作错误；若退出状态为16，则说明没有找到与指定的关键词相匹配的内容。

参数说明 必要参数的具体说明如下：

续表

选择性参数的具体说明如下：

【环境变量】

系统参数：如果$SYSTEM 已经指定，那么它将与使用“-m”参数具有相同的效果。

路径参数：如果$MANPATH 已经指定，那么它将作为执行搜索的默认路径。

匹配参数：如果$POSIX_CORRECT 已经指定，即使没有给它赋值，那么搜索的匹配方式也将按照通常的方式进行，和使用“-r”参数具有相同的效果。

内建指令

whatis，man

基础应用

范例22 以通常方式进行关键词匹配。

root@localhost:～# apropos -r ls　　//以通常方式查找关键词ls

_llseek (2)　　- reposition read/write file offset

add-shell (8)　　- add shells to the list of valid login shells

afs_syscall (2)　- unimplemented system calls

Apache2::PerlSections (3pm) - write Apache configuration files in Perl

Apache2::RequestUtil (3pm) - Perl API for Apache request record utils

Apache2::ServerUtil (3pm) - Perl API for Apache server record utils

APR::Pool (3pm)　- Perl API for APR pools

assert (3)　　- abort the program if assertion is false

auth_destroy (3)　- library routines for remote procedure calls

authnone_create (3)　- library routines for remote procedure calls

authunix_create (3)　- library routines for remote procedure calls

authunix_create_default (3) - library routines for remote procedure calls

blockdev (8)　　- call block device ioctls from the command line

break (2)　　- unimplemented system calls

c++filt (1)　　- Demangle C++ and Java symbols

运行以上指令之后，系统列出了所有与ls相关的指令信息及其描述，列出的信息很长，这里只截取了前面部分进行说明。此指令与指令“apropos ls”等效。

范例23 进行关键词的精确匹配。

root@localhost:～# apropos -e ls　　//以精确的方式查找关键词ls

dircolors (1)- color setup for ls

ls (1)- list directory contents

范例24 以通配符方式进行关键词匹配。

root@localhost:～# apropos -w ls　　//以通配符方式查找关键词ls

ls (1)- list directory contents

1.3.18 false 指令：不做任何事情，表示失败

学习目标 使用 false 命令来设置状态码

语法 false[选择性参数]

功能说明 false 指令将以一个状态码结束，状态码表示失败。

参数说明 选择性参数的具体说明如下：

基础应用

范例25 表示失败。

[root@localhost～]# true　　　　//设置状态码

[root@localhost～]# echo $?　　　//显示状态码

0

[root@localhost～]# false　　　　//设置状态码

[root@localhost～]# echo $?　　　//显示状态码

1

[root@localhost～]#

本例使用指令false和true来设置状态码，表示失败或者成功。

1.3.19 dc 指令：一个任意精度的计算器

学习目标 使用 dc 指令来执行复杂计算

语法 dc[选择性参数][文件]

功能说明 dc 指令是一个 reverse-polish 桌面计算器，它支持无限制精度算法。通常情况下，dc指令从标准输入读取数据，如果指定了文件名的命令行参数，那么指令将从指定的文件中读取数据，而不是从标准输入读取数据。结果将输出到标准输出，所有的错误信息将输出到标准错误输出。

参数说明 选择性参数的具体说明如下：

【运算类型】

+：加法。

-：减法。

*：乘法。

/：除法。

%：余数。

^：指数。

v：开方。

【堆栈操作】

c：清空堆栈。

f：显示堆栈的所有信息。

nk：精度设置，默认精确到个位。

q：结束程序。

P：输出堆栈最顶端的值。

p：弹出堆栈最顶端的值。

内建指令

expr，xcalc

基础应用

范例26 利用 dc指令进行乘法运算。

[root@localhost ～]# dc　　　//运行dc指令

4　　　　　　　　　//输入乘数

5　　　　　　　　　//输入被乘数

*　　　　　　　　　//乘法符号

p　　　　　　　　　//弹出堆栈最顶端的值

20　　　　　　　　//输出结果

q　　　　　　　　　//退出

[root@localhost ～]#

乘法的运算过程如上所示，其他的加法、减法、除法、开方等的运算过程与乘法运算类似。

范例27 一个综合运算的例子。

[root@localhost ～]# dc　　　//利用dc指令进行计算

7

8

*

p　　　　　　　　　//用户输入

56　　　　　　　　//输出结果

3 2 ^ p　　　　　　　//用户输入

9　　　　　　　　　//输出结果

2 / p　　　　　　　　//用户输入

4　　　　　　　　　//输出结果

f　　　　　　　　　//用户输入

4

56　　　　　　　　//输出结果

+p　　　　　　　　//用户输入

60　　　　　　　　//输出结果

q　　　　　　　　　//用户输入

[root@localhost ～]#

1.3.20 expr指令：简单计算器

学习目标 能运用 expr 指令实现简单的计算

语法 expr [-可选参数]表达式

功能说明 expr 指令将打印表达式的值到标准输出，可以进行算术和逻辑运算。

参数说明 可选参数及其说明如下：

【表达式】

ARG1 | ARG2：逻辑或运算。

ARG1 & ARG2：逻辑与运算。

ARG1 < ARG2：小于运算。

ARG1 <= ARG2：小于等于运算。

ARG1 = ARG2：等于运算。

ARG1 != ARG2：不等于运算。

ARG1 >= ARG2：大于等于运算。

ARG1 > ARG2：大于运算。

ARG1 + ARG2：加法运算。

ARG1- ARG2：减法运算。

ARG1 * ARG2：乘法运算。

ARG1 / ARG2：除法运算。

ARG1 % ARG2：取余运算。

STRING：REGEXP：检查 STRING 的模式是否与 REGEXP 匹配。

match STRING REGEXP：相当于 STRING：REGEXP。

substr STRING POS LENGTH：相当于 STRING：REGEXP。

index STRING CHARS：在 STRING 中索引 CHARS。

LENGTH STRING：计算 STRING 的长度。

+ TOKEN：将 TOKEN 视为一个字符串。

基础应用

范例28 判断表达式的逻辑值。

[root@localhost ～]# expr 23‘>=’32　　//判断表达式的逻辑值

0

[root@localhost ～]# expr 23‘!=’32

1

[root@localhost ～]#

执行指令“expr 23‘>=’32”和指令“expr 23‘!=’32”判断逻辑表达式的真假，如果表达式的值为真，返回1；反之，则返回0。

范例29 计算表达式的值。

[root@localhost ～]# expr 25 '/' 8　　//计算25/8的数值

3

[root@localhost ～]# expr 25 '%' 8　　//计算25%8的数值

1

[root@localhost ～]#

执行指令“expr 25 ‘/’ 8”和指令“expr 25 ‘%’8”计算 25 和 8 的商及取余。

范例30 计算字符串的长度。

[root@localhost ～]# expr length　“hello everyone”　　　//计算字符串的长度

14

[root@localhost ～]#

执行指令“expr length“hello everyone””计算指定字符串的长度并输出结果。

范例31 索引字符串。

[root@localhost ～]# expr index　“hello everyone”n　　　//索引字符串

13

[root@localhost ～]#

执行指令“expr index“hello everyone”n”在指定字符串中索引字符 n，并输出该字符在指定字符串中的位置。

实战思考

应用思考

1．用指令“expr length coronabook”计算字符串 coronabook 的长度。

2．通过expr指令判断15和25的大小关系。如果表达式为真，则返回1；如果表达式为假，则返回0。

1.4 Linux系统管理指令

1.4.1 arch指令：输出主机的体系结构

学习目标 运用 arch 指令来了解当前主机的体系结构

语法 arch

功能说明 如果用户想要了解当前主机的硬件架构，可在 Shell 命令行中输入 arch 指令，系统将在标准输出设备上输出本机硬件架构，即CPU类型。

【CPU类型】

i386：=Intel 80386，是对 Intel（英特尔）32 位微处理器的统称。

i486：=Intel 80386，是 Intel 公司的一款 CISC 架构的 x86 CPU。

i586：Pentium 2 及其同规格 CPU 的内核。

alpha：HP alpha CPU 架构。

sparc：SUN 和 TI 公司合作开发了 RISC 微处理器。

arm：Advanced RISC Machines 的缩写，既可以认为是一个公司的名字，也可以认为是对一类微处理器的统称，还可以作为一种技术的名称。当前有 5 个产品系列——ARM7、ARM9、ARM9E、ARM10和SecurCore。

m68k：m68k 为摩托罗拉 68 系列的 CPU，包括 680X0，683X0，CPU32 等。

mips：是对 MIPS 公司设计的 RISC 处理器 MIPS 芯片的统称。

ppc：苹果开发的 CPU 架构。

i686：Pentium 3 及其以上的 CPU。

基础应用

范例32 显示当前系统的体系结构。

[root@localhost～]# arch　　　　//显示当前系统的体系结构

i686

[root@localhost～]#

1.4.2 apmd：系统电源管理

学习目标 了解 apmd 指令的工作原理和典型应用

语法 apmd [-可选参数]

功能说明 apmd 指令是进阶电源管理服务程序，主要由电源管理硬件、APM BIOS 和内核中的驱动器组成，负责BIOS进阶电源管理（APM）相关的记录、警告与管理工作。apmd指令还可以检测电池状态，当电池不在充电状态，同时电池电量下降速度超过指定的速度时，产生警告信息。

参数说明 可选参数及其说明如下：

基础应用

范例33 记录所有的电源管理事件，如果电源出现错误则发出警告信息。

[root@localhost～]# apmd -vw　　　//记录所有的电源管理事件

执行指令“apmd -vw”记录所有的 APM 事件，如果电源出现错误则发出警告信息。

1.4.3 batch指令：执行批处理指令

学习目标 应用 batch 指令来设置一次性任务，它可以是单个任务也可以是多个任务

语法 batch [-可选参数] [任务时间]

功能说明 在 Shell 命令行中输入 batch 指令，将出现 at>提示符，这时用户就可以在提示符后输入要执行的指令，一个命令占一行，这些任务将被加入/var/spool/at中，只有在系统的平均负载低于 0.8 空闲时才被执行，而且只能执行一次，不能循环执行这些指令。如果在关机之前任务还未被执行，在下次开机时，系统将自动读取这些还未被执行的指令，并在空闲时执行。用户利用 batch 指令还能指定指令的运行时间，但如果系统繁忙，任务的执行会被延后，这样用户可以将实时性不高的任务放到空闲时再执行，以减轻系统的负担。如果用户不能运行 batch 指令，可以查看任务调度程序是否被加载，或者查看当前用户名是否未被列入/etc/at.allow文件中。用户系统中没有/etc/at.allow文件，这时所有在/etc/at.deny文件中列出的用户都被禁止使用at和batch命令。

参数说明 可选参数及其说明如下：

基础应用

范例34 从标准输入设备读取批处理的指令。

[root@localhost ～]# batch　　　　//批处理

at> ls /home/tom　　　　　　//显示目录内容

at> cat /home/tom/11.txt　　　　//文件显示

at> alias p=’passwd’

at> <EOT>　　　　　　　　//以”Ctrl+D”结束输入

job 3 at 2009-01-12 15:53

[root@localhost ～]#

在at>提示符后输入一个命令后按下[Enter]键，继续以前的操作，当指令输入完毕，用户再按下Ctrl+D即可。

范例35 从指定文件读取批处理的指令。

[root@localhost ～]# cat >/home/tom/sua　　//从键盘读入数据

ls /home/tom

cat /home/tom/11.txt

alias p=’passwd’

[root@localhost ～]# cat　/home/tom/sua　　//显示文件内容

ls /home/tom

cat /home/tom/11.txt

alias p=’passwd’

[root@localhost ～]# batch　-f /home/tom/sua 12:20　　//从指定文件读取批处理的指令，等待执行时间到来

job 3 at 2009-01-12 15：57

[root@localhost ～]#

执行指令“batch -f /home/tom/sua 12:20”系统将在指定的时间点运行指定文件中的批处理指令。

1.4.4 chfn 指令：设置finger信息

学习目标 利用 chfn 指令改变用户的 finger 信息

语法 chfn [-可选参数] [账号名]

功能说明 chfn 指令是用来改变或设置 finger 信息的工具。在 Linux 系统中 finger 信息是保存在文件/etc/passwd中的，当使用finger指令显示时，它会向用户提供以下4种信息，分别为指定用户账号的真实姓名、指定用户账号的办公地址、指定用户账号的办公电话和指定用户账号的家庭电话，可以利用chfn指令更改这些信息。

如果在用户输入的chfn指令中未指定参数，chfn指令将进入交互模式。在交互模式下chfn会在每一栏前列出相应的提示信息，用户根据提示信息可以输入新信息，若用户输入“none”则表示该项为空，若用户不想改变当前信息直接按Enter键就行。

参数说明 可选参数及其说明如下：

基础应用

范例36 进入交互模式，根据提示信息设置finger信息。

[root@localhost ～]# chfn　　　　//设置finger信息

Changing finger information for root.

Name [root]: Anne

Office []: none

Office Phone []: 12345678

Home Phone []: 12345678

Finger information changed.

[root@localhost ～]#

输入指令“chfn”进入交互模式。第一列的 Name、Office、OfficePhone 和 HomePhone是提示信息，依次表示账号名称、工作地址、办公电话和家庭电话。提示信息后面的方括号中是用户的当前设置，如 Name [root]中的 root 是更改前用户的真实姓名，输入的 Anne 是更改后的用户名，而 Office []表示更改前该项设置为空。

范例37 通过指令改变指定用户的finger信息。

[root@localhost ～]# chfn -f mary　　//改变指定用户的真实姓名

Changing finger information for root.

Finger information changed.

[root@localhost ～]# chfn -h 12345678　　//改变指定用户的家庭电话

Changing finger information for root.

Finger information changed.

[root@localhost～]# chfn -o address　//改变指定用户的办公地址

Changing finger information for root.

Finger information changed.

[root@localhost ～]# chfn -p 12345678　　//改变指定用户的办公电话

Changing finger information for root.

Finger information changed.

[root@localhost ～]#

1.4.5 chsh 指令：改变登录系统时的 Shell

学习目标 通过 chsh 指令更改用户登录时默认的 Shell 类型

语法 chsh [-可选参数] [用户名]

功能说明 Shell 是一种具备特殊功能的程序，它是介于使用者和 UNIX/Linux 操作系统核心程序（kernel）之间的一个接口。Shell 既是一种命令语言，也是一种程序设计语言，不同的Shell拥有的内部命令不尽相同，占用的资源也大小不等。应用chsh指令可以为指定的用户设置登录时的Shell类型。目前流行的Shell有：ash、bash、ksh、csh等，其中bash是系统默认的Shell。如果指令中未指定任何参数，将进入交互模式。

参数说明 可选参数及其说明如下：

基础应用

范例38 改变用户的Shell。

[root@localhost ～]# chsh -l　　　　//显示所有的Shell

/bin/sh

/bin/bash

/sbin/nologin

/bin/bash2

/bin/ash

/bin/bsh

/bin/tcsh

/bin/csh

[root@localhost ～]#echo $SHELL　　　//显示用户当前所使用的Shell

/bin/bash

[root@localhost ～]# chsh　　　//Shell设置

Changing shell for root.

New shell [/bin/bash]: /bin/csh　　//输入新的Shell

Shell changed.

[root@localhost ～]#

在上例中我们通过输入chsh指令，进入交互模式，将Shell设置改变为/bin/csh。

范例39 使用参数改变指定用户的登录Shell。

[root@localhost ～]# chsh -s /bin/csh mary //改变用户 mary 的登录 Shell 为/bin/csh

Changing shell for root.

Shell changed.

[root@localhost ～]#

1.4.6 clear 指令：清除屏幕信息

学习目标 对杂乱的屏幕信息进行清理

语法 clear

功能说明 clear 指令可以将杂乱的屏幕信息清理干净。它类似于 DOS 的 CLS 指令，当输入该指令，屏幕将切换到新的一页开始显示。

基础应用

范例40 屏幕清理。

[root@localhost ～]# clear

1.4.7 date 指令：显示或设置系统时间

学习目标 根据指定格式显示或设置当前系统的时间

语法 date [-可选参数][日期和时间格式]

功能说明 date 指令可根据给定的格式显示当前的时间或者设置系统时间。date 指令不仅可以用来显示/设置系统的日期，同时还可以用来显示或设置系统的时间，格式是MMDDhhmm。

参数说明 可选参数及其说明如下：

格式说明如下：

续表

基础应用

范例41 按照不同的格式显示当前时间。

[root@localhost～]# date　　　　　//显示当前时间

Sun Jan 16:31:07 CST 2009

[root@localhost～]# date“Date:%Y.%m.%d Time:%H.%M.%S” //显示日期、时间

Date:2009.01.03 Time:16.31.11

[root@localhost～]#

1.4.8 echo 指令：字符串输出

学习目标 应用该指令将指定的字符串的值输出到标准输出

语法 echo [-可选参数]字符串

功能说明 echo 指令会将指定的字符串的值输出到标准的输出设备。

参数说明 可选参数及其说明如下：

基础应用

范例42 输出环境变量。

[root@localhost～]# echo $HOME　//输出环境变量HOME

/root

[root@localhost～]# echo $TERM　//输出环境变量TERM

Xtermt

[root@localhost～]#

HOME 和 TERM 是 Shell 定义的环境变量，在指令“echo $HOME”和指令“echo $TERM”中，$表示引用变量的内容。

范例43 输出一般字符串。

[root@localhost～]# echo“12345\n123456\123”　　//输出内容不作特殊处理

12345\n123456\123

[root@localhost～]# echo -e“12345\n123456\123”　//加以特别处理后，输出环境变量

12345

123456\123

[root@localhost～]#

1.4.9 yes指令：持续输出给定的字符串，每行显示一个字符串

学习目标 使用 yes 指令不断地向终端输出指定的字符串

语法 yes[选择性参数][字符串]

功能说明 yes 指令用来回应字符串。

参数说明 选择性参数的具体说明如下：

基础应用

范例44 输出连续字符串。

[root@localhost～]# yes　hello world　　//输出字符串“hello world”

使用 yes helloworld 指令将连续在终端输出字符串“hello world”直到按下组合键 Ctrl+C为止。

1.4.10 exit指令：退出Shell

学习目标 以命令行的方式退出 Shell

语法 exit

功能说明 exit 指令用来退出当前的 Shell。

基础应用

范例45 退出Shell指令。

[root@localhost～]# exit　　//退出Shell

logout

1.4.11 apm指令：高级电源管理

学习目标 掌握 apm 指令的应用

语法 apm[参数]

功能说明 apm 指令用于高级电源管理。不输入参数直接输入 apm 指令时，系统将以用户可读的方式直接输出/proc/apm文件的内容。

参数说明 参数具体说明如下：

基础应用

范例46 显示剩余电量。

[root@localhost～]#apm -m　　　//显示剩余电量

本例使用指令“apm–m”以分钟数的形式显示剩余的电量。

1.4.12 apmsleep指令：APM进入备用或者休眠状态

学习目标 掌握 apmsleep指令的用法

语法 apmsleep[必要选项][选择性选项][+]时间

功能说明 有些计算机，特别是笔记本电脑，能使用 RTC（实时锁）从低功耗的休眠状态进入DRAM模式。apmsleep指令用于在RTC中设置警告时间，并让计算机进入休眠模式或者备用模式，默认情况下进入休眠模式。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例47 进入休眠状态一段时间。

[root@localhost～]# apmsleep +1：50　　//进入休眠状态

进入休眠状态，休眠的时间为1小时50分钟。

[root@localhost～]# apmsleep 9：00　　　//进入休眠状态

直到第二天早晨9点，计算机一直处于休眠状态。

范例48 进入备用模式一段时间。

[root@localhost～]# apmsleep -S +1：50　　//进入备用模式

进入备用模式，备用模式的时间为1小时50分钟。

[root@localhost～]# apmsleep -S 9：00　　//进入备用模式

直到第二天早晨9点，计算机一直处于备用模式。

1.4.13 exec 指令：执行完指令后，交出控制权

学习目标 掌握 exec 指令的用法，在指定指令执行完成后可以退出当前登录的 Shell

语法 exec[指令]

功能说明 exec 指令用来在执行完指定的指令后交出控制权。

参数说明

基础应用

范例49 执行完指令后退出。

[root@localhost root]#exec ls　　　　//执行完ls指令后退出

1.4.14 fc 指令：修改或者执行历史指令

学习目标 学习使用 fc 指令来显示编辑历史指令

语法 fc[选择性参数][必要参数][第一个指令][最后一个指令]

功能说明 fc 指令可以编辑曾经执行过的指令，并以批处理的形式让这些指令重新得以执行。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例50 列出当前执行过的指令。

[root@localhost～]# fc -l　　　　//列出当前执行过的指令

331　clear

332　chkconfig

333　chkconfig --list

334　ls

335　compress

336　exit

337　who

338　wall

339　wall hello

340　cpio --help

341　ls

342　vi iptables.sh

343　ls

344　clear

345　man evolution

346　exit

[root@localhost～]#

本例使用指令“fc–l”，列出当前执行过的指令。

范例51 执行已经执行过的指令。

[root@localhost～]# fc 345 339

man evolution

No manual entry for evolution

clear

ls

gao　　　iproute_20061002-2.diff.gz　vim-7.0

ipip-1.1.6　iproute_20061002-2.dsc　　vim_7.0-122+1.diff.gz

ipip_1.1.6.dsc iproute_20061002.orig.tar.gz　vim_7.0-122+1.dsc

ipip_1.1.6.tar.gz　iptables.sh　　vim_7.0.orig.tar.gz

iproute-20061002　poweron

vi iptables.sh

ls

gao　　　iproute_20061002-2.diff.gz　vim-7.0

ipip-1.1.6　iproute_20061002-2.dsc　　vim_7.0-122+1.diff.gz

ipip_1.1.6.dsc iproute_20061002.orig.tar.gz　vim_7.0-122+1.dsc

ipip_1.1.6.tar.gz iptables.sh　vim_7.0.orig.tar.gz

iproute-20061002　poweron

cpio --help

Usage: cpio [OPTION...] [destination-directory]

GNU 'cpio' copies files to and from archives

Examples:

# Copy files named in name-list to the archive

cpio -o < name-list [> archive]

# Extract files from the archive

cpio -i [< archive]

# Copy files named in name-list to destination-directory

Informative options:

-?, --help　　　　Give this help list

--license　　　Print license and exit

--usage　　　Give a short usage message

--version　　　Print program version

Mandatory or optional arguments to long options are also mandatory or optional

for any corresponding short options.

Report bugs to <bug-cpio@gnu.org>.

wall hello

wall: can't read hello.

root@localhost:～#

本例使用指令“fc 345 339”，依次执行编号为 345～339 的指令，执行结果如上所示。

1.4.15 fgconsole指令：输出虚拟终端的数目

学习目标 学习 fgconsole 指令的用法

语法 fgconsole

功能说明 在命令行下输入 fgconsole 指令，将输出虚拟终端的数目。

基础应用

范例52 显示虚拟终端的数目。

[root@localhost～]# fgconsole　　　//显示虚拟终端的数目

5

[root@localhost～]#

本例使用指令fgconsole，显示虚拟终端的数目。

1.4.16 gcov指令：coverage测试工具

学习目标 学习使用 gcov 指令进行测试

语法 gcov[必要参数][选择性参数]

功能说明 gcov 指令是伴随 gcc 发布的一个 coverage 测试工具，执行函数覆盖、语句覆盖和分支覆盖。gcov指令主要使用.gcno和.gcda两个文件。

.gcno是由-ftest-coverage产生的，它包含了重建基本块图和相应块的源码的行号信息。

.gcda是由加了-fprofile-arcs编译参数编译后的文件运行所产生的，它包含了弧跳变的次数和其他的概要信息（而gcda只能在程序运行完毕后才能产生）。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例53 使用gcov指令查看程序的分支。

//查看待测试程序的内容

[ywliu@ywliu～]$cat rt.c

#include <stdio.h>

void rt( int list[], int size )

{

int i, j, temp, swap = 1;

while (swap)

{

swap = 0;

for ( i = (size-1) ; i >= 0 ; i-- ) {

for ( j = 1 ; j <= i ; j++ ) {

if ( list[j-1] > list[j] ) {

temp = list[j-1];

list[j-1] = list[j];

list[j] = temp;

swap = 1;

}

}

}

}

}

int main()

{

int theList[10]={10, 9, 8, 7, 6, 5, 4, 3, 2, 1};

int i;

rt( theList, 10 );

for (i = 0 ; i < 10 ; i++) {

printf("%d\n", theList[i]);

}

}

//产生可执行文件，为gcov准备镜像

[ywliu@ywliu～]$ gcc rt.c -o rt -ftest-coverage -fprofile-arcs

//运行rt.c

[ywliu@ywliu:～]$ ./rt

//使用gcov指令查看程序的分支

[ywliu@ywliu]:～$ gcov -b rt.c

[ywliu@ywliu]:～$ gcov -b rt.c

执行 gcov–b rt.c 的结果将被保存到文件 rt.c.gcov 中，cat 指令可以查看文件的内容。

1.4.17 dialog 指令：在Shell 下的对话框创建命令

学习目标 学习 dialog 指令的基本用法

语法 dialog [参数选项]

功能说明 Linux 下的 dialog 指令的图形化程序开发指令，dialog 可以和 Shell 脚本配合使用创建各种类型的图形框。

参数说明 指令的通用选项说明如下：

常用的对话框控件选项说明如下：

续表

基础应用

范例54 创建一个输入对话框。

#dialog --title“Input your logname” --inputbox“Please input your logname:”10 30

本例使用指令 dialog --title“Input your logname” --inputbox“Please input your logname:”10 30 创建一个输入对话框。

1.4.18 ipcrm指令：删除消息队列、旗语设置或者共享内存的ID

学习目标 学习使用 ipcrm 指令删除共享内存的方法

语法 ipcrm[选择性参数]

功能说明 ipcrm 指令用来删除消息队列、旗语设置或者共享内存段。需要删除的进程号将用参数指定。

参数说明 选择性参数的具体说明如下：

基础应用

范例55 显示进程间的通信信息。

[root@localhost drivers]# ipcs　　//显示进程间的通信信息

------ Shared Memory Segments --------

keyshmid owner perms bytes nattch status

0x00000000 32768gdm 600 393216 2 dest

------ Semaphore Arrays --------

keysemid owner perms nsems

------ Message Queues --------

keymsqid owner perms used-bytes messages

[root@localhost drivers]#

本例使用指令“ipcs”显示进程间的通信信息。

范例56 删除指定进程号的共享内存。

[root@localhost drivers]# ipcrm -m 32768 //删除进程32768的共享内存

[root@localhost drivers]#

本例使用指令“ipcrm -m 32768”删除进程 32768 的共享内存。

1.4.19 manpath 指令：设置man 手册的查询路径

学习目标 掌握如何使用 manpath 命令设置 man 查询

语法 manpath[必要参数][选择性参数]

功能说明 manpath 指令用来设置 man 指令查找时的路径。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例57 列出目前的查询路径。

[root@localhost root]# manpath

/usr/kerberos/man:/usr/local/share/man:/usr/share/man/en:/usr/share/man:/usr/X11R6/man:/usr/local/man

范例58 指定查询路径。

[root@localhost root]# manpath -M /home/wangyi

/home/wangyi

1.4.20 uname指令：显示系统信息

学习目标 掌握 uname 指令显示系统信息

语法 uname [-可选参数]

功能说明 uname 指令可以用来显示系统的硬件和软件的相关信息。

参数说明 可选参数及其说明如下：

基础应用

范例59 显示计算机类型和在网络上的名称。

[root@localhost～]# uname -mn　　　//按指定显示系统信息

localhost.localdomain i686

[root@localhost～]# uname–m

i686

[root@localhost～]# uname–n

localhost.localdomain

[root@localhost～]#

使用uname指令可以很便捷地查询当前主机的网络名称。

1.4.21 free 指令：显示内存信息

学习目标 能应用 free 指令来查看系统内存的使用情况

语法 free [-可选参数]

功能说明 利用 free 指令可以显示系统内存的使用情况和空闲情况，它使用简单，占用的系统资源也很少。在该指令的输出结果中包含了物理内存、交换区内存、虚拟内存及缓冲区内存等的使用情况。free 指令还可以作为一个实时监控，连续、不间断地监视系统内存的使用情况。

参数说明 可选参数及其说明如下：

续表

基础应用

范例60 显示系统的内存使用情况。

显示内容的第一行反映的是物理内存Mem的使用情况：total表示内存总数515492；used表示已经使用的内存情况473116；free表示空闲的内存数42376；shared表示废弃的内存0；buffers 内存数为 79928；cached 为 274000。其中，total= used + free。

显示内容的第二行，－/+ buffers/cache: 119188396304 的意思是：-buffers/cache的内存数：119188，其值= used－buffers–cached，反映的是被程序占用的内存数；+buffers/cache的内存数为：396304 = free + buffers + cached，反映的是空闲的可以使用的内存数。

显示内容的第三行反映的是系统交换分区的使用情况。

范例61 实时监控内存的使用情况。

1.4.22 history 指令：显示历史指令

学习目标 学习使用 history 指令来显示历史命令并对其进行追加执行或删除

语法 history [-可选参数]

功能说明 history 指令可以显示之前执行过的所有指令以及指定的最近的 n 个指令，输出的历史信息是按时间顺序进行排列的。Shell 的 history 历史记录文件是由环境变量HISTFILE指定的，在bash中history记录被保存到文件～/.bash_history中，而csh中的history记录被保存到文件～/.history 中。用户要想执行历史命令中的某个指令，只需输入“!”加上指令的顺序编号即可。history 的用法非常灵活，使用好 history 指令可以有效地提升效率。

参数说明 可选参数及其说明如下：

基础应用

范例62 显示当前系统的历史记录，并执行指定的指令。

执行指令“history”显示所有的历史命名，然后输入指令“！545”将执行输出的历史命令中编号为545的指令free，在Shell中缓存保存的历史指令个数是由环境变量“HISTSIZE”指定的。

范例63 显示最近的10个指令，并清除以往的历史记录。

[root@localhost ～]# history　10　　　//显示最近的10个指令

544 man free

545 free

546 groups

547 halt

548 halt–p

549 help

550 help help

551 history

552 free

553 history 10

[root@localhost ～]# history–c　　　　//清除历史记录

[root@localhost ～]# history

1 history

[root@localhost ～]#

执行指令“history 10”显示最近的 10 个命名，然后输入指令“history–c”将历史记录全部清除。

1.4.23 &指令：将任务放到后台执行

学习目标 理解前后台操作概念，掌握让进程在后台执行的方法

语法 指令&

功能说明 在要执行的指令后加上&，可以使进程在后台执行。

基础应用

范例64 让进程在后台执行。

[root@localhost～]# ftp 192.168.88.2 &　　//让进程在后台执行

[1] 9934

[root@localhost～]# Connected to 192.168.88.2.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.88.2:root): iplab604

-bash: iplab604: command not found

[1]+　Stopped　　　　ftp 192.168.88.2

[root@localhost～]#

本例使用指令“ftp 192.168.88.2 &”使 ftp 进程在后台运行。

1.5 Linux系统设置指令

1.5.1 crontab 指令：设置计时器

学习目标 学习使用 crontab 指令来制定系统任务的执行时间表

语法 crontab [-u <用户名称>] [-可选参数]

功能说明 用户利用 crontab 指令可为自己或其他的指定用户制定任务表，它通过 cron程序表，在一定的时间间隔下调度任务的执行。如果用户在指令中指定了命令文件，那么指令将把这个指定文件复制到crontab下，作为命令文件。若指令中未对命令文件进行指定，指令将从标准输入设备读取数据，并保存到crontab下。

crontab指令完成用户任务定时调用功能，实际是通过cron程序表来实现的。crontab指令可以安装、卸载或显示驱动cron程序的表格。cron是一个常驻服务，它提供计时器的功能，让用户在特定的时间得以执行预设的指令或程序。在 Linux 系统中每一位用户都用自己的crontab 配置文件，它的格式为 Minute Hour Day Month DayOFWeek Command，由 6部分组成，各部分的具体功能如下：

【crontab配置文件格式】

Minute：指定命令执行的时间间隔单位中的分钟，0～59。

Hour：指定命令执行的时间间隔单位中的小时，0～23。

Day：指定命令执行的时间间隔单位中的日期，1～31。

Month：指定命令执行的时间间隔单位中的月份，1～12。

DayOFWeek：指定命令执行的时间间隔单位中的星期数，0～7。

Command：工作命令 Shell script。

参数说明 可选参数及其说明如下：

基础应用

范例65 编辑指定用户的crontab文件。

[root@localhost ～]#crontab–u mary -e　　//编辑用户mary的crontab设置

执行指令“crontab–u mary–e”用户就可以通过添加或删除作业，来编辑指定用户 mary的crontab文件内容。

范例66 显示当前计时器的设置。

[root@localhost ～]#crontab -l　　　　//显示当前的crontab设置

# DO NOT EDIT THIS FILE - edit the master and reinstall.

# (/tmp/crontab.3672 installed on Thu Jan 1 15:55:18 2009)

# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)

0 0-23/6 * * * clear

30 3 * * * free

[root@localhost ～]#

执行指令“crontab–l” 显示当前计时器的设置内容。

1.5.2 declare 指令：声明 Shell 变量

学习目标 学习如何查询和定义 Shell 环境变量

语法 declare [可选参数][变量名＝设置值]

功能说明 declare 指令可用来声明 Shell 变量，因为 Shell 变量不同于环境变量，它只在当前的Shell程序中起作用，如果更改当前Shell这些声明变量就不再有效了。所以在declare指令中给出了x参数，可以将Shell变量转换成环境变量，这样就可以避免因Shell切换所带来的Shell变量的失效问题。直接输入declare指令将显示当前Shell中所有它定义的变量。

参数说明 可选参数及其说明如下：

续表

基础应用

范例67 定义Shell变量和新的环境变量。

[root@localhost～]# declare dvd_var=”DVD-RAM/DVD±RW”　//定义字符型Shell变量

[root@localhost～]# declare sum1_var=”120+112”　　　//定义Shell变量sum1_var

[root@localhost～]# declare–i sum2_var=”120+112”　　//定义Shell变量sum2_var

[root@localhost～]# declare–p dvd_var sum1_var sum2_var　//显示Shell变量

declare --dvd_var=“DVD-RAM/DVD±RW”

declare --sum1_var=”120+112”

declare–i sum2_var=”232”

[root@localhost～]# declare–x dvd_var　　　　　//将dvd_var转换成环境变量

[root@localhost～]#

declare指令不能直接创建一个环境变量，只能将一个已存在的变量变成环境变量。用户使用declare指令不仅可以将变量赋值为字符、数值，还能将其设置为表达式。

1.5.3 depmod 指令：模块关系

学习目标 能使用 depmod 指令来分析各个内核加载模块之间的关系。

语法 depmod [-可选参数] [模块文件名]

功能说明 depmod 指令可以用来检查各模块间的依赖关系，并将检查结果输出到系统的标准输出设备。它是供 modprobe 在安装模块时使用的工具程序。用户可以在指令中指定要检查的内核文件的名称，也可以对系统中的所有可用模块进行检查。

参数说明 可选参数及其说明如下：

续表

基础应用

范例68 显示所有可用模块间的关系。

[root@localhost ～]# depmod -a　　　　//显示所有可用的模块间的关系

执行指令“depmod–a”将检查所有可用模块间的依赖关系。一般情况下会将“depmod–a”指令加入文件/etc/rc.d/rc.S(Slackwar)或/etc/rc.d/rc.sysinit(Redhat)中，实现开机后对模块依赖关系的自动分析。

1.5.4 dircolors 指令：ls 指令对应的显示颜色设置

学习目标 掌握 dircolors 设置 ls 显示目录或文件时的色彩

语法 dircolors [-可选参数] [色彩配置文件]

功能说明 如果用户使用的是彩显，可使用dircolors指令来设置ls输出内容的显示色彩。它的功能类似于“ls --color”指令，将 ls 输出信息的每一列以不同的颜色来显示。Dircolors指令可根据指令中指定的色彩配置文件的内容来设置Shell的环境变量LS_COLORS，确定不同颜色与文件类型等之间的配置。如果未指定相关的配置文件，则使用预先编译好的颜色配置数据库。

参数说明 可选参数及其说明如下：

基础应用

范例69 显示默认的颜色配置数据库。

[root@localhost～]# dircolors --print-database　　　//显示默认的数据库

# Configuration file for dircolors, a utility to help you set the

# LS_COLORS environment variable used by GNU ls with the --color option.

# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the

# slackware version of dircolors) are recognized but ignored.

# Below, there should be one TERM entry for each termtype that is colorizable

TERM Linux

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

---------------------------------------------------//省略部分输出结果

.mpeg 01;35

.avi 01;35

.fli 01;35

.gl 01;35

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

-------------------------------------------------//省略部分输出结果

.ogg 01;35

.mp3 01;35

.wav 01;35

[root@localhost～]#

执行指令“dircolors --print-database”将显示颜色配置数据库的相关内容。

范例70 设置环境变量LS_COLORS。

[root@localhost～]# dircolors -b > tmp　　//显示默认的数据库

[root@localhost～]#

执行指令“dircolors -b > tmp”按预置颜色配置数据库内容生成代码。

1.5.5 dmesg指令：显示内核信息

学习目标 能使用 dmesg 指令来显示内核中 ring buffer 缓冲区的信息

语法 dmesg [-可选参数]

功能说明 dmesg 指令可通过检测内核的 ring buffer 缓冲区，来显示当前系统开机及运行中内核的输出信息。开机时，系统内核会将开机信息保存在/var/log目录中的dmesg文件里，而且会在标准输出设备上进行显示，但过程很短。由于此信息只在本地终端上输出，所以远程用户要想查看系统的开机信息，必须使用dmesg指令将信息输出到远程主机。

参数说明 可选参数及其说明如下：

基础应用

范例71 输出Linux系统的开机信息。

[root@localhost ～]# dmesg　　　　//输出Linux系统的开机信息

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

------------------------------------------------ //省略部分输出结果

[root@localhost ～]#

执行指令“dmesg”将输出Linux系统缓冲区的开机信息。

1.5.6 enable 指令：激活或关闭Shell 内建指令

学习目标 学会使用 enable 指令来激活/关闭 Shell 内建指令

语法 enable [-可选参数]

功能说明 用户利用 enable 指令可关闭或激活 Shell 的内建指令。Shell 的主要功能就是命令解释，Linux中的所有可执行文件，无论是内建指令，还是外部命令，都可以通过Shell程序v来运行。当用户输入一命令后，Shell将首先判断该命令是否为Shell的内建命令，如果是就通过Shell内部的命令解释器来解释指令，然后转交给Linux内核来执行。如果是外部命令或实用程序，Shell将先在硬盘中查找该命令，然后调入内存将其解释为系统功能并转交给系统内核执行。

【Linux系统中的可执行文件】

Linux 命令：存放在/bin，/sbin 目录下的命令。

内置命令：出于效率的考虑，将一些常用命令的解释程序构造在 Shell 内部。

实用程序：存放在/usr/bin、/usr/sbin、/usr/share、/usr/local/bin 等目录下的实用程序或工具。

用户程序：用户程序经过编译生成可执行文件后，也可作为 Shell 命令运行。

Shell 脚本：由 Shell 语言编写的批处理文件。

参数说明 可选参数及其说明如下：

基础应用

范例72 显示Shell内置指令。

[root@localhost～]# enable　　//显示Shell指令

enable .

enable :

enable [

enable alias

enable bg

enable bind

enable break

enable builtin

enable caller

enable cd

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

------------------------------------------------ //省略部分输出结果

enable help

enable history

enable jobs

enable kill

enable let

enable local

enable logout

enable popd

enable printf

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

------------------------------------------------ //省略部分输出结果

enable suspend

enable test

enable times

enable trap

enable true

enable type

enable typeset

enable ulimit

enable umask

enable unalias

enable unset

enable wait

[root@localhost～]#

执行指令“enable”将显示系统中所有已经开启的Shell的内置指令，它的执行效果与指令“enable -a”相同。

范例73 Shell内建指令的激活和关闭。

[root@localhost～]# enable -n pwd　　　//关闭Shell内建指令

enable -n pwd

[root@localhost～]# enable pwd　　　　//激活Shell内建指令

执行指令“enable–n pwd”将关闭指定的 Shell 内建指令，同时如果运行指令“enable pwd”将激活指定的Shell内建指令。

1.5.7 eval指令：执行多个指令

学习目标 学会使用 eval 指令来执行多个 Shell 指令

语法 eval [指令]

功能说明 eval 指令可执行多个指令。每个指令就是一个字符串参数，之间用分号隔开，且不限个数。它能读取这一连串的字符串参数，并把这些字符串看作命令，再按参数本身的特性来执行。

基础应用

范例74 执行多个指令。

[root@localhost～]# eval dircolors --print-database; crontab -l　　//执行多个指令

# Configuration file for dircolors, a utility to help you set the

# LS_COLORS environment variable used by GNU ls with the --color option.

# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the

# slackware version of dircolors) are recognized but ignored.

# Below, there should be one TERM entry for each termtype that is colorizable

TERM Linux

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

---------------------------------------------------　　//省略部分输出结果

.ogg 01;35

.mp3 01;35

.wav 01;35

# DO NOT EDIT THIS FILE - edit the master and reinstall.

# (/tmp/crontab.3672 installed on Thu Jan 1 15:55:18 2009)

# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)

0 0-23/6 * * * clear

30 3 * * * free

[root@localhost～]#

执行指令“eval dircolors --print-database; crontab -l”，将用分号连接的字符串参数 dircolors --print-database 和 crontab -l”分别看作两个指令同时在执行。

1.5.8 export指令：设置或显示环境变量

学习目标 能使用 export 指令来设置、查看或删除 Shell 的环境变量

语法 export [-可选参数]环境变量[=变量值]

功能说明 export 指令可以设置或修改 Shell 环境变量的值。当登录到系统后，系统将为用户启动一个用户Shell，在这个Shell中，用户可以运行Shell指令、变量声明或运行Shell脚本程序。当运行 Shell 脚本程序时，系统将为其创建一个子 Shell。此时，系统中将有两个 Shell，而在子 Shell 中定义的环境变量只是该子 Shell 内的一个局部变量，在该子 Shell内有效，其他的Shell不能使用。如果用户想在其他Shell中使用该变量，可以使用export命令对已定义的变量进行输出，使系统在创建每一个新的Shell时，同时定义这个变量的一个拷贝。

参数说明 可选参数及其说明如下：

基础应用

范例75 显示当前所有的环境变量。

[root@localhost～]# export -p　　//列出当前的环境变量值

declare -x BASH_ENV="/root/.bashrc"

declare -x G_BROKEN_FILENAMES="1"

declare -x HISTSIZE="1000"

declare -x HOME="/root"

declare -x HOSTNAME="localhost.localdomain"

declare -x INPUTRC="/etc/inputrc"

declare -x KDEDIR="/usr"

declare -x LANG="zh_CN.UTF-8"

declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"

declare -x LOGNAME="root"

declare–x

LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;so=01;35:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;3 1:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;3 1:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"

declare -x MAIL="/var/spool/mail/root"

declare -x OLDPWD

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

---------------------------------------------------　　　//省略部分输出结果

declare -x SSH_TTY="/dev/pts/1"

declare -x TERM="vt100"

declare -x USER="root"

[root@localhost～]#

本例执行指令“export–p”列出所有的环境变量。

范例76 设置环境变量。

[root@localhost～]# export M_ENV=　http://www.Linux.org/　//定义环境变量

[root@localhost～]#

[root@localhost～]# M_ENV=http://www.Linux.org/　　　　//定义变量

[root@localhost～]# export M_ENV　　　　　　　　//将变量转换成环境变量

[root@localhost～]#

使用export指令可以直接定义一个环境变量，也可以将一个普通的变量转换成环境变量。但在 csh 中使用 setenv 指令来设置环境变量 setenv M_ENV http://www.Linux.org/。

1.5.9 fbset 指令：设置帧缓冲区

学习目标 学会使用 fbset 指令来设置系统的显示模式

语法 fbset [-可选参数] [显示模式]

功能说明 fbset 指令是一个系统视频工具，可以用于改变视频设备的显示模式。使用fbset指令不仅可以设置景框缓冲区的大小，调整画面的分辨率、位置、高低宽窄、色彩深度，还可以激活或关闭显卡的默写设置项。

参数说明 可选参数及其说明如下：

基础应用

范例77 改变帧缓冲模式。

[root@localhost～]# fbset fbnew.modes　　　　//改变帧缓冲模式

执行指令“fbset fbnew.modes”根据新的配置文件信息来设置显示模式。

实战思考

应用思考

执行“fbset–a 1024×768”指令改变所有使用该设备的虚拟终端机的显示模式。

1.5.10 lilo 指令：引导安装程序

学习目标 能使用 lilo 指令来引导安装内核，并管理开机功能

语法 lilo [-可选参数]

功能说明 lilo（the Linux loader）是 Linux 系统的启动程序，具备多重引导功能。它不仅可以引导 Linux 操作系统，还可以引导 Windows 等其他操作系统。它可用来安装一个启动装载程序，以管理系统的开机功能。单独执行 lilo 时，它会根据/etc 目录下的 lilo.conf 配置文件来安装lilo。

参数说明 可选参数及其说明如下：

基础应用

范例78 指定lilo的配置文件。

[root@localhost ～]# lilo -C /etc/lilo.conf0

lilo的配置文件中一般包含以下几点内容：指定lilo的安装引导扇区；lilo启动时的显示菜单；启动延迟时间；新内核的默认映像以及完整路径等相关项目。用户可以使用lilo指令来修改这些选项，然后再执行lilo指令将修改信息写入磁盘，使新的设置生效。

1.5.11 liloconfig指令：设置程序的载入

学习目标 了解 liloconfig 指令的基本用法，能使用该指令进行 lilo 程序的安装和设置

语法 liloconfig

功能说明 liloconfig 指令是 Slareware 发行版专为调整 lilo 引导安装程序而设置的程序。用户可通过互动的操作界面和方向键轻松地进行lilo程序的安装和设置，不再需要编写相关的配置文件。

基础应用

范例79 开启liloconfig。

[root@localhost～]# liloconfig　　　//开启liloconfig

执行指令“liloconfig”将进入liloconfig的互动界面。

1.5.12 lsmod 指令：显示Linux内核的模块信息

学习目标 学会使用 lsmod 指令来显示已载入系统的所有模块的信息

语法 lsmod

功能说明 lsmod 指令可用来显示所有已载入系统的模块。在 Linux 系统中所有的功能都是以模块的形式进行加载的，相关加载模块的信息都存放在文件/proc/modules 中。执行lsmod指令就是通过读取该文件来获取当前内核装载模块的信息。

基础应用

范例80 显示当前系统下的模块信息。

[root@localhost～]# lsmod　　　　//显示载入系统的模块信息

Module　　　　Size　Used by

lp　　　　13001　0

parport　　　40585　2 parport_pc,lp

bluetooth　　　56133　4 rfcomm,l2cap

sunrpc　　　167813　1

button　　　　6609　0

battery　　　　9413　0

ipv6　　　　268097　10

uhci_hcd　　　35152　0

gameport　　　18633　1 snd_ens1371

snd_rawmidi　　　30305　1 snd_ens1371

soundcore　　　10913　1 snd

snd_page_alloc　　9669　1 snd_pcm

pcnet32　　　36165　0

mii　　　　5441　1 pcnet32

floppy　　　　65269　0

ext3　　　　132553　2

jbd　　　　86233　1 ext3

BusLogic　　　79445　3

sd_mod　　　　20545　4

[root@localhost～]#

执行指令“lsmod”将显示当前系统装载的模块信息。

1.5.13 minfo指令：显示MS-DOS文件系统的各项参数

学习目标 使用 minfo 指令来显示 MS-DOS 文件系统的各项参数

语法 minfo [-可选参数] [驱动器代号]

功能说明 minfo 是 mtools 工具指令，使用该指令可显示 MS-DOS 文件系统中包括磁区数、磁头数在内的各项参数。

参数说明 可选参数及其说明如下：

基础应用

范例81 显示MS-DOS文件系统的各项参数。

[root@localhost～]# minfo

执行指令“minfo”将显示MS-DOS文件系统的各项参数。

1.5.14 mkkickstart 指令：建立安装的组态文件

学习目标 学会使用 mkkickstart 指令来建立安装的组态文件

语法 mkkickstart [-可选参数]

功能说明 mkkickstart 指令可根据目前系统的设置来建立安装组态文件，供其他电脑用户安装时使用。这个文件的内容包括使用语言、系统磁盘状态以及X-Windows设置等信息。

参数说明 可选参数及其说明如下：

基础应用

范例82 建立安装的组态文件。

[root@localhost～]# mkkickstart --nox–bootp

执行指令“mkkickstart --nox–bootp” 根据目前系统的设置建立安装的组态文件。

实战思考

应用思考

执行指令“mkkickstart --nop 远端电脑:路径”进行指定的网络路径安装。

1.5.15 modinfo指令：显示内核信息

学习目标 能使用 modinfo 指令来显示内核模块的信息

语法 modinfo [-可选参数]模块文件

功能说明 modinfo 指令可用来显示指定的内核模块的信息。在指令中必须指定内核模块的路径和文件名称。

参数说明 可选参数及其说明如下：

基础应用

范例83 显示模块信息。

[root@localhost lp]# modinfo lp.o

实战思考

应用思考

使用“modinfo–a cd”指令来显示模块开发人员的信息。

1.5.16 modprobe 指令：自动处理可载入模块

学习目标 学会使用 modprobe 指令来加载内核模块

语法 modprobe [-可选参数] [模块文件]

功能说明 modprobe 指令的功能和 insmod 类似，它会根据指定模块内部的依赖关系来自动安装所有依赖的模块，一旦发生错误将卸载与之相关的所有模块。

参数说明 可选参数及其说明如下：

续表

基础应用

范例84 安装驱动模块。

[root@localhost～]# modprobe–a usb_driv.o

实战思考

应用思考

执行指令“modprobe–r usb_driv.o”删除指定的模块，对比 modprobe 指令和 insmod 指令。

1.5.17 ntsysv 指令：设置系统的各种服务

学习目标 学会使用 ntsysv 指令来设置系统的各种服务

语法 ntsysv [-可选参数]

功能说明 ntsysv 指令提供交互模式下的系统设置，执行该指令后将进入图形化界面。在交互模式下，用户可通过键盘上的方向键来流览菜单选项，使用空白键来选取或取消相关的系统服务，使用[Tab]键来进行功能切换服务并对其进行设置。

参数说明 可选参数及其说明如下：

基础应用

范例85

[root@localhost～]#ntsysv --level 35

ntsysv 工具为启动或停止服务提供了简单的界面，使用ntsysv可以启动或关闭由xinetd管理的服务，同时还可以配置运行级别。指令“ntsysv --level 35”配置运行级别 3 和 5。

1.5.18 rdate指令：显示其他主机的日期与时间

学习目标 学会使用 rdate 指令来查询远端主机的系统时间信息

语法 rdate [-可选参数]主机/IP 地址

功能说明 执行 rdate 指令可以查询指定的远端主机的系统时间，并输出到本地主机的标准显示设备。

参数说明 可选参数及其说明如下：

基础应用

范例86 获取指定的远端主机的系统时间，并根据返回的时间来设置本地主机的系统时间。

[root@localhost～]# rdate–s 192.168.0.1 //从 192.168.0.1 获取时间信息

使用指令“rdate–s 192.168.0.1”可以实现不同主机系统时间的同步。在局域网中客户机可通过该指令来同步于服务器的时间。

实战思考

应用思考

Rdate可用来同步本地主机和服务器时间，也可通过指令“radte–p远端主机IP”来查看远端主机的时间信息。

1.5.19 reset指令：设置终端机状态

学习目标 了解 reset 指令的基本功能

语法 reset [-可选参数] [终端]

功能说明 reset 指令可用来设定终端机的状态，或在终端机因程序异常而出现故障时，将终端机的状态回复到原始状态。还可自动根据 Shell 环境变量或其他信息来设置终端机的类型，也可由用户来输入终端机的类型。如果用户指定的终端类型为“?”，指令会要求用户输入终端类型。

参数说明 可选参数及其说明如下：

基础应用

范例87 显示设定终端机的命令字符串。

[root@localhost～]# reset–s　　//显示设定终端机的命令字符串

Erase is control-B (^B)

Kill is control-U (^U)

Interrupt is control-C (^C)

TERM=xterm

[root@localhost～]#

执行指令“reset–s”将在当前终端上显示设定终端机状态的命令字符串。

1.5.20 resize 指令：设置终端机的视窗大小

学习目标 能运用 resize 指令来设置终端机的视窗大小

语法 resize [-可选参数]

功能说明 执行 resize 指令可设置虚拟终端视窗屏幕的大小。

参数说明 可选参数及其说明如下：

基础应用

范例88 使用resize指令来设置虚拟终端的显示屏大小。

[root@localhost～]# resize -s 80 160　　　//直接在resize指令中设置屏幕大小

COLUMNS=160;

LINES=80;

export COLUMNS LINES;

[root@localhost～]#

用户不仅可以在指令中直接输入视窗的行数和列数，还可以在其他模式下进行设置。如以下就是在 C Shell 模式下进行虚拟的屏幕大小设置：

[root@localhost～]# resize -c　　　//使用C Shell设置屏幕

set noglob;

setenv COLUMNS '160';

setenv LINES '80';

unset noglob;

[root@localhost～]#

使用 Bourne Shell 设置虚拟屏幕的大小

[root@localhost～]# resize -u　　　//使用Bourne Shell设置虚拟屏幕

COLUMNS=160;

LINES=80;

export COLUMNS LINES;

[root@localhost～]#

在上例中我们讲解了设置视窗大小的三种不同方法。

实战思考

应用思考

尝试使用 resize 指令在 C Shell 模式、Bourne Shell 模式或直接使用-s 参数来设置虚拟终端的视窗大小，并对比三种方式的区别。

1.5.21 rmmod 指令：删除模块

学习目标 能使用 rmmod 指令来删除内核中不再需要的模块

语法 rmmod [-可选参数] [模块]

功能说明 rmmod 指令可从运行的系统内核中卸载不需要的模块。Linux 操作系统的核心具有模块化的特性，用户可以很方便地进行模块的加载和卸载。

参数说明 可选参数及其说明如下：

基础应用

范例89 卸载内核中的指定模块。

[root@localhost～]# rmmod lp　　　　　//卸载模块hid

执行指令“rmmod lp”将删除模块 lp，如要删除的模块与其他模块有依赖关系，特别是被其他安装模块所依赖的话，用户需要显示删除依赖它的其他模块，才能删除掉该模块。

1.5.22 rpm指令：管理RPM包

学习目标 学会如何使用 rpm 指令来管理 RPM 套件

语法 rpm [-可选参数]软件包

功能说明 rpm 是 Red Hat 推出的一款功能强大的包管理器，是 Linux 下最重要的软件包管理工具，在除 Red Hat 以外的其他 Linux 发行版中也被广泛采用。用户使用 rpm 指令可以进行软件的安装、建立、卸载、查询、升级、验证等各种操作。而 RPM 套件本身的安装和升级也很方便，现在有许多RPM套件是专门针对特定的CPU建立的，它的扩展名也不尽相同。

【RPM套件的扩展名和CPU】

noarch.rpm：适用于所有的计算机系统，不依赖于所采用的 CPU 类型。

alpha.rpm：适用于采用 HP Alpha CPU 的计算机系统。

athlon.rpm：适用于采用 AMD Athlon CPU 的计算机系统。

i386.rpm：适用于基于 Intel 386 CPU 的所有机型，可以在所有 Inter 兼容的计算机系统上进行安装。

i486.rpm：适用于采用 Intel 486 CPU 的计算机系统。

i586.rpm：适用于采用 Intel 586 CPU 的计算机系统。

i686.rpm：适用于采用 Intel 686 CPU，即 Intel32 位 Pentium 系统和 AMD32 位 CPU的计算机系统。

ia64.rpm：适用于采用 Inter Itanium 64 位 CPU 的计算机系统。

ppc.rpm：适用于采用 Apple PowerPC CPU 的计算机系统。

s390.rpm：适用于采用 S/390 CPU 的 IBM 服务器系统。

sparc.rpm：适用于采用 Sun Microsystems SPARC CPU 的计算机系统。

参数说明 可选参数及其说明如下：

续表

续表

续表

基础应用

范例90 安装RPM套件。

[root@localhost～]# rpm -vih *********.rpm　　　//安装RPM软件包

Preparing...　　################################### [100%]

1:RealPlayer　z################################## [100%]

[root@localhost～]#

执行指令“rpm -vih *********.rpm”将在 Linux系统中安装指定的以.rpm 作为后缀的 RPM包。RPM是 RedHat Package Manager（RedHat 软件包管理工具）的缩写，它可用于互联网下载数据的打包及安装，同时还管理着系统已安装的所有RPM程序组件的资料。

范例91 卸载软件包。

[root@localhost～]# rpm -e setup　　　//卸载软件setup

[root@localhost～]#

卸载软件包与安装软件包不同，只需在指令中输入软件包名即可，如本例所示。

实战思考

应用思考

1.RPM 指令不仅可用来安装或卸载软件包，还可用来查询软件包的版本，具体的形式如“rpm–q软件包名”。用户要想查询更多的关于软件包的问题，可输入“rpm–qi软件包名”来获取。

2.用户要想查询文件所属的软件包，可在命令行模式下输入指令“rpm–qf 指定文件路径”，将在标准输出设备上输出查询结果。如果用户在指令中输入的文件路径不是完整的路径，看看输出是否正确，想想为什么。

1.5.23 set 指令：设置 Shell

学习目标 能使用 set 指令来设置 Shell 的执行方式或 Shell 变量

语法 set [-可选参数] [-o 选项]

功能说明 set 指令可根据不同的需求来设置当前所使用 Shell 的执行方式，同时也可用来设置或显示Shell变量的值。当指定某个单一的选项时将设置Shell的常用特性，如果在选项后使用-o参数将打开特殊特性，使用+o将关闭相应的特殊特性。而不带任何参数的set指令将显示当前Shell中的全部变量，且总是返回true，除非遇到非法的选项。

参数说明 可选参数及其说明如下：

续表

续表

基础应用

范例92 显示当前Shell环境变量的设置。

[root@localhost ～]# set　　　　　　//显示Shell环境变量的设置

BASH=/bin/bash

BASH_ARGC=()

BASH_ARGV=()

BASH_LINENO=()

BASH_SOURCE=()

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

------------------------------------------------------------ //省略了部分输出

INPUTRC=/etc/inputrc

LANG=c

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

------------------------------------------------------------ //省略了部分输出

SSH_TTY=/dev/pts/1

SUPPORTED=zh_CN.UTF-8:zh_CN:zh

TERM=xterm

UID=0

USER=root

[root@localhost ～]#

在Shell命令行模式下直接输入set指令将显示目前Shell下的所有环境变量，set指令不仅可用来显示Shell环境变量，还可设置环境变量。

范例93 使用set指令设置环境变量。

[root@localhost ～]# echo $HOME　　//输出环境变量HOME

/root

[root@localhost ～]# set HOME "/home/mary" //设置环境变量

[root@localhost ～]# echo $HOME　　//输出环境变量HOME

/home/mary

[root@localhost ～]#

执行指令“set HOME "/home/mary"”设置环境变量 HOME 的值为/home/mary。

实战思考

应用思考

使用set指令设置Shell环境变量与export指令设置环境变量有何差异？为什么？

1.5.24 setconsole 指令：设置系统终端

学习目标 掌握如何使用 setconsole 指令来指定系统终端

语法 setconsole [必要参数]

功能说明 用户执行 setconsole 指令可自行指定当前系统的显示终端。

参数说明 必要参数及其说明如下：

基础应用

范例94 设置第二个串口为系统的终端。

[root@localhost ～]#setconsole ttyS1　　//设置第二个串口为终端

[root@localhost ～]#

执行指令“setconsole ttyS1”将第二个串口设置为系统终端，也可通过环境变量中的TERM来指定终端的类型。

范例95 设置主机显卡系统的终端。

[root@localhost ～]#setconsole video　　//设置主机上的显卡为终端

[root@localhost ～]#

执行指令“setconsole video”将主机上的显卡设置为系统终端。

1.5.25 setenv指令：查询或显示环境变量

学习目标 了解 setenv 指令的用法以及该指令和其他指令的区别

语法 setenv [环境变量][环境变量值]

功能说明 setenv 指令是 tsch 中用于查询和设置环境变量的工具。使用该指令可显示或设置当前系统的Shell环境变量的值，与前面讲的set指令有些类似。

基础应用

范例96 显示和设置当前系统的环境变量。

[root@localhost ～]# setenv　　　　　　　　　//显示当前系统的环境变量

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

------------------------------------------------------------ //省略输出

[root@localhost ～]# echo $USER

root

[root@localhost ～]# setenv USER mary　　　　　　//设置环境变量

1.5.26 setup 指令：设置公用程序

学习目标 学会使用 setup 指令来设置公用程序

语法 setup

功能说明 在 Linux 下直接输入 setup 指令将进入图形界面，在图形界面下进入 systemservices，用户就可以设置所需的服务项目，如登录认证设置、键盘和鼠标的组态设置、开机所要启动的系统服务设置、声卡组态设置、网络设置、时区设置、X-Windows组态设置等。其中“Enter”和“空格”表示确认，“Tab”表示切换。

基础应用

范例97 使用setup指令设置公用程序。

[root@localhost ～]# setup　　　　　　　//进入setup图形界面设置

1.5.27 ulimit指令：控制Shell 程序的资源

学习目标 掌握 ulimit 指令控制 Shell 程序的资源的用法

语法 ulimit [-可选参数]

功能说明 ulimit 指令是 Shell 的内建指令，可控制 Shell 的系统资源。

参数说明 可选参数及其说明如下：

续表

基础应用

范例98 显示当前系统资源的设置。

[root@localhost ～]# ulimit -a　　　//显示系统资源的设置

core file size　　(blocks, -c) 0

data seg size　　(kbytes, -d) unlimited

file size　　　(blocks, -f) unlimited

max locked memory　　(kbytes, -l) 8

max memory size　　(kbytes, -m) unlimited

open files　　　　　(-n) 1024

pipe size　　　(512 bytes, -p) 8

POSIX message queues　(bytes, -q) 819200

stack size　　　(kbytes, -s) 10240

cpu time　　　(seconds, -t) unlimited

max user processes　　　(-u) 6199

virtual memory　　(kbytes, -v) unlimited

[root@localhost～]#

执行指令“ulimit–a”将显示当前系统资源的设置。

范例99 设置单一用户可开启的程序数目上限。

[root@localhost～]# ulimit -u 400　　//设置单一用户可开启的程序数目上限

[root@localhost～]#

执行指令“ulimit -u 400”将设置单一用户可开启的程序数目上限为 400。

实战思考

应用思考

尝试以不同的用户身份登录系统控制 Shell 的系统资源，看看指令在不同的权限下是否都可用，为什么。

1.5.28 unalias 指令：删除别名

学习目标 能使用 unalias 指令来删除 alias 定义的指令别名

语法 unalias [-可选参数] [指令别名]

功能说明 unalias 指令可用来删除已设置的指令别名，如果指定的别名不存在，将提示用户“command not found”的错误信息。

参数说明 可选参数及其说明如下：

基础应用

范例100 删除指定别名。

[root@localhost ～]# unalias mary　　　　//删除指定别名

[root@localhost ～]#

执行指令“unalias mary”将删除别名 mary 的设置。

实战思考

应用思考

unalias指令与alias指令是一对，用户使用aliase指令可为较长的并常用的指令设置别名，而unalias指令将释放别名。如果用户在别名被删除或Shell重启后，在命令行下输入该别名，将会显示什么信息？

1.5.29 unset 指令：删除变量或函数

学习目标 学会使用 unset 指令来删除变量或函数

语法 unset [-可选参数]变量/函数

功能说明 unset 指令是 Shell 的内建指令，可用来删除指定的变量或函数。如果指定的变量是数组中的一个元素，指令的运行结果将只删除此元素；如果是整个数组变量，将整个删除此数组变量。Unset还可以删除环境变量，它与set指令的功能正好相反。

参数说明 可选参数及其说明如下：

基础应用

范例101 删除指定的环境变量。

[root@localhost～]# unset HOME　　//显示环境变量

[root@localhost～]#

执行指令“unset HOME”将删除指定的环境变量 HOME。

实战思考

应用思考

Unset指令是用于删除Shell环境变量的，set指令是用于设置Shell环境变量的，读者应清楚Shell变量和Shell环境变量的区别。

1.5.30 up2date指令：更新Linux 系统

学习目标 能使用 up2date 指令来在线升级 rpm 的套件

语法 up2date[-可选参数]

功能说明 up2date 指令可以保持系统的最新状态。

参数说明 可选参数及其说明如下：

基础应用

范例102 更新系统。

[root@localhost～]# up2date　　//更新系统

实战思考

应用思考

对比使用up2date和rpm指令来更新升级软件包的区别，尝试使用up2date指令来升级RPM软件包。

1.5.31 vmstat 指令：显示虚拟内存空间

学习目标 能使用 vmstat 指令来查看系统的虚拟内存空间

语法 vmstat [-可选参数]

功能说明 vmstat 指令可用来显示系统中的虚拟内存信息，以及硬盘的相关使用状况。

参数说明 可选参数及其说明如下：

基础应用

范例103 显示虚拟内存的使用信息。

[root@localhost～]# vmstat　　//显示虚拟内存的使用信息

procs -------memory------ ---swap-- ---io-- --system- ----cpu----

r　b　swpd free buff　cache　si　so　bi　bo　in　cs us sy id wa

0　0　0 250441　18096 159471　0　0　22　8 1032　23　0　1 96　1

[root@localhost～]#

执行指令vmstat将显示虚拟内存的使用信息。

1.5.32 reboot 指令：重新启动

学习目标 理解 Shell 命令行模式下的系统重启

语法 reboot [-可选参数]

功能说明 reboot 指令用来重新启动计算机，与“init 6”类似。

参数说明 可选参数及其说明如下：

续表

基础应用

范例104 重新启动主机。

[root@localhost～]# reboot　　//重新启动

Broadcast message from root (pts/0) (Sun May 27 22:47:48 2007):

The system is going down for reboot NOW!

[root@localhost～]#

执行指令“reboot”将显示如上提示信息，然后重新启动计算机。

实战思考

应用思考

尝试分别使用 reboot 指令和 init 6 重启系统。

1.5.33 suspend指令：暂停执行Shell

学习目标 学会暂停执行 Shell

语法 suspend [-可选参数]

功能说明 suspend 为 Shell 的内建指令，使用该指令可暂停目前正在执行的 Shell。如果目前执行的Shell为登入的Shell，则suspend预设无法暂停此Shell，需要使用参数-f来强迫暂停登入的Shell。若用户要恢复被暂停的Shell，则必须使用SIGCONT信息。

参数说明 可选参数及其说明如下：

基础应用

范例105 暂停目前正在执行的Shell。

[root@localhost～]# suspend　　　　//暂停Shell

-bash: suspend: cannot suspend a login shell

[root@localhost～]# suspend -f　　　　//强制暂停Shell

suspend 的预设无法暂停系统登入的 Shell，如果用户非要暂停此 Shell，可通过指令“suspend -f”来强制执行。

1.5.34 swatch 指令：系统监控程序

学习目标 通过 swatch 指令来监控系统的记录文件，并对其中事件做出反应。

语法 swatch [-可选参数]

功能说明 swatch 指令可用来监控系统的 syslog 记录文件，并在发生特定的事件时执行指定的动作。swatch所监控的事件以及对应事件的动作都存放在swatch的配置文件中。预设的配置文件为用户根目录下的.swatchrc。然而在 Red Hat Linux 的用户根目录下并没有.swatchrc配置文件，用户可将/usr/doc/swatch-2.2/config_files/swatchrc.personal文件复制到用户根目录下的.swatchrc，然后修改.swatchrc所要监控的事件及执行的动作即可。

参数说明 可选参数及其说明如下：

基础应用

范例106 启动系统监视。

[root@localhost～]# swatch–c /usr/local/etc/netlog　　//启动系统监视

执行指令“swatch -c /usr/local/etc/netlog”来启动系统监视，同时指定系统的配置文件。

1.5.35 tload 指令：显示系统负载

学习目标 能使用 tload 指令来显示系统的平均负荷情况

语法 tload [-可选参数] [终端]

功能说明 tload 指令可以文本的方式显示当前系统的负载信息，如果不指定输出终端，将在默认的系统标准输出设备上显示输出。

参数说明 可选参数及其说明如下：

基础应用

范例107 按指定显示系统负载。

[root@localhost～]# tload　-d 30m /dev/pts4&　　　//显示系统负载

执行指令“tload -d 30m /dev/pts/4&”设置为后台操作，每隔半小时检测一次系统的负载，然后将检测结果输出到指定的终端/dev/pts4。

实战思考

应用思考

尝试将tload指令的信息输出到指定文件，想想应该如何实现。

1.5.36 mtools 指令：显示 mtools 支持的指令

学习目标 能使用 mtools 指令查看 mtools 支持的指令

语法 mtools

功能说明 显示 mtools 支持的指令，mtools 是 MS-DOS 文件系统的工具程序，可模拟许多MS-DOS的指令，这些指令都是mtools的符号连接。

参数说明 可选参数及其说明如下：

基础应用

范例108 显示mtools支持的指令。

[root@localhost ～]# mtools

Supported commands:

mattrib, mbadblocks, mcat, mcd,mclasserase, mcopy, mdel, mdeltree

mdir, mdoctorfat, mdu, mformat, minfo, mlabel, mmd, mmount

mpartition, mrd, mread, mmove, mren, mshowfat, mtoolstest, mtype

mwrite, mzip

执行指令“mtools”显示 mtools 支持的指令，如本例所示。与此类似的“mtools --help”指令的执行效果与“mtools”相同。

1.5.37 mtoolstest 指令：测试同时显示 mtools 的相关设置

学习目标 掌握测试并显示 mtools 配置文件的相关设置

语法 mtoolstest

功能说明 mtoolstest 为 mtools 工具指令，可读取分析 mtools 的配置文件，并显示相关设置。

基础应用

范例109 使用mtoolstest测试并显示。

[root@localhost ～]# mtoolstest

drive J:

#fn=0 mode=0 builtin

file="/dev/sdb4" fat_bits=16

tracks=0 heads=0 sectors=0 hidden=0

offset=0x0

partition=0

mformat_only

drive Z:

#fn=0 mode=0 builtin

file="/dev/sdb4" fat_bits=16

tracks=0 heads=0 sectors=0 hidden=0

offset=0x0

partition=0

mformat_only

drive X:

#fn=0 mode=0 builtin

file="$DISPLAY" fat_bits=0

tracks=0 heads=0 sectors=0 hidden=0

offset=0x0

partition=0

drive A:

#fn=2 mode=128 defined in /etc/mtools.conf

file="/dev/fd0" fat_bits=0

tracks=0 heads=0 sectors=0 hidden=0

offset=0x0

partition=0

mformat_only

exclusive

drive B:

#fn=2 mode=128 defined in /etc/mtools.conf

file="/dev/fd1" fat_bits=0

tracks=0 heads=0 sectors=0 hidden=0

offset=0x0

partition=0

mformat_only

exclusive

drive N:

#fn=2 mode=0 defined in /etc/mtools.conf

file="/var/lib/dosemu/hdimage" fat_bits=0

tracks=0 heads=0 sectors=0 hidden=0

offset=0x2280

partition=0

drive P:

#fn=2 mode=0 defined in /etc/mtools.conf

file=":0" fat_bits=0

tracks=0 heads=0 sectors=0 hidden=0

offset=0x0

partition=0

tounix:

0xc7 0xfc 0xe9 0xe2 0xe4 0xe0 0xe5 0xe7

0xea 0xeb 0xe8 0xef 0xee 0xec 0xc4 0xc5

0xc9 0xe6 0xc6 0xf4 0xf6 0xf2 0xfb 0xf9

0xff 0xd6 0xdc 0xf8 0xa3 0xd8 0xd7 0x5f

0xe1 0xed 0xf3 0xfa 0xf1 0xd1 0xaa 0xba

0xbf 0xae 0xac 0xbd 0xbc 0xa1 0xab 0xbb

0x5f 0x5f 0x5f 0x5f 0x5f 0xc1 0xc2 0xc0

0xa9 0x5f 0x5f 0x5f 0x5f 0xa2 0xa5 0xac

0x5f 0x5f 0x5f 0x5f 0x5f 0x5f 0xe3 0xc3

0x5f 0x5f 0x5f 0x5f 0x5f 0x5f 0x5f 0xa4

0xf0 0xd0 0xc9 0xcb 0xc8 0x69 0xcd 0xce

0xcf 0x5f 0x5f 0x5f 0x5f 0x7c 0x49 0x5f

0xd3 0xdf 0xd4 0xd2 0xf5 0xd5 0xb5 0xfe

0xde 0xda 0xd9 0xfd 0xdd 0xde 0xaf 0xb4

0xad 0xb1 0x5f 0xbe 0xb6 0xa7 0xf7 0xb8

0xb0 0xa8 0xb7 0xb9 0xb3 0xb2 0x5f 0x5f

fucase:

0x80 0x9a 0x90 0xb6 0x8e 0xb7 0x8f 0x80

0xd2 0xd3 0xd4 0xd8 0xd7 0xde 0x8e 0x8f

0x90 0x92 0x92 0xe2 0x99 0xe3 0xea 0xeb

0x59 0x99 0x9a 0x9d 0x9c 0x9d 0x9e 0x9f

0xb5 0xd6 0xe0 0xe9 0xa5 0xa5 0xa6 0xa7

0xa8 0xa9 0xaa 0xab 0xac 0xad 0xae 0xaf

0xb0 0xb1 0xb2 0xb3 0xb4 0xb5 0xb6 0xb7

0xb8 0xb9 0xba 0xbb 0xbc 0xbd 0xbe 0xbf

0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc7 0xc7

0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf

0xd1 0xd1 0xd2 0xd3 0xd4 0x49 0xd6 0xd7

0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde 0xdf

0xe0 0xe1 0xe2 0xe3 0xe5 0xe5 0xe6 0xe8

0xe8 0xe9 0xea 0xeb 0xed 0xed 0xee 0xef

0xf0 0xf1 0xf2 0xf3 0xf4 0xf5 0xf6 0xf7

0xf8 0xf9 0xfa 0xfb 0xfc 0xfd 0xfe 0xff

mtools_fat_compatibility=1

mtools_skip_check=1

mtools_lower_case=0

执行指令“mtoolstest”显示mtools配置文件的相关设置，如本例所示。

1.5.38 hostname 指令：显示或者设置当前系统的主机名

学习目标 掌握 hostname 指令的用法

语法 hostname[必要参数][选择性参数]

功能说明 hostname 指令用来显示或者设置当前系统的主机名，主机名被许多网络程序用于标识主机。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例110 显示主机名。

[root@localhost sha1]# hostname　　//显示主机名

localhost.localdomain

[root@localhost sha1]#

本例使用指令“hostname”显示主机名。

范例111 显示短主机名。

[root@localhost sha1]# hostname -s　　//显示短主机名

localhost

[root@localhost sha1]#

本例使用指令“hostname–s”显示短主机名。

范例112 显示主机别名。

[root@localhost sha1]# hostname -a　　//显示主机别名

localhost

[root@localhost sha1]#

本例使用指令“hostname–a”显示主机别名。

范例113 显示主机IP地址。

[root@localhost sha1]# hostname -i　　//显示主机IP地址

127.0.0.1

[root@localhost sha1]#

本例使用指令“hostname–i”显示主机IP地址。

范例114 显示主机域名。

[root@localhost sha1]# hostname -d　　//显示主机域名

localdomain

[root@localhost sha1]#

本例使用指令“hostname–d”显示主机域名。

范例115 显示NIS/YP域名。

[root@localhost sha1]# hostname -Y　　//显示NIS/YP域名

(none)

[root@localhost sha1]#

本例使用指令“hostname–y”显示主机的NIS/YP域名。

范例116 设置主机名称。

[root@localhost sha1]# hostname apple　　//设置主机名称

[root@localhost sha1]# hostname

apple

[root@localhost sha1]#

本例使用指令“hostname apple”设置主机名称。

1.5.39 vlock 指令：锁定终端

学习目标 学会使用 vlock 来锁住虚拟终端

语法 vlock [-可选参数]

功能说明 vlock 指令可用来锁住虚拟终端，以避免其他人使用该终端。

参数说明 可选参数及其说明如下：

基础应用

范例117 虚拟终端的锁定和解锁。

[root@localhost～]# vlock　　//锁定虚拟终端

*** This tty is not a VC (virtual console).***

*** It may not be securely locked.***

This TTY is now locked.

Please enter the password to unlock.

root's Password:

执行指令“vlock”锁定当前用户的虚拟终端。这时，用户在提示行下输入正确的密码就可以为锁定的终端解锁了。

root's Password:************//输入密码

[root@localhost～]#

通过输入root用户的密码进行解锁，然后就可以使用该终端继续操作。

1.5.40 init 指令：开关机设置

学习目标 学会使用 init 指令控制 Linux 系统的运行等级，了解 Linux 系统中各等级的相应模式。

语法 init [-可选参数]运行等级

功能说明 init 命令是 Linux 系统中所有进程的父进程，在启动 Linux 系统时，init 将是系统第一个运行的进程，将根据文件/etc/inittab 中的信息来创建进程。如果用户在进入系统后要进行系统运行模式的切换，运行init指令加上指定的运行等级，就能执行相应的功能。Linux系统共有7个运行等级（0～6），具体介绍如下：

【Linux的运行等级】

0：停机，机器关闭。

1：单用户模式，只运行 root 进行维护。

2：多用户模式，但是没有 NFS 支持。

3：完整的多用户模式，是标准的运行等级。

4：一般不使用。

5：就是 X11，进入 X-Windows 系统。

6：重新启动，运行 init 6 机器就会重启。

参数说明 可选参数及其说明如下：

基础应用

范例118 使用init指令进行多用户模式和单用户模式之间的切换。

[root@localhost～]#init 1//单用户模式

在 Shell 命令行模式下输入指令“init 1”将系统的运行模式切换到单用户模式，在这种模式下系统除了root管理员用户外，不允许别的用户登录本系统。切换后的单用户模式界面如下：

Telling INIT to go to single user mode

INIT: Going Single user the TERM Singal

INIT: Sending processer the KILL Singal

Sh-3.2# init 3

在单用户模式下输入指令“init 3”将系统切换回多用户模式。这时将进入非图形界面，用户可根据提示信息输入登录账号和密码来登录系统，然后在 Shell 命令行模式下启动X-Windows 图形系统，或输入指令“init 5”进入图形界面。

实战思考

应用思考

对比 init 指令和 halt 指令的区别，分别使用指令“init 0”和指令“halt”来关闭系统，查看指令的运行结果。

1.5.41 screen 指令：多重视窗管理程序

学习目标 学习 screen 指令的功能，能使用该指令进行终端切换

语法 screen[必要参数][选择性参数]

功能说明 screen 其实就是 Linux 虚拟终端，用户可以用它创建很多虚拟终端，每个终端可以创建1～10个窗口，每个窗口相当于一个Linux Shell窗口，可以执行的操作和正常Shell完全一样。这时用户就可以为其远程登录主机创建自己的显示终端，如果用户在远程主机上运行比较费时的工作，可以通过终端窗口切换到其他显示终端，而不用等待操作完成或中断操作。

参数说明 可选参数及其说明如下：

【终端中的窗口操作】

在操作时，其操作方式如下：以 Ctrl-a c 为例，先按下 Ctrl 和 a 键，然后再按下 c 键。

Ctrl-a c：新建 bash screen 终端。

Ctrl-a A：重命名。

Ctrl-a n：在当前窗口中切换到下一个 screen 终端。

Ctrl-a p：在当前窗口中切换到上一个 screen 终端。

Ctrl-a 空格：窗口切换。

Ctrl+a w：窗口列表。

Ctrl+a 0-9：在第0 个窗口和第9 个窗口之间切换。

Ctrl+a K（大写）：关闭当前窗口，并且切换到下一个窗口。当退出最后一个窗口时，该终端自动终止，并且退回到原始Shell状态。

Ctrl-a d：断开所有 screen 终端，返回 screen 执行前状态，但 screen 内所有终端的任务都在执行。

Ctrl-a S：新建水平分割窗口。

Ctrl-a Tab：切换窗口。

Ctrl-a X：关闭当前窗口。

Ctrl-a +：扩大当前窗口，默认增加 3 行。

Ctrl-a -：缩小当前窗口，默认减少 3 行。

Ctrl-a :screen <command>：新建 screen 终端，并运行命令<command>。

Ctrl-a :resize <height>：改变当前窗口高度为<height>。

Ctrl-a :quit：退出 screen，将关闭所有 screen 终端，结束其中所有任务。

Ctrl-a <Esc>：进入选择模式。

exit：关闭当前窗口，并且切换到下一个窗口。当退出最后一个窗口时，该终端自动终止，并且退回到原始Shell状态。

screen -ls：列出当前用户的所有 screen 实例，包括连接和断开的。

screen -R <pid>：重新连接到已断开的 screen 实例，如果有多个已断开的 screen 实例，则用 <pid> 区分。

<PageUp> 或 Ctrl-u：光标上移一页。

<PageDown> 或 Ctrl-d：光标下移一页。

<Left> 或 h：光标左移一格。

<Right> 或 l：光标右移一格。

<Down> 或 j：光标下移一行。

<Up> 或 k：光标上移一行。

<Space>：选择开始，选择结束。

<Esc>：退出选择模式。

基础应用

范例119 执行screen命令。

[root@localhost～]# screen　　//创建新窗口

执行指令screen将创建一个新的窗口。通过“Ctrl+a+a”就可以在不同的screen之间进行切换。

1.5.42 shutdown 指令：系统关机

学习目标 学习 shutdown 指令的几种关机模式，能熟练应用 shutdown 指令来关闭或重启计算机

语法 shutdown [-可选参数] [时间] [警告信息]

功能说明 shutdown 指令可以进行关机或重新启动。使用 shutdown 指令，用户可以选择是要关闭机算机、重新开机还是进入单人操作模式；可以设定关机时间是立刻关机还是到某一特定时间自动关机；以及设置自定义的关机信息，在关机以前传送该信息给所有线上的用户等操作。shutdown的应用很灵活，不论用户的身份如何都能够进行关机操作，但如果是使用远端管理工具从其他电脑登入本机，则需要拥有管理员的权限才能关闭本机。

参数说明 可选参数及其说明如下：

基础应用

范例120 关闭计算机。

[root@localhost～]# shutdown 8 "this computer will shutdown，in 8 minutes.have a goodnight

" //关闭计算机

Broadcast message from root (pts/0) (Tue Mar 6 23:30:00 2009):

this computer will shutdown，in 8 minutes.have a good night

The system is going DOWN to maintenance mode in 5 minutes!

Shutdown cancelled.

[root@localhost～]#

执行指令“shutdown 5 "his computer will shutdown，in 8 minutes.have a good night"”后，关机信息"his computer will shutdown，in 8 minutes.have a good night"将以广播方式传送给所有的在线用户，此时输入“Ctrl+C”就可以随时终止指令。

实战思考

应用思考

尝试使用shutdown指令关闭系统，对比类似指令halt和init之间的差异。

1.5.43 sleep 指令：休眠

学习目标 能利用 sleep 指令来使系统进入休眠状态，同时指定系统的休眠时长

语法 sleep [-可选参数] [时间]

功能说明 sleep 指令可以使系统进入休眠状态，同时还可指定系统休眠的时长。在用户执行比较费时的Shell命令时，可以将其工作时间设为休眠状态，以保证指令运行。

参数说明

可选参数及其说明如下：

必要参数及其说明如下：

基础应用

范例121 使系统休眠20min。

[root@localhost～]# sleep 20m　　//休眠

执行指令“sleep 20m”后，系统将进入时长为 20min 的休眠状态。

1.5.44 watch 指令：将结果输出到标准输出设备

学习目标 能使用 watch 指令将结果输出到标准输出设备

语法 watch[必要参数][选择性参数][指令]

功能说明 watch 指令可以将指定指令的输出结果输出到标准输出设备。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例122 每隔10s执行一次指令。

[root@localhost～]# watch -n 10 who //每隔 10s 执行一次 who 指令

Every 10.0s: who Thu May 31 11:37:31 2007

root　tty1　　May 31 11:02

rootpts/1 May 31 09:13 (192.168.88.7)

root:0 May 31 11:01

本例使用指令“watch -n 10 who”每隔 10s 执行一次 who 指令。

范例123 高亮字符标识信息的差异。

[root@localhost～]# watch -d ls -l　　//将“ls–l”的结果输出到标准输出

Every 2.0s: ls -l Thu May 31 11:40:06 2007

5988

-rw-r--r--　1 root root　220　5 27 17:18 123

-rw-r--r--　1 root root　　2　5 27 09:27 123.pcx

-rw-r--r--　1 root root　　0　5 30 10:21 1.log

-rw-r--r--　1 root root　　0　5 23 21:33 1.log.new

-rw-r--r--　1 root root　　0　5 30 09:33 2.log

-rw-r--r--　1 root root　211　5 27 17:26 456

-rw-r--r--　1 root root　　0　5 30 09:36 7.log

-rw-r--r--　1 root root　76　5 31 10:19 abc

-rw-------　1 root root　975 12 22 11:16 anaconda-ks.cfg

-rw-r--r--　1 root root　56991 2005-06-03　config-2.6.11- 1.1369_FC4

-rw-r--r--　1 root root　348　5 27 17:21 ddd

-rw-------　1 root root　104　5 24 15:11 DEADJOE

drwxr-xr-x　2 root root　4096　4 19 17:32 Desktop

-rw-r--r--　1 root root　180　5 28 23:08 examplesed

-rw-r--r--　1 root root　126　5 24 10:53 file1

-rw-r--r--　1 root root　120　5 24 10:53 file2

-rw-r--r--　1 root root　483　3 30 14:37 gmon.out

drwxr-xr-x　2 root root　4096 12 22 11:16 grub

-rw-r--r--　1 root root 1224449 12 22 09:52 initrd-2.6.11- 1.1369_FC4.img

-rw-r--r--　1 root root　64471 12 22 11:16 install.log

本例使用指令“watch -d ls–l”将“ls–l”的结果输出到标准输出，并在出现不同的信息时，用高亮字符标识。

1.6 Linux系统任务

1.6.1 at 指令：系统将执行的任务排队

学习目标 了解任务排队的概念和应用

语法 at[必要参数] [选择性参数] [时间]

功能说明 at 指令和 batch 指令从标准输入或者指定文件读取指令，这些指令将在一段时间之后执行。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例124 设定任务在特定时间执行。

[root@localhost～]# at 5pm tomorrow //设定任务在明天下午 5 点执行

at> echo Go for dinner with rich //打印“Go for dinner with rich”

at> <EOT>

job 3 at 2007-05-06 17:00

[root@localhost～]#

运行“at 5pm tomorrow”指令，设定任务在第二天下午 5 点执行，然后进入 at 指令的指令行，这样就可以设定要执行的任务了。此处输入指令“echo Go for dinner with rich”表示打印“Go for dinner with rich”。任务设定完成之后，可以输入“Ctrl+D”完成任务的设定。这样，第二天下午5点，系统将打印信息提醒要与rich一块吃饭的事。

[root@localhost～]# at 8am+3days　　//设定任务在3天后早上8点执行

at> /bin/date　　　　　　　//执行date指令

at> <EOT>

job 4 at 2007-05-08 08:00

[root@localhost～]#

设置三天后早上 8点执行 date指令。

范例125 查询已经设置的任务。

[root@localhost～]# atq　　　//查询已经设置的任务

3　　2007-05-06 17:00 a root

4　　2007-05-08 08:00 a root

范例126 删除已经设置的任务。

[root@localhost～]# atrm 3　　//删除已经设置的任务

[root@localhost～]#

删除已经设置的任务3。

范例127 显示已经设置的任务的内容。

[root@localhost～]# at -c 4　　　//显示已经设置的任务4的内容

#!/bin/sh

# atrun uid=0 gid=0

# mail　root 0

umask 22

HOSTNAME=localhost.localdomain; export HOSTNAME

SHELL=/bin/bash; export SHELL

HISTSIZE=1000; export HISTSIZE

SSH_CLIENT=::ffff:192.168.88.7\ 1295\ 22; export SSH_CLIENT

QTDIR=/usr/lib/qt-3.3; export QTDIR

SSH_TTY=/dev/pts/1; export SSH_TTY

USER=root; export USER

LS_COLORS=no=00:fi=00:di=00\;34:ln=00\;36:pi=40\;33:so=00\;35:bd=40\;33\;01:cd=40\;33\;01:or=01\;05\;37\;41:mi=01\;05\;37\;41:ex=00\;32:\*.cmd=00\;32:\*.exe=00\;32:\*.com=00\;32:\*.btm=00\;32:\*.bat=00\;32:\*.sh=00\;32:\*.csh=00\;32:\*.tar=00\;31:\*.tgz=00\;31:\*.arj=00\;31:\*.taz=00\;31:\*.lzh=00\;31:\*.zip=00\;31:\*.z=00\;31:\*.Z=00\;31:\*.gz=00\;31:\*.bz2=00\;31:\*.bz=00\;31:\*.tz=00\;31:\*.rpm=00\;31:\*.cpio=00\;31:\*.jpg=0 0\;35:\*.gif=00\;35:\*.bmp=00\;35:\*.xbm=00\;35:\*.xpm=00\;35:\*.png=00\;35:\*.tif=00\;35:; export LS_COLORS

KDEDIR=/usr; export KDEDIR

MAIL=/var/spool/mail/root; export MAIL

PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin; export PATH

INPUTRC=/etc/inputrc; export INPUTRC

PWD=/root; export PWD

LANG=zh_CN.UTF-8; export LANG

SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass;export SSH_ ASKPASS

SHLVL=1; export SHLVL

HOME=/root; export HOME

LOGNAME=root; export LOGNAME

SSH_CONNECTION=::ffff:192.168.88.7\ 1295\ ::ffff:192.168.88.76\ 22; exportSSH_CONNECTION

LESSOPEN=\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN

G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES

cd /root || {

echo 'Execution directory inaccessible' >&2

exit 1

}

${SHELL:-/bin/sh} << '(dd if=/dev/urandom count=200 bs=1 2>/dev/ null|LC_ALL=C tr -d -c '[:alnum:]')'

/bin/date

[root@localhost～]#

显示已经设置的指令4的内容，也就是执行date指令。

1.6.2 atd 指令：执行已经排队的任务

学习目标 了解 atd 和 at 的区别和关联

语法 atd[必要参数] [选择性参数]

功能说明 atd 指令执行被 at 指令排队的任务。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例128 启动atd。

[root@localhost～]# atd -d　　　　　//启动atd

以输出调试信息的方式启动atd。

1.6.3 atq 指令：检查排队的任务

学习目标 掌握 atq 指令的用法

语法 atq[选择性参数]

功能说明 atq 指令列出用户已设置排队的任务。如果用户是超级用户，那么所有的任务将被列出。标准输出的格式为：任务号，天数，小时数，工作类型。

参数说明 选择性参数的具体说明如下：

基础应用

范例129 查询已经设置的队列任务。

[root@localhost～]# atq　　　　//显示已经设置的队列任务

6　　2007-05-08 05:00 a root

4　　2007-05-08 08:00 a root

7　　2007-05-08 08:00 a root

[root@localhost～]#

1.6.4 atrm 指令：删除已经排队的任务

学习目标 掌握 atrm 的用法

语法 atrm[选择性参数]任务

功能说明 atrm 指令用来删除已经排队的任务，任务将以任务号为标识。

参数说明 选择性参数的具体说明如下：

基础应用

范例130 删除已经排队的任务。

[root@localhost～]# atq　　　　//显示当前已经设置的任务

6　　2007-05-08 05:00 a root

4　　2007-05-08 08:00 a root

7　　2007-05-08 08:00 a root

[root@localhost～]# atrm 4　　　　//删除任务4

[root@localhost～]#

1.6.5 atrun 指令：执行已排队的任务

学习目标 掌握 atrun 的用法

语法 atrun[选择性参数]

功能说明 atrun 指令运行 at 指令设置的任务。它是一个 Shell 脚本，调用/usr/sbin/atd 指令使用“-s”参数的情况。它向后兼容老版本的指令。

参数说明 选择性参数的具体说明如下：

基础应用

范例131 执行已排队的任务。

[root@localhost～]# atrun　　　　//执行已排队的任务

[root@localhost～]#

1.6.6 attr 指令：XFS 文件系统对象的扩展属性

学习目标 能使用 attr 指令对 XFS 文件系统对象进行扩展

语法 attr［必要参数］［属性名称］［选择性参数］［路径名］

功能说明 attr 指令用来设置 XFS 文件系统的扩展属性。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例132 设置文件的属性。

[root@localhost～]#attr -s attrname pathname //设置文件的属性

范例133 获得文件的属性。

[root@localhost～]#attr -g attrname pathname //获得文件的属性

范例134 移除文件的属性。

[root@localhost～]#attr -r attrname pathname //移除文件的属性

当指定“-s”参数时，将从标准输入中读取一个属性值；当设定“-g”参数时，将读取一个属性值到标准输出。

1.6.7 newgrp 指令：登录另一个群组

学习目标 能使用 newgrp 改变登录群组

语法 newgrp[群组名称]

功能说明 newgrp 指令可以使用户以相同的用户名、不同的群组重新登录系统，但是用户名必须同时输入这两个群组。

基础应用

范例135 改变群组。

[root@localhost～]# newgrp root　　　　//改变群组

本例使用指令“newgrp root”改变群组重新登录系统。假设未改变群组之前时用户所属的群组为kk群组，现在改变群组为root群组，那么当前的用户名必须同时输入kk群组和root群组才能进行现在的操作。

1.6.8 nohup 指令：退出系统继续执行指令

学习目标 掌握 nohup 指令的用法

语法 nohup[选择性参数][指令]

功能说明 nohup 指令可以忽略挂断信号，继续执行指令。

参数说明 选择性参数的具体说明如下：

基础应用

范例136 退出系统后继续在后台执行指令。

-sh-2.05b# nohup ncftpget -u other -p 02211025 192.168.88.7 /home /kk ./111 & //退出系统后继续执行指令

[1] 2349

nohup: appending output to 'nohup.out'

-sh-2.05b#

本例使用指令“nohup ncftpget -u other -p 02211025 192.168.88.7 /home/kk ./111”，使用户在退出系统之后仍然可以从指定ftp服务器上下载文件。

1.6.9 open指令：开启虚拟终端

学习目标 掌握开启虚拟终端的方法

语法 open[必要参数][选择性参数][--][指令]

功能说明 open 指令用来开启虚拟终端，然后执行指定的指令，指定的指令可以包含参数。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例137 开启新的终端执行指令。

[root@localhost～]# open -c 8 - nslookup　　//开启终端8，执行nslookup指令

[root@localhost～]# ps -A　　　　　　//显示当前进程

PID TTY　　TIME CMD

1 ?　　00:00:01 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:00 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

//此处省略了部分结果

2553 ?　　00:00:08 X

2586 ?　　00:00:03 gdmgreeter

2748 ?　　00:00:00 sshd

2752 pts/1　00:00:00 bash

2946 tty9　00:00:00 bash

3065 tty8　00:00:00 nslookup

3069 pts/1　00:00:00 ps

[root@localhost～]#

本例使用指令“open -c 8–nslookup”开启终端 8，执行 nslookup 指令，然后运行“ps–A”指令时将看到“3065 tty8 00:00:00 nslookup”，进程号为 3065 的进程即为新开启的终端执行的指令。

范例138 开启新的终端执行指令，并等待执行完后返回。

[root@localhost～]# open -c 9 -sw -- tcpdump　//开启终端9，执行tcpdump指令

本例使用指令“open -c 9 -sw–tcpdump”执行指令 tcpdump 并等待，直到指令 tcpdump执行完成之后才返回。

1.6.10 pgrep 指令：基于名字和其他属性的查找或信号处理

学习目标 掌握使用名字和其他属性查找程序的方法

语法 pgrep[必要参数][选择性参数][程序]

功能说明 pgrep 指令可以依照进程 ID 来浏览程序。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例139 显示与指定终端相联系的程序。

root@localhost:～# ps -A　　　　　//显示所有进程信息

PID TTY　　TIME CMD

1 ?　　00:00:01 init

2 ?　　00:00:00 migration/0

3 ?　　00:00:01 ksoftirqd/0

4 ?　　00:00:00 migration/1

5 ?　　00:00:00 ksoftirqd/1

6 ?　　00:00:00 events/0

7 ?　　00:00:00 events/1

8 ?　　00:00:00 khelper

9 ?　　00:00:00 kthread

//此处省略了部分结果

32576 ?　　00:00:00 lpd

670 ?　　00:00:00 sshd

672 pts/0　00:00:00 bash

706 pts/0　00:00:00 ps

root@localhost:～# pgrep -t tty2　　　//显示终端2下的所有程序

3952

8557

8587

8588

8779

root@localhost:～#

本例使用指令“pgrep -t tty2”显示终端 2 下运行的所有程序。pgrep 指令将终端 2 下运行的进程的进程号输出到标准输出，与运行“ps–A”指令时显示的结果是吻合的。与“ps–A”指令显示结果的吻合情况如下：

3951 tty1　00:00:00 login

3952 tty2　00:00:00 login

3953 tty3　00:00:00 login

3974 tty1　00:00:00 bash

8557 tty2　00:00:00 sh

8587 tty2　00:00:00 su

8588 tty2　00:00:00 bash

8606 tty3　00:00:00 bash

8779 tty2　00:00:00 vi

范例140 显示与某字符串相关的指令。

root@localhost:～# pgrep postmaster //显示与指定字符串相关的字符

3723

3726

3727

root@localhost:～#

本例使用指令“pgrep postmaster”显示与指定字符串 postmaster 相关的进程号。

范例141 列出父进程为init进程的所有进程号。

root@localhost:～# pgrep -P 1//列出父进程为1的所有进程

2

3

4

5

6

7

8

9

119

738

2100

3201

3473

3479

3723

3739

3814

3832

3854

3857

3863

3891

3901

3908

3951

3952

3953

13786

26541

32406

32576

root@localhost:～#

本例使用指令“pgrep -P 1”列出父进程的进程号为 1 的所有进程，进程号为 1 的进程为init进程。

范例142 反向选择。

root@localhost:～# pgrep -v -P 1//反向选择

1

12

13

14

84

117

118

120

121

1532

1535

1607

1921

2872

3115

3726

3727

3974

8557

8587

8588

8606

8779

32417

32418

32420

32421

32422

670

672

root@localhost:～#

本例使用指令“pgrep -v -P 1”显示父进程不为 1 的所有进程的信息。

范例143 显示指定用户的所有进程。

root@localhost:～# pgrep -u root　　//显示指定用户的所有进程

1

2

3

4

5

6

7

8

9

12

13

14

84

117

118

119

120

121

738

1532

1535

1607

1921

2100

2872

3115

3473

3479

3814

3832

3854

3863

3908

3951

3952

3953

3974

8587

8588

8606

8779

13786

26541

32406

670

672

root@localhost:～#

本例使用指令“pgrep -u root”显示指定用户 root 的所有进程。

1.6.11 pidof指令：找到运行程序的进程ID

学习目标 掌握查找运行进程 ID 的方法

语法 pidof[必要参数][选择性参数][程序]

功能说明 pidof 指令可以显示正在执行的进程 ID。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例144 显示指令所对应的进程号。

[root@localhost～]# ps -A　　　　//显示所有进程

PID TTY　　TIME CMD

1 ?　　00:00:01 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:00 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

//此处省略了部分结果

2593 ?00:00:01 sshd

2599 pts/1 00:00:00 bash

3655 ?00:00:00 cupsd

2948 pts/1 00:00:00 ps

[root@localhost～]# pidof mingettY　　//显示与mingetty相关的进程号

2333 2332 2331 2330 2329 2328

[root@localhost～]#

本例使用指令“pidof mingetty”显示与 mingetty 相关的进程号，与指令“ps–A”显示结果吻合。“ps–A”的对应部分如下：

2328 tty100:00:00 mingetty

2329 tty200:00:00 mingetty

2330 tty300:00:00 mingetty

2331 tty400:00:00 mingetty

2332 tty500:00:00 mingetty

2333 tty600:00:00 mingetty

范例145 每次只返回一个进程号。

[root@localhost～]# pidof mingetty -s //每次只返回一个进程号

2333

[root@localhost～]#

本例使用指令“pidof mingetty–s”显示与 mingetty 相关的指令，同时通过指定“-s”参数，每次只返回一个进程ID。

1.6.12 pkill指令：杀死进程

学习目标 掌握 pkill 杀死进程的方法

语法 pkill[必要参数][选择性参数][字符串]

功能说明 pkill 指令是 ps 指令和 kill 指令的结合，用来杀死指定的进程。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例146 杀死指定进程。

[root@localhost～]# ps -A　　　　//显示当前的进程

PID TTY　　TIME CMD

1 ?　　00:00:02 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:01 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

61 ?　　00:00:00 kblockd/0

64 ?　　00:00:00 khubd

//此处省略了部分结果

2586 ?　　00:00:29 gdmgreeter

2593 ?　　00:00:02 sshd

2599 pts/1　00:00:00 bash

3655 ?　　00:00:00 cupsd

5817 pts/1　00:00:00 ftp

5825 pts/1　00:00:00 ps

[root@localhost～]# pkill -9 ftp　　//杀死进程ftp

[root@localhost～]# ps -A　　　　//显示当前的进程

PID TTY　　TIME CMD

1 ?　　00:00:02 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:01 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

//此处省略了部分结果

2586 ?　　　00:00:29 gdmgreeter

2593 ?　　00:00:02 sshd

2599 pts/1　00:00:00 bash

3655 ?　　00:00:00 cupsd

5829 pts/1　00:00:00 ps

[root@localhost～]#

本例使用指令“pkill -9 ftp”杀死进程 ftp，然后通过“ps–A”显示当前的进程，发现不再有进程ftp。

范例147 杀死同一终端的所有进程。

[root@localhost～]# pkill -t tty1　　//杀死所有终端1下的所有进程

[root@localhost～]# ps -A　　　　//显示所有的进程

PID TTY　　TIME CMD

1 ?　　00:00:02 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:01 watchdog/0

4 ?　　00:00:00 events/0

//此处省略了部分结果

2546 ?　　00:00:00 gdm-binary

2554 ?　　00:01:01 X

2586 ?　　00:00:29 gdmgreeter

2593 ?　　00:00:02 sshd

2599 pts/1　00:00:00 bash

3655 ?　　00:00:00 cupsd

5866 tty1　00:00:00 mingetty

5905 pts/1　00:00:00 ps

[root@localhost～]#

本例使用指令“pkill -t tty1”杀死终端1的所有进程，使用指令“ps–A”发现终端 1 下的所有进程都已经被杀死。

范例148 杀死指定用户的所有进程。

[root@localhost～]# pkill -u kk　　//杀死用户kk的所有进程

[root@localhost～]#

本例使用指令“pkill -u kk”杀死用户 kk 的所有进程。

范例149 反向选择。

[root@localhost～]# pkill -vu kk　　//杀死不属于用户kk的所有进程

[root@localhost～]#

本例使用指令“pkill -vu kk”杀死不属于用户 kk 的所有进程。

1.6.13 pmap 指令：显示程序的内存信息

学习目标 能使用 pmap 指令显示程序的内存信息

语法 pmap[必要参数][选择性参数][程序]

功能说明 pmap 指令用来显示指定程序的内存信息。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例150 显示程序的内存信息。

[root@localhost～]# ps -A　　　　//显示进程信息

PID TTY　　TIME CMD

1 ?　　00:00:02 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:01 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

61 ?　　　00:00:00 kblockd/0

64 ?　　　00:00:00 khubd

//此处省略了部分结果

3655 ?　　00:00:00 cupsd

5866 tty1　00:00:00 mingetty

6014 pts/1　00:00:00 ps

[root@localhost～]# pmap 2253　　　//显示进程2253的内存信息

2253:　xfs -droppriv -daemon

007f0000　36K r-x--　/lib/libnss_files-2.3.5.so

007f9000　4K r-x--　/lib/libnss_files-2.3.5.so

007fa000　4K rwx--　/lib/libnss_files-2.3.5.so

00a84000　104K r-x--　/lib/ld-2.3.5.so

00a9e000　4K r-x--　/lib/ld-2.3.5.so

00a9f000　4K rwx--　/lib/ld-2.3.5.so

00aa6000　1168K r-x--　/lib/libc-2.3.5.so

00bca000　8K r-x--　/lib/libc-2.3.5.so

00bcc000　8K rwx--　/lib/libc-2.3.5.so

00bce000　8K rwx--　[ anon ]

00bd2000　136K r-x--　/lib/libm-2.3.5.so

00bf4000　4K r-x--　/lib/libm-2.3.5.so

00bf5000　4K rwx--　/lib/libm-2.3.5.so

00bfe000　72K r-x--　/usr/lib/libz.so.1.2.2.2

00c10000　4K rwx--　/usr/lib/libz.so.1.2.2.2

00c13000　380K r-x--　/usr/X11R6/lib/libXfont.so.1.5

00c72000　32K rwx--　/usr/X11R6/lib/libXfont.so.1.5

00c7a000　36K rwx--　[ anon ]

00d6b000　388K r-x--　/usr/lib/libfreetype.so.6.3.7

00dcc000　28K rwx--　/usr/lib/libfreetype.so.6.3.7

00e03000　4K r-x--　[ anon ]

08047000　80K r-x--　/usr/X11R6/bin/xfs

0805b0004K rw--- /usr/X11R6/bin/xfs

0805c00016K rw--- [ anon ]

08c8e000 2364K rw--- [ anon ]

b7f48000 144K rw--- [ anon ]

b7f6c000 144K rw--- [ anon ]

b7f900008K rw--- [ anon ]

b7fb50004K rw--- [ anon ]

bfba100084K rw--- [ stack ]

total5284K

[root@localhost～]#

本例使用指令“pmap 2253”显示进程 2253 的内存使用信息。

范例151 显示进程使用内存的详细信息。

[root@localhost～]# pmap -x 2253　//显示进程使用内存的详细信息

2253:　xfs -droppriv -daemon

Address　Kbytes　RSS　Anon　Locked Mode　Mapping

007f0000　36　-　-　- r-x--　libnss_files-2.3.5.so

007f9000　　4　-　-　- r-x--　libnss_files-2.3.5.so

007fa000　　4　-　-　- rwx--　libnss_files-2.3.5.so

00a84000　104　-　　-　　- r-x--　ld-2.3.5.so

00a9e000　　4　　-　　-　　- r-x--　ld-2.3.5.so

00a9f000　　4　　-　　-　　- rwx--　ld-2.3.5.so

00aa6000　1168　　-　　-　　- r-x--　libc-2.3.5.so

00bca000　　8　　-　　-　　- r-x--　libc-2.3.5.so

00bcc000　　8　　-　　-　　- rwx--　libc-2.3.5.so

00bce000　　8　　-　　-　　- rwx--　[ anon ]

00bd2000　136　　-　　-　　- r-x--　libm-2.3.5.so

00bf4000　　4　　-　　-　　- r-x--　libm-2.3.5.so

00bf5000　　4　　-　　-　　- rwx--　libm-2.3.5.so

00bfe000　72　　-　　-　　- r-x--　libz.so.1.2.2.2

00c10000　　4　　-　　-　　- rwx--　libz.so.1.2.2.2

00c13000　380　　-　　-　　- r-x--　libXfont.so.1.5

00c72000　32　　-　　-　　- rwx--　libXfont.so.1.5

00c7a000　36　　-　　-　　- rwx--　[ anon ]

00d6b000　388　-　　-　　- r-x--　libfreetype.so.6.3.7

00dcc000　28　-　　-　　- rwx--　libfreetype.so.6.3.7

00e03000　　4　　-　　-　　- r-x--　[ anon ]

08047000　80　　-　　-　　- r-x--　xfs

0805b000　　4　　-　　-　　- rw---　xfs

0805c000　16　　-　　-　　- rw---　[ anon ]

08c8e000　2364　　-　　-　　- rw---　[ anon ]

b7f48000　144　　-　　-　　- rw---　[ anon ]

b7f6c000　144　　-　　-　　- rw---　[ anon ]

b7f90000　　8　　-　　-　　- rw---　[ anon ]

b7fb5000　　4　　-　　-　　- rw---　[ anon ]

bfba1000　84　　-　　-　　- rw---　[ stack ]

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

total kB　5284　　-　　-　　-

本例使用指令“pmap -x 2253”显示进程 2253 使用内存的详细信息。

范例152 显示内存对应时同时显示设备号。

[root@localhost～]# pmap -d 2253　//显示内存对应时同时显示设备号

2253:　xfs -droppriv -daemon

Address　Kbytes Mode　Offset　　Device　Mapping

007f0000　36 r-x-- 0000000000000000 008:00003 libnss_files-2.3.5.so

007f9000　4 r-x-- 0000000000008000 008:00003 libnss_files-2.3.5.so

007fa000　4 rwx-- 0000000000009000 008:00003 libnss_files-2.3.5.so

00a84000　104 r-x-- 0000000000000000 008:00003 ld-2.3.5.so

00a9e000　　4 r-x-- 0000000000019000 008:00003 ld-2.3.5.so

00a9f000　　4 rwx-- 000000000001a000 008:00003 ld-2.3.5.so

00aa6000　1168 r-x-- 0000000000000000 008:00003 libc-2.3.5.so

00bca000　　8 r-x-- 0000000000124000 008:00003 libc-2.3.5.so

00bcc000　　8 rwx-- 0000000000126000 008:00003 libc-2.3.5.so

00bce000　　8 rwx-- 0000000000bce000 000:00000　[ anon ]

00bd2000　136 r-x-- 0000000000000000 008:00003 libm-2.3.5.so

00bf4000　　4 r-x-- 0000000000021000 008:00003 libm-2.3.5.so

00bf5000　　4 rwx-- 0000000000022000 008:00003 libm-2.3.5.so

00bfe000　72 r-x-- 0000000000000000 008:00003 libz.so.1.2.2.2

00c10000　　4 rwx-- 0000000000011000 008:00003 libz.so.1.2.2.2

00c13000　380 r-x-- 0000000000000000 008:00003 libXfont.so.1.5

00c72000　32 rwx-- 000000000005e000 008:00003 libXfont.so.1.5

00c7a000　36 rwx-- 0000000000c7a000 000:00000　[ anon ]

00d6b000　388 r-x-- 0000000000000000 008:00003 libfreetype.so.6.3.7

00dcc000　28 rwx-- 0000000000061000 008:00003 libfreetype.so.6.3.7

00e03000　　4 r-x-- 0000000000e03000 000:00000　[ anon ]

08047000　80 r-x-- 0000000000000000 008:00003 xfs

0805b000　　4 rw--- 0000000000013000 008:00003 xfs

0805c000　16 rw--- 000000000805c000 000:00000　[ anon ]

08c8e000　2364 rw--- 0000000008c8e000 000:00000　[ anon ]

b7f48000　144 rw--- 00000000b7f93000 000:00000　[ anon ]

b7f6c000　144 rw--- 00000000b7f93000 000:00000　[ anon ]

b7f90000　　8 rw--- 00000000b7f90000 000:00000　[ anon ]

b7fb5000　　4 rw--- 00000000b7fb5000 000:00000　[ anon ]

bfba1000　84 rw--- 00000000bfba1000 000:00000　[ stack ]

mapped: 5284K　writeable/private: 2896K　shared: 0K

[root@localhost～]#

本例使用指令“pmap -d 2253”显示进程 2253 的内存对应，同时显示设备号。

1.6.14 procinfo指令：显示系统状态

学习目标 掌握查看内存状态的方法

语法 procinfo[必要参数][选择性参数]

功能说明 proinfo 指令用来显示系统的参数，并将结果输出到标准输出。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例153 显示系统状态。

本例使用指令“procinfo”显示系统的状态。

1.6.15 pwck 指令：检查密码文件

学习目标 掌握 pwck 指令的用法

语法 pwck[必要参数][文件]

功能说明 pwck 指令可以检测密码文件的正确性。

参数说明 必要参数的具体说明如下：

基础应用

范例154 检测密码文件。

root@localhost:～# pwck /etc/passwd　　//检测密码文件

user news: directory /var/spool/news does not exist

user uucp: directory /var/spool/uucp does not exist

user list: directory /var/list does not exist

user irc: directory /var/run/ircd does not exist

user gnats: directory /var/lib/gnats does not exist

user nobody: directory /nonexistent does not exist

user wang: directory /home/wang does not exist

user telnetd: directory /nonexistent does not exist

user lchx: directory /home/lchx does not exist

user xgh: directory /home/xgh does not exist

user niu: directory /home/niu does not exist

user hq: directory /home/hq does not exist

user x2y: directory /home/x2y does not exist

user liang: directory /home/liang does not exist

user uml-net: directory /home/uml-net does not exist

user huohw: directory /home/huohw does not exist

user sensor: directory /home/sensor does not exist

user 973: directory /home/973 does not exist

user iplab: directory /home/iplab does not exist

user server: directory /home/server does not exist

pwck: no changes

root@localhost:～#

本例使用指令“pwck /etc/passwd”检测密码文件的正确性。

1.6.16 hash 指令：显示和清除哈希表

学习目标 掌握 hash 指令的用法

语法 hash[必要参数][选择性参数]

功能说明 hash 指令用来显示和清除哈希表，执行指令的时候，系统将先查询哈希表。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例155 显示哈希表。

[root@localhost～]# hash -l　　//显示哈希表

builtin hash -p /sbin/halt halt

builtin hash -p /usr/bin/man man

[root@localhost～]#

本例使用指令“hash–l”显示哈希表。

范例156 显示指令的完整路径。

[root@localhost～]# hash -t halt //显示 halt 指令的完整路径

/sbin/halt

[root@localhost～]#

本例使用指令“hash -t halt”显示 halt 指令的完整路径。

范例157 向哈希表中增加内容。

[root@localhost～]# hash -p /usr/bin/aclocal aclocal　//向哈希表中增加aclocal条目

[root@localhost～]# hash -l　　　　　　　　//显示哈希表

builtin hash -p /sbin/halt halt

builtin hash -p /usr/bin/aclocal aclocal

builtin hash -p /usr/bin/man man

builtin hash -p /bin/ls ls

[root@localhost～]#

本例使用指令“hash -p /usr/bin/aclocal aclocal”向哈希表中添加条目 aclocal。

范例158 删除哈希表内容。

[root@localhost～]# hash -r　　　　　//删除哈希表内容

[root@localhost～]# hash -l　　　　　//显示哈希表内容

hash: hash table empty

[root@localhost～]#

本例使用指令“hash–r”删除哈希表内容。

1.6.17 hostid 指令：打印出当前主机的标识

学习目标 学习 hostid 指令的用法

语法 hostid[选择性参数]

功能说明 hostid 指令用来打印当前主机的数字化标识。

参数说明 选择性参数的具体说明如下：

基础应用

范例159 显示主机标识。

[root@localhost sha1]# hostid　　//显示主机标识

7f0100

[root@localhost sha1]#

本例使用指令hostid显示主机标识。

1.6.18 isosize 指令：显示iso9660 文件系统信息

学习目标 掌握 isosize 指令的使用方法

语法 isosize[必要参数][选择性参数][文件]

功能说明 isosize 指令输出 iso9660 文件系统中的文件大小。文件可能是正常的文件或者是一个块装置，如/dev/hdd或者/dev/sr0。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例160 显示iso9660文件的大小。

root@localhost:～#isosize /dev/hdd　　//显示文件大小

本例使用指令“isosize /dev/hdd”显示文件/dev/hdd 的大小。

1.6.19 ldconfig指令：配置动态链接绑定

学习目标 掌握动态链接绑定的方法

语法 ldconfig[必要参数][选择性参数]

功能说明 ldconfig 指令根据在命令行中指定的文件库，产生与其相对应的链接，包含在/etc/ld.so.conf中。当要确定链接的版本号时，ldconfig指令将验证存在于函数库中的头文件。查找函数库时，ldconfig忽略符号链接。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例161 建立对于共享库的正确链接，并更新缓冲区。

[root@wjc root]# ldconfig -v|more

/lib:

libcap.so.1 -> libcap.so.1.10

libnss_wins.so -> libnss_wins.so.2

libiw.so.25 -> libiw.so.25

libnss_winbind.so -> libnss_winbind.so.2

libnss_ldap.so.2 -> libnss_ldap-2.3.1.so

libpam_misc.so.0 -> libpam_misc.so.0.75

libpam.so.0 -> libpam.so.0.75

libproc.so.2.0.11 -> libproc.so.2.0.11

libpamc.so.0 -> libpamc.so.0.75

liblvm-10.so.1 -> liblvm-10.so.1.0

libtermcap.so.2 -> libtermcap.so.2.0.8

libpcre.so.0 -> libpcre.so.0.0.1

libgcc_s.so.1 -> libgcc_s-3.2.2-20030225.so.1

范例162 只更新在指令行中指定的库 /lib。

[root@wjc root]# ldconfig -n /lib

1.6.20 ldd指令：打印共享库文件的相互依赖关系

学习目标 了解打印机共享库文件的相互依赖关系

语法 ldd[选择性参数]文件

功能说明 ldd 指令打印指令行指定的程序或者库文件所使用的共享库。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例163 显示/bin/mkdir所使用的共享函数库。

[root@wjc root]# ldd /bin/mkdir

libc.so.6 => /lib/tls/libc.so.6 (0x42000000)

/lib/ld-Linux.so.2 => /lib/ld-Linux.so.2 (0x40000000)

1.6.21 mkraid指令：初始化/升级RAID设备阵列

学习目标 了解 mkraid 指令的用法

语法 mkraid[选择性参数][必要参数]

功能说明 可以将一组块设备设置为一个 RAID 设备阵列。注意初始化 RAID 设备阵列时将毁坏所有原数据。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例164 将几个设备组成RAID阵列。

[root@yingzheng yingzheng]# mkraid -f /dev/hda1+/dev/fd0

1.6.22 runlevel指令：显示执行等级

学习目标 了解系统的运行级别

语法 runlevel

功能说明 runlevel 指令读取系统的 utmp 文件来定位系统的运行级别记录，然后打印当前系统的执行等级到标准输出。

基础应用

范例165 显示执行等级。

[root@localhost～]# runlevel　　　//显示执行等级

N 5

[root@localhost～]#

本例使用指令runlevel显示当前系统的执行等级。

1.6.23 sliplogin指令：将终端机之间的连接变为sliplogin连接

学习目标 了解 sliplogin 的应用

语法 sliplogin[用户名]

功能说明 sliplogin指令将终端机之间的连接变为sliplogin连接。

基础应用

范例166 改变用户的连接方式。

[root@localhost～]# sliplogin kk　　//改变用户的连接方式

本例使用指令“sliplogin kk”将用户 kk 的连接方式改变为 SLIP 方式。

1.6.24 sysctl指令：设置系统核心参数

学习目标 掌握如何使用 sysctl 来设置核心参数

语法 sysctl[必要参数][选择性参数][变量]

功能说明 sysctl 指令用来设置系统的核心参数。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例167 显示系统核心设置。

[root@localhost～]# sysctl -a >1.log　　//显示系统设置

[root@localhost～]#

[root@localhost～]# tail -n 50 1.log　　　//显示文件信息

kernel.msgmnb = 16384

kernel.msgmni = 16

kernel.msgmax = 8192

kernel.shmmni = 4096

kernel.shmall = 2097152

kernel.shmmax = 33554432

kernel.acct = 4 2　　30

kernel.hotplug = /sbin/udevsend

kernel.modprobe = /sbin/modprobe

kernel.printk = 6　　4　　1　　7

kernel.ctrl-alt-del = 0

kernel.real-root-dev = 0

kernel.cap-bound = -257

kernel.tainted = 0

kernel.core_pattern = core

kernel.core_uses_pid = 1

kernel.vdso = 1

kernel.print-fatal-signals = 0

kernel.exec-shield = 1

kernel.panic = 0

kernel.domainname = (none)

kernel.hostname = localhost.localdomain

kernel.version = #1 Thu Jun 2 22:55:56 EDT 2005

kernel.osrelease = 2.6.11-1.1369_FC4

kernel.ostype = Linux

fs.mqueue.msgsize_max = 8192

fs.mqueue.msg_max = 10

fs.mqueue.queues_max = 256

fs.quota.warnings = 1

fs.quota.syncs = 19

fs.quota.free_dquots = 0

fs.quota.allocated_dquots = 0

fs.quota.cache_hits = 0

fs.quota.writes = 0

fs.quota.reads = 0

fs.quota.drops = 0

fs.quota.lookups = 0

fs.aio-max-nr = 65536

fs.aio-nr = 0

fs.lease-break-time = 45

fs.dir-notify-enable = 1

fs.leases-enable = 1

fs.overflowgid = 65534

fs.overflowuid = 65534

fs.dentry-state = 27450 25570　45　0　　0　　0

fs.file-max = 50823

fs.file-nr = 870　　0　　50823

fs.inode-state = 18904　178　0　　0　　0　　0　　0

fs.inode-nr = 18904　178

fs.binfmt_misc.status = enabled[root@localhost～]#

本例使用指令“sysctl -a >1.log”显示系统设置，并将结果重定向到文件 1.log。

范例168 设置变量。

[root@localhost～]# sysctl -w fs.leases-enable=1 //设置变量

fs.leases-enable = 1

[root@localhost～]#

本例使用指令“sysctl -w fs.leases-enable=1”设置变量 fs.leases-enable 的值为 1。

1.6.25 telinit 指令：设置系统的执行级别

学习目标 掌握如何设置系统的执行级别

语法 telinit[必要参数][选择性参数]

功能说明 telinit 指令可以设置当前系统的执行级别。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例169 设置当前的执行级别。

[root@localhost～]# runlevel　　//显示当前的执行级别

N 5

[root@localhost～]# telinit 2　　//设置执行级别

[root@localhost～]# runlevel　　//显示执行等级

5 2

[root@localhost～]#

本例使用指令“telinit 2”设置当前的执行级别为 2。

1.6.26 head 指令：输出文件开头的部分信息

学习目标 掌握 head 指令的用法

语法 head[必要参数][选择性参数][文件名]

功能说明 head 指令将打印文件的前 10 行到标准输出。如果不指定文件，将从标准输入中输入。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例170 显示文件的前10行。

本例使用指令“head sha.cpp”显示文件 sha.cpp 的前 10 行。

范例171 显示文件的前n行。

本例使用指令“head -n 20 sha.cpp”显示文件的前 20 行。

范例172 显示文件的前n个字节。

本例使用指令“head -c 300 sha.cpp”显示文件 sha.cpp 的前 300 个字节。

第2章 Linux的用户及管理

2.1 Linux的用户和用户组的基本概念

用户和用户组是 Linux 系统管理的基础，Linux 下用户分为超级用户、系统用户和普通用户三大类。

超级用户：在Linux操作系统中，超级用户root的权限是最高的。普通用户无法执行的操作，root用户都能完成。在Linux系统中，每个文件、目录和进程都属于某一个用户，没有该用户的许可，其他的普通用户就无法对该用户的文件目录进行操作，但root用户可以对任何用户和用户组文件进行读取、删除等操作。

系统用户：系统用户通常是在安装软件包时自动创建的，是与系统服务相关的用户。

普通用户：是超级用户创建的，其权限最低，只能操作自己所拥有的文件、目录和进程。

在Linux中每个用户都有一个用户组，系统可以通过一个用户组对属于该组的所有用户进行集中管理。不同的用户组其权限是不同的，对用户组的管理实际是对文件/etc/group 的更新。

2.2 Linux用户和用户组基本操作

2.2.1 adduser：创建一个新用户指令

学习目标 掌握 adduser 指令的基本用法

语法 adduser [-可选参数] 用户名

功能说明 adduser 指令是个 script 程序，系统管理员可以利用 adduser 指令给当前系统添加一个新的用户。它可以是一个系统用户或是一个属于某个指定用户组的用户，这些都由指令中的参数来决定。如果指令中未对此进行指定，指令将按照默认的方式添加一个一般用户，并保存该用户的配置信息。

参数说明 可选参数及其说明如下：

续表

基础应用

范例173 添加一个一般用户。

[root@localhost ～]# adduser tom　　　　　//添加一般用户tom

[root@localhost ～]# cd /home

[root@localhost home]# ls

mary tomyy

[root@localhost home]#

当用户以管理员的身份登录系统后，执行指令“adduser tom” ，系统将自动在目录/home下创建一个新目录tom。

范例174 创建一个系统用户。

[root@localhost ～]# adduser -r adminis　　//创建一个系统用户adminis

[root@localhost ～]# adduser –p 12345678 adminis //为用户 adminis 设置密码

adduser：user adminis exists

[root@localhost ～]#

执行指令“adduser –r adminis”新建一个用户名为 adminis 的系统用户，然后再执行指令“adduser –p 12345678 adminis”为新用户设置密码，当然也可以用 passwd 指令来设置该用户的密码。

范例175 新添加一个用户，同时指定新用户的/home目录。

[root@localhost ～]# adduser -d /home/she –p 12345678 sun //添加一个 home 目录为/home/she新用户sun

[root@localhost ～]# ls /home

mary　sun　tom　yy

[root@localhost home]#

执行指令“adduser -d /home/she –p 12345678 sun”新添加一个一般用户 sun，同时指定用户的/home/目录为/home/she及用户密码。

2.2.2 useradd：创建一个新用户

学习目标 学会使用 useradd 指令建立用户账号

语法 useradd [-可选参数] 用户名

功能说明 useradd 指令建立系统账号，只有管理员才能运行该指令。在 Linux 系统中有两个建立系统账号的指令，分别是useradd指令和adduser指令。其中adduser是useradd的符号链接，它只在Linux的发行版本中出现。

使用 useradd 建立好的用户账号，实际上是保存在/etc/passwd 文本文件中。要设定账号的密码可使用passwd来完成，可使用userdel删除账号。

参数说明 可选参数及其说明如下：

基础应用

范例176 为系统创建一个普通用户。

[root@localhost～]# useradd –g adc aun　　　　//添加用户aun

[root@localhost～]#

执行指令“useradd –g adc aun”将为当前系统创建一个用户名为 aun 的普通用户，同时指定用户的所属组。

范例177 为新用户创建home目录。

[root@localhost～]# useradd –d /home/mary aun　　//添加用户aun

[root@localhost～]#

执行指令“useradd -d /home/mary aun”将用户名 aun 的登录目录设置为/home/mary。

2.2.3 passwd：设置用户密码

学习目标 能使用 passwd 指令来设置、修改、删除或停止用户密码

语法 passwd [-可选参数] 用户名称

功能说明 passwd 指令可用来设置或修改用户账号的密码。在 Linux 系统中，超级用户能设置所有用户的密码，而普通用户只能修改或设置其自身的密码。当用户修改密码时，需根据提示信息先输入旧密码，然后再输入两次新密码。如果要删除用户密码，需要以管理员的身份登录系统。

参数说明 可选参数及其说明如下：

基础应用

范例178 修改指定用户的密码。

[root@localhost ～]# passwd mary　　//修改用户mary的密码

Changing password for user mary.

New UNIX password: ********　　　//输入新密码

BAD PASSWORD: it does not contain enough DIFFERENT characters

Retype new UNIX password: ********　　//再次输入新密码

passwd: all authentication tokens updated successfully.

[root@localhost ～]#

执行指令“passwd mary”，管理员可重新设置用户 mary 的账号登录密码。

范例179 删除用户密码。

[root@localhost ～]# passwd -d tom　　//删除用户tom的账户密码

Removing password for user tom.

passwd: Success

[root@localhost ～]#

系统管理员用户可以删除本系统中任意用户的密码，而不需输入密码进行确认。

2.2.4 htpasswd 指令：创建和更新用户的认证文件

学习目标 学会使用 htpasswd 指令创建和更新用户认证文件

语法 htpasswd[必要参数][选择性参数][密码文件][用户名]

功能说明 htpasswd 指令用来创建和更新保存 HTTP 用户的用户名和密码的文件，如果htpasswd不能读取输出的文件，它将返回错误信息。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例180 创建一个apache登录用户kk。

[root@localhost sha1]# htpasswd -c /home/kk/.htpasswd kk //创建一个新的用户

New password:

Re-type new password:

Adding password for user kk

[root@localhost sha1]#

本例使用指令“htpasswd -c /home/kk/.htpasswd kk”创建一个新的 apache 登录用户。

范例181 对密码进行MD5加密。

[root@localhost sha1]# htpasswd -m /home/kk/.htpasswd kk //加密密码

New password:

Re-type new password:

Updating password for user kk

[root@localhost sha1]#

本例使用指令“htpasswd -m /home/kk/.htpasswd kk”对密码进行 MD5 加密。

2.2.5 groupadd 指令：创建一个新群组

学习目标 学会使用 groupadd 指令在 Linux 系统中创建一个新的用户组

语法 grouped [-可选参数] 用户组名

功能说明 groupadd 指令可以根据指令中的不同参数来创建用户组。在 groupadd 命令中，用户只要在命令后输入用户组名称即可创建一个指定用户组名的新用户组。

参数说明 可选参数及其说明如下：

基础应用

范例182 创建一个新的用户组，同时指定用户组的ID。

[root@localhost ～]# groupadd –g 315 gpr　　　//创建群组

[root@localhost ～]#

执行指令“groupadd –g 315 gpr”将在当前终端机中创建一个 ID 为 315 的新的用户组，同时在文件/etc/passwd 中生成一个组 ID 为 315 的新项。用户组的 ID 就是用户组的权限。

2.2.6 groupdel指令：删除一个群组

学习目标 学会使用 groupdel 指令删除 Linux 系统中的群组

语法 groupdel 群组

功能说明 使用 groupdel 指令来删除群组时要求群组必须存在，而且最好是先移出该群组中的用户，再删除群组。

基础应用

范例183 删除群组。

[root@localhost ～]# groupdel gpr　　　//删除群组

[root@localhost ～]#

执行指令“groupdel gpr”将删除群组 gpr。

2.2.7 userconf 指令：用户账号设置

学习目标 能使用 userconf 指令对用户账号和用户群组进行操作

语法 userconf [-可选参数]

功能说明 userconf 指令实际上为 Linuxconf 的符号链接，使用该指令可以对用户账号和群组进行增加或删除等相关操作。通常情况下，系统管理员都会使用该指令来管理系统中的账号。如果指令中不输入任何参数，将进入图形界面进行设置。

参数说明 可选参数及其说明如下：

基础应用

范例184 删除指定用户和用户组。

[root@localhost ～]# userconf --deluser aun tom　　//删除指定用户aun和tom

[root@localhost ～# userconf --delgroup adc　　//删除指定用户组adc

[root@localhost ～]#

执行指令“userconf --deluser aun tom” 删除指定用户 aun 和 tom。然后执行指令“userconf --delgroup adc”来删除指定用户组 adc。

2.2.8 userdel 指令：删除用户账号

学习目标 能使用 userdel 指令来删除指定用户账号

语法 userdel [-可选参数] 用户

功能说明 userdel 指令不仅可用来删除用户账号，还可通过指定参数在删除指定用户账号的同时删除与指定用户相关的文件及登录目录。

参数说明 可选参数及其说明如下：

基础应用

范例185 删除用户账号。

[root@localhost ～]# userdel tom　　//删除用户tom

[root@localhost ～]#

执行指令“userdel tom”将删除用户 tom。

2.2.9 usermod 指令：修改用户账号

学习目标 能通过 usermod 指令来修改账户的各项设置

语法 usermod [-可选参数] 用户账号

功能说明 usermod 指令可用来修改用户账号的各项数值

参数说明 可选参数及其说明如下：

续表

基础应用

范例186 修改用户账号。

[root@localhost ～]# usermod -l uss mary //修改用户账号

[root@localhost ～]#

执行指令“usermod –l uss mary” 修改用户 mary 的账号名称为 uss。

范例187 修改用户的登录Shell。

[root@localhost ～]# usermod -s /bin/ash mary　//改变用户mary的登录Shell

[root@localhost ～]#

执行指令“usermod -s /bin/ash mary”改变用户 mary 的默认登录 Shell。

2.2.10 finger 指令：查找并显示用户信息

学习目标 能运用 Shell 命令显示指定用户的 finger 信息

语法 finger [-可选参数] [用户名]

功能说明 finger 指令会显示指定用户的相关信息，如用户名、真实姓名、登录终端、登录时间、用户宿主目录等信息；同时，finger 指令还可以查询远程主机上的用户信息。如果指令中未指定具体的用户，指令将显示系统中所有已登录用户的信息。

参数说明 可选参数及其说明如下：

基础应用

范例188 列出用户的相关信息。

[root@localhost ～]# finger –l　root　　　　　//显示用户信息

Login: root　　　　　　Name: root

Directory: /root　　　　Shell: /bin/bash

On since Mon Jan 09 17:21 (EDT) on :0 (messages off)

On since Mon Jan 09 17:22 (EDT) on pts/1 from :0.0

New mail received Mon Jan 07 06:52 2009 (EDT)

Unread since Fri Dec 26 09:29 2008 (EST)

No Plan.

[root@localhost ～]#

2.2.11 fwhois 指令：显示用户的信息

学习目标 能运用 fwhois 命令查找并显示指定用户的相关信息

语法 fwhois [用户名]

功能说明 fwhois 指令可以用来显示指定用户的信息，它的功能类似于 finger 指令。但 使用该指令查找的用户必须先在 Network Solutions 的 WHOIS 数据库上注册才能查到用户信息。

基础应用

范例189 显示指定用户的信息。

[root@localhost ～]# fwhois marY　　//显示用户mary的信息

如果用户 mary 在 Network Solutions 的 WHOIS 数据库上已经注册了，执行指令“fwhoismary”才能显示用户mary的信息。

2.2.12 groupmod 指令：改变系统群组的属性

学习目标 学会使用 groupmod 指令来改变指定用户组的属性

语法 groupmod [-可选参数] 用户组

功能说明 groupmod 指令可以改变指定用户组的名和 ID 信息。

参数说明 可选参数及其说明如下：

基础应用

范例190 给指定的用户组起个新名。

[root@localhost ～]# groupmod -n gpr newgpr　　//改变组名

[root@localhost ～]#

执行指令“groupmod -n gpr newgpr”将名为 gpr 的用户组改名为 newgpr。

2.2.13 groups 指令：查看用户属于哪个组

学习目标 学会使用 groups 指令来查看用户的所属组。

语法 groups [-可选参数]

功能说明 groups 指令可以用来显示指定用户的所属组。如果指令中未对用户名进行指定，将显示当前用户的所属组。

参数说明 可选参数及其说明如下：

基础应用

范例191 显示当前用户的所属组。

[root@localhost ～]# groups　　　//显示所属组

root　bin　daemon　sys　adm　disk　wheel

[root@localhost ～]#

直接输入指令“groups”时，系统将当前用户当作默认的用户账号，显示当前用户所属的组名。

2.2.14 id 指令：显示用户的 ID 以及所属群组的 ID

学习目标 能查看指定用户的 ID 等信息

语法 id [-可选参数] [用户名]

功能说明 利用 id 指令可以显示指定用户的信息。如果指令中未指定用户名，将显示系统当前用户的信息。

参数说明 可选参数及其说明如下：

基础应用

范例192 显示系统当前用户的信息。

[root@localhost ～]# id　　　　　//显示当前用户信息

uid=0(root)gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

context=root:system_r:unconfined_t:Systemlow_Systemhigh

[root@localhost ～]# id –g　　　　//显示用户群组ID

0

[root@localhost ～]# id -G　　　　//显示所有群组ID

0 1 2 3 4 6 10

[root@localhost ～]#

执行指令“id”将显示当前用户的信息，然后通过指令“id –g”和指令“id –G”显示组群ID。

范例193 显示指定用户的信息。

[root@localhost ～]# id mary　　　//显示用户mary的信息

uid=501(mary)gid=501(mary)groups=501(mary)context=root:system_r:unconfined_t:System_low_Systemhigh

[root@localhost ～]#

2.2.15 last 指令：显示所有登录系统的用户相关信息

学习目标 学会使用 last 指令来查询以往所有登录过该系统的用户的信息。

语法 last [-可选参数] [用户/终端]

功能说明 日志文件/var/log/wtmp 里面记录了在此文件创建后的每一位系统级用户的访问活动。使用“last”指令显示所有登录系统的用户相关信息，实际上就是查找该文件的信息并加以显示，此文件不能使用文本编辑器来查看。“last”指令还可以显示指定数字、时间或用户的登录情况。

参数说明 可选参数及其说明如下：

基础应用

范例194 显示所有登录系统的用户相关信息。

[root@localhost ～]# last

root　pts/1　:0.0　　Thu Mar 12 13:38　still logged in

root　:0　　　　　Thu Mar 12 13:36　still logged in

root　:0　　　　　Thu Mar 12 13:36　-13:36　(00:00)

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

--------------------------------------------------------------　//省略部分信息

reboot　system boot　2.6.18-92.e15　Tue Mar 10 12:207　(00:31)

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

--------------------------------------------------------------　//省略部分信息

wtmp begins Mon Dec 31 21:38:16 2008

[root@localhost ～]#

指令的输出信息中包含用户名、登录终端名、登录主机的位置和时间等信息。

2.2.16 lastb 指令：显示登录系统失败的用户信息

学习目标 利用 lastb 指令来查看登录失败的用户信息

语法 lastb [-可选参数] [用户/终端]

功能说明 lastb 指令显示的是登录失败的用户信息，它与 last 指令类似也是通过查找日志文件来得到相关数据信息的。Last指令查找的是/var/log/wtmp/，而lastb指令查找的是日志文件/var/log/btmp，它不能使用文本编辑器来查看，在文件/var/log/btmp中以二进制的形式记录了所有登录系统失败的用户的信息。

参数说明 可选参数及其说明如下：

基础应用

范例195 显示登录失败用户。

[root@localhost ～]# lastb

lastb: /var/log/btmp: No such file or directory

Perhaps this file was removed by the operator to prevent logging lastb info

执行指令“lastb”后，在系统终端上显示提示信息“No such file or directory”表明在系统中不存在文件/var/log/btmp，此时用户可手动创建日志文件。

[root@localhost ～]# touch /var/log/btmp

[root@localhost ～]# lastb

btmp begins Thu Mar 31 12 13:38 2009

[root@localhost ～]#

2.2.17 logname指令：显示登录账号

学习目标 能运用 logname 指令来显示登录系统的登录账号

语法 logname [-可选参数]

功能说明 利用 logname 指令只能显示当前登录系统的用户名，而不能查询有关该用户的其他相关信息。

参数说明 可选参数及其说明如下：

基础应用

范例196 显示登录系统的用户名。

[mary@localhost ～]$ logname　　　//显示用户名

mary

[mary@localhost ～]$

执行指令“logname”将在终端显示当前登录系统的用户名登录账号的信息。

2.2.18 rwho 指令：查看系统用户

学习目标 能使用 rwho 指令来查看系统用户

语法 rwho [-可选参数]

功能说明 rwho 指令会显示局域网中主机的用户信息。

参数说明 可选参数及其说明如下：

基础应用

范例197 显示本地局域网内的所有用户。

[root@localhost ～]# rwho -a　　　//显示局域网内的所有用户

执行指令“rwho –a”将显示本地局域网内的所有用户。

2.2.19 su 指令：变更用户身份

学习目标 学会使用 su 指令进行身份切换

语法 su [-可选参数] [用户名]

功能说明 使用 su 指令切换系统的用户账号时，默认情况下不会改变当前的工作目录，但会修改Shell环境变量。如果是从普通用户切换到系统用户，直接输入指令su后按回车键，然后输入登录密码即可。若当前用户为管理员用户，可以切换到任意的用户账号，并不用输入登录密码。普通用户之间也可以来回切换。

参数说明 可选参数及其说明如下：

基础应用

范例198 切换用户。

[root@localhost ～]# whoami　　　　　　//显示当前用户名

root

[root@localhost ～]# pwd　　　　　　　//当前目录

/root

[root@localhost ～]# su mary　　　　　　//切换到用户mary

[mary@localhost root]$ echo $USER　　　　/ /显示当前用户

mary

[kk@localhost root]$

使用“su”指令切换到系统用户mary名下时，当前的工作目录保持不变，但修改了Shell环境变量。

范例199 从普通用户切换到管理员用户。

[mary@localhost root]$ echo $USER　　　//显示当前用户名

mary

[mary@localhost root]$ su　　　　　//切换到管理员用户

Password:**********　　　　　　　//输入登录密码

[root@localhost ～]#　echo $USER　　　　//显示当前用户名

root

[root@localhost ～]#

从普通用户切换到管理员用户需输入登录密码，而从管理员用户切换到普通用户只要系统中存在此账号就可以任意切换。

2.2.20 sudo 指令：以其他身份来执行

学习目标 学会使用 sudo 指令在不进行系统切换的情况下以系统中其他账号的身份来执行指令

语法 sudo [-可选参数] [指令]

功能说明 使用 sudo 指令可以在不进行系统切换的情况下以其他用户的身份执行指定的指令，可以在不要使用登录密码的情况下使用。sudo 指令的预设身份为 root。在文件/etc/sudoers 中设置了可执行 sudo 指令的用户。若未经授权的用户企图使用 sudo，则会给管理员发出警告的邮件。

参数说明 可选参数及其说明如下：

基础应用

范例200 显示sudo指令的设置。

[root@localhost ～]#sudo -L　　//显示sudo命令的设置

Available options in a sudoers ''Defaults'' line:

syslog: Syslog facility if syslog is being used for logging

syslog_goodpri: Syslog priority to use when user authenticates successfully

syslog_badpri: Syslog priority to use when user authenticates unsuccessfully

long_otp_prompt: Put OTP prompt on its own line

ignore_dot: Ignore '.' in $PATH

mail_always: Always send mail when sudo is run

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

---------------------------//省略了部分结果

badpass_message: Incorrect password message

timestampdir: Path to authentication timestamp dir

exempt_group: Users in this group are exempt from password and PATH requirements

passprompt: Default password prompt

runas_default: Default user to run commands as

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

---------------------------//省略了部分结果

listpw: When to require a password for 'list' pseudocommand

verifypw: When to require a password for 'verify' pseudocommand

[root@localhost ～]#

范例201 以其他用户执行指令。

[root@localhost ～]# sudo -u mary ls /home/mary　　//以用户maryl执行指令

Desktop　　mary.txt

[root@localhost ～]#

执行指令“sudo –u mary ls /home/mary”，以用户 mary 的名义执行指令“ls /home/mary”。

2.2.21 w 指令：显示登录系统的用户信息

学习目标 能使用该指令显示目前登录系统的用户信息

语法 w [-可选参数] [用户名]

功能说明 w 指令可用来显示当前登录到系统的用户信息，以及正在执行的程序。

参数说明 可选参数及其说明如下：

基础应用

范例202 显示当前系统下的所有用户。

[root@localhost ～]# w　　　　//显示当前用户，不显示登录位置

13:50:03 up　6:45,　2 users,　load average: 0.04, 0.03, 0.00

USER　TTY　FROM　　LOGIN@　IDLE　JCPU　PCPU WHAT

root　:0　　-　　　07:48　?xdm?　2:44　0.63s /usr/bin/gnome-

root　pts/1　:0　　　11:36　0.00s　0.09s　0.02s w

[root@localhost ～]#

执行指令“w”显示当前系统下所有用户的信息。

2.2.22 who 指令：显示系统用户信息

学习目标 能使用 who 指令显示目前登录系统的用户信息

语法 who [-可选参数] [记录文件]

功能说明 who 指令可用来显示当前有哪些用户登录系统，以及登录系统的用户的各项信息。若单独执行who指令会列出登录账号、使用的终端机、登录时间、从何处登录以及正在使用哪个X显示器。

参数说明 可选参数及其说明如下：

基础应用

范例203 使用指令who来显示当前登录系统的用户及其各项信息。

[root@localhost ～]# who　　　　　//显示当前登录系统的用户信息

root　:0　　2009 -01-13　07:48

root　pts/1　　2009 -01-13　11:36(00:00)

[root@localhost ～]# who -l -H　　　　//显示用户登录位置

NAME　LINE　　TIME　　IDLE　　PID COMMENT

LOGIN　tty2　　2009 -01-13 07:07　　　5574 id=2

LOGIN　tty3　　2009 -01-13 07:07　　　5575 id=3

LOGIN　tty4　　2009 -01-13 07:07　　　5576 id=4

LOGIN　tty5　　2009 -01-13 07:07　　　5577 id=5

LOGIN　tty6　　2009 -01-13 07:07　　　5578 id=6

[root@localhost ～]#

2.2.23 whoami 指令：显示用户名

学习目标 能使用 whoami 指令来显示当前用户名

语法 whoami [-可选参数]

功能说明 Linux 下的 whoami 指令是用来显示当前用户名称的工具，它的执行效果与“echo &USER”相同但执行原理不同。USER 是 Shell 的环境变量，是用户登录系统时设置的。而whoami指令是通过获取用户的ID，然后到文件/etc/passwd中进行查找的。

参数说明 可选参数及其说明如下：

基础应用

范例204 显示当前用户名。

[root@localhost ～]# whoami　　　//显示当前用户名

root

[root@localhost ～]# echo &USER

root

[root@localhost ～]#

2.2.24 whois 指令：查找用户/域名信息

学习目标 能使用 whois 指令来查找指定账号/域名的信息

语法 whois [ -可选参数] [用户]

功能说明 whois 指令是查找并显示指定用户账号信息的工具程序，它在查找信息时没有大小写的区分。因为它是通过到 Network Solutions 的 WHOIS 数据库去查找用户名来获得信息的，所以只有在网络上注册账号名才能被查找到。使用whois指令，用户可以查找Internet上某一主机或某域所有者的信息，比如管理员姓名、通信地址等信息。

参数说明 可选参数及其说明如下：

基础应用

范例205 显示指定用户的信息。

[root@localhost ～]# whois mary　　　　　　//查找mary用户的信息

范例206 查找指定网络的信息。

[root@localhost ～]# whois www.coronabook.com　　//查找目标网络信息

执行指令“whois www.coronabook.com”查询目标网络的信息。

2.2.25 users 指令：显示用户

学习目标 能使用 users 指令来查看用户信息

语法 users[选择性参数]

功能说明 users 指令用来显示所有的用户。

参数说明 选择性参数的具体说明如下：

基础应用

范例207 显示所有的用户。

[root@localhost temp]# users　　//显示所有的用户

root root

[root@localhost temp]#

本例使用指令“users”显示所有的用户。

2.2.26 wait 指令：等待程序返回状态

学习目标 掌握 wait 指令的用法

语法 wait[程序]

功能说明 wait 指令用来等待指定的程序返回状态。

基础应用

范例208 等待程序返回状态。

[root@localhost ～]# ps -A　　　　//显示当前进程

PID TTY　　TIME CMD

1 ?　　00:00:01 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:00 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

61 ?　　00:00:00 kblockd/0

64 ?　　00:00:00 khubd

110 ?　　00:00:00 pdflush

111 ?　　00:00:00 pdflush

//此处省略了部分结果

4344 ?　　00:00:00 mapping-daemon

4345 ?　　00:00:00 pam_timestamp_c

4347 ?　　00:00:00 notification-ar

4349 ?　　00:00:00 clock-applet

4569 pts/1　00:00:00 top

4570 pts/1　00:00:00 ps

[1]+　Stopped　　　　top

[root@localhost ～]# wait 4569　　　//等待程序返回状态

本例使用指令“wait 4569”等待进程 4569，也就是 top 程序，返回状态值。

2.3 Linux用户和用户组安全管理

2.3.1 grpconv指令：开启群组的投影密码

学习目标 能使用 grpconv 指令开启群组的投影密码，将已有的密码和组转换成 shadow格式

语法 grpconv

功能说明 使用 grpconv 指令可以将 Linux 系统中存放在文件/etc/passwd 和/etc/group 中的用户和组群密码，改存到文件/etc/shadow和文件/etc/gshadow中，同时将其置换成“x”字符。此时，其他用户就无法读取到相关的密码信息，而只有系统管理员才能读取该文件，这样增强了系统的安全性能。

基础应用

范例209 开启群组的投影密码。

[root@localhost ～]# grpconv　　　//开启群组的投影密码

[root@localhost ～]#

执行指令“grpconv”将从正常的文件组passed和group中提取信息创建新的影子文件组shadow和gshadow。

2.3.2 grpunconv指令：关闭群组的投影密码

学习目标 理解 grpunconve 指令的用法和关闭群组的投影密码的执行结果

语法 grpunconv

功能说明 grpunconv 指令可用来关闭之前开启的群组密码保护。执行 grpunconv 指令，会将gshadow文件中的密码信息回存到group文件中，然后删除文件gshadow。

基础应用

范例210 关闭群组的投影密码。

[root@localhost ～]# grpunconv　　　//关闭群组的投影密码

执行指令“grpunconv”可以关闭群组的投影密码，将密码信息还原。

2.3.3 pwconv指令：开启用户的投影密码

学习目标 学会使用 pwconv 指令来激活用户的投影密码

语法 pwconv

功能说明 pwconv 指令的功能类似于 grpconv 指令，将已有的密码转换成 shadow 格式，使系统用户的密码变得更加安全。在 Linux 系统中，用户和群组的密码分别存放在目录/etc下名为passwd和group的文件中，任何用户都可以读取这两个文件。为了保证系统用户密码安全，可开启 shadow 功能对密码进行加密。而对于已存在的用户和组群密码，可分别使用pwconv指令和grpconv指令来进行转换，将存放在文件/etc/passwd和/etc/group中的用户和组群密码改存到目录/etc下的文件shadow和文件gshadow中，同时将其置换成“x”字符，并只允许系统管理者对其进行读取。

基础应用

范例211 开启用户的投影密码，将已有的用户密码转换成shadow格式。

[root@localhost ～]#pwconv　　　//开启用户的投影密码

如果在开启密码的投影功能后用户密码被更改，可输入“pwconv”和“grpconv”指令来重新进行设置。

2.3.4 pwunconv指令：关闭用户的投影密码

学习目标 能使用 pwunconv 指令来关闭用户的投影密码

语法 pwunconv

功能说明 pwunconv 指令可用来关闭用户的投影密码，将用户密码从新建的 shadow 文件回存到passwd文件里，然后删除shadow文件。

基础应用

范例212 关闭用户投影密码，恢复原passwd指令。

[root@localhost ～]#pwunconv　　　//关闭用户投影密码

执行指令“pwunconv”将恢复原passwd指令，并删除shadow文件。

2.4 Linux用户和用户组磁盘配额

2.4.1 edquota指令：编辑用户或用户组的quota

学习目标 掌握使用 edquota 编辑 quota 内容的方法

语法 edquota [-可选参数] 用户名/用户组名

功能说明 edquota 指令可用来编辑每个用户或用户组的 quota 值，即磁盘配额。Linux是一个多人多工的系统，在这个系统里不只有一个用户，还可以有很多其他的用户共同使用同一磁盘空间，此时如果不对用户的磁盘空间进行限制，就有可能造成系统无法正常工作。

参数说明 可选参数及其说明如下：

基础应用

范例213 编辑用户的quota值。

[root@localhost ～]# edquota -u marY　　//编辑用户mary的quota值

Disk quotas for user mary （uid 501）

Filesystemblocks soft hard inodes soft hard

/dev/hdb10 4000 6000 0 500 1000

//更改用户mary的quota值

Disk quotas for user mary （uid 501）

Filesystemblocks soft hard inodes soft hard

/dev/hdb10 5000 6500 0 400 1000

//存盘退出

[root@localhost ～]#

执行指令“edquota -u mary”进入编辑环境，为系统上的用户名为 mary 的用户重新编辑磁盘配额。在范例中blocks的数值表示的是用户已使用的磁盘大小，inodes是指用户现有文件的大小。soft和hard是软限制和硬限制的意思，硬限制即绝对限制，它限制用户占用的磁盘空间不能超越配置的磁盘配额；软限制的设定不能超过硬限制。

2.4.2 quota指令：显示磁盘已使用的空间与限制

学习目标 掌握显示磁盘已使用的空间与限制的方法

语法 quota [-可选参数] 用户名/群组名

功能说明 quota 指令可用来显示磁盘空间的使用和限制等信息。使用该指令不仅可以显示一个用户/组群的磁盘信息，还可以同时显示多个指定用户或组群的磁盘信息。

参数说明 可选参数及其说明如下：

基础应用

范例214 显示单个用户磁盘的信息。

[root@localhost yy]# quota mary　　　　　//显示磁盘信息

Disk quotas for user mary (uid 502): none

[root@localhost ～]#

执行指令“quota mary” 显示用户 mary 的磁盘使用情况。

2.4.3 quotacheck 指令：检查磁盘的使用空间与限制

学习目标 能使用 quotacheck 指令来检查磁盘的使用空间与限制

语法 quotacheck [-可选参数] [文件系统]

功能说明 quotacheck 指令可对挂载的文件系统进行扫描，检查磁盘的使用空间与限制。

参数说明 可选参数及其说明如下：

基础应用

范例215 显示单个用户磁盘的信息。

[root@localhost ～]# quotacheck　-uvg　/home　　　//显示/home下的目录与文件信息

执行指令“quotacheck -uvg /home”显示/home 下的目录与文件信息。

2.4.4 quotaoff指令：关闭磁盘空间限制

学习目标 能使用 quotaoff 指令关闭磁盘空间限制

语法 quotaoff [-可选参数] [文件系统]

功能说明 执行 quotaoff 指令可关闭用户的 quota 限制。

参数说明 可选参数及其说明如下：

基础应用

范例216 显示quotaoff指令帮助信息。

[root@localhost ～]# quotaoff --help　　　　　//显示quotaoff指令帮助信息

执行指令“quotaoff --help” 显示 quotaoff 指令帮助信息。

范例217 关闭所有的磁盘配额限制。

[root@localhost ～]# quotaoff -a　　　　　　//关闭所有的磁盘配额限制

执行指令“quotaoff -a”关闭所有的磁盘配额限制。

范例218 关闭/home下用户的磁盘配额限制。

[root@localhost ～]# quotaoff –uv /home　　　　//关闭/home下用户的磁盘配额限制

执行指令“quotaoff –uv /home”关闭/home 下用户的磁盘配额限制。

2.4.5 quotaon指令：开启磁盘空间限制

学习目标 能使用 quotaon 指令开启磁盘空间限制

语法 quotaon [-可选参数] [文件系统]

功能说明 quotaon 指令可用来开启磁盘空间限制。

参数说明 可选参数及其说明如下：

基础应用

范例219 显示quotaon指令帮助信息。

[root@localhost ～]# quotaon --help　　　　　//显示quotaon指令帮助信息

执行指令“quotaon --help” 显示 quotaon 指令帮助信息。

范例220 开启所有的磁盘配额限制。

[root@localhost ～]# quotaon -a　　　　　　//开启所有的磁盘配额限制

执行指令“quotaon -a” 开启所有的磁盘配额限制。

范例221 开启/home下用户的磁盘配额限制。

[root@localhost ～]# quotaon –uv /home　　　　//开启/home下用户的磁盘配额限制

执行指令“quotaon –uv /home”开启/home 下用户的磁盘配额限制。

2.4.6 repquota指令：检查磁盘空间限制的状态

学习目标 掌握使用 repquota 指令检查磁盘空间限制的状态。

语法 repquota [-可选参数] [文件系统]

功能说明 repquota 指令可用来显示磁盘空间的限制情况，以及每位用户/组群的磁盘使用情况。

参数说明 可选参数及其说明如下：

基础应用

范例222 显示/home/mary的磁盘使用情况。

[root@localhost ～]# repquota /home/mary　　　　//显示/home/mary的磁盘使用情况

执行指令“repquota /home/mary” 显示/home/mary 的磁盘使用情况。

范例223 显示/home/mary的磁盘使用情况。

[root@localhost ～]# repquota -a　　　　　　//显示文件系统的磁盘使用情况

执行指令“repquota –a” 显示 quota 文件系统的磁盘使用情况。

第3章 文件操作与管理

3.1 Linux下的文件操作

文件系统是Linux一个十分重要的知识点，本章主要包括Linux磁盘分区和目录、挂载基本原理、文件存储结构、软链接、硬链接和常见目录的介绍。

文件系统通过为每个文件分配文件块的方式把数据存储在存储设备中，所以一个文件除了分配的文件块外，分配信息本身也要存储在磁盘上。不同的文件系统用的分配和读取文件块的方法也是不同的。下面简要地介绍两种文件系统分配策略：块分配和扩展分配。

采用块分配（block allocation）的文件系统，当文件扩展时每一次都为这个文件分配磁盘空间；采用扩展分配（extent allocation）的文件系统，在文件的磁盘空间不够的时候，一次性为它分配一连串连续的块。

3.2 Linux的文件操作命令

3.2.1 ar 指令：创建、修改或从档案文件中提取文件

学习目标 熟练使用 ar 指令创建库文件并进行维护

语法 ar必要参数[可选参数] [成员文件名]目标文件名

功能说明 ar 指令可以将一组指定文件合并到一个以目标文件名命名的、以.a 为后缀的标准库文件中，也可以从已建立的档案文件中提取文件。操作不改变档案文件中文件的属性。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

基础应用

范例224 创建一个以lib命名的库文件，同时添加模块a1.o、a2.o到新建的库文件中。

[root@localhost ～]# gcc a1.o -o a1.c　　//用gcc编译文件a1.c

[root@localhost ～]# gcc a2.o–o a2.c　　//编译文件a2.c

[root@localhost ～]#ar rv lib.a a1.o a2.o　//创建lib.a文件

a1.o

a2.o

[root@localhost ～]#

用“ar”指令创建lib.a库文件，它包含两个成员文件a1.o和a2.o。从指令中可以看出库文件是gcc编译后的二进制文件，同时新创建的库文件是以.a为后缀的静态函数库。

范例225 显示档案文件的模块。

[root@localhost ～]#ar t lib.a　　　　//显示档案文件lib.a的模块

a1.o

a2.o

[root@localhost ～]#

显示lib库中的模块a1.o和a2.o。

范例226 删除档案文件中的指定文件。

[root@localhost ～]#ar d lib.a a1.o　　//删除档案文件的文件

[root@localhost ～]#ar t lib.a　　//查看档案文件的文件

a2.o

[root@localhost ～]#

删除库lib中的模块a1.o后，重新显示库文件lib.a，发现库文件中只剩下a2.o模块。

范例227 查看档案文件中的文件并显示文件的详细信息。

[root@localhost ～]#ar tv lib.a　　//查看档案文件中的文件同时显示文件的详细信息

rw-r—-r—-101/101 7180 May 25 01:30 2008 a1.o

rw-r—-r—-101/101 4198 May 25 01:30 2008 a2.o

[root@localhost ～]#

运行“ar tv lib.a”列出的项目最前面的九位是文件的属性值，其中每三个分为一组，分别是[拥有者]、[同一用户组的人]、[其他用户]，而每一组中包含有三项 [读取权限]用[r]标示， [写入权限]用[w]标示，最后一个是[执行权限]标示为[x]，如果用[-]进行标示表示对应的用户没有该项权利。

实战思考

应用思考

1．使用参数 p 显示档案文件中指定文件的内容，请比较参数 p 与参数 t 显示的差异。

2．使用“ar”指令对 lib.a 库文件进行修改和添加。

3.2.2 aspell指令：检查文件的错误

学习目标 使用 aspell 指令对文件进行检查，查看是否存在拼写错误

语法 aspell 必要参数[可选参数]文件

功能说明 aspell 指令用于检查文件的拼写错误，通过参数的使用能完成显示等多项附加功能。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

续表

基础应用

范例228 检查文件的错误。

[root@localhost ～]# aspell -c file.c　　//检查文件file.c

abcdefghijklmnopqrst

abcdefg

hijklmn

opqrst

uvwxyz

i) Ignore　　　　　　　I) Ignore all

r) Replace　　　　　　R) Replace all

a) Add　　　　　　　x) Exit

[root@localhost ～]#

运行“aspell -c file.c”显示文件 file.c 的内容，并给出了 Ignore、Ignore all、Replace、Replace all、Add 和 Exit 等修改意见。

范例229 将文件中出现的拼写错误输出到标准输出。

[root@localhost ～]# aspell -l <file.c //将 file.c 中拼错的单词输出到标准输出

abcdefghijklmnopqrst

abcdefg

hijklmn

opqrst

uvwxyz

[root@localhost ～]#

实战思考

应用思考

使用“aspell”指令对你编辑的文件进行检查。

3.2.3 basename 指令：显示文件或者目录的基本名称

学习目标 掌握显示文件名称和目录名称的指令格式

语法 basename[选择性参数][路径名]

功能说明 basename 指令用于打印目录或者文件的基本名称，它将剥除目录或者文件路径的前缀以及文件的后缀信息。

参数说明 选择性参数的具体说明如下：

内建指令

uname

基础应用

范例230 显示基本的文件或者目录名称。

[root@localhost /]# basename /home/kk //显示目录的基本名称

kk

[root@localhost /]#

basename显示指定完整路径的最后部分，也就是目录或者文件真正的名称。如上例中完整的路径信息是/home/kk，执行basename指令之后，得到目录的基本名称kk。

3.2.4 bunzip2 指令：解压.bz2类型的文件

学习目标 使用 bunzip2 指令对经 bzip2 压缩后的.bz2 类型的文件解压

语法 bunzip2 [-可选参数] .bz2 压缩文件

功能说明 bunzip2 指令与“bzip2–d”有相同的作用，解压所指定的.bz2 类型的文件。如果文件类型不是.bz2，解压动作将被忽略，并产生警告信息。对于xxxxxx.tar.bz2类型的文件解压后的形式变为xxxxxx.tar，指令功能与Windows下解压程序相同。

参数说明 可选参数及其说明如下：

基础应用

范例231 解压.bz2类型的文件。

[root@localhost ～]# bunzip2 filename.bz2　　//解压文件filename.bz2

运行“bunzip2 filename.bz2”解压文件 filename.bz2 之后，将生成文件 filename，同时删除原文件filename.bz2。

范例232 使用-s参数解压.bz2类型的文件。

[root@localhost ～]# bunzip2 -s filename.bz2//解压文件 filename.bz2

运行“bunzip2–s filename.bz2”解压文件 filename.bz2 的过程中，内存用量比正常执行时要少。使用 bunzip2/ bzip2–b 解压文件时所需的内存用量=400K+（block *4），加了-s 选项后解压文件是所需内存用量=400K+（block*2.5），其中内存单位 block 的大小是在压缩时决定的。

范例233 解压文件，同时将执行完后的数据输出到标准输出。

[root@localhost ～]# bunzip2 -c filename.bz2//解压文件 filename.bz2 并输出解压后的数据

Hello every one

Hello world

[root@localhost ～]#

解压文件filename.bz2，将解压后的数据直接输出到标准输出，如上所示。

实战思考

应用思考

1.使用 bunzip2 指令对 xxxxxx.tar.bz2 文件进行解压。

2.对比 bunzip2 指令与 bzip2–b 指令。

3.2.5 bzip2指令：压缩成.bz2类型的文件

学习目标 学会运用 bzip2 指令对文件进行压缩和解压

语法 bzip2 [-可选参数] [-压缩等级]要压缩的文件

功能说明 bzip2 指令使用[Burrows-Wheeler block sorting]文本压缩算法以及[Huffmancoding]霍夫曼编码压缩文件。bzip2只能压缩一个文件，在使用bzip2压缩文件的过程中会使用到前面所提到的[block]内存单位，这个内存单位的大小可以通过1～9的选项来自定义，一般内存越大，压缩的效果越好。

这里给出内存的算法：

压缩时：

内存用量=400K+（block*7）

block =选项*100K

解压时：

内存用量=400K+（block*4）

block大小是在压缩时决定的，解压时不用再设定。

参数说明 可选参数及其说明如下：

基础应用

范例234 压缩文件。

[root@localhost ～]# bzip2 filename　　//压缩文件filename

压缩后生成文件filename.bz2，原文件filename消失。

范例235 压缩文件，并保留原文件。

[root@localhost ～]# bzip2 -7 -k filename.doc //压缩文件 filename

压缩后生成filename.doc.bz2文件，保留原文件filename.doc，-7选项是压缩等级选项，默认值为-9。

范例236 使用bzip2指令解压文件。

[root@localhost ～]# bzip2–b filename.doc.bz2　　//解压文件filename.doc.bz2

bzip2指令本身既可压缩文件，也可解压文件。

实战思考

应用思考

把一个xxxxxx.tar.gz指令经变换后转换成xxxxxx.tar.bz2。

3.2.6 bzip2recover指令：损坏.bz2文件的修复

学习目标 修复损坏的.bz2 类型文件

语法 bzip2recover.bz2 类型文件

功能说明 使用 bzip2recover 指令修复损坏的.bz2 文件的数据其实是将文件中的块隔离开。bzip2 是以块的方式来压缩文件的，每个块都是一个独立的单位。当某一块损坏时，用bzip2recover将文件中的块隔离，解压正常的块。

基础应用

范例237 修复.bz2文件。

[root@localhost ～]# bzip2recover filename.bz2 //修复.bz2 文件

bzip2recover 1.0.3: extracts blocks from damaged .bz2 files.

bzip2recover: searching for block boundaries ...

block 1 runs from 100 to 421

bzip2recover: splitting into blocks

writing block 1 to 'rec00001filename.bz2 ...

bzip2recover: finished

[root@localhost ～]#

3.2.7 cat指令：连接并输出文件内容

学习目标 使用 cat 指令对文件进行连接并掌握输出导向符号的使用

语法 cat [-可选参数]文件

功能说明 cat指令用于连接指定的文件，同时兼有将文件的内容输出到标准输出的功能。

参数说明 可选参数及其说明如下：

基础应用

范例238 显示文件内容到标准输出。

[root@localhost ～]# cat a1.txt　　//显示文件a1.txt的内容

Hello every one

Hello world

[root@localhost ～]#

当“cat”指令的后面只接了一个文件a1.txt时，不对文件进行连接，仅在标准输出上显示文件a1.txt的内容。

范例239 对输出的内容进行编号。

[root@localhost ～]# cat -n a1.txt//显示文件a1.txt的内容，并对输出进行编号

1 Hello every one

2 Hello world

[root@localhost ～]#

范例240 同时显示文件 a1.txt和文件 a2.txt 内容，并在每一行的末尾以“$”结束。

[root@localhost ～]# cat -E a1.txt a2.txt//显示文件 a1.txt a2.txt 的内容，并在每一行的末尾以“$”结束

Hello every one$

Hello world$

You are welcome$

What can I do for you$

[root@localhost ～]#

运行“cat -E a1.txt a2.txt”将文件 a1.txt 和文件 a2.txt 的内容连续地显示在标准输出上。

范例241 连接文件a1.txt和文件a2.txt。

[root@localhost ～]# cat a1.txt a2.txt >a3.txt//连接文件 a1.txt a2.txt

[root@localhost ～]# cat a3.txt

Hello every one

Hello world

You are welcome

What can I do for you

[root@localhost ～]#

运行“cat a1.txt a2.txt >a3.txt”，将文件 a1.txt 的内容和文件 a2.txt 的内容合并送到文件a3.txt中，如果文件a3.txt不存在，将创建一个a3.txt新文件。

范例242 连接文件a1.txt和文件a2.txt。

[root@localhost ～]# cat a2.txt a1.txt >>a3.txt //连接文件 a1.txt a2.txt

[root@localhost ～]# cat a3.txt

Hello every one

Hello world

You are welcome

What can I do for you

You are welcome

What can I do for you

Hello every one

Hello world

[root@localhost ～]#

运行“cat a1.txt a2.txt >>a3.txt”，将文件 a1.txt的内容和文件 a2.txt的内容合并加到文件 a3.txt后。

实战思考

应用思考

先创建一个 a1.txt新文件，再输入内容到文件 a1.txt中，然后执行“cat >a1.txt”指令并查看指令运行后文件a1.txt的结果。

3.2.8 chattr 指令：改变文件的属性

学习目标 使用 chattr 指令改变文件系统的属性

语法 chattr [-可选参数] [+/-/=<属性>]文件或者目录

功能说明 chattr 指令改变 Linux 第二个扩展文件系统上的文件或目录属性，这些属性共有以下8种模式：

a：文件或目录的附加用途。

b：不更改文件或者目录的最后存取时间。

c：压缩文件或者目录。

d：不对文件或者目录进行倾倒性操作。

i：不随意改动文件或者目录的属性。

s：安全删除文件或者目录。

S：更新文件或者目录。

u：意外删除保护。

参数说明 可选参数及属性说明如下：

基础应用

范例243 设置文件的属性。

[root@localhost ～]# lsattr a1　　　//显示文件a1的属性

------------- a1

[root@localhost ～]# chattr +u a1　　//意外删除保护

[root@localhost ～]# lsattr a1　　　//显示文件a1的属性

-u----------- a1

[root@localhost ～]# chattr +a a1　　//文件或目录的附加用途

[root@localhost ～]# lsattr a1　　　//显示文件a1的属性

-u---a------- a1

[root@localhost ～]# chattr =s a1

s------------ a1

[root@localhost ～]#

运行指令“chattr +u a1”和“chattr +a a1”，显示文件 a1 的属性发现文件的对应项上添加了相关属性值，再输入“chattr =s a1”属性值变为 s------------，同时将原有属性值删除。

范例244 删除文件具有的属性。

[root@localhost ～]# chattr -s a1　　//删除文件a1的相应属性

[root@localhost ～]# lsattr a1　　　//显示文件a1的属性

------------- a1

[root@localhost ～]#

使用指令“chattr -a a1”删除文件 a1 相应项的属性 s。

实战思考

应用思考

运行“chattr =asu a1”后，更改文件 a1.txt 的属性，在标准输出上显示文件 a1.txt 的属性，查看指令执行结果。

3.2.9 chgrp 指令：改变文件或者目录所属的用户组

学习目标 使用 chgrp 指令改变文件或者目录所属的用户组，区分 chgrp 指令和 chown指令的不同

语法 chgrp [-可选参数] [所属用户组] [文件或目录]

功能说明 chgrp 指令用来改变文件或者目录所属的用户组。

参数说明 可选参数及其说明如下：

基础应用

范例245 改变目录的用户组属性。

[root@localhost manager]# chgrp -R manager filename //改变目录filename的用户组为manager

运行“chgrp -R filename manager”指令改变目录 filename 的用户组为 manager。

范例246 根据指定文件改变目录的用户组属性。

[root@localhost manager]# ls -l　　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 a1.txt

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 a2.txt

-rw-r--r--　1 root　　root　　　　132　11-29 09:35 a3.txt

-rw-r--r--　1 root　　root　　　　1822　01-11 16:51 test.c

-rw-r--r--　1 root　　root　　　　4096　01-11 15:52 tonx.c

………………

-rw-rw-r--　1 manager　manager　　82　11-29 10:08 filname

[root@localhost manager]# chgrp --reference=tonx.c filename　//改变filename的用户组

[root@localhost manager]# ls -l　　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 a1.txt

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 a2.txt

-rw-r--r--　1 root　　root　　　　132　11-29 09:35 a3.txt

-rw-r--r--　1 root　　root　　　　1822　01-11 16:51 test.c

-rw-r--r--　1 root　　root　　　　4096　01-11 15:52 tonx.c

………………

-rw-rw-r--　1 manager　root　　　　82　11-29 10:08 filname

[root@localhost manager]#

先使用 ls -l 显示当前文件夹下文件的详细信息，从中不难发现目录 filename 的用户组为manager，再使用指令“chgrp --reference=tonx.c filename”改变目录 filename 的用户组属性使其和参考文件tonx.c的用户组属性相同，最后使用指令ls-l显示文件的详细信息，以便查看目录filname的用户组。

实战思考

应用思考

1.运用“chgrp -v manager filename”指令改变目录的用户组属性，查看目录下文件的属性是否发生更改。

2.如果一份文件只有部长级及其以上的用户才能观看，想想如何实现。

3.2.10 chmod 指令：改变文件或者目录的权限

学习目标 使用 chmod 指令更改文件或者目录的使用权限

语法 chmod[-可选参数][<权限范围>+/-/=<权限设置>]文件或者目录

功能说明 在 Linux 系统中，文件或目录的权限有读取[r]、写入[w]、执行[x]，此外，系统还有3种特殊权限可供运用，还可以搭配拥有者与所属群组管理权限范围。使用chmod指令更改文件与目录的权限，可以通过符号或者数值的方式来设置，在符号链接修改权限时，会改变被连接的原始文件。给定多个符号时，用逗号隔开。权限范围以及权限代号的说明如下：

【权限范围】

u：User，即文件或目录的拥有者。

g：Group，即文件或目录的所属群组。

o：Other，除了文件或目录拥有者或所属群组之外，其他用户皆属于这个范围。

a：All，即全部的用户，包含拥有者、所属群组以及其他用户。

【权限代号】

r：读取权限，数字代号为“4”。

w：写入权限，数字代号为“2”。

x：执行或切换权限，数字代号为“1”。

-：不具任何权限，数字代号为“0”。

s：特殊?b>功能说明：变更文件或目录的权限。

参数说明 可选参数及其说明如下：

基础应用

范例247 设置文件的权限。

[root@localhost manager]# ls -l　　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　　82　11-29 10:08 filname

[root@localhost manager]# chmod 775 a1.txt　//改变文件a1.txt的权限

[root@localhost manager]# ls -l　　　//显示当前文件夹下的文件详细信息

total 120

-rwxrwxr-x　1 root　　root　　　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　　82　11-29 10:08 filname

[root@localhost manger]#

前面已经介绍了用户的 9 个属性值，运行“chmod 775 a1.txt”设置文件 a1.txt 的权限为755，即拥有者的权限为7，具有读取权、写入权、执行权；同一用户组里用户的权限与拥有者相同；其他用户的权限为最后一个数字 5，即拥有读取权、执行权，但不拥有写入权，不能对文件进行修改。

范例248 设置文件的权限。

[root@localhost ～]# chmod ug+rwx a1.txt　//设置文件a1.txt的权限

[root@localhost ～]# chmod o+rx a1.txt

[root@localhost ～]#

运行指令“chmod ug+rwx a1.txt” “chmod o+rx a1.txt”的结果同上例，仅表现方式不同。

范例249 删除文件的权限。

[root@localhost ～]# chmod a-rx a1.txt　　//删除文件a1.txt的权限

运行指令“chmod a-rx a1.txt”删除所有用户对文件 a1.txt 的读取和执行权限。

实战思考

应用思考

运用“=”来设置权限，看看对文件原有的权限有什么影响，不同的方法设置权限各有什么差异。

3.2.11 chown 指令：改变文件的拥有者或用户组

学习目标 使用 chown 指令改变文件的拥有者或用户组

语法 chown[-可选参数] [用户] [：/.所属组群]文件

功能说明 chown 指令改变指定文件的用户或用户组。如果在 chown 指令中只给定一个用户名，那么指令的运行结果只改变文件的拥有者为给出的用户名，用户组不变。如果同时在指令中给出用户名和用户组，那么文件的用户和用户组同时改变，而且该指令还能只改变用户的组，而不改变拥有者，这种用法与前面介绍的chgrp指令的用法类似。

参数说明 可选参数及其说明如下：

续表

基础应用

范例250 改变文件的用户。

[root@localhost manager]# ls -l　　　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　　82　11-29 10:08 filname

[root@localhost manager]# chown manager a1.txt　//改变文件a1.txt的用户

[root@localhost manager]# ls -l　　　　//显示当前文件夹下的文件详细信息

total 120

-rwxrwxr-x　1 manager　　root　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　　82　11-29 10:08 filname

[root@localhost manager]#

运行指令“chown manager a1.txt”后，从显示信息可以发现文件的拥护者已经从 root 变为manager，但文件的拥有者仍是root。

范例251 同时更改文件的用户和用户组。

[root@localhost manager]# ls -l　　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　　82　11-29 10:08 filname

[root@localhost manager]# chown manager:manager a1.txt　//改变文件a1.txt的用户

[root@localhost manager]# ls -l　　　//显示当前文件夹下的文件详细信息

total 120

-rwxrwxr-x　1 manager　manager　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　82　11-29 10:08 filname

[root@localhost manager]#

运行指令“chown manager:manager a1.txt”同时改变了文件和用户的用户组信息。

范例252 用户名后面跟一个冒号或者点号，但无用户组名时，文件的用户组变为指定用户所在的组。

[root@localhost manager]# ls -l　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　82　11-29 10:08 filname

[root@localhost manager]# chown manager: a1.txt //改变文件a1.txt的用户

[root@localhost manager]# ls -l　　　　//显示当前文件夹下的文件详细信息

total 120

-rwxrwxr-x　1 manager　manager　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　82　11-29 10:08 filname

[root@localhost manager]#

范例253 改变用户组而不改变用户名。

[root@localhost manager]# ls -l　　　　//显示当前文件夹下的文件详细信息

total 120

-rw-r--r--　1 root　　root　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　82　11-29 10:08 filname

[root@localhost manager]# chown :manager a1.txt //改变文件a1.txt的用户

[root@localhost manager]# ls -l　　　　//显示当前文件夹下的文件详细信息

total 120

-rwxrwxr-x　1 root　manager　　28　11-29 09:27 a1.txt

………………

-rw-rw-r--　1 manager　root　　　82　11-29 10:08 filname

[root@localhost manager]#

运行指令“chown :manager a1.txt”只改变了文件的用户组信息。

实战思考

应用思考

如果有一个文件你不是它的拥有者，尝试一下能否改变文件的用户或用户组信息。

3.2.12 cksum 指令：文件的CRC 校验

学习目标 执行 cksum 指令查看文件的校验和和文件的字节数

语法 cksum[-可选参数][文件]

功能说明 cksum 指令显示指定文件的校验和和字节数，如果不指定任何文件名称或是给出的文件名为“-”，则cksum指令会从标准输入设备读取数据。

参数说明 可选参数及其说明如下：

基础应用

范例254 对文件进行校验。

[root@localhost ～]# cksum 1.log　　　//计算文件的校验和

2569962218 28 a1.txt

CRC是一种排错检查方式，cksum运用该演算法对文件进行计算并显示计算结果，供用户核对文件是否正确。

3.2.13 cmp指令：比较文件差异

学习目标 使用 cmp 指令比较两个文件的差异

语法 cmp [-可选参数] 第一个文件 第二个文件

功能说明 cmp 指令比较任意类型的两个文件，并且把结果输出到标准输出。如果文件是相同的，则无输出。如果两个文件存在差异，那么第一个不同的字符和行数会在标准输出上输出。

参数说明 可选参数及其说明如下：

【函数的返回信息】

0：文件是同样的。

1：文件是不同的。

>1：发生错误。

基础应用

范例255 比较两个文件显示不同的信息。

[root@localhost ～]# cmp–c a1.txt a2.txt　　//比较两个文件a1.txt和a2.txt

a1.txt a2.txt differ: byte 1, line 1 is 110 H 131 Y

[root@localhost ～]#

运行“cmp–c a1.txt a2.txt”，输出 a1.txt a2.txt differ: byte 1, line1 is 110 H 131 Y 表明文件a1.txt和文件a2.txt存在差异—两文件第一行的第一个字节就不同，并给出两文件的第一个字母。

范例256 比较两个文件的差异并显示所有不同。

[root@localhost ～]# cmp -l a1.txt a2.txt //比较两个文件 a1.txt 和 a2.txt 显示所有不同的信息

1 110 131

2 145 157

3 154 165

4 154 40

5 157 141

6 40 162

8 166 40

9 145 167

10 162 145

11 171 154

12 40 143

14 156 155

15 151 12

17 110 127

18 145 150

19 154 141

20 154 164

21 157 40

22 40 143

23 167 141

24 157 156

25 162 40

26 154 151

27 144 40

28 12 144

cmp: EOF on a1.txt

[root@localhost ～]#

运行“cmp–l a1.txt a2.txt”，输出文件 a1.txt 与文件 a2.txt 之间的所有差异，其中未显示的 7和 13 表示这两个字节相同。EOF on a1.txt 表示文件 a1.txt 的字节数小于或等于文件 a2.txt 字节数，比较截止于文件a1.txt的末尾。

实战思考

应用思考

比较指令“cmp a1.txt a2.txt”与指令“cmp–c a1.txt a2.txt”输出结果的不同。

3.2.14 cp指令：复制

学习目标 使用 cp 指令复制文件和目录

语法 cp [-可选参数] [源文件或目录] [目标文件或目录]

功能说明 复制源文件到目标文件，或者复制多个源到目标文件夹。

参数说明 可选参数及其说明如下：

基础应用

范例257 复制文件到指定目录。

[root@localhost ～]# cp a1.txt　Desktop/yy1　//复制文件到目录Desktop/yy1

[root@localhost ～]# cd Desktop/yy1　　//改变目录到Desktop/yy1

[root@localhost yy1]# ls

a1.txt

[root@localhost yy1]#

运行指令“cp a1.txt Desktop/yy1”复制文件 a1.txt 到指定的目录 Desktop/yy1。

范例258 复制文件夹。

[root@localhost ～]# cp–fr /home/work　Desktop/yy1　　//复制文件到目录Desktop/yy1

[root@localhost ～]#

运行指令“cp–fr /home/work Desktop/yy1”将目录/home/work 中的文件和子目录一并复制到目录Desktop/yy1下。

范例259 复制备份文件时选择备份文件的结尾字符串。

[root@localhost ～]# cp -bv --suffix=$ a1.txt Desktop/yy1　//备份时选择字尾的字符串

[root@localhost ～]# cd Desktop/yy1

[root@localhost yy1]# ls

a1.txt a2.txt a1.txt$

[root@localhost yy1]#

运行指令“cp -bv --suffix=$ a1.txt Desktop/yy1”复制文件 a1.txt，同时指定备份文件的结尾字符串为“$”，查看文件夹Desktop/yy1能看到一个以“$”结尾的文件a1.txt$。

实战思考

应用思考

1．尝试用 cp 指令复制文件到指定目录，同时进行备份但不设结尾的字符串，完成后显示目标目录的内容。

2．使用cp指令将源文件复制到另一个目标文件，查看结果。

3.2.15 cpio 指令：备份文件

学习目标 使用 cpio 指令对文件进行备份

语法 cpio 必要参数[-可选参数]文件

功能说明 cpio 是用来创建、还原备份档的工具程序，它可以将一个文件从一个地方复制到另外一个地方，同时可以处理tar备份档的文件。

参数说明 必要参数及其说明如下：

续表

选择性参数的具体说明如下：

基础应用

范例260 使用find制作备份文件。

[root@localhost yy1]# ls -l　　　　　　　　//显示当前目录下的详细信息

total 40

-rw-r--r--　1 root　　root　　　　28　11-29 18:15 a1.txt

-rw-r--r--　1 root　　root　　　　28　11-29 15:29 a1.txt$

-rwxr-xr-x　1 root　　root　　　　18872 2008-5-25 alsaunmute

[root@localhost yy1]# find *.txt | cpio -o >mycopy.cpio　//制作备份文件

1 block

[root@localhost yy1]# ls -l　　　　　　　　//显示当前目录下的详细信息

total 48

-rw-r--r--　1 root　　root　　　　28　11-29 18:15 a1.txt

-rw-r--r--　1 root　　root　　　　28　11-29 15:29 a1.txt$

-rwxr-xr-x　1 root　　root　　　　18872　2008-5-25 alsaunmute

-rw-r--r--　1 root　　root　　　　512　11-29 19:41 mycopy.cpio

[root@localhost yy1]#

运行指令“find *.txt | cpio–o >mycop.cpio”从目录 yy1 中查找所有.txt 文件并将其备份到指定文件mycopy.cpio。

范例261 使用ls制作备份文件。

[root@localhost yy1]# ls -l　　　　　//显示当前目录下的详细信息

total 48

-rw-r--r--　1 root　　root　　　28　11-29 18:15 a1.txt

-rw-r--r--　1 root　　root　　　28　11-29 15:29 a1.txt$

-rwxr-xr-x　1 root　　root　　18872　2008-5-25 alsaunmute

-rw-r--r--　1 root　　root　　512　11-29 19:41 mycopy.cpio

[root@localhost yy1]# ls | cpio -o >mycopy1.cpio　　//制作备份文件

75 block

[root@localhost yy1]# ls -l　　　　　//显示当前目录下的详细信息

total 92

-rw-r--r--　1 root　　root　　　28　11-29 18:15 a1.txt

-rw-r--r--　1 root　　root　　　28　11-29 15:29 a1.txt$

-rwxr-xr-x　1 root　　root　　18872　2008-5-25 alsaunmute

-rw-r--r--　1 root　　root　　38400　11-29 20:01 mycopy1.cpio

-rw-r--r--　1 root　　root　　512　11-29 19:41 mycopy.cpio

[root@localhost yy1]#

运行指令“ls | cpio–o >mycop1.cpio”将目录yy1中所有文件打包备份到文件mycopy1.cpio中。

范例262 使用-o对标准输入指定的文件进行备份。

[root@localhost yy1]# ls -l　　　　　//显示当前目录下的详细信息

total 92

-rw-r--r--　1 root　　root　　　　28　11-29 18:15 a1.txt

-rw-r--r--　1 root　　root　　　　28　11-29 15:29 a1.txt$

-rwxr-xr-x　1 root　　root　　　　18872　2008-5-25 alsaunmute

-rw-r--r--　1 root　　root　　　　38400　11-29 20:01 mycopy1.cpio

-rw-r--r--　1 root　　root　　　　512　11-29 19:41 mycopy.cpio

[root@localhost yy1]# cpio -o >mycopy2.cpio　　//备份文件

a1.txt　　　　　　　　　　　　//输入待备份文件

a1.txt$

fcntl.c

mycopy1.cpio

mycopy.cpio

77 blocks

[root@localhost yy1]#

运行指令“cpio -o >mycopy.cpio”将标准输入输入的文件备份到指定的.cpio 文件。例如， a1.txt就是用户通过标准输入指定的待备份文件。当输入结束时，使用“Ctrl+D”组合键结束操作，完成备份。

范例263 使用-A向指定的.cpio备份文件中添加文件。

[root@localhost yy1]# ls -l　　　　　　//显示当前目录下的详细信息

a1.txt a1.txt$ alsaunmute mycopy1.cpio mycopy2.cpio mycopy.cpio

[root@localhost yy1]# cpio -o -O >mycopy2.cpio–A　　//向.cpio文件添加文件

alsaunmute　　　　　　　　　　　//输入回车Ctrl+D

37 blocks

[root@localhost yy1]# cpio -o -O mycopy2.cpio–A　　//向.cpio文件添加文件

a1.txt

1 block

[root@localhost yy1]#

运行指令“cpio -o -O >mycopy2.cpio–A”和“cpio -o -O mycopy2.cpio–A”分两次向已存在的备份文件mycopy2.cpio中添加文件alsaunmute和a1.txt。

范例264 使用-i还原备份文件。

[root@localhost yy1]# cpio -i < mycopy1.cpio　　//还原备份文件

75 blocks

[root@localhost yy1]#

运行指令 cpio -i < mycopy1.cpio 还原文件 mycopy1.cpio 到当前文件夹下。

范例265 使用-ti还原备份文件，同时列出详细信息。

[root@localhost yy1]# cpio -t -i <mycopy.cpio　　//还原备份文件

a1.txt

1 block

[root@localhost yy1]#

运行指令“cpio -t–i <mycopy.cpio”还原备份文件 mycopy.cpio，并列出详细的信息。

实战思考

应用思考

1.尝试用 cpio 指令实现文件复制，对比 cp 指令的复制功能，同时比较二者的备份功能并进行区分。

2.使用 cpio 指令直接将文件发送到外部源。

3.使用 cpio 指令强制还原备份文件。

3.2.16 csplit指令：分割文件

学习目标 能使用 csplit 指令对文件进行分割

语法 csplit [-可选参数]文件 模式队列

功能说明 使用 csplit 指令，将待分割文件按指定的输出模式进行分割，并将结果输出到标准输出。

参数说明 可选参数及其说明如下：

基础应用

范例266 将文件按指定模式进行分割。

[root@localhost yy1]# ls -l　　　　　//显示当前目录下的详细信息

total 48

-rw-r--r--　1 root　　root　　　28　11-29 18:15 a1.txt

-rwxr-xr-x　1 root　　root　　18872 2008-5-25 alsaunmute

-rw-------　1 root　　root　　1822　11-30 18:45 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　11-29 19:41 mycopy.cpio

[root@localhost yy1]# csplit anaconda-ks.cfg 10 20 30　//按照给定的模式队列分割文件

214

415

360

833

[root@localhost yy1]# ls-1　　　　　//显示文件列表，查看文件分割的结果

total 80

-rw-r--r--　1 root　　root　　　28　11-29 18:15 a1.txt

-rwxr-xr-x　1 root　　root　　18872　2008-5-25 alsaunmute

-rw-------　1 root　　root　　1822　11-30 18:45 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　11-29 19:41 mycopy.cpio

-rw-r--r--　1 root　　root　　214　11-30 19:04 xx00

-rw-r--r--　1 root　　root　　415　11-30 19:04 xx01

-rw-r--r--　1 root　　root　　360　11-30 19:04 xx02

-rw-r--r--　1 root　　root　　833　11-30 19:04 xx03

[root@localhost yy1]#

执行指令“csplit anaconda-ks.cfg 10 20 30”将文件 anaconda-ks.cfg 分割成 4 个文件，分别如下所示。

xx00：包含源文件前十行的文件；

xx01：包含从文件xx00的断点开始的20行；

xx02：包含从文件xx01的断点开始的30行；

xx03：包含从文件xx02的断点开始的剩余的所有行。

范例267 使用-f分割文件。

[root@localhost yy1]# ls-1　　　　　//显示文件列表，查看文件分割的结果

total 80

-rw-r--r--　1 root　　root　　　28　11-29 18:15 a1.txt

-rwxr-xr-x　1 root　　root　　18872 2008-5-25 alsaunmute

-rw-------　1 root　　root　　1822　11-30 18:45 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　11-29 19:41 mycopy.cpio

-rw-r--r--　1 root　　root　　214　11-30 19:04 xx00

-rw-r--r--　1 root　　root　　415　11-30 19:04 xx01

-rw-r--r--　1 root　　root　　360　11-30 19:04 xx02

-rw-r--r--　1 root　　root　　833　11-30 19:04 xx03

[root@localhost yy1]# csplit–f as anaconda-ks.cfg 10//按照给定的模式队列分割文件

214

1608

[root@localhost yy1]# ls-1　　　　　//显示文件列表，查看文件分割的结果

total 96

-rw-r--r--　1 root　　root　　　28　11-29 18:15 a1.txt

-rwxr-xr-x　1 root　　root　　18872　2008-5-25 alsaunmute

-rw-------　1 root　　root　　1822　11-30 18:45 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　214　11-30 19:07 as00

-rw-r--r--　1 root　　root　　1608　11-30 19:07 as01

-rw-r--r--　1 root　　root　　512　11-29 19:41 mycopy.cpio

-rw-r--r--　1 root　　root　　214　11-30 19:04 xx00

-rw-r--r--　1 root　　root　　415　11-30 19:04 xx01

-rw-r--r--　1 root　　root　　360　11-30 19:04 xx02

-rw-r--r--　1 root　　root　　833　11-30 19:04 xx03

[root@localhost yy1]#

执行指令“csplit–f as anaconda-ks.cfg 10”将文件 anaconda-ks.cfg 分割成指定文件名为 as的两个文件。

实战思考

应用思考

尝试用csplit指令对空文件进行删除。

3.2.17 cut 指令：剪切文件

学习目标 学会使用 cut 指令直接在 Shell 中对文件进行剪切显示指定位置

语法 cut 必要参数[-可选参数]文件

功能说明 从指定文件中选择每行中的指定位置输出到标准输出。

参数说明 必要参数及其说明如下：

选择性参数及其说明如下：

基础应用

范例268 使用-b显示文件指定位的内容。

[root@localhost yy1]# cat a1.txt　　　//显示文件a1.txt的内容

Hello every one

Hello world

[root@localhost yy1]# cut -b 1,2 a1.txt　//显示文件每行的第一和第二两个字符

He

He

[root@localhost ～]#

运行指令“cut -b 1,2 a1.txt”对文件进行剪切，显示文件 a1.txt 中每一行的第一个和第二个字符，显示结果如上所示。

范例269 使用-c显示文件指定位的内容。

[root@localhost yy1]# cat a1.txt　　　　//显示文件a1.txt的内容

Hello every one

Hello world

[root@localhost yy1]# cut -c 2-11 a1.txt　　//显示文件每行的第二到第十一总共十个字符

ello every

ello world

[root@localhost ～]#

运行指令“cut -c 2-11 a1.txt”对文件进行剪切，显示文件 a1.txt 中每一行的第二到第十一个字符，显示结果如上所示。

范例270 使用-d指定文件切割的分割符显示内容。

[root@localhost yy1]# cat a1.txt　　　//显示文件a1.txt的内容

Hello every one

Hello world

I am a student

My name is liming

Welcome to china

End

[root@localhost yy1]# cut -f 1–d w a1.txt //以 w 作为指定的分隔符，显示内容

Hello every one

Hello

I am a student

My name is liming

Welcome to china

End

[root@localhost yy1]#

运行指令“cut–f 1–d w a1.txt”显示文件 a1.txt 每一行中满足指令中给定条件的内容。

注意：指定字符的大小写。

实战思考

应用思考

使用-s参数，尝试在指令执行后不输出没有域分隔符的行。

3.2.18 diff 指令：生成差异信息

学习目标 学会使用 diff 指令比较文件之间的差异，并生成差异信息

语法 diff 必要参数[-可选参数]文件/目录 1 文件/目录 2

功能说明 diff 指令以逐行的方式，比较两个指定文件内容的异同。如果指定的是两个目录参数，则diff指令会比较两目录下的同名文件，但不会比较其中的子目录。如果指令中同时指定参数“-r”，那么两个目录下的子目录也将进行递归比较。

参数说明 必要参数及其说明如下：

续表

可选参数及其说明如下：

基础应用

范例271 使用-a比较两个文件。

[root@localhost yy1]# cat a1.txt　　//显示文件a1.txt的内容

Hello every one

Hello world

I am a student

My name is liming

Welcome to china

[root@localhost yy1]# cat a3.txt　　//显示文件a3.txt的内容

Hello every one

Hello world

I am a student

My name is liming

Welcome to china

You are welcome

What can I do for you

[root@localhost yy1]# diff–a a1.txt a3.txt　　//比较两个文件的不同

5a6,7

>You are welcome

>What can I do for you

运行指令“diff–a a1.txt a3.txt”，比较文件 a1.txt 和文件 a3.txt 的不同，结果显示“You are welcome” 和“What can I do for you”是新增行。比较结果中显示的 5a6,7 表示文件的差异处前五行是相同的，第六和第七行存在差异。

范例272 比较文件夹的差异。

[root@localhost～]# diff Desktop/yy1/ Desktop/yy2/　//比较两文件夹的不同

Only in Desktop/yy1/: a1.txt

Only in Desktop/yy1/: a3.txt

Only in Desktop/yy1/: mycopy.cpio

Only in Desktop/yy1/: mycopy1.cpio

Only in Desktop/yy2/: a2.txt

Only in Desktop/yy2/: mycopy2.cpio

[root@localhost ～]#

运行指令“diff Desktop/yy1/ Desktop/yy2/”，比较文件夹 Desktop/yy1/和文件夹 Desktop/yy2/的不同。

范例273 使用-c比较两个文件的不同。

[root@localhost yy1]# diff–c a1.txt a3.txt　　　//比较两个文件的不同

+++ a1.txt 2008-12-01 10:05:28.000000000 +0800

--- a3.txt 2008-12-01 16:06:28.000000000 +0800

+++++++++++++++

+++3.5+++

___3.7___

I am a student

My name is liming

Welcome to china

+you are welcome

+what can I do for you

[root@localhost yy1]#

运行指令“diff–c a1.txt a3.txt”比较文件 a1.txt 和文件 a3.txt 的不同，并生成差异文件。

实战思考

应用思考

使用-r对目录进行递归比较，同时对比文件夹比较和文件夹的递归比较的输出结果。

3.2.19 diffstat 指令：diff 结果的统计信息

学习目标 能使用 diffstat 指令读取 diff 的输出结果，对结果进行统计

语法 diff··· ···| diffstat [-可选参数]

功能说明 diffstat 指令读取 diff 指令的输出、统计插入、删除、修改等信息，显示统计数字。

参数说明 可选参数及其说明如下：

基础应用

范例274 显示diff指令的统计信息。

[root@localhost ～]# diff Desktop/yy1/yy2 Desktop/yy1/yy3 | diffstat //统计diff信息

yy2/a1.txt|only

yy2/mycopy.cpio|only

yy3/a1.txt～| 4++++

yy3/a3.txt|only

yy3/alsaunmute|only

yy3/anaconda-ks.cfg |only

6 files changed,4 insertions(+)

[root@localhost ～]#

运行指令“diff Desktop/yy1/yy2 Desktop/yy1/yy3 | diffstat”显示 diff 指令的统计信息。

范例275 使用-l显示diff指令的统计信息。

[root@localhost ～]# diff Desktop/yy1/yy2 Desktop/yy1/yy3 | diffstat–l //统计diff信息

yy2/a1.txt

yy2/mycopy.cpio

yy3/a1.txt～

yy3/a3.txt

yy3/alsaunmute

yy3/anaconda-ks.cfg

[root@localhost ～]#

运行指令“diff Desktop/yy1/yy2 Desktop/yy1/yy3 | diffstat -l”显示 diff 指令的统计信息。

注意：参数的位置。

实战思考

应用思考

使用-n显示diff指令的统计信息。

3.2.20 dump 指令：文件系统备份

学习目标 能使用 dump 指令对文件进行存档

语法 dump 必要参数[-可选参数]目录或者文件系统

功能说明 dump 指令可将指定目录或文件系统备份到指定的设备，或者将指定目录或文件系统备份成一个大文件。这些文件可被复制到指定的硬盘、磁带或别的存储介质。

参数说明 必要参数及其说明如下：

选择性参数及其说明如下：

基础应用

范例276 使用-0f选项建立Desktop/yy3的完全备份到磁带。

[root@localhost root]#dump -0f /dev/nst0 Desktop/yy3 //备份文件系统

运行指令“dump -0f /dev/nst0 Desktop /yy3” 建立 Desktop /yy3 的完全备份到指定的磁带。指令中“-0”参数指定备份的层级，表示完全备份；“-f”参数指定备份设备。

范例277 将文件备份到磁带。

[root@localhost root]#dump -0uf /dev/nst0 Desktop/yy3 //备份文件系统

运行指令“dump -0uf /dev//nst0 Desktop /yy3”备份 Desktop /yy3 下的内容到磁带。指令中的“-u”参数要求备份完成后将文件的层级、日期与时间等相应的信息存储到/etc/dump-dates中。

3.2.21 file 指令：辨识文件类型

学习目标 能分辨文件的类型

语法 file [-可选参数]文件或者目录

功能说明 file 指令是对文件进行辨别分类的，有 3 种类型的设定：文件系统测试、魔法数字测试和语言测试。如果第一个测试成功将输出文件的类型。

参数说明 可选参数及其说明如下：

基础应用

范例278 显示指定文件的类型。

[root@localhost yy1]# file yy3/a3.txt　　//显示指定路径下文件类型

a3.txt:　　　ASCII text

[root@localhost yy1]#

运行指令“file yy3/a3.txt”显示当前指定文件的类型。

范例279 显示当前文件夹下文件的类型。

[root@localhost yy1]# file *　　　　//显示当前文件夹下文件的类型

a1.txt～:　　　ASCII text

a3.txt:　　　ASCII text

a3.txt～:　　　ASCII text

alsaunmute:　　ELF 32-bit LSB executable.Intel 80386.version 1 (SYSV).for GNU Linux

2.6.9.dynamically linked (uses shared libs).for GNU Linux 2.6.9 stripped

anaconda-ks.cfg:　ASCII English text

mycopy.cpio:　　cpio archive

yy2:　　　　directory

yy3:　　　　directory

[root@localhost yy1]#

运行指令“file *”显示当前文件夹下文件或目录的类型，如本例所示。

范例280 使用-F显示当前文件夹下文件的类型。

[root@localhost yy1]# file–F @ *　　//显示当前文件夹下文件的类型

a1.txt～@　　　ASCII text

a3.txt@　　　ASCII text

a3.txt～@　　　ASCII text

alsaunmute@　　ELF 32-bit LSB executable.Intel 80386.version 1 (SYSV).for GNU Linux

2.6.9.dynamically linked (uses shared libs).for GNU Linux 2.6.9 stripped

anaconda-ks.cfg@　ASCII English text

mycopy.cpio@　　cpio archive

yy2@　　　　directory

yy3@　　　　directory

[root@localhost yy1]#

运行指令“file–F @*”显示当前文件夹下文件或目录的类型，如本例所示。

实战思考

应用思考

1．运行指令“file–b *”显示当前文件夹下文件或目录的类型，不显示文件或目录名。

2．运行指令“file–n *”对比它与指令“file *”的差异，想想为什么。

3．运行指令“file–F *”显示当前文件夹下文件或目录的类型，看看在未输入隔离符的情况下输出的结果。

3.2.22 find 指令：查找目录或者文件

学习目标 熟悉 find 指令查找目录或者文件

语法 find [路径] [-可选参数]

功能说明 find 指令用于查找符合条件的文件，并做出相应的处理。

参数说明 可选参数及其说明如下：

续表

基础应用

范例281 查找后缀为.txt的文件。

[root@localhost yy1]# ls /root/Desktop/yy1/ -l //显示文件列表

total 80

-rw-r--r--　1 root　　root　　118　2008-12-02 a3.txt

-rwxr-xr-x　1 root　　root　　18872　2008-05-25 alsaunmute

-rw-------　1 root　　root　　1822　2008-12-01 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　2008-11-29 mycopy.cpio

drwxr-xr-x 2 rootroot 4096 01-01 19:04 yy2

drwxr-xr-x 2 rootroot 4096 01-01 19:04 yy3

[root@localhost yy1]# find *.txt //查找.txt 的文件

a3.txt

[root@localhost yy1]#

运行指令“find *.txt”查找当前目录下后缀为.txt 的文件。

范例282 查找当前目录下指定时间内被修改过的文件。

[root@localhost ～]# find /root/Desktop/yy1/ -ctime -2 //查找 48 小时内被修改过的文件

。

。/anaconda-ks.cfg

./yy3

./yy3/anaconda-ks.cfg～

./yy3/a1.txt

./yy3/a3.txt

./yy3/alsaunmute

./mycopy.cpio～

./a1.txt

./a3.txt～

./a3.txt

./yy2

./yy2/a1.txt

./yy2/mycopy.cpio～

./yy2/a1.txt

./alsaunmute

[root@localhost ～]#

运行指令“find /root/Desktop/yy1/ -ctime -2”查找指定文件夹下面 48 小时之内修改过的文件，如果未指定目录，从当前目录中查找。

范例283 按照目录或文件的权限来查找文件。

[root@localhost ～]# ls /root/Desktop/yy1/ -l　　//显示文件列表

total 80

-rw-r--r--　1 root　　root　　　83　01-01 18:15 a1.txt

-rw-r--r--　1 root　　root　　118　2008-12-02 a3.txt～

-rw-r--r--　1 root　　root　　119　2008-12-02 a3.txt

-rwxr-xr-x　1 root　　root　　18872　2008-05-25 alsaunmute

-rw-------　1 root　　root　　1822　2008-12-01 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　2008-11-29 mycopy.cpio

drwxr-xr-x　2 root　　root　　4096　01-01 19:04 yy2

drwxr-xr-x　2 root　　root　　4096　01-01 19:04 yy3

[root@localhost～]# find /root/Desktop/yy1/ -perm 644　//查找具有指定权限值的文件～

/root/Desktop/yy1/yy3/a1.txt

/rot/Desktop/yy1/yy3/a3.txt

/root/Desktop/yy1/mycopy.cpio～

/root/Desktop/yy1/a1.txt

/root/Desktop/yy1/a3.txt～

/root/Desktop/yy1/a3.txt

/root/Desktop/yy1/yy2/a1.txt

/root/Desktop/yy1/yy2/mycopy.cpio～

/root/Desktop/yy1/yy2/a1.txt

[root@localhost～]# find /root/Desktop/yy1/ -perm 755//查找具有指定权限值的文件

/root/Desktop/yy1/

/rot/Desktop/yy1/yy3

/root/Desktop/yy1/yy3/alsaunmute

/root/Desktop/yy1/yy2

/root/Desktop/yy1/yy2/ alsaunmute

[root@localhost ～]#

运行指令“ls /root/Desktop/yy1/ -l”显示文件夹 yy1 下的文件和目录，同时显示 yy1 主目录下文件的属性。再运行指令“find /root/Desktop/yy1/ -perm 644”查找目录 yy1 下权限值为644，即属性为 rw-r--r--的文件，运行指令“find /root/Desktop/yy1/ -perm 755”查找目录 yy1下权限值为755，即属性为rwxr-xr-x的文件和目录，并将结果输出到标准输出。

范例284 查找字节数为空的文件和空目录。

[root@localhost yy1]# ls /root/Desktop/yy1/ -l //显示文件列表

total 92

-rw-r--r--　1 root　　root　　　83　01-01 18:15 a1.txt

-rw-r--r--　1 root　　root　　118　2008-12-02 a3.txt～

-rw-r--r--　1 root　　root　　119　2008-12-02 a3.txt～

-rw-------　1 root　　root　　　0　01-02 06:44 a3.txt

-rwxr-xr-x　1 root　　root　　18872　2008-05-25 alsaunmute

-rw-------　1 root　　root　　1822　2008-12-01 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　2008-11-29 mycopy.cpio

drwxr-xr-x　2 root　　root　　4096　01-02 06:46 yy

drwxr-xr-x　2 root　root　　4096　01-01 19:04 yy2

drwxr-xr-x　2 root　root　　4096　01-01 19:04 yy3

[root@localhost yy1]#find–empty　　　//查找空文件和目录

./yy

./aa.txt

[root@localhost yy1]#

运行指令“find -empty”，查找当前目录中字节数为零的空文件和空目录，并输出到标准输出。

范例285 按字符串格式在目录中查找文件或目录。

[root@localhost yy1]#find -name yy　　　//查找指定字符串类型的目录

./yy

[root@localhost yy1]#find -name yy.*　　//查找指定字符串类型的文件

./yy.txt

[root@localhost yy1]#find -name mycopy.*　//查找指定字符串类型的文件

./mycopy.cpio

./yy2/mycopy.cpio

[root@localhost yy1]#

运行指令“find -name yy”时，给出的字符串是没有后缀的，查找的结果是空目录。运行指令“find -name yy.*”时，查找完成后输出的是当前目录下以 yy 命名的文件 yy.txt。运行指令“find -name mycopy.*”时，输出结果是当前目录和当前目录下的子目录中与输入字符串同名的文件。

范例286 查找符合字节数的文件或目录。

[root@localhost yy1]# ls /root/Desktop/yy1/ -l　//显示文件列表

total 92

-rw-r--r--　1 root　　root　　　83　01-01 18:15 a1.txt

-rw-r--r--　1 root　　root　　118　2008-12-02 a3.txt～

-rw-r--r--　1 root　　root　　119　2008-12-02 a3.txt～

-rw-------　1 root　　root　　　0　01-02 06:44 a3.txt

-rw-------　1 root　　root　　　0　01-02 06:44 yy.txt

-rwxr-xr-x　1 root　　root　　18872　2008-05-25 alsaunmute

-rw-------　1 root　　root　　1822　2008-12-01 anaconda-ks.cfg

-rw-r--r--　1 root　　root　　512　2008-11-29 mycopy.cpio

drwxr-xr-x　2 root　　root　　4096　01-02 06:46 yy

drwxr-xr-x　2 root　　root　　4096　01-01 19:04 yy2

drwxr-xr-x　2 root　　root　　4096　01-01 19:04 yy3

[root@localhost yy1]#find–size 0　　　　//查找文件

./yy.txt

./a1.txt

[root@localhost yy1]#

运行指令“find -size 0”，查找指定字节数为零的文件。与-empty 指令有相似的地方，当使用-size指令时不查找子目录。

实战思考

应用思考

1.使用-exec参数查找到指定文件类型时，即当find的返回值为真时执行-exec指定的指令。

2.使用指令“find -nogroup–nouser”查找文件系统中不属于任何用户和群组的目录或文件。

3.使用-type 指定要查找文件的类型，相关类型参数有：b-块设备；c-字符设备；d-目录；f-普通文件；l-符号链接；p-管道；s-socket。

3.2.23 findfs 指令：通过列表或者用户ID 查找文件系统

学习目标 学会通过列表或用户 ID 查找文件系统的方法

语法 findfs [LABEL=卷标][UUID=uuid][选择性参数]

功能说明 指令findfs通过卷标或者uuid查找文件系统，找到的设备名将输出到标准输出。

参数说明 选择性参数的具体说明如下：

内建指令

fsck

基础应用

范例287 通过卷标名称查找文件系统。

[root@localhost～]# findfs LABEL=/　　//通过卷标名称查找文件系统

/dev/sda3

[root@localhost～]# findfs LABEL=/boot //通过卷标名称查找文件系统

/dev/sda1

[root@localhost～]#

本例使用指令“findfs LABEL=/”查找卷标名为“/”的文件系统，然后使用指令“findfs LABEL=/boot”查找卷标名为“/boot”的文件系统。

3.2.24 fsck 指令：检查文件系统并修复分区错误

学习目标 了解 fsck 指令检查文件系统并修复分区错误的方法

语法 fsck [-可选参数]文件系统/设备

功能说明 fsck 指令用于检测并修复出错的文件系统，操作对象可以是设备名，例如/dev/hdc1；可以是挂载点，例如/、/usr、/home；可以是 ext2 label，例如 LABEL=/root；还可以是UUID，例如UUID=8868abf6-88c5-4a83-98b8-bfc24057f7bd。

当文件系统发生错误时，可用fsck指令尝试加以修复。

参数说明 可选参数及其说明如下：

基础应用

范例288 检查当前文件系统。

[root@localhost ～]# fsck　　　　　　//检查文件系统

fsck 1.39 (29-May-2006)

e2fsck 1.39 (29-May-2006)

/dev/VolGroupoo /LogVoloo is mounted.

WARNING!!!　Running e2fsck on a mounted filesystem may cause

SEVERE filesystem damage.

Do you really want to continue (y/n)? no　　//用户输入

check aborted.

e2fsck 1.39 (29-May-2006)

/dev/hda1 is mounted.

WARNING!!!　Running e2fsck on a mounted filesystem may cause

SEVERE filesystem damage.

Do you really want to continue (y/n)? no　　//用户输入

[root@localhost ～]#

执行指令“fsck”检查当前文件系统询问用户确认的决定处理方式。

3.2.25 fsck.ext2 指令：检查 ext2 文件系统

学习目标 当 ext2 文件系统发生错误时，能用 fsck.ext2 指令对其加以修复

语法 fsck.ext2 [-可选参数]文件系统/设备

功能说明 fsck.ext2 指令是针对 ext2 文件系统的检查程序。

参数说明 可选参数及其说明如下：

基础应用

范例289 检测指定磁盘。

[root@localhost ～]# fsck.ext2 /dev/fd1 //检测/dev/fd1

执行指令“fsck.ext2 /dev/fd1”检测磁盘/dev/fd1。

3.2.26 fsck.ext3 指令：检查 ext3 文件系统并尝试修改错误

学习目标 使用 fsck.ext3 指令检查 ext3 文件系统是否有错误，如果有进行修复

语法 fsck.ext3 [-可选参数]设备代号

功能说明 当 ext3 文件系统发生错误时，对 ext3 型文件系统进行检测并加以修复

参数说明 可选参数及其说明如下：

基础应用

范例290 检测磁盘。

[root@localhost ～]# fsck.ext3 /dev/fd0　//检测磁盘

运行指令“fsck.ext3 /dev/fd0”检测磁盘/dev/fd0。

3.2.27 fsck.minix 指令：检查文件系统并尝试修复错误

学习目标 使用 fsck.minix 指令检查文件系统是否有错误，如果有进行修复

语法 fsck.minix [-可选参数]设备号

功能说明 fsck.minix 指令针对 Linux MINIX 文件系统进行磁盘检测。

参数说明 可选参数及其说明如下：

在 Linux 系统中，硬盘组织方式分为引导区、超级块（superblock）、索引结点（inode）、数据块（datablock）和目录块（diredtory block）。其中超级块（superblock）包含了关于该硬盘或分区上的文件系统的整体信息，例如文件系统的大小、磁盘的几何尺寸、可用空间容量等，同时还记录了第一个索引结点（inode）位置；索引结点包含了针对某一个具体文件的几乎全部信息，如文件的存取权限、拥有者、文件的大小、建立时间以及对应的目录块和数据块等，但不包含文件名；数据块存储文件的真实内容；目录块里包含文件名以及此文件的索引结点编号。

基础应用

范例291 检测磁盘。

[root@localhost ～]# fsck.minix /dev/hda1　　//检测/dev/hda1

运行指令“fsck.minix /dev/ hda1”检测磁盘/dev/hda1。

3.2.28 ftp指令：文件传输协议

学习目标 能使用 ftp 指令建立 ftp 服务器连接

语法 ftp [-可选参数] [主机名称/IP 地址]

功能说明 ftp 指令是 ARPANET 标准文件传输协议的用户接口。用户可以使用 ftp 指令连接到另一台计算机上，从而实现本地机与远程机之间的文件传输。

参数说明 可选参数及其说明如下：

【ftp内部指令】

！[cmmand] [args]：在本地机调用交互 Shell 执行本地指令。

$ macro-ame[args]：执行 macro-name 宏定义。

ascii：使用 ascii 传输模式。

binary：使用二进制文件传输模式。

bye：结束 ftp。

cd：切换到远端 ftp 服务器的目录上。

cd remote-directory：进入远程主机目录。

cdup：切换远程主机目录到上一层目录。

chmod mode file-name：将远程主机文件 file-name 设置为 mode。

close：在不结束 ftp 进程的情况下，中止与 ftp 服务器的会话。

delete emote-file：删除远端 ftp 主机上的文件。

get remote-file [local-file]：从远程主机上下载文件remote-file到本地硬盘的local-file。

idle [seconds]：设置远程服务器的休眠计时器为[seconds]秒。

lcd [directory]：切换本地目录到[directory]。

ls [remote- directory] [local-file]：显示远程目录 remote- directory 下文件列表，并存入本地文件local-file。

mdelete [remote- file]：删除远程主机上的文件。

mget remote- file：下载文件。

mkdir directory-name：在远程主机上建立文件夹。

modtime file-name：显示远程主机文件的最后修改时间。

mput local-file：上传多个文件到远程主机。

newer file-name：从远程主机下载时检测是不是新文件，是则重新下载。

open host [port]：建立 ftp 连接，建立时可指定连接端口。

put local-file[remote-file]：将本地文件 local-file 上传到远程主机。

pwd：显示远程主机上的当前目录。

quit：退出 ftp。

size file-name：显示远程主机上文件 file-name 的大小。

status：显示当前 ftp 的状态。

system：显示远程主机上操作系统的类型。

.? [cmd]：同 help。

基础应用

范例292 建立ftp连接，然后对远程目录进行操作。

[root@localhost ～]# ftp 192.168.168.1　　　//使用IP地址建立ftp连接

Connected to 192.168.168.1

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.168.1:root): sy114　　　　//输入用户名

331 Please specify the password.

Password:　********　　　　　　　//输入密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls /home/sy sy　　//成功建立FTP连接后，显示指定远程目录下文件才存入本地主机下指定文件

227 Entering Passive Mode (192,168,168,1,7,120)

150 Here comes the directory listing.

drwxrwxrwx　　5 0　　0　　　512 Mar 21 12:07诉讼

drwxr-xr-x　　3 1020　1020　　1102 Mar 25 12:55 vc

drwxr-xr-x　　2 1020　1020　　512 Mar 18 19:32学习

drwxr-xr-x　　2 1020　1020　　512 Mar 21 21:16资料

drwxr-xr-x　　2 1020　1020　　512 Mar 21 22:02科技

226 Directory send OK.　　　　　　　//目录列单成功

ftp> bye　　　　　　　　　　//结束ftp连接

221 Goodbye.

首先执行ftp指令，与远程主机建立FTP连接，然后使用FTP的内部命令显示指定目录的内容。在指令中我们使用IP地址来建立FTP连接，如果不知道远程主机的IP使用主机名同样可以实现连接。使用不同版本显示略有不同。

范例293 使用FTP内部命令上传、下载文件。

[root@localhost ～]# ftp 192.168.168.1　　//使用IP地址建立ftp连接

Connected to 192.168.168.1

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.168.1:root): sy114　　　//输入用户名

331 Please specify the password.

Password:　********　　　　　　//输入密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls　　　　　　　　　//显示当前目录

227 Entering Passive Mode (192,168,168,1,7,120)

150 Here comes the directory listing.

drwxrwxrwx　　5 0　　0　　　512 Mar 21 12:07诉讼

drwxr-xr-x　　3 1020　1020　　512 Mar 25 12:55 vc

drwxr-xr-x　　2 1020　1020　　512 Mar 18 19:32学习

drwxr-xr-x　　2 1020　1020　　512 Mar 21 21:16资料

drwxr-xr-x　　2 1020　1020　　512 Mar 21 22:02科技

226 Directory send OK.

ftp> get vc　　　　　　　//从远程主机下载文件vc

local: vc　remote: vc

227 Entering Passive Mode (192,168,168,1,7,121)

150 Opening BINARY mode data connection for vc (512 Bytes).

226 file send OK.

512 bytes received in 1.7e-05 secs (2.1e+05 Kbytes/s)

ftp> !ls　　　　　　　　//显示本地目录

anaconda-ks.cfg　Desktop　install.log vc a1

ftp> put a1　　　　　　　//上传文件a1

local: a1　remote: a1

227 Entering Passive Mode (192,168,168,1,7,138)

150 Opening BINARY mode data connection for a1.

226 Ok to send data.

512 bytes sent in 1.7e-05 secs (2.1e+05 Kbytes/s)

ftp> bye　　　　　　　　//结束ftp连接

221 Goodbye

在建立FTP连接后，使用get和put指令实现文件的上传和下载。

范例294 删除文件。

[root@localhost ～]# ftp 192.168.168.1　　//使用IP地址建立ftp连接

Connected to 192.168.168.1

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.168.1:root): sy114　　　//输入用户名

331 Please specify the password.

Password:　********　　　　　　//输入密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls　　　　　　　　　//显示当前目录

227 Entering Passive Mode (192,168,168,1,7,120)

150 Here comes the directory listing.

drwxrwxrwx　　5 0　　0　　　512 Mar 21 12:07诉讼

drwxr-xr-x　　3 1020　1020　　512 Mar 25 12:55 vc

drwxr-xr-x　　2 1020　1020　　512 Mar 18 19:32学习

drwxr-xr-x　　2 1020　1020　　512 Mar 21 21:16资料

drwxr-xr-x　　2 1020　1020　　512 Mar 21 22:02科技

226 Directory send OK.

ftp> delete vc　　　　　　　　//删除文件vc

250 DELE command successful.

227 Entering Passive Mode (192,168,168,1,7,120)

150 Here comes the directory listing.

drwxrwxrwx　　5 0　　0　　　512 Mar 21 12:07诉讼

drwxr-xr-x　　2 1020　1020　　512 Mar 18 19:32学习

drwxr-xr-x　　2 1020　1020　　512 Mar 21 21:16资料

drwxr-xr-x　　2 1020　1020　　512 Mar 21 22:02科技

226 Directory send OK.

ftp> bye

221 Goodbye

实战思考

应用思考

尝试用主机名称登录，然后实现文件的上传、下载和远程目录的删除。

3.2.29 gunzip指令：解压文件

学习目标 能使用 gunzip 指令解压文件扩展名为“.gz”的文件

语法 gunzip [-可选参数] [文件/目录]

功能说明 gunzip 指令用来解压被 gzip 指令压缩过的文件，与 gunzip 的功能与 gzip–b 指令的执行效果相同。

参数说明 可选参数及其说明如下：

基础应用

范例295 解压文件。

[root@localhost yy]#gunzip yy.txt.gz //解压文件

[root@localhost yy]#

运行指令“gunzip yy.txt.gz”解压文件 yy.txt.gz。

范例296 解压文件，同时显示文件的相关信息。

[root@localhost yy]#gunzip -l yy.txt.gz//解压文件

Compressed　　uncompressed ratio　uncompressed_name

36　　　　　9 -22.2% yy.txt

[root@localhost yy]#

运行指令“gunzip -l yy.txt.gz”解压文件 yy.txt.gz，同时显示文件的大小、压缩率。

实战思考

应用思考

1.尝试把以上 gunzip 命令中的相关参数加到指令“gzip -d”后，比较两个命令的执行效果。

2.使用递归方式对子目录下的文件进行解压。

3.2.30 gzexe指令：压缩可执行文件

学习目标 能使用 gzexe 指令对可执行文件进行压缩

语法 gzexe [-可选参数] [可执行文件]

功能说明 gzexe 是对可执行文件进行压缩的指令，当对压缩后的可执行文件进行执行时，文件先自动解压然后执行。

参数说明 可选参数及其说明如下：

基础应用

范例297 压缩可执行文件。

[root@localhost ～]#gzexe ass　　　　//压缩可执行文件

运行指令“gzexe ass”压缩可执行文件。

3.2.31 gzip 指令：压缩文件

学习目标 能使用 gzip 指令压缩和解压文件

语法 gzip [-可选参数] [文件/目录]

功能说明 gzip指令是 Linux系统里经常使用的压缩文件命令，使用 gzip指令可以对文件进行压缩和解压。

参数说明 必要参数的具体说明如下：

指定的数值越大，压缩效率越高

基础应用

范例298 压缩指定文件。

[root@localhost yy]# ls　　　　　//列出目录下的文件和子目录

a1.txt a2.txt yy.txt

[root@localhost yy]#gzip yy.txt　　　//压缩文件

[root@localhost yy]# ls　　　　　//列出目录下的文件和子目录

a1.txt a2.txt yy.txt.gz

[root@localhost yy]#

运行指令“gzip yy.txt”对指定文件 yy.txt 进行压缩，执行结束后，查看目录发现源文件yy.txt被文件yy.txt.gz代替。

范例299 压缩目录下所有文件。

[root@localhost yy]# ls　　　　　//列出目录下的文件和子目录

a1.txt a2.txt yy1 yy.txt

[root@localhost yy]# gzip *　　　　//压缩文件

gzip：yy1 is a directory -- ignored

[root@localhost yy]# ls　　　　　//列出目录下的文件和子目录

a1.txt.gz a2.txt.gz yy1 yy.txt.gz

[root@localhost yy]#

运行指令“gzip *”对目录下所有文件进行压缩。

范例300 压缩文件，同时显示详细信息。

[root@localhost yy]#gzip -v yy.txt　　//压缩文件

yy.txt: -22.2% -- replaced with yy.txt.gz

运行指令“gzip -v yy.txt”对指定文件进行压缩，同时显示详细信息。

范例301 解压文件。

[root@localhost yy]# ls　　　　　//列出目录下的文件和子目录

a1.txt.gz a2.txt.gz yy.txt.gz

[root@localhost yy]# gzip -d yy.txt.gz　　//解压缩指定文件

[root@localhost yy]# ls　　　　　//列出目录下的文件和子目录

a1.txt.gz a2.txt.gz yy.txt

[root@localhost yy]# gzip -d *　　　　//解压缩所有压缩文件

gzip: yy.txt: unknown suffix -- ignored

a1.txt a2.txt yy.txt

[root@localhost yy]#

分别运行指令“gzip -d yy.txt”和“gzip–d *”对文件进行压缩，结果显示如上。

范例302 解压文件，同时显示详细信息。

[root@localhost yy]# gzip–d–v yy.txt.gz　　//压缩文件

yy.txt.gz: -22.2% -- replaced with yy.txt

[root@localhost yy]#

运行指令“gzip -d–v yy.txt”对文件进行压缩，同时显示详细信息。

实战思考

应用思考

使用参数“-c”对文件进行压缩和解压查看指令执行结果。

3.2.32 indent 指令：调整C 原始代码文件的格式

学习目标 能使用 indent 指令对 C 原始代码文件的格式进行调整

语法 indent [-可选参数]源文件[-o 目标文件]

功能说明 indent 指令主要用于对 C 语言书写的代码进行格式化，使程序更易于阅读。

参数说明 可选参数及其说明如下：

续表

基础应用

范例303 使用 GNU 风格处理 C 文件。

[root@localhost yy]# cat sum.c

#include <stdio.h>

void main (void)

{

int add1,add2,sum;

add1=12;add2=13;

sum=add1+add2;

}

[root@localhost yy]# indent sum.c　　//使用GNU格式来处理C文件

[root@localhost yy]# cat sum.c

#include <stdio.h>

void

main (void)

{

int add1, add2, sum;

add1 = 12;

add2 = 13;

sum = add1 + add2;

}

运行指令“indent sum.c”对 C 文件进行处理，因 indent 指令的预设值为 GNU 风格，所以该指令以GNU风格处理文件sum.c。

范例304 处理C文件后直接输出到标准输出。

[root@localhost yy]# cat sum.c

#include <stdio.h>

void main (void)

{

int add1,add2,sum;

add1=12;add2=13;

sum=add1+add2;

}

[root@localhost yy]# indent–st sum.c　　//使用GNU格式来处理C文件，同时输出

#include <stdio.h>

void

main (void)

{

int add1, add2, sum;

add1 = 12;

add2 = 13;

sum = add1 + add2;

}

运行指令“indent–st sum.c” 使用 GNU 格式来处理 C 文件，同时输出处理后的文件到标准输出。

范例305 处理C遇见逗号换行。

[root@localhost yy]# cat sum.c

#include <stdio.h>

#include <stdio.h>

void

main (void)

{

int add1, add2, sum;

add1 = 12;

add2 = 13;

sum = add1 + add2;

}

[root@localhost yy]# indent–bc–st sum.c　　//遇见逗号换行

#include <stdio.h>

void

main (void)

{

int add1,

add2,

sum;

add1 = 12;

add2 = 13;

sum = add1 + add2;

}

运行指令“indent–bc–st sum.c” 使用 GNU 格式来处理 C 文件，在遇见逗号时换行，同时输出处理后的文件到标准输出。

实战思考

应用思考

运用参数列表中讲到的参数对C文件的注释进行处理，熟悉indent指令的应用。

3.2.33 less 指令：一次显示一页文本

学习目标 能使用 less 指令显示文本

语法 less [-参数]文件名

功能说明 less 指令功能与 more 指令类似，都是按页显示文件，两者的不同之处在于前者可以按键实现文件的翻页，即允许用户对文件进行前后翻阅。

参数说明 可选参数及其说明如下：

【less内部指令】

b：向后翻一页；

d：向后翻半页；

h：显示帮助界面；

Q：退出 less 指令；

u：向前滚动半页；

y：向前滚动一行；

回车键：滚动一行；

空格键：滚动一页。

基础应用

范例306 显示文件。

[root@localhost yy]# less yy.txt

运行指令“less yy.txt”，弹出窗口显示文件如下。

Since Aug.10, when a ban on most carry-on liquids sent the amount of checked luggage soaring, airlines have been misplacing many more bags, and the fumbling could well escalate during the busy holiday travel season.

Since Aug.10, when a ban on most carry-on liquids sent the amount of checked luggage soaring, airlines have been misplacing many more bags, and the fumbling could well escalate during the busy holiday travel season.

Since Aug.10, when a ban on most carry-on liquids sent the amount of checked luggage soaring, airlines have been misplacing many more bags, and the fumbling could well escalate during the busy holiday travel season.

Since Aug.10, when a ban on most carry-on liquids sent the amount of checked luggage soaring, airlines have been misplacing many more bags, and the fumbling could well escalate during the busy holiday travel season.

Since Aug.10, when a ban on most carry-on liquids sent the amount of checked luggage soaring, airlines have been misplacing many more bags, and the fumbling could well escalate during the busy holiday travel season.

yy.txt(end)

按快捷键“q”退出显示窗口，如果文件比较大一页不能完全显示，可通过按键实现翻阅。当当前页为文件末页时，在显示窗口出现end。

实战思考

应用思考

想想使用less指令如何实现对ls指令列出文件列表的翻阅。

3.2.34 lha 指令：压缩或解压文件

学习目标 能使用 lha 指令对文件进行压缩或解压

语法 lha 必要参数[选择性参数] [压缩文件] [文件]

功能说明 lha 指令是从 lharc 指令演变而来的压缩程序，指令执行后生成扩展名为“.lzh”的压缩文件。

参数说明 必要参数及其说明如下：

基础应用

范例307 压缩文件，同时将压缩后的文件保存到指定目录。

[root@localhost yy]# lha -a sss yy.txt

运行指令“lha -a sss yy.txt”，对文件yy.txt进行压缩，然后保存到文件名为sss的压缩文件中。

范例308 对文件解压。

[root@localhost yy]# lha -xi sss

运行指令“lha -xi sss”，对文件 sss 进行解压，同时保存到当前目录。

范例309 对文件解压，保存到指定目录。

[root@localhost yy]# lha–xw=yy1 sss

运行指令“lha–xw=yy1 sss”，对文件 sss 进行解压，同时保存到指定目录中。

实战思考

应用思考

1．使用lha指令对指定目录下的文件进行压缩。

2．将范例中参数“x”换成参数“e”，运行指令查看结果。

3.2.35 ln 指令：链接文件或目录

学习目标 能使用 ln 指令对文件或目录进行链接

语法 ln [-可选参数]源文件/目录 目标文件/目录

功能说明 ln 指令对文件或目录进行链接。如果同时指定多个文件或目录，且目标目录存在的情况下，指定的多个文件和目录将被复制到指令中给出的目标目录中；如果目标目录不存在，则显示错误信息。ln指令的链接形式可分为硬链接和软链接，其中软链接又叫符号链接。软链接类似于快捷方式，给出的是指向源文件的路径，相当于一个文件指针；硬链接创建的是一个和源文件相同的inode，但两个文件指向的是同一个数据块，即在磁盘上只存在一份数据，这一点和文件复制不同。ln指令的默认为创建硬链接。

参数说明 可选参数及其说明如下：

基础应用

范例310 创建硬链接。

[root@localhost yy]# ls

anaconda-ks.cfg file hello.c hello.c～ yy1 yy.txt yy.txt～

[root@localhost yy]# cat yy.txt

Hello yy

[root@localhost yy]# cd yy1

[root@localhost yy1]# ls yy1

yy.txt

[root@localhost yy1]# cd /root/Desktop/yy

[root@localhost yy]# ln yy yy1/ff　　　　　　　//建立硬链接

[root@localhost yy1]# ls yy1

ff yy.txt

[root@localhost yy1]# cat ff

Hello yy

[root@localhost yy1]#

运行指令“ln yy yy1/ff”在已存在的目录 yy1 下创建文件 yy 的链接文件，ff 就是指定的链接文件，它和源文件yy同时指向磁盘上的同一数据块实现文件链接。

范例311 建立软链接。

[root@localhost yy]# ln–s yy ff　　　　　　　//建立软链接

运行指令“ln–s yy ff”为文件 yy.txt 建立软链接。

实战思考

应用思考

尝试对已经建立的链接文件中之前的链接进行删除或覆盖。

3.2.36 locate 指令：查找文件

学习目标 学会使用 locate 指令查找文件

语法 locate [-可选参数]范本样式

功能说明 locate 指令用于查找符合范本样式的文件或目录。与 find 指令相比，locate指令从数据库中查找文件要快，但locate指令无法对于新增的或已删除的文件进行分辨。

参数说明 可选参数及其说明如下：

基础应用

范例312 查找指定文件。

[root@localhost ～]# locate yy.txt　　//查找文件yy.txt

/root/Desktop/yy.txt～

/root/Desktop/yy/yy.txt

/root/Desktop/yy/yy.txt～

/root/Desktop/yy/yy1/yy.txt

[root@localhost ～]#

运行指令“locate yy.txt”查找文件 yy.txt。

范例313 查找文件。

[root@localhost ～]# locate *.cfg　　//查找*.cfg文件

/root/anaconda-ks.cfg

/root/Desktop/yy/ anaconda-ks.cfg

[root@localhost ～]#

运行指令“locate *.txt”查找所有*.cfg 文件。

3.2.37 lpd指令：打印管理程序

学习目标 了解 lpd 指令的工作原理

语法 lpd [-可选参数]

功能说明 lpd 是一个常驻的打印机监控程序，当用户使用 lpr 打印文档时，首先生成一个待打印文档并将待打印文档放置到目录/var/ spool /lpd 下，然后交由打印监控程序 lpd 进行打印。当 lpd 发现有待打印文档时，会自动生成一个派生，然后这个派生的 lpd 会自动监听打印机状态。当打印机上线后，立即将档案交付打印，同时原 lpd 监控程序继续监视是否有其他的待打印文档。使用lpd可在网络上提供远程打印服务。

参数说明 可选参数及其说明如下：

3.2.38 lpq指令：查看打印机列表中未完成的工作

学习目标 能使用 lpq 指令查看打印机列表中未完成的工作

语法 lpq [-可选参数]

功能说明 lpq 指令是用来查看当前由 lpd 所管理的打印机队列的，通过 lpd 查看打印文件，可显示指定任务的状态或指定用户的所有任务。直接使用 lpq 指令不带任何参数时，显示的是队列中的直接使用指令，不加进项参数，可查看默认打印机的打印队列情况。lpq 是缓冲队列检查命令，不带任何参数的lpq命令显示现在队列中的任何作业。lpq命令的显示结果中一个重要的信息就是作业标识号（作业 ID），它标识一个特定的作业。如果用户想取消一个挂起的作业，就必须在命令中指定这个标识号。

参数说明 可选参数及其说明如下：

基础应用

范例314 查看打印列表。

[root@localhost ～]# lpq　　　//查看打印列表

lp is ready and printing

Rank Owner Job Files Total Size

active tom 21 /Desktop/yy/yy.txt 88 bytes

2nd mary 22 ...167288 byte

[root@localhost ～]#

运行指令“lpq”显示 lp 列表中的所有工作，范例中显示的一共有两个任务，第一个是由使用者 tom 传送的，任务的作业代码为“21”，在这里每一个任务都有唯一的作业代码，每个作业代码里面的文件可以有多个，这是在lpr指令传送时决定的。在当前激活（active）的作业代码中仅有yy.txt一个文件。第二个是由使用者mary传送的，作业代码为21，因文件太长用…代替，后面为文件的字节大小。

范例315 查看指定打印机的打印列表。

[root@localhost ～]#lpq–P hp1208　　　//查看打印列表

Hp1208 is ready and printing　　　//指定打印机

Rank Owner Job Files Total Size

active　mary 9 (standard input)　166 bytes //从标准设备输入

[root@localhost ～]#

运行指令“lpq–P hp1208”显示指定打印机列表中的所有工作，在输出任务中当打印机未准备好时，第一项的active显示为1st。

范例316 查看打印列表的所有信息。

[root@localhost ～]#lpq–l　　　//查看打印列表中的所有信息

tom: 1st[job021rose]

/Desktop/yy/yy.txt 88 bytes

mary: 2nd[job022rose]

(standard input) 166 bytes

[root@localhost ～]#

运行指令“lpq–l”显示打印列表的所有信息。

实战思考

应用思考

使用lpq指令分别查看指定用户的全部任务和指定任务的工作状态。

3.2.39 lpr 指令：输入打印文件

学习目标 能使用 lpr 指令输入待打印文件

语法 lpr [ -可选参数] [文件名]

功能说明 使用 lpr 指令可将档案或从标准设备输入的文件送到打印机队列中，然后交由打印机管理程序lpd对对列中的文件进行处理。lpr还可实现远程打印。

参数说明 可选参数及其说明如下：

基础应用

范例317 输入打印文件。

[root@localhost ～]#lpr /Desktop/yy/yy.txt　　//输入单个文件

运行指令“lpr /Desktop/yy/yy.txt”将文件 yy.txt 传送到打印队列中。

范例318 同时输入多个待打印文件。

[root@localhost ～]#lpr /Desktop/yy/yy.txt /Desktop/yy/yy1.txt　　//输入单个文件

运行指令“lpr /Desktop/yy/yy.txt /Desktop/yy/yy1.txt”将文件 yy.txt 和文件 yy1.txt 传送到打印队列中，这种情况下文件yy.txt和文件yy1.txt拥有相同的作业代码。

范例319 打印标准输入读入的文件。

[root@localhost ～]#ls–l | lpr　　//从标准输入读入文件

运行指令“ls–l | lpr”，将 ls 指令所列出的所有文件作为打印输入。一般情况下，当 lpr指令没有指定任何文件时，lpr将从标准输入读入文件传送到打印列表。

实战思考

应用思考

运行指令“cat filename | lpr”实现文件打印，比较指令与“ls–l | lpr”找到二者的共同之处，在给出命令的lpr后面分别加入参数“打印机名”、“打印页数”、“文件名”比较执行结果。

3.2.40 lprm指令：将任务从打印机队列中移除

学习目标 能使用 lprm 指令删除打印任务

语法 lprm [-可选参数]

功能说明 lprm 指令可从打印列表中删除未完成的打印任务，因为每一个打印机都有一个独立的打印队列，所以在使用 lprm 对任务进行删除时，可用 -P 参数指定打印机，如不指定则使用系统预设。

参数说明 可选参数及其说明如下：

基础应用

范例320 删除当前任务。

[root@localhost ～]#lprm　　　//删除任务

运行指令“lprm”，因指令中未指定打印机、作业代码和用户名，在指令执行时如果是超级用户，将删除任何当前正在处理的任务；如果不是超级用户，lprm将删除属于本用户的，且当前默认打印机正在处理的任务。

范例321 删除用户所有任务。

[root@localhost ～]#lprm -　//删除用户所有任务

运行指令“lprm -”，删除默认打印机所有属于用户的任务。

实战思考

应用思考

分别以超级用户和非超级用户登录系统，运行指令“lprm–P printer”，查看执行后的打印机队列看看有否区别，想想为什么。

3.2.41 lsattr 指令：显示文件属性

学习目标 能使用 lsattr 指令查看文件属性

语法 lsattr [-可选参数] [文件/目录…]

功能说明 lsattr 指令可以显示文件的属性。

参数说明 可选参数及其说明如下：

基础应用

范例322 显示文件属性。

[root@localhost yy]# lsattr　　　　//显示文件属性

------------- ./hello.c～

------------- ./hello.c

------------- ./yy.txt～

------------- ./yy.txt

------------- ./yy1

------------- ./anaconda-ks.cfg

------------- ./file

[root@localhost yy]#

运行指令“lsattr”显示当前文件夹下的文件属性。

实战思考

应用思考

运用指令chattr更改文件属性，然后用lsattr查看更改结果。

3.2.42 mattrib 指令：变更或显示MS-DOS 文件的属性

学习目标 能应用 mattrib 指令对 MS-DOS 文件的属性进行修改

语法 mattrib［可选参数］［文件］

功能说明 用户使用 mattrib 指令可以对指定的 MS-DOS 文件的属性进行修改，增加文件属性用“+”，删除文件属性用“-”。mattrib指令为mtools工具指令，相当于MS-DOS的attrib指令。

参数说明 必要参数的具体说明如下：

基础应用

范例323 设置MS-DOS文件的系统属性。

[root@localhost ～]# mattrib +s filename

运行指令“mattrib +s filename”，这里的 filename 是指定的 MS-DOS 文件的文件名，执行该指令，设置指定文件filename的系统属性；同理，想要去除文件系统属性时将指令中的“+”改为“-”即可。

3.2.43 mc 指令：菜单式文件管理程序

学习目标 能使用 mc 指令进入交互式文件管理程序

语法 mc [-可选参数] [文件]

功能说明 运行 mc 指令进入一个图形化界面的菜单式文件管理程序。

参数说明 可选参数的具体说明如下：

基础应用

范例324 进入菜单式文件管理程序。

[root@localhost ～]#mc

运行指令“mc”进入菜单式文件管理程序的图形界面，然后根据菜单的提示选项进行文件管理。

3.2.44 mcopy 指令：复制MS-DOS文件

学习目标 能在 MS-DOS 与 Linux 的文件系统之间进行文件复制

语法 mcopy [-可选参数]源文件[目标文件/目录]

功能说明 mcopy 指令可复制 MS-DOS 文件到 UNIX 系统，或从 UNIX 系统复制文件到MS-DOS。mcopy指令是mtools工具指令，能根据MS-DOS磁盘驱动器代号出现的位置来判断如何复制文件。

参数说明 可选参数及其说明如下：

续表

基础应用

范例325 复制文件。

[root@localhost ～]#mcopy　dosfilname Linuxfile　　//复制DOS文件到Linux文件

[root@localhost ～]#mcopy　Linuxfile dosfilname　　//复制Linux文件到DOS文件

分别运行指令“mcopy dosfilname linuixfile”和指令“mcopy linuixfile dosfilname”，实现MS-DOS与Linux之间的文件复制。指令可与以上参数列表中给出的参数根据具体情况一起使用，以实现不同的功能。

范例326 复制文件。

[root@localhost ～]#mcopy Linuxfile /Desktop/yy　　//复制Linux文件到指定目录下

[root@localhost ～]#mcopy dosfilname /Desktop/yy　//复制DOS文件到指定目录下

分别运行指令“mcopy Linuxfile /Desktop/yy”和指令“mcopy dosfilname /Desktop/yy”，将MS-DOS或Linux文件复制到指定的文件夹。

范例327 复制文件。

[root@localhost yy]#mcopy–n dosfilname //复制 DOS 文件

运行指令“mcopy–n dosfilname”，复制 MS-DOS 文件到当前目录。

3.2.45 mdel指令：MS-DOS文件删除

学习目标 掌握 MS-DOS 文件的删除

语法 mdel [-可选参数]文件

功能说明 mdel 指令是 mtools 工具指令，使用 mdel 指令删除 MS-DOS 文件。

参数说明 可选参数及其说明如下：

基础应用

范例328 删除MS-DOS文件。

[root@localhost ～]# mdel dosfilname　　　//删除指定的MS-DOS文件

上面的指令中指定的是单个的MS-DOS文件dosfilname，运行指令“mdel dosfilname”就删除了这个被指定的 MS-DOS 文件 dosfilname。如果指令 mdel 后跟的不是一个文件而是多个MS-DOS文件，执行mdel指令将同时对多个指定的MS-DOS文件进行删除。

3.2.46 mktemp指令：建立暂存文件

学习目标 能使用 mktemp 指令建立暂存文件

语法 mktemp [-] [可选参数]

功能说明 mktemp 指令将生成一个暂存文件，如果在指令中给出文件名，mktemp 指令根据指定的名字生成一个暂存文件。这个生成的暂存文件可供 Shell 脚本安全地使用临时文件。

参数说明 可选参数及其说明如下：

基础应用

范例329 创建一个默认的暂存文件。

[root@localhost Desktop]# mktemp

/tmp/tmp.AOHgw20256

[root@localhost Desktop]#

3.2.47 more指令：显示文件信息

学习目标 能使用 more 指令显示文件信息

语法 more [-] [可选参数]文件

功能说明 与 cat 指令类似，但功能更强，可以按页显示。more 指令按页显示的基本控制键有：空格键（space）向下翻一页；“b”向上翻一页；“h”说明文件。

参数说明 可选参数及其说明如下：

基础应用

范例330 显示文件。

[root@localhost yy]# more a1.txt

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]#

运行指令“more a1.txt”显示文件 a1.txt 的内容。

范例331 显示指定文件。

[root@localhost yy]# more a1.txt a2.txt

::::::::::::::

a1.txt

::::::::::::::

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

--More—(Next file: a2.txt) //显示中断出现如左侧显示的提示信息，按空格键后提示信息消失，接着显示文件a2.txt的内容，而该提示行清除不再显示

::::::::::::::

a2.txt

::::::::::::::

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]#

运行指令“more a1.txt a2.txt”，首先显示文件 a1.txt 的内容，由用户决定文件 a2.txt 的显示。在执行过程中出现的提示信息，重新显示时清除。

范例332 从指定行开始显示文件。

[root@localhost yy]# cat a1.txt

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]# more +3 a1.txt

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]#

运行指令“more +3 a1.txt”从第三行开始显示文件内容。

实战思考

应用思考

运行指令“more–s filename”，逐页显示文件 filename 的内容，如文件有连续两行以上空白行只显示一行。

3.2.48 mmove 指令：移动或重命名 MS-DOS 文件

学习目标 能移动或重命名一个存在的 MS-DOS 文件或子目录

语法 mmove [-可选参数]源文件/目录 目标文件/目录

功能说明 mmove 指令是 mtools 工具指令，使用 mmvoe 指令可移动现有的 MS-DOS 文件或重命名MS-DOS文件或目录名。

参数说明 可选参数及其说明如下：

基础应用

范例333 重命名现有MS-DOS文件。

[root@localhost yy]#mmove filename tar-filename //重命名 MS-DOS 文件 filename

运行指令“mmove filename tar-filename”将 MS-DOS 文件 filename 更名为 tar-filename。

3.2.49 mread 指令：复制 MS-DOS 文件

学习目标 能将 MS-DOS 文件复制到 Linux/Unix

语法 mread [-可选参数] MS-DOS 文件 Linux 文件/或目录

功能说明 mread 指令将 MS-DOS 文件复制到 Linux/UNIX，现在很少使用，一般用指令mcopy来代替。mread是mtools工具指令。

参数说明 可选参数及其说明如下：

基础应用

范例334 复制MS-DOS文件到指定目录。

[root@localhost yy]#mread dosfilename /home

运行指令“mread dosfilename /home”复制 MS-DOS 文件 dosfilename 到目录/home 下。

3.2.50 mren 指令：移动或重命名 MS-DOS 文件

学习目标 能重命名 MS-DOS 文件/目录，或移动文件/目录

语法 mren [-可选参数]源文件/目录 目标文件/目录

功能说明 mren 指令是 mtools 工具指令，用来更改 MS-DOS 文件或目录名。与 MS-DOS的ren指令类似，但ren仅限于在同一设备内移动文件或目录。

参数说明 可选参数及其说明如下：

基础应用

范例335 更改MS-DOS文件名称。

[root@localhost yy]#mren dos-fname1 dos-fname2　　//更改文件名称

运行指令“mren dos-fname1 dos-fname2”将 MS-DOS 文件 dos-fname1 重命名为dos-fname 2。

3.2.51 mshowfat 指令：显示 MS-DOS 文件的记录

学习目标 能使用 mshowfat 指令显示 MS-DOS 文件的记录

语法 mshowfat 文件

功能说明 mshowfat 指令是 mtools 工具指令，用来显示 MS-DOS 文件在 FAT 的记录编号。

基础应用

范例336 显示MS-DOS文件记录。

[root@localhost ～]#mshowfat ms-dos.txt //显示 MS-DOS 文件在 FAT 的记录

运行指令“mshowfat ms-dos.txt”显示 MS-DOS 文件在 FAT 的记录编号。

3.2.52 mv 指令：移动或更名现有的文件或目录

学习目标 能移动或更名现有的文件或目录

语法 mv [-可选参数] 源文件 目标文件/目录

功能说明 mv 指令可以将一个源文件重命名为目标文件名，或移动源文件到指定目录。

参数说明 可选参数及其说明如下：

基础应用

范例337 将文件a2.txt重命名为sa.txt。

[root@localhost yy]# ls

a1.txt a2.txt yy1

[root@localhost yy]# cat a2.txt

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]# mv a2.txt sa.txt

[root@localhost yy]# cat a2.txt

cat: a2.txt No such file or directory

[root@localhost yy]# cat sa.txt

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]# ls

a1.txt sa.txt yy1

[root@localhost yy]#

运行指令“mv a2.txt sa.txt”将文件 a2.txt 更名为 sa.txt。

范例338 重命名同时覆盖文件。

[root@localhost yy]# ls

a1.txt sa.txt yy1

[root@localhost yy]# mv a1.txt sa.txt

mv: overwrite‘sa.txt’？y //询问用户是否覆盖文件

[root@localhost yy]# ls

sa.txt yy1

[root@localhost yy]#

运行指令“mv a1.txt sa.txt”将文件 a1.txt 更名为 sa.txt，因目标文件 sa.txt 已存在，在对文件进行覆盖前先询问用户，由用户决定是否继续。

范例339 重命名同时覆盖文件。

[root@localhost yy]# ls

sa.txt yy1

[root@localhost yy]# mv sa.txt yy

[root@localhost yy]# ls

yy1

[root@localhost yy]# cd /yy1

[root@localhost yy1]#ls

yy

[root@localhost yy]#cat yy

Hello world

Aaaaaaaaaaaaaaaa

Bbbbbbbbbbbbbbbb

Ccccccccccccccccc

[root@localhost yy]#

运行指令“mv sa.txt yy1”将文件 sa.txt 移动到目录 yy1 中。

实战思考

应用思考

运行指令“mv–T file1 directory”，file1 是已存在的文件名，directory 和当前目录下的某已存在的子目录同名，然后再运行指令“mv file1 directory”，对比执行结果。

3.2.53 ncftp 指令：文件传输

学习目标 能使用 ncftp 指令实现 ftp 服务如文件传输

语法 ncftp [-可选参数] [主机/IP 地址]

功能说明 ncftp 指令是一个独立的 FTP 软件，与传统的 FTP 相比它提供了一个强大的可扩展的接口，包括显示传输速率、下载进度、自动续传等更多的高级功能，且安全性能更好。

参数说明 可选参数及其说明如下：

【ncftp内部命令】

！：执行本地机器的指令。

ascii：传输模式为 ascii。

binary：传输模式为二进制模式。

bye：结束 ftp。

cd：切换到远端 ftp 服务器上的目录。

cdup：上一层目录。

close：在不结束 ftp 进程的情况下，关闭与 ftp 服务器的连接。

delete：删除远端 ftp 服务器上的文件。

get：下载。

hash：显示“#”。

lcd：更改本地目录。

ls：列出远端 ftp 服务器上的文件列表。

mdelete：删除文件，模糊匹配。

mget：下载文件，模糊匹配。

mkdir：在远端 ftp 服务器上建立文件夹。

mput：上传文件，模糊匹配。

newer：下载时检测是不是新文件。

open：打开连线。

prompt：关闭交互模式。

put：上传。

pwd：显示当前目录。

quit：退出。

基础应用

范例340 登录ftp服务器上传、下载文件。

[root@localhost ～]# ncftp -u sy114 -p 12345678 192.168.128.1 //登录

NcFTP 3.2.0 (Aug 05, 2006) by Mike Gleason

Connecting to 192.168.128.1

Serv-U FTP Server v5.1 for WinSock ready

Logging in...

User logged in, proceed.

Logged in to 192.168.128.1

ncftp / > ls

ll。Txt a1 vc

ncftp / > delete a1　　　//删除文件

ncftp / > ls　　　　　//显示文件列表

ll。Txt vc

ncftp / > lcd /home/yy　　　　//本地改变目录

ncftp / > !pwd　　　　　　//显示当前路径

/home/yy

ncftp / > get vc　　　　　　//下载文件

vc:　　　　　　　512 kB　345.11kB/s

ncftp / > put as　　　　　　//上传文件

as:　　　　　　　　　11.9kB 1.2kB/s

ncftp / > ls

ll。Txt　as　vc

ncftp / > bye

You have not saved a bookmark for this site.

Would you like to save a bookmark to:

ftp:// sy114:PASSWORD@192.168.128.1

Save? (yes/no) n　　　　　　//是否保存标签

Not saved.(If you don't want to be asked this, "set confirm-close no")

Thank you for using NcFTP Client.

If you find it useful, please consider making a donation!

http://www.ncftp.com/ncftp/donate.html

执行指令“ncftp -u sy114 -p 12345678 192.168.128.1”登录到 ftp 服务器 1192.168.128.1上，然后进行文件的删除、下载、上传等文件操作。

3.2.54 ncftpget指令：下载文件

学习目标 掌握使用 ncftpget 指令下载文件的方法

语法 ncftpget [-可选参数]主机/IP 地址[本地路径]远程文件

功能说明 ncftpget 指令可直接获取远端 ftp 服务器上的文件。

参数说明 可选参数及其说明如下：

基础应用

范例341 下载文件。

[root@localhost ～# ncftpget -u sy114 -p 12345678 192.168.128.1 /home/yy1 /vc

//下载文件

/home/yy1/vc:　　　　　　　512 kB　345.11kB/s

执行指令“ncftpget -u sy114 -p 12345678 192.168.128.1 /home/yy1 /vc”直接下载远程主机上的文件vc到本地指定的目录/home/yy1。

3.2.55 ncftpput指令：上传文件

学习目标 掌握使用 ncftpput 指令上传文件的方法

语法 ncftpput [-可选参数]主机/IP 地址[远端目录]本地文件

功能说明 ncftpput 指令可直接上传文件到远程 ftp 服务器。

参数说明 可选参数的具体说明如下：

基础应用

范例342 上传文件。

[root@localhost ～]# ncftpput　-u sy114 -p 12345678 192.168.128.1　/home/yy1/as

//上传文件

/home/yy1/as:　　　　　　11.9kB 1.2kB/s

执行指令“ncftpput -u sy114 -p 12345678 192.168.128.1 /home/yy1/as”上传本地文件/home/yy1/as到远程主机的当前目录。

3.2.56 od 指令：输出文件内容

学习目标 能以不同形式输出文件内容

语法 od [-可选参数] [文件]

功能说明 使用od指令显示指定文件的内容，显示的格式默认为八进制，也可通过参数设置。

参数说明 可选参数及其说明如下：

【进制说明】

a：名称字符

c：ASCII

d：十进制

o：八进制

u：十进制

x：十六进制

基础应用

范例343 以默认形式计算，显示字码。

[root@localhost yy]# cat a1　　　　//显示文件内容

Hello everyone

Hello everybody

How are you

Fine，thank you and you？

[root@localhost yy]# od a1　　　　　　//以八进制的形式显示文件

0000000 062510 066154 020157 073145 071145 067571 062556 044012

0000020 066145 067554 062440 062566 074562 067542 074544 044012

0000040 073557 060440 062562 074440 072557 063012 067151 020145

0000060 064164 067141 020153 067571 020165 067141 020144 067571

0000100 037565 000012

0000103

[root@localhost yy]#

执行指令“od a1”，以默认的八进制的形式输出文件 a1 的内容。

范例344 按十进制计算字码与以十进制形式显示。

[root@localhost yy]# od -A d a1　　　//以十进制计算字码

0000000 062510 066154 020157 073145 071145 067571 062556 044012

0000020 066145 067554 062440 062566 074562 067542 074544 044012

0000040 073557 060440 062562 074440 072557 063012 067151 020145

0000060 064164 067141 020153 067571 020165 067141 020144 067571

0000100 037565 000012

0000103

[root@localhost yy]# od -t d a1

0000000 1819043144 1986338927 1870230177 1208640878

0000020 1869376613 1702257952 1868724594 1208645988

0000040 1629517679 2032166258 1711961455 543518313

0000060 1851877492 1870209131 1851859061 1870209124

0000100　671605

0000103

[root@localhost yy]#

执行指令“od -A d a1”与指令“od -t d a1”显示的结果是不相同的。前者是以十进制计算文件a1的字码，但显示的时候仍是八进制显示，而后者指定显示的形式为十进制。

范例345 以ASCII码的形式显示文件内容。

[root@localhost ～]# od -t c a1　//以ASCII的形式显示文件内容

0000000　H　e　l　l　o　　e　v　e　r　y　o　n　e　\n　H

0000020　e　l　l　o　　e　v　e　r　y　b　o　d　y　\n　H

0000040　o　w　　a　r　e　　y　o　u　\n　F　i　n　e

0000060　t　h　a　n　k　　y　o　u　　a　n　d　　y　o

0000100　u　？　\n

0000103

[root@localhost ～]#

执行指令“od -t c abc”以 ASCII 的形式显示文件 a1 的内容，如上所示。

实战思考

应用思考

使用od指令对指定数目的字符串进行显示，可以同时指定文件的输出形式。

3.2.57 paste指令：合并文件的列

学习目标 掌握使用 paste 指令对文件列进行合并的方法

语法 paste [-可选参数] [文件]

功能说明 paste 指令把指定文件以列对列的方式进行一列一列的合并，然后输出到标准输出。如果在paste指令中没有指定文件名，将从标准输入输入内容进行操作。

参数说明 可选参数及其说明如下：

基础应用

范例346 合并文件的行。

[root@localhost yy]# cat a1　　　//显示文件a1的内容

Hello everyone

Hello everybody

How are you

Fine，thank you and you？

[root@localhost yy]# cat a2　　　//显示文件a2的内容

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

[root@localhost yy]# paste a1 a2　　//合并文件的行

Hello everyone aaaaaaaaaaaa

Hello everybody aaaaaaaaaaaa

How are you aaaaaaaaaaaa

Fine，thank you and you？ aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

[root@localhost yy]# paste a2 a1　　//合并文件的行

aaaaaaaaaaaa Hello everyone

aaaaaaaaaaaa Hello everybody

aaaaaaaaaaaa How are you

aaaaaaaaaaaa Fine，thank you and you？

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

[root@localhost yy]#

执行指令“paste a1 a2”与指令“paste a2 a1”，将以不同的先后顺序合并文件 a1 和文件a2，执行结果如上所示。

范例347 以s方式合并文件的行。

[root@localhost yy]# paste -s a1 a2　//合并文件的行，并指定间隔符

Hello everyone　Hello everybody　How are you　Fine，thank you and you？

aaaaaaaaaaaa　aaaaaaaaaaaa　aaaaaaaaaaaa　aaaaaaaaaaaa　aaaaaaaaaaaa　a

aaaaaaaaaaa　aaaaaaaaaaaa　aaaaaaaaaaaa

[root@localhost yy]#

执行指令“paste–s a1 a2”合并文件 a1 和 a2 的行，执行结果如上所示。

范例348 合并文件的行同时指定间隔符。

[root@localhost yy]# paste -d# a1 a2 //合并文件的行指定间隔符

Hello everyone#aaaaaaaaaaaa

Hello everybody#aaaaaaaaaaaa

How are you#aaaaaaaaaaaa

Fine，thank you and you？#aaaaaaaaaaaa

#aaaaaaaaaaaa

#aaaaaaaaaaaa

#aaaaaaaaaaaa

#aaaaaaaaaaaa

[root@localhost yy]# paste -d# a2 a1 //合并文件的行指定间隔符

aaaaaaaaaaaa#Hello everyone

aaaaaaaaaaaa#Hello everybody

aaaaaaaaaaaa#How are you

aaaaaaaaaaaa#Fine，thank you and you？

aaaaaaaaaaaa#

aaaaaaaaaaaa#

aaaaaaaaaaaa#

aaaaaaaaaaaa#

[root@localhost yy]#

执行指令“paste–d# a1 a2”与指令“paste–d# a2 a1”，先后顺序不同间隔符的位置也存在差异。

3.2.58 patch 指令：修补文件

学习目标 能运用 patch 指令对文件打补丁

语法 patch [-可选参数] [文件]

功能说明 patch 指令修补文件就是为文件打补丁，实现文件的修改和更新。它可以一次打一个也可以一次打多个，可以用来实现系统升级。因为 patch 指令支持多种 diff 输出文件格式，所以可以运用diff的结果来对文件打补丁。

参数说明 可选参数及其说明如下：

基础应用

范例349 先生成补丁，然后打补丁。

[root@localhost yy]# cat a1　　　　//显示文件a1的内容

Hello everyone

Hello everybody

How are you

Fine，thank you and you？

[root@localhost yy]# cat a2　　　　//显示文件a2的内容

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

[root@localhost yy]# diff a1 a2>sy.diff　//比较文件的差异

[root@localhost yy]# cat sy.diff

-1,4c1,8

<Hello everyone

<Hello everybody

<How are you

<Fine，thank you and you？

---

>aaaaaaaaaaaa

>aaaaaaaaaaaa

>aaaaaaaaaaaa

>aaaaaaaaaaaa

>aaaaaaaaaaaa

>aaaaaaaaaaaa

>aaaaaaaaaaaa

>aaaaaaaaaaaa

[root@localhost yy]# patch a1<sy.diff

patching file a1.txt

[root@localhost yy]# cat a1

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

[root@localhost yy]#

执行指令“diff a1 a2 >sy.diff”生成 a1 与 a2 的差异文件 sy.diff，再执行指令“pactha1<sy.diff”以刚才生成的差异文件作为补丁，从范例可以看到指令执行完成后文件a1的内容被修改。

范例350 为系统打补丁，实现系统升级。

[root@localhost ～]# gunzip　/home/ss/patch-2.5.4.gz　　//先解压下载的文件

[root@localhost ～]# patch–p0 </home/ss/patch-2.5.4　　//打补丁

执行指令“patch -p0 /home/ss/patch-2.5.4”为系统打补丁，在指令中“ –p0”的意思是使用完整的路径名，这时补丁文件为/home/ss/patch-2.5.4。相比参数“-p0”，参数“-p1”的含义是删除最前面的斜杠 home/ss/ patch-2.5.4；参数“-p2”的意思是“ss/ patch-2.5.4。

实战思考

应用思考

1．运用 patch 指令对文件打补丁，指定输出文件的名称。

2．使用参数-p NUM 来指定文件的路径，在这里不指定 NUM 的数值用户可以随意指定，但NUM的数值不能超过给出的路径的层数。

3.2.59 rcp指令：远程复制文件或目录

学习目标 能利用 rcp 指令实现本地主机与远程主机间的文件或目录的复制

语法 rcp [-可选参数]远程/本地主机名：源文件/目录 本地/远程主机名：目标文件/目录

功能说明 rcp 指令可在远程主机与本地主机之间进行文件或目录的复制。

参数说明 可选参数及其说明如下：

基础应用

范例351 复制远程主机文件到本地机。

[root@localhost ～]# rcp–p 192.168.1.121:/home/vc /home/yY　　///复制文件

执行指令“rcp–p 192.168.1.121:/home/vc /home/yy/”复制远程主机 192.168.1.121 上的文件/home/vc到本地主机/home/yy/目录下，同时保留源文件的属性。一般本地主机名不用给出。

实战思考

应用思考

运用 rcp 指令将本地主机上指定路径下的文件复制到远程主机上，指令形式与范例类似。

3.2.60 rhmask指令：产生加密文件

学习目标 能使用 rhmask 指令对文件进行加密和还原

语法 rhmask [-可选参数] [加密文件] [源文件] [目标文件]

功能说明 rhmask 指令可以对文件进行加密，并还原加密文件。

参数说明 可选参数的具体说明如下：

基础应用

范例352 还原加密文件。

[root@localhost ～]#rhmask file1 file2　　　//加密文件还原

执行指令“rhmask file1 file2”还原加密文件。

范例353 加密指定文件。

[root@localhost ～]#rhmask–d file1 file2 file3　　//加密文件

执行指令“rhmask file1 file2 file3”用文件 file1 加密文件 file2，生成文件 file3。

3.2.61 rm指令：删除文件或目录

学习目标 使用 rm 指令删除文件/目录与其他删除指令比较

语法 rm [-可选参数]目录/文件

功能说明 rm 指令可删除文件或目录，如果使用 rm 来删除文件，通常仍可以将文件恢复。如果想保证该文件的内容无法复原，可以考虑使用shred指令。

执行rm指令可删除文件或目录，如欲删除目录必须加上参数“-r”，否则预设仅会删除文件。 ? 参数说明 可选参数及其说明如下：

基础应用

范例354 删除文件。

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy yy1　　　//yy为文件名，yy1为目录名

[root@localhost yy]# rm yy　　　//删除文件

rm：remove regular file‘yy’? y

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy1

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy yy1　　　//yy为文件名，yy1为目录名

[root@localhost yy]# rm–d yy　　　//删除文件

rm：remove regular file‘yy’? y

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy1

[root@localhost yy]#

运行指令“rm yy”和指令“rm–d yy”都是删除文件 yy。

范例355 删除目录。

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy yy1　　　//yy为文件名，yy1为目录名

[root@localhost yy]# rm–r yy1　　　//删除文件

rm：descend into directory‘yy1’? y

rm：remove regular file‘yy1/a1.txt’? y

rm：remove regular file‘yy1/a2.txt’? y

rm：remove directory‘yy1’? y

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy

[root@localhost yy]# rm -rf yy1/　　//删除目录yy1/

[root@localhost yy]# ls　　　　//显示文件

a1.txt a2.txt sy.diff yy

[root@localhost yy]#

运行指令“rm -r yy1”和指令“rm–rf yy1”都是删除目录yy1，执行中的差异如本例所示。

实战思考

应用思考

执行指令“rm–d目录名”与指令“rm–rd目录名”，对比两者的执行结果。

3.2.62 tac 指令：反序输出文件

学习目标 掌握反序输出文件的方法

语法 tac [-可选参数] [文件]

功能说明 tac 指令以反序的方式显示文件的内容。

参数说明 可选参数及其说明如下：

基础应用

范例356 反序显示文件。

[root@localhost yy]# cat a1.txt　　　//显示文件内容

Hello everyone

Hello everybody

How are you

Fine，thank you and you？

[root@localhost ～]# tac a1.txt　　//反序显示文件内容

Fine，thank you and you？

How are you

Hello everybody

Hello everyone

[root@localhost yy]#

执行指令“tac a1.txt”反序显示文件内容。

3.2.63 tar 指令：打包同时压缩/解压文件

学习目标 掌握 tar指令与 Linux中的压缩/解压指令配合使用实现文件压缩/解压的操作

语法 tar [-可选参数] [文件]

功能说明 tar 指令主要是用来打包文件的，tar 就是 Linux 下最常用的打包程序，它可以将一大堆文件或目录打包成一个总的文件。使用 tar 指令打包出来的通常称为 tar 包且以.tar结尾。生成tar包后，可以用其他的压缩指令来对这个打包文件实行压缩，将一个总的文件通过一些压缩算法变成一个小文件。同时也可以通过tar指令中的一些参数，来调用压缩和解压程序实现文件压缩/解压。

参数说明 可选参数及其说明如下：

续表

基础应用

范例357 打包文件。

[root@localhost yy]# ls

a1.txt a2.txt sy.diff yy yy1

[root@localhost yy]# tar–c a1.txt a2.txt >s1.tar //打包文件

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar yy yy1

[root@localhost yy]# tar–cf s2.tar *.txt　　//打包文件

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s2.tar yy yy1

[root@localhost yy]#

执行指令“tar–c a1.txt a2.txt >s1.tar”将文件a1.txt和文件a2.txt打包生成一个新文件s1.tar。

指令“tar–cf s2.tar *.txt”是将目录下所有.txt 文件打包生成文件 s2.tar。

范例358 生成压缩文件。

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s2.tar yy yy1

[root@localhost yy]# tar–czf s1.tar.gz *.txt　　//生成压缩文件

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar yy yy1

[root@localhost yy]# tar–czvf s2.tar.gz *.txt　　//生成压缩文件

a1.txt

a2.txt

[root@localhost yy]#

运用tar指令在打包文件的同时生成压缩文件，压缩的格式可以根据给出的参数进行选择。

范例359 解压文件。

[root@localhost yy]# tar -xzvf s1.tar.gz　　//解压缩文件s1.tar.gz

a1.txt

a2.txt

[root@localhost yy]#

执行指令“tar -xzvf s1.tar.gz”将压缩文件 s1.tar.gz 还原。

实战思考

应用思考

1．使用 tar 指令在生成备份文件的同时，显示文件的列表。

2．向已存在的文件中添加新文件。

3.2.64 tee 指令：读取标准输入到标准输出同时保存为文件

学习目标 能从标准读入数据输出到标准输出，同时将其保存为文件

语法 tee [-可选参数] [文件]

功能说明 tee 指令可以从标准输入读入数据输出到标准输出同时将读入的数据保存为文件。

参数说明 可选参数及其说明如下：

基础应用

范例360 读入输入数据保存为指定文件。

[root@localhost yy]# tee sufile.txt　　//输入文件

asdfgjhk

asdfgjhk

jghjgdvhfg

jghjgdvhfg

q

q

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar sufile.txt yy yy1

[root@localhost yy]# cat sufile.txt　　//显示文件内容

asdfgjhk

jghjgdvhfg

q

[root@localhost yy]#

执行指令“tee sufile.txt”读入标准输入的数据保存到文件 sufile.txt，文件输入是每完成一行输入回车，将在下一行显示刚才输入的内容，完成整个数据的录入用“Ctrl+D”退出。

范例361 向已存在的文件中追加数据内容。

[root@localhost yy]# tee sufile.txt　　　//输入文件

Sgfjhkljkl;kj

Sgfjhkljkl;kj

Xjskdfhjisghs;k

Xjskdfhjisghs;k

Hghlkgu

Hghlkgu

[root@localhost yy]# cat sufile.txt　　　//显示文件内容

asdfgjhk

jghjgdvhfg

q

Sgfjhkljkl;kj

Xjskdfhjisghs;k

Hghlkgu

[root@localhost yy]#

执行指令“tee sufile.txt”向文件 ufile.txt 中追加内容。

范例362 tee指令实现文件备份。

[root@localhost yy]# cat sufile.txt|tee sufile　　//备份文件

asdfgjhk

jghjgdvhfg

q

Sgfjhkljkl;kj

Xjskdfhjisghs;k

Hghlkgu

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar sufile sufile.txt yy yy1

[root@localhost～]# cat sufile //显示文件内容

asdfgjhk

jghjgdvhfg

q

Sgfjhkljkl;kj

Xjskdfhjisghs;k

Hghlkgu

[root@localhost yy]#

执行指令“cat sufile.txt|tee sufile”显示文件 sufile.tx 的内容到标准输出，同时将这个标准输出作为tee的输入保存到指定文件中。

3.2.65 tftp指令：传输文件

学习目标 对已学习的 ftp 文件传输的多种方法能灵活应用

语法 tftp [-可选参数]主机/IP 地址

功能说明 tftp 指令能下载远程主机上的文件，也能将文件上传，是简单的文字模式的ftp指令，使用方法和ftp类似。

参数说明 可选参数及其说明如下：

【tftp内部命令】

ascii：使用 ascii 传输模式。

binary：使用二进制文件传输模式。

connect：连接远端 tftp 服务器。

mode：文件传输模式。

put：上传文件。

get：下载文件。

quit：退出。

verbose：显示详细处理信息。

trace：显示包路径。

status：显示当前状态。

rexmt：设置包传输的超时时间。

timeout：设置重传的超时时间。

？或 help：帮助信息。

基础应用

范例363 tftp程序的简单应用。

[root@localhost ～]# tftp 192.168.212.1　//启动tftp程序，连接至192.168.212.1

tftp> get dwfile　　　　　　　//下载文件dwfile

tftp> status　　　　　　　　//查看当前状态

Connected to 192.168.88.2.

Mode: octet Verbose: off Tracing: off

Rexmt-interval: 5 seconds, Max-timeout: 25 seconds

tftp> quit

启动tftp程序后的文件操作方式与前面讲述的ftp类似。

3.2.66 tmpwatch指令：删除临时文件

学习目标 能使用 tmpwatch 指令清除临时文件

语法 tmpwatch [-可选参数] 超时时间 目录

功能说明 tmpwatch 指令可删除目录下超出指定时间的文件，时间单位为小时。

参数说明 可选参数及其说明如下：

基础应用

范例364 删除临时文件。

[root@localhost ～]# tmpwatch 100 /home/yy

执行指令“tmpwatch 100 /home/yy”删除/home/yy 目录下超过 100 小时未使用的文件。

范例365 使用--test参数查看删除文件。

[root@localhost ～]# ls /home/yy

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar tt ts yy

[root@localhost～]# tmpwatch --test 100 /home/yy

Removing file /root/home/yy/tt

Removing file /root/home/yy/ts

[root@localhost ～]# ls /home/yy

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar tt ts yy

[root@localhost ～]# ls /home/yy

执行指令“tmpwatch --test10 /home/yy”测试满足删除条件的文件，显示将发生的结果，但该指令并不真的对文件或目录执行删除。

3.2.67 touch 指令：更改文件/目录时间

学习目标 能使用 touch 指令更改文件/目录的存取和更改时间

语法 touch [-可选参数]目录/文件

功能说明 使用 touch 指令指定目录/文件的日期时间为当前时刻或指定时间。

参数说明 可选参数及其说明如下：

续表

基础应用

范例366 更新指定文件存取时间。

[root@localhost yy]# ls -l　　//显示文件详细信息

total 64

-rw-r--r-- 1 root root2 Jan 4 17:04 aa

-rw------- 1 root root 66 Jan 4 14:52 a1.txt

-rw------- 1 root root 104 Jan 2 15:03 a2.txt

-rw-r--r-- 1 root root 10240 Jan 4 15:57 s1.tar

-rw-r--r-- 1 root root 193 Jan 4 16:28 s1.tar.gz

-rw-r--r-- 1 root root 10240 Jan 4 16:21 s2.tar

-rw-r--r-- 1 root root 193 Jan 4 16:35 s2.tar.gz

-rw-r--r-- 1 root root 83 Jan 4 17:14 sr

-rw-r--r-- 1 root root 83 Jan 4 17:08 sr.tar

-rw-r--r-- 1 root root 207 Jan 3 15:01 sr.diff

-rw-r--r-- 1 root root 83 Jan 4 16:37 tt

-rw-r--r-- 1 root root 193 Jan 4 16:34 v

drwxr-xr-x 2 root root 4096 Jan 6 17:59 yy1

-rw-r--r-- 1 root root 10240 Jan 4 16:32 zt

-rw-r--r-- 1 root root 10240 Jan 4 16:34 zv

[root@localhost yy]# touch a1.txt　　//更新文件a1.txt的存取时间

[root@localhost other]# ls -l　　//显示文件详细信息

total 64

-rw-r--r-- 1 root root2 Jan 4 17:04 aa

-rw------- 1 root root 66 Jan 10 15:32 a1.txt

-rw------- 1 root root 104 Jan 2 15:03 a2.txt

-rw-r--r-- 1 root root 10240 Jan 4 15:57 s1.tar

-rw-r--r-- 1 root root 193 Jan 4 16:28 s1.tar.gz

-rw-r--r-- 1 root root 10240 Jan 4 16:21 s2.tar

-rw-r--r-- 1 root root 193 Jan 4 16:35 s2.tar.gz

-rw-r--r-- 1 root root 83 Jan 4 17:14 sr

-rw-r--r-- 1 root root 83 Jan 4 17:08 sr.tar

-rw-r--r-- 1 root root 207 Jan 3 15:01 sr.diff

-rw-r--r-- 1 root root 83 Jan 4 16:37 tt

-rw-r--r-- 1 root root 193 Jan 4 16:34 v

drwxr-xr-x 2 root root 4096 Jan 6 17:59 yy1

-rw-r--r-- 1 root root 10240 Jan 4 16:32 zt

-rw-r--r-- 1 root root 10240 Jan 4 16:34 zv

[root@localhost yy]#

执行指令“touch a1.txt”更新文件 a1.txt 的存取时间为当前时间。

范例367 更改文件的存取时间为指定文件时间。

[root@localhost yy]# ls -l　　　//显示文件详细信息

total 64

-rw-r--r--　1 root root　2　Jan　4 17:04　aa

-rw-------　1 root root　66　Jan 10 15:32 a1.txt

-rw-------　1 root root　104　Jan　2 15:03 a2.txt

-rw-r--r--　1 root root 10240 Jan　4 15:57 s1.tar

-rw-r--r--　1 root root　193　Jan　4 16:28 s1.tar.gz

-rw-r--r--　1 root root 10240 Jan　4 16:21 s2.tar

-rw-r--r--　1 root root　193　Jan　4 16:35 s2.tar.gz

-rw-r--r--　1 root root　83　Jan　4 17:14 sr

-rw-r--r--　1 root root　83　Jan　4 17:08 sr.tar

-rw-r--r--　1 root root　207　Jan　3 15:01 sr.diff

-rw-r--r--　1 root root　83　Jan　4 16:37 tt

-rw-r--r--　1 root root　193　Jan　4 16:34 v

drwxr-xr-x　2 root root　4096 Jan　6 17:59 yy1

-rw-r--r--　1 root root 10240 Jan　4 16:32 zt

-rw-r--r--　1 root root 10240 Jan　4 16:34 zv

[root@localhost yy]# touch zv–r a1.txt　　　//更新文件zv的存取时间

[root@localhost other]# ls -l　　　　　//显示文件详细信息

total 64

-rw-r--r-- 1 root root2 Jan 4 17:04 aa

-rw------- 1 root root 66 Jan 10 15:32 a1.txt

-rw------- 1 root root 104 Jan 2 15:03 a2.txt

-rw-r--r-- 1 root root 10240 Jan 4 15:57 s1.tar

-rw-r--r-- 1 root root 193 Jan 4 16:28 s1.tar.gz

-rw-r--r-- 1 root root 10240 Jan 4 16:21 s2.tar

-rw-r--r-- 1 root root 193 Jan 4 16:35 s2.tar.gz

-rw-r--r-- 1 root root 83 Jan 4 17:14 sr

-rw-r--r-- 1 root root 83 Jan 4 17:08 sr.tar

-rw-r--r-- 1 root root 207 Jan 3 15:01 sr.diff

-rw-r--r-- 1 root root 83 Jan 4 16:37 tt

-rw-r--r-- 1 root root 193 Jan 4 16:34 v

drwxr-xr-x 2 root root 4096 Jan 6 17:59 yy1

-rw-r--r-- 1 root root 10240 Jan 4 16:32 zt

-rw-r--r-- 1 root root 10240 Jan 10 15:32 zv

[root@localhost yy]#

执行指令“touch zv–r a1.txt”更改文件 zv 的存取时间与文件 a1.txt 的时间相同。

范例368 更改文件的存取时间为指定时间。

[root@localhost yy]# ls -l　　//显示文件详细信息

total 64

-rw-r--r-- 1 root root2 Jan 4 17:04 aa

-rw------- 1 root root 66 Jan 10 15:32 a1.txt

-rw------- 1 root root 104 Jan 2 15:03 a2.txt

-rw-r--r-- 1 root root 10240 Jan 4 15:57 s1.tar

-rw-r--r-- 1 root root 193 Jan 4 16:28 s1.tar.gz

-rw-r--r-- 1 root root 10240 Jan 4 16:21 s2.tar

-rw-r--r-- 1 root root 193 Jan 4 16:35 s2.tar.gz

-rw-r--r--　1 root root　83　Jan　4 17:14 sr

-rw-r--r--　1 root root　83　Jan　4 17:08 sr.tar

-rw-r--r--　1 root root　207　Jan　3 15:01 sr.diff

-rw-r--r--　1 root root　83　Jan　4 16:37 tt

-rw-r--r--　1 root root　193　Jan　4 16:34 v

drwxr-xr-x　2 root root　4096 Jan　6 17:59 yy1

-rw-r--r--　1 root root 10240 Jan　4 16:32 zt

-rw-r--r--　1 root root 10240 Jan 10 15:32 zv

[root@localhost yy]# touch a1.txt–t 200909090909　　//更新文件a1.txt的时间

[root@localhost other]# ls -l　　　　　　　//显示文件详细信息

total 64

-rw-r--r--　1 root root　2　Jan　4 17:04　aa

-rw-------　1 root root　66　Sep　9 09:09 a1.txt

-rw-------　1 root root　104　Jan　2 15:03 a2.txt

-rw-r--r--　1 root root 10240 Jan　4 15:57 s1.tar

-rw-r--r--　1 root root　193　Jan　4 16:28 s1.tar.gz

-rw-r--r--　1 root root 10240 Jan　4 16:21 s2.tar

-rw-r--r--　1 root root　193　Jan　4 16:35 s2.tar.gz

-rw-r--r--　1 root root　83　Jan　4 17:14 sr

-rw-r--r--　1 root root　83　Jan　4 17:08 sr.tar

-rw-r--r--　1 root root　207　Jan　3 15:01 sr.diff

-rw-r--r--　1 root root　83　Jan　4 16:37 tt

-rw-r--r--　1 root root　193　Jan　4 16:34 v

drwxr-xr-x　2 root root　4096 Jan　6 17:59 yy1

-rw-r--r--　1 root root 10240 Jan　4 16:32 zt

-rw-r--r--　1 root root 10240 Jan 10 15:32 zv

[root@localhost other]#

执行指令“touch a1.txt–t 200909090909”更改文件 a1.txt 的存取时间为 2009 年 9 月 9 日9点9分。

3.2.68 umask 指令：在建立文件时指定权限掩码

学习目标 能使用 umask 指令在建立文件时指定权限掩码

语法 umask [-可选参数] [权限掩码]

功能说明 umask 指令可以设置文件创建时默认权限，在系统中对应每一类用户存在一个相应的umask指定的权限值。

参数说明 可选参数及其说明如下：

基础应用

范例369 显示当前用户的缺省权限并重新设置。

[root@localhost ～]# umask　　　　//显示权限掩码

0022

[root@localhost ～]# umask 0211　　//重设权限掩码

[root@localhost ～]# umask -S　　　//显示权限掩码

u=rx,g=rw,o=rw

[root@localhost ～]#

执行指令“umask”显示当前，再使用指令“umask” 重设权限掩码。

3.2.69 unarj 指令：解压文件

学习目标 能解压.arj 文件

语法 unarj [-可选参数] .arj 压缩文件

功能说明 unarj 指令可解压.arj 文件。

参数说明 可选参数及其说明如下：

基础应用

范例370 解压.arj文件。

[root@localhost ～]# unarj e sr.arj　　//解压文件

执行指令“unarj e sr.arj”解压文件 sr.arj。

3.2.70 uncompress指令：解压.z文件

学习目标 能解压.z 文件

语法 uncompress [-可选参数] .Z 压缩文件

功能说明 uncompress 指令用来解压.Z 文件，与指令 compress 是一对。

参数说明 可选参数及其说明如下：

基础应用

范例371 解压文件。

[root@localhost yy]# uncompress a1.Z　　　　//解压缩.Z文件

执行指令“uncompress a1.Z”解压.Z 文件 a1.Z。

3.2.71 unzip指令：解压zip文件

学习目标 能解压 zip 文件

语法 unzip [-可选参数]文件

功能说明 unzip 指令用来解压 zip 文件。zip 压缩格式是现在常见的压缩格式。

参数说明 可选参数及其说明如下：

基础应用

范例372 解压文件。

[root@localhost yy]# unzip sv.zip

执行指令“unzip sv.zip”解压文件 sv.zip。

范例373 列出压缩文件包的文件信息。

[root@localhost yy]# unzip -l sv.zip　//列出压缩文件包内的文件

Archive:　sv.zip

Length　Date　Time　Name　　//文件的大小，时间，名称等相关信息

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

2　09-07-21 17:04　yy/aa

66　09-07-21 16:07　yy/a1.txt

104　09-07-21 16:07　yy/a2.txt

10240　09-07-21 16:07　yy/s1.tar

193　09-07-21 16:07　yy/s2.tar

10605　　　　5 files

[root@localhost yy]#

执行指令“unzip -l sv.zip”显示压缩文件 sv.zip 内的文件信息。

3.2.72 uucico指令：uucp文件传输

学习目标 学会使用 uucico 指令进行 uucp 文件传输

语法 uucico [-可选参数]

功能说明 uucico 指令可处理 uucp 或 uux 送到队列请求的文件传输。uucico 有两种工作模式：主动模式和附属模式。在主动模式下，uucico会调用远程主机；在附属模式下，uucico接受远程主机的调用。

参数说明 可选参数及其说明如下：

基础应用

范例374 以附属模式启动uucico。

[root@localhost ～]# uucico -r0//启动uucico

执行指令“uucico -r0”以附属模式启动 uucico。

范例375 以主动模式启动uucico。

[root@localhost ～]# uucico -r1//启动uucico

执行指令“uucico -r1”以主动模式启动 uucico。

3.2.73 uupick 指令：处理文件

学习目标 能处理接收到的文件

语法 uupick [-可选参数]

功能说明 利用 uupick 指令处理 uucp 传送来的文件。

参数说明 可选参数及其说明如下：

基础应用

范例376 处理所有由uucp传送来的文件。

[root@localhost ～]# uupick　　　　//处理所有由uucp传送的文件

执行指令“uupick”处理所有由uucp传送来的文件。

范例377 处理指定主机传送来的文件。

[root@localhost ～]# uupick -s sim　　　　//处理指定主机sim传送来的文件

执行指令“uupick -s sim”处理指定主机 sim 传送来的文件。

3.2.74 uuto 指令：文件传送到远端主机

学习目标 能将文件传送到远端主机

语法 uuto [-可选参数][文件][主机]

功能说明 uuto 指令是 script 指令，用来传送文件到远端的 uucp 主机，在传送完成后将以邮件的形式通知远端主机的用户。

参数说明 可选参数及其说明如下：

基础应用

范例378 传送文件。

[root@localhost ～]# uuto /home/sr sim!～/sw/as　　//传送文件

执行指令“uuto /home/sr sim! ～/sw/as”，将本系统的 home 目录下的文件 sr 传送到主机sim下sw/as。

范例379 传送的是目录时整个复制同时自动建立目录。

[root@localhost ～]# uuto -d -R～/yy/ sim!～/sw/ //传送文件

执行指令“uucp -d -R～/yy/ sim!～/sw/”将本系统的 yy 目录传送到主机 sim下 sw目录下。

实战思考

应用思考

对比指令“uuto”和指令“uucp”的异同。

3.2.75 whereis 指令：查找文件

学习目标 能查找符合条件的文件

语法 whereis [-可选参数]文件

功能说明 whereis 指令将查找符合条件的文件结果输出到标准输出。 ? 参数说明 可选参数及其说明如下：

基础应用

范例380

查找指定类型文件。

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar tt ts yy

[root@localhost yy]# whereis *.txt　　　//查找文件

a1

a2

[root@localhost yy]#

执行指令“whereis *.txt”在目录下查找.txt 文件。

实战思考

应用思考

运用指令查找“/usr/src”目录下的源文件，如果是任意文件名用*代替即可。

3.2.76 which 指令：查找文件

学习目标 查找文件

语法 which [-可选参数]文件

功能说明 which 指令将在环境变量$PATH 设置的目录下查找符合条件的文件。

参数说明 可选参数及其说明如下：

基础应用

范例381 查找指定文件。

[root@localhost ～]# which ax　　　//查找文件

/usr/bin/which: no ax in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr

/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

[root@localhost ～]# which zip　//查找文件

/usr/bin/zip

[root@localhost ～]#

执行指令“which ax”和指令“which zip”，在环境变量$PATH 指定的目录“/usr/bin”下查找文件，显示查找结果。

范例382 在yy目录下查找文件。

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar tt ts yy

[root@localhost yy]# which　　　//查找文件

/usr/bin/which: no a1.txt in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no a2.txt in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no sy.diff in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no s1.tar in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no s1.tar.gz in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no s2.tar in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no tt in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no ts in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

/usr/bin/which: no yy in (/usr/kerberos/sbin:/usr/kerberos/ bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin)

[root@localhost yy]#

执行指令“which”在环境变量$PATH指定的目录“/usr/bin”下查找当前目录中的文件，显示查找结果。

实战思考

应用思考

对比Linux中的两个查找指令“which”和“whereis”，看看它们各自的查找范围和应用中存在的差异。

3.2.77 zip指令：压缩文件

学习目标 压缩文件

语法 zip [-可选参数]文件

功能说明 zip 指令是一个应用广泛的跨平台的压缩工具，压缩后产生后缀为.zip 的文件。zip没有解压文件的功能。

参数说明 可选参数及其说明如下：

续表

基础应用

范例383 压缩文件。

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar tt ts yy1

[root@localhost yy]# zip s1.zip a1.txt a2.txt sy.diff s1.tar s2.tar //压缩文件

adding: a1.txt (deflated 18%)

adding: a1.txt (deflated 91%)

adding: s1.txt (deflated 98%)

adding: s2.txt (deflated 98%)

adding: sy.diff (deflated 63%)

[root@localhost yy]# ls

a1.txt a2.txt sy.diff s1.tar s1.tar.gz s2.tar s3.zip tt ts yy

[root@localhost yy]#

执行指令“zip zip s3.zip a1.txt a2.txt sy.diff s1.tar s2.tar”压缩文件 a1.txt a2.txt sy.diff s1.tars2.tar到文件s3.zip。

范例384 压缩文件目录下的所有文件。

[root@localhost yy]# zip s1.zip *　　　//压缩文件

updating: a1.txt (deflated 18%)

updating: a1.txt (deflated 91%)

updating: s1.txt (deflated 98%)

updating: s2.txt (deflated 98%)

updating: sy.diff (deflated 63%)

adding: s1.tar.gz (stored 0%)

adding: tt (deflated 29%)

adding: ts (deflated 98%)

adding: yy1/ (stored 0%)

[root@localhost yy]#

执行指令“zip s1.zip *”压缩当前目录下的所有文件到指定文件 s1.zip。

范例385 删除压缩文件中的文件。

[root@localhost yy]# zip -d s1.zip a1.txt　　//删除指定文件

deleting: a1.txt

[root@localhost yy]# zip -dv s1.zip a2.txt　　//删除指定文件

zip info: local extra (21 bytes) != central extra (13 bytes): a2.txt

zip info: local extra (21 bytes) != central extra (13 bytes): s1.tar

zip info: local extra (21 bytes) != central extra (13 bytes): s2.tar

zip info: local extra (21 bytes) != central extra (13 bytes): sy.diff

zip info: local extra (21 bytes) != central extra (13 bytes): s1.tar.gz

zip info: local extra (21 bytes) != central extra (13 bytes): tt

zip info: local extra (21 bytes) != central extra (13 bytes): ts

zip info: local extra (21 bytes) != central extra (13 bytes): yy1/

deleting: a2.txt

total bytes=47132, compressed=6574 -> 86% savings

[root@localhost yy]#

执行指令“zip -d s1.zip a1.txt”和指令“zip–dv s1.zip a2.txt”从压缩文件s1.zip中删除文件a1.txt和文件a2.txt。

范例386 向压缩文件中添加新文件。

[root@localhost yy]# zip -g s1.zip a1.txt　　//删除指定文件

adding: a1.txt　(deflated 18%)

[root@localhost yy]# zip -gv s1.zip a2.txt　　//删除指定文件

zip info: local extra (21 bytes) != central extra (13 bytes): s1.tar

zip info: local extra (21 bytes) != central extra (13 bytes): s2.tar

zip info: local extra (21 bytes) != central extra (13 bytes): sy.diff

zip info: local extra (21 bytes) != central extra (13 bytes): s1.tar.gz

zip info: local extra (21 bytes) != central extra (13 bytes): tt

zip info: local extra (21 bytes) != central extra (13 bytes): ts

zip info: local extra (21 bytes) != central extra (13 bytes): yy1/

zip info: local extra (21 bytes) != central extra (13 bytes): a1.txt

adding: a1.txt　　（in=104）（out=9）(deflated 91%)

total bytes=47302, compressed=6637 -> 86% savings

[root@localhost yy]#

执行指令“zip -g s1.zip a1.txt”和指令“zip -gv s1.zip a2.txt”向压缩文件s1.zip中分别添加文件a1.txt和文件a2.txt。

实战思考

应用思考

如果在当初建立压缩文件时已经将文件file1压缩进去了，但在此之后文件file1又做了更新，想要更新压缩文件的内容，请用-u参数进行更新。如果将文件file1改为目录dire1应该如何实现?

3.2.78 zipinfo指令：显示压缩文件的信息

学习目标 能查看压缩文件的信息

语法 zipinfo [-可选参数]压缩文件[文件]

功能说明 zipinfo 指令用来显示压缩文件的信息。

参数说明 可选参数及其说明如下：

基础应用

范例387 查看压缩文件内文件名。

[root@localhost yy]# zipinfo -1 s1.zip //显示压缩文件内文件名

s1.tar

s2.tar

sy.diff

s1.tar.gz

tt

ts

yy1/

a1.txt

a2.txt

[root@localhost yy]#

执行指令“zipinfo -1 s1.zip”显示压缩文件 s1.zip 中的文件名。

范例388 查看压缩文件的信息。

[root@localhost yy]# zipinfo s1.zip　//查看压缩文件的信息

Archive:　s1.zip　8939 bytes　9 files

-rw-r--r--　2.3 unx　10240 bx defN　4-Jan-09 15:57 s1.tar

-rw-r--r--　2.3 unx　10240 bx defN　4-Jan-09 16:21 s2.tar

-rw-r--r--　2.3 unx　　207 tx defN　3-Jan-09 17:04 sy.diff

-rw-r--r--　2.3 unx　　193 tx stor　4-Jan-09 16:28 s1.tar.gz

-rw-r--r--　2.3 unx　　88 tx defN　4-Jan-09 16:11 tt

-rw-r--r--　2.3 unx　10240 tx　defN　4-Jan-09 16:34 ts

-rw-r--r--　2.3 unx　　0 bx　stor　4-Jan-09 17:59 yy1/

-rw-r--r--　2.3 unx　　66 tx defN　9-Sep-09 09:09 a1.txt

-rw-r--r--　2.3 unx　　104 tx defN　9-Sep-09 09:09 a2.txt

9 files, 47302 bytes uncompressed, 6637 bytes compressed: 86.0%

[root@localhost yy]#

执行指令“zipinfo s1.zip”显示压缩文件 s1.zip 的信息。

范例389 查看压缩文件信息同时显示文件压缩率。

[root@localhost yy]# zipinfo–m s1.zip　//查看压缩文件的信息

Archive:　s1.zip　8939 bytes　9 files

-rw-r--r--　2.3 unx　10240 bx 98% defN　4-Jan-09 15:57 s1.tar

-rw-r--r--　2.3 unx　10240 bx 98% defN　4-Jan-09 16:21 s2.tar

-rw-r--r--　2.3 unx　　207 tx 63% defN　3-Jan-09 17:04 sy.diff

-rw-r--r--　2.3 unx　　193 tx　0% stor　4-Jan-09 16:28 s1.tar.gz

-rw-r--r--　2.3 unx　　88 tx 29% defN　4-Jan-09 16:11 tt

-rw-r--r--　2.3 unx　10240 tx　98% defN　4-Jan-09 16:34 ts

-rw-r--r--　2.3 unx　　0 bx　0% stor　4-Jan-09 17:59 yy1/

-rw-r--r--　2.3 unx　　66 tx 18% defN　9-Sep-09 09:09 a1.txt

-rw-r--r--　2.3 unx　　104 tx 91% defN　9-Sep-09 09:09 a2.txt

9 files, 47302 bytes uncompressed, 6637 bytes compressed: 86.0%

[root@localhost yy]#

执行指令“zipinfo -m s1.zip”显示压缩文件 s1.zip 的信息同时显示每个文件的压缩率。

实战思考

应用思考

回顾一下相关的压缩文件都学了哪些，在这些压缩指令中有哪些是同时具有压缩和解压功能的，如何查看压缩文件的内容，各有什么特点。

3.2.79 ncftpls 指令：显示文件目录

学习目标 能使用 ncftpls 指令显示文件目录

语法 ncftpls[必要参数][选择性参数][远端主机 URL]

功能说明 ncftpls 指令用来显示远端主机的文件列表。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

续表

内建指令

ncftp，ncftpget，ncftpput

基础应用

范例390 显示远端ftp服务器的文件列表。

[root@localhost～]# ncftpls -u other -p 02211025 ftp://192.168.88.7

//显示文件列表

111　　comm/　　test　　unpv12e.tar

[root@localhost～]#

本例使用指令“ncftpls -u other -p 02211025 ftp://192.168.88.7”显示远端 ftp 服务器上文件列表的信息。

3.2.80 filterdiff 指令：从 diff 文件中提取不同

学习目标 掌握 filterdiff 指令的用法

语法 filterdiff[必要参数][选择性参数][文件]

功能说明 filterdiff 指令用来提取 diff 文件的不同。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

lsdiff，grepdiff

基础应用

范例391 提取patch信息。

[root@localhost～]#filterdiff message-with-diff-in-the-body >patch

//提取信息

本例使用指令“filterdiff message-with-diff-in-the-body >patch”提取 diff 信息。

3.2.81 split指令：切割文件

学习目标 学会使用 split 进行文件的切割

语法 split[必要参数][选择性参数][要切割的文件][输出文件名]

功能说明 split 指令将指定的文件切割成小的文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

cut

基础应用

范例392 以指定行数分割文件。

[root@localhost temp]# ll　　//文件列表

总用量1584

-rw-r--r-- 1 root root 1610052 5 月 29 18:03 xen-syms

[root@localhost temp]# split -l 300 xen-syms　　//分割文件

[root@localhost temp]# ll　　//文件列表

总用量3376

-rw-r--r-- 1 root root 225361 5 月 29 18:05 xaa

-rw-r--r-- 1 root root 80344 5 月 29 18:05 xab

-rw-r--r-- 1 root root 14084 5 月 29 18:05 xac

-rw-r--r-- 1 root root 110711 5 月 29 18:05 xad

-rw-r--r-- 1 root root 58369 5 月 29 18:05 xae

-rw-r--r-- 1 root root 31677 5 月 29 18:05 xaf

-rw-r--r-- 1 root root 39869 5 月 29 18:05 xag

-rw-r--r-- 1 root root 36620 5 月 29 18:05 xah

-rw-r--r-- 1 root root 36082 5 月 29 18:05 xai

-rw-r--r-- 1 root root 35826 5 月 29 18:05 xaj

//此处省略部分结果

-rw-r--r-- 1 root root 72253 5 月 29 18:05 xbb

-rw-r--r-- 1 root root 57360 5 月 29 18:05 xbc

-rw-r--r-- 1 root root 1610052 5 月 29 18:03 xen-syms

[root@localhost temp]#

本例使用指令“split -l 300 xen-syms”分割文件 xen-syms，每个文件最多有 300 行，输出结果如上所示。

范例393 按字节数分割文件。

[root@localhost temp]# ll　　　　　　//显示文件列表

总用量1584

-rw-r--r--　1 root root 1610052　5月29 18:03 xen-syms

[root@localhost temp]# split -b 30k xen-syms　//分割文件

[root@localhost temp]# ll　　　　　　//显示文件列表

总用量3476

-rw-r--r--　1 root root　30720　5月29 20:17 xaa

-rw-r--r--　1 root root　30720　5月29 20:17 xab

-rw-r--r--　1 root root　30720　5月29 20:17 xac

-rw-r--r--　1 root root　30720　5月29 20:17 xad

-rw-r--r--　1 root root　30720　5月29 20:17 xae

-rw-r--r--　1 root root　30720　5月29 20:17 xaf

-rw-r--r--　1 root root　30720　5月29 20:17 xag

-rw-r--r--　1 root root　30720　5月29 20:17 xah

//此处省略了部分结果

-rw-r--r--　1 root root　30720　5月29 20:17 xbv

-rw-r--r--　1 root root　30720　5月29 20:17 xbw

-rw-r--r--　1 root root　30720　5月29 20:17 xbx

-rw-r--r--　1 root root　30720　5月29 20:17 xby

-rw-r--r--　1 root root　30720　5月29 20:17 xbz

-rw-r--r--　1 root root　12612　5月29 20:17 xca

-rw-r--r--　1 root root 1610052　5月29 18:03 xen-syms

[root@localhost temp]#

本例使用指令“split -b 30k xen-syms”按照字节数分割文件 xen-syms，每个文件的大小为30KB。

范例394 以数字显示分割的小文件的序号。

[root@localhost temp]# ll　　　　　　//显示文件列表

总用量1584

-rw-r--r--　1 root root 1610052　5月29 18:03 xen-syms

[root@localhost temp]# split -b 30k -d xen-syms //分割文件

[root@localhost temp]# ll　　　　　　//显示文件列表

总用量3476

-rw-r--r--　1 root root　30720　5月29 20:20 x00

-rw-r--r--　1 root root　30720　5月29 20:20 x01

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x02

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x03

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x04

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x05

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x06

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x07

//此处省略了部分结果

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x47

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x48

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x49

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x50

-rw-r--r-- 1 root root 30720 5 月 29 20:20 x51

-rw-r--r-- 1 root root 12612 5 月 29 20:20 x52

-rw-r--r-- 1 root root 1610052 5 月 29 18:03 xen-syms

[root@localhost temp]#

本例使用指令“split -b 30k -d xen-syms”分割文件 xen-syms，分割出的小文件的序号以数字排序，而不是以字母排序。

3.2.82 scp指令：远程复制文件

学习目标 掌握远程复制文件的方法

语法 scp[必要参数][选择性参数][主机 1][文件][主机 2][文件]

功能说明 scp 指令用于在网络中的不同主机之间复制文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

rcp，sftp，ssh，ssh-add，ssh-agent，ssh-keygen，ssh_config，sshd

基础应用

范例395 复制文件到远程主机。

[root@localhost～]# scp -v root@192.168.88.76:/root/123 kk@192.168.88.59:/home/kk/

//复制文件到远程主机

Executing: /usr/bin/ssh -v -x -o'ClearAllForwardings yes' -t -l root 192.168.88.76 scp -v /root/123 'kk@192.168.88.59:/home/kk/'

OpenSSH_4.0p1, OpenSSL 0.9.7f 22 Mar 2005

debug1: Reading configuration data /etc/ssh/ssh_config

debug1: Applying options for *

debug1: Connecting to 192.168.88.76 [192.168.88.76] port 22.

debug1: Connection established.

debug1: permanently_set_uid: 0/0

debug1: identity file /root/.ssh/identity type -1

debug1: identity file /root/.ssh/id_rsa type -1

debug1: identity file /root/.ssh/id_dsa type -1

debug1: Remote protocol version 2.0, remote software version OpenSSH_4.0

debug1: match: OpenSSH_4.0 pat OpenSSH*

debug1: Enabling compatibility mode for protocol 2.0

debug1: Local version string SSH-2.0-OpenSSH_4.0

debug1: SSH2_MSG_KEXINIT sent

debug1: SSH2_MSG_KEXINIT received

debug1: kex: server->client aes128-cbc hmac-md5 none

debug1: kex: client->server aes128-cbc hmac-md5 none

debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent

//此处省略了部分结果

Connection to 192.168.88.76 closed.

debug1: Transferred: stdin 0, stdout 0, stderr 37 bytes in 9.0 seconds

debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 4.1

debug1: Exit status 0

[root@localhost～]#

本例使用指令“scp -v root@192.168.88.76:/root/123 kk@192.168.88.59:/ home/kk/”从本地主机192.168.88.76复制文件/root/123到远端主机192.168.88.59的目录/home/kk/。

3.2.83 slocate 指令：查找文件或目录

学习目标 能使用 slocate 查找文件或目录

语法 slocate[必要参数][选择性参数][文件]

功能说明 slocate 指令用来查找文件，它可以自己建一个数据库，直接在自己的数据库里进行查找，从而提高查找速度。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

locate

基础应用

范例396 查找文件。

-sh-2.05b# slocate todaY　　//查找文件

/usr/share/doc/HTML/en/korganizer/i_go_to_today.png

/usr/share/doc/HTML/en/kdevelop/reference/C/CONTRIB/SNIP/todaybak.c

/usr/share/apps/korganizer/icons/crystalsvg/16x16/actions/today.png

/usr/share/apps/korganizer/icons/crystalsvg/22x22/actions/today.png

/usr/share/apps/korganizer/icons/crystalsvg/32x32/actions/today.png

/usr/share/icons/Bluecurve/16x16/actions/today.png

/usr/share/icons/Bluecurve/22x22/actions/today.png

/usr/share/icons/ikons/16x16/actions/today.png

/usr/share/icons/ikons/22x22/actions/today.png

/usr/share/icons/kdeclassic/16x16/actions/today.png

/usr/share/icons/kdeclassic/22x22/actions/today.png

/usr/share/icons/kdeclassic/32x32/actions/today.png

/usr/share/images/evolution/evolution-today-mini.png

/usr/share/images/evolution/evolution-today.png

-sh-2.05b#

本例使用指令“slocate today”查找含有字符串 today 的文件。

3.2.84 md5sum 指令：检验文件

语法 md5sum[选择性参数][必要参数][FILE]

功能说明 计算文件的 md5 值，通过这个值检验文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

【概念说明】

md5值：一种哈希值。哈希函数以文件内容为依据，生成一个统一位数的哈希值。

重定向：将指令执行结果输入指定文件保存。

内建指令

sum，cksum

基础应用

范例397 计算当前文件夹下的文件file1的md5值。

[root@localhost other]# ls

file1 file2

[root@localhost other]# md5sum file1　　//计算文件file1的md5值

681530dc5eef42e2b200511c64bcf819 file1

范例398 比较文件的不同。

[root@localhost other]# md5sum file1>sum1　//计算文件file1的md5值

[root@localhost other]# md5sum file2>sum2 //计算文件 file2 的 md5 值

[root@localhost other]# diff -q sum1 sum2 //比较两个文件的不同

Files sum1 and sum2 differ

哈希文件file1将结果重定向到文件sum1，哈希文件file2将结果重定向到文件sum2，用diff指令比较两个文件的不同，发现文件sum1和sum2不同，也就是文件file1和文件file2的哈希值不同，即文件file1和文件file2不同。diff的用法可参见diff指令解释。

范例399 使用“--heck”参数，检查一组文件中某些文件的改变。

[root@localhost other]# md5sum file1 file2 >sum //计算文件 file1 和 file2 的 md5 值

[root@localhost other]# md5sum --check sum //检验文件的内容是否发生变化

file1: OK

file2: OK

[root@localhost other]# echo "abc" >file2　　//改变文件file2的内容

[root@localhost other]# md5sum --check sum //检验文件的内容是否发生变化

file1: OK

file2: FAILED

md5sum: WARNING: 1 of 2 computed checksums did NOT match

哈希文件file1和file2得到的哈希值存到文件sum，利用“md5sum–check”指令检查文件file1和file2中的内容有没有变化，第一次检查时文件均没有发生变化，第二次利用echo指令改变文件file2的值，再次利用“md5sum–check”指令进行检查，发现文件file2发生了变化。

3.2.85 git指令：在文字模式下管理文件

语法 git

功能说明 git 指令用来管理文件。

内建指令

dir，ls

基础应用

范例400 管理文件与目录。

[root@localhost littleProg]#git　　　//管理文件与目录

本例使用指令git管理文件与目录。

3.2.86 pg 指令：浏览文件

学习目标 掌握 pg 指令浏览文件的方法

语法 pg[必要参数][选择性参数][文件]

功能说明 pg 指令用来显示文件内容。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

more

基础应用

范例401 显示文件的内容。

root@localhost:～# pg iptables.sh　　//显示文件的内容

#!

echo "Enable IP Forwarding..."

echo 1 >/proc/sys/net/ipv4/ip_forward

echo "Starting iptables rules..."

/sbin/modprobe iptable_filter

/sbin/modprobe ip6table_filter

/sbin/modprobe ip_tables

/sbin/modprobe ip6_tables

/sbin/modprobe iptable_nat

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_conntrack_ftp

iptables -F INPUT

iptables -F FORWARD

iptables -F OUTPUT

iptables -F POSTROUTING -t nat

iptables -F PREROUTING -t nat

#iptables -P INPUT DROP

#iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -A FORWARD -d 192.168.88.88 -j ACCEPT

iptables -t nat -A PREROUTING -d 202.112.146.70 -p tcp --dport 3389 -j DNAT --to-destination 192.168.88.88:3389

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i eth0 -j ACCEPT

iptables -A INPUT -i eth1 -p icmp -j ACCEPT

iptables -A INPUT -i eth1 -p udp --dport 2304 -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 21:23 -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 8888 -j ACCEPT

#iptables -A INPUT -i eth1 -p udp --dport 177 -j ACCEPT

iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -s 192.168.88.0/24 -d 0/0 -j ACCEPT

iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -o eth1 -s 192.168.88.0/24 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.88.88 -j SNAT --to-source 202.112.146.70(EOF):

本例使用指令“pg iptables.sh”显示文件 iptables.sh 的内容。

范例402 设置提示符。

root@localhost:～# pg -p aisinile iptables.sh　　//显示文件内容并设置提示符

#!

echo "Enable IP Forwarding..."

echo 1 >/proc/sys/net/ipv4/ip_forward

echo "Starting iptables rules..."

/sbin/modprobe iptable_filter

/sbin/modprobe ip6table_filter

/sbin/modprobe ip_tables

/sbin/modprobe ip6_tables

/sbin/modprobe iptable_nat

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ip_conntrack_ftp

iptables -F INPUT

iptables -F FORWARD

iptables -F OUTPUT

iptables -F POSTROUTING -t nat

iptables -F PREROUTING -t nat

#iptables -P INPUT DROP

#iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -A FORWARD -d 192.168.88.88 -j ACCEPT

iptables -t nat -A PREROUTING -d 202.112.146.70 -p tcp --dport 3389 -j DNAT --to-destination 192.168.88.88:3389

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -i eth0 -j ACCEPT

iptables -A INPUT -i eth1 -p icmp -j ACCEPT

iptables -A INPUT -i eth1 -p udp --dport 2304 -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 21:23 -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -i eth1 -p tcp --dport 8888 -j ACCEPT

#iptables -A INPUT -i eth1 -p udp --dport 177 -j ACCEPT

iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -s 192.168.88.0/24 -d 0/0 -j ACCEPT

iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A POSTROUTING -o eth1 -s 192.168.88.0/24 -j MASQUERADE

iptables -t nat -A POSTROUTING -s 192.168.88.88 -j SNAT --to-source 202.112.146.70

(EOF)aisinile

本例使用指令“pg -p aisinile iptables.sh”显示文件内容并设置提示符为“aisinile”，取代默认的提示符“：”。

3.2.87 info 指令：读取目录信息

语法 info[必要参数][选择性参数]

功能说明 info 指令将以 info 的格式读取文档。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例403 以info的格式查看帮助信息。

[root@localhost～]# info init >1.log　　//显示init的帮助信息

[root@localhost～]# cat 1.log　　//显示文件1.log

File: libc.info, Node: Setting Groups, Next: Enable/Disable Setuid, Prev: Setting User ID, Up: Users and Groups

29.7 Setting the Group IDs

==========================

This section describes the functions for altering the group IDs (real

and effective) of a process.To use these facilities, you must include

the header files 'sys/types.h' and 'unistd.h'.

-- Function: int setegid (gid_t NEWGID)

This function sets the effective group ID of the process to

NEWGID, provided that the process is allowed to change its group

ID.Just as with 'seteuid', if the process is privileged it may

change its effective group ID to any value; if it isn't, but it

has a file group ID, then it may change to its real group ID or

file group ID; otherwise it may not change its effective group ID.

Note that a process is only privileged if its effective _user_ ID

is zero.The effective group ID only affects access permissions.

The return values and error conditions for 'setegid' are the same

as those for 'seteuid'.

This function is only present if '_POSIX_SAVED_IDS' is defined.

The calling process is not privileged.

-- Function: int initgroups (const char *USER, gid_t GROUP)

The 'initgroups' function sets the process's supplementary group

IDs to be the normal default for the user name USER.The group

GROUP is automatically included.

This function works by scanning the group database for all the

groups USER belongs to.It then calls 'setgroups' with the list it

has constructed.

The return values and error conditions are the same as for

'setgroups'.

If you are interested in the groups a particular user belongs to,

but do not want to change the process's supplementary group IDs, you

can use 'getgrouplist'.To use 'getgrouplist', your programs should

include the header file 'grp.h'.

-- Function: int getgrouplist (const char *USER, gid_t GROUP, gid_t

*GROUPS, int *NGROUPS)

The 'getgrouplist' function scans the group database for all the

groups USER belongs to.Up to *NGROUPS group IDs corresponding to

these groups are stored in the array GROUPS; the return value from

the function is the number of group IDs actually stored.If

*NGROUPS is smaller than the total number of groups found, then

'getgrouplist' returns a value of '-1' and stores the actual

number of groups in *NGROUPS.The group GROUP is automatically

included in the list of groups returned by 'getgrouplist'.

Here's how to use 'getgrouplist' to read all supplementary groups

for USER:

gid_t *

supplementary_groups (char *user)

{

int ngroups = 16;

gid_t *groups

= (gid_t *) xmalloc (ngroups * sizeof (gid_t));

struct passwd *pw = getpwnam (user);

if (pw == NULL)

return NULL;

if (getgrouplist (pw->pw_name, pw->pw_gid, groups, &ngroups) < 0)

{

groups = xrealloc (ngroups * sizeof (gid_t));

getgrouplist (pw->pw_name, pw->pw_gid, groups, &ngroups);

}

return groups;

}

[root@localhost～]#

本例使用指令“info init”显示指令 init 的帮助信息。中间内容较多，部分已删除，不影响本例的阅读。

范例404 查询info的具体使用方法。

[root@localhost～]#info info　　//显示info的具体使用方法

【info文件的操作说明】

h：info 帮助信息。

空格：下一页。

［Del］键：上一页。

b：开始处。

e：结束处。

p：上一个主题。

n：下一个主题。

m：菜单。

Ctrl+L：重新显示画面。

q：退出。

?：帮助。

3.2.88 compress指令：压缩解压文件

语法 compress[必要参数][选择性参数][目录或者文件]

功能说明 compress 指令通过使用 Lempel-Ziv 算法压缩指定文件的大小。每一个文件将被扩展名为.Z的文件代替，并保存与源文件相同的拥有权、读写权限和更新时间。如果没有文件指定，那么标准输入将被压缩，并且输出到标准输出。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例405 压缩文件。

[root@localhost ～]# compress a.c　　//压缩文件a.c

[root@localhost ～]# ls

a.c.Z

本例使用指令“compress a.c”压缩文件 a.c，产生压缩文件 a.c.Z，源文件 a.c消失。

范例406 解压文件。

[root@localhost ～]# compress -d a.c.Z //解压缩文件a.c.Z

[root@localhost ～]# ls

a.c

本例使用指令解压文件 a.c.Z，得到文件 a.c。

范例407 压缩文件，保留原始文件，并且将结果输出到标准输出。

[root@localhost ～]# compress -c a.c　　//压缩文件a.c，并将结果输出到标准输出

范例408 按指定压缩比例进行压缩。

[root@localhost ～]# compress -b 7 a.c　//按指定压缩比例进行压缩

范例409 强制压缩文件夹。

[root@localhost home]# compress -rf chord/　//压缩文件夹

[root@localhost home]#

本例使用指令compress -rfchord/强制压缩文件夹/chord下的所有文件。

范例410 解压文件夹下的所有文件。

[root@localhost home]# compress -rfd chord/ //解压文件夹

[root@localhost home]#

本例使用指令 compress -rfd chord/强制解压文件夹/chord下的所有文件。

第4章 常用文本编辑与处理指令的使用

4.1 Linux下的文本编辑简介

文本编辑器是用作编写普通文字的应用软件，它与文档编辑器的不同之处在于它并非用作桌面排版，而是常用来编写程序的源代码。本章将为大家讲述命令行模式下的文本编辑和处理指令的具体使用方法。

文本编辑是Linux中最基本的应用之一，它不仅可以实现纯文本文件的创建、格式编辑等，还可以用来编写程序代码。在Linux系统中，我们也常常使用文本文件来保存系统以及用户的配置信息。

4.2 Linux下的简单文字模式文本编辑器

Linux 下的文本编辑器种类很多，功能的复杂程度和操作的难易度也不尽相同。在此我们将其大致分为可视和不可视两种。在本节中讲解的ed，jed，joe，pico和sed都属于不可视编辑器，不能进行全屏方式下的操作，操作相对简单。但可视编辑器的交互功能更好，典型的可视编辑器有vi和emacs，这将在下一节中讲述。

4.2.1 ed 指令：简单的行文本编辑器

学习目标 理解行编辑的概念，掌握 ed 指令进行简单的行文本编辑的方法

语法 ed [参数] [文件名]

功能说明 ed 指令是 Linux 下一个功能简单的行文本编辑器，属于不可视编辑器，用户无法查看全部的文档内容，但可以在命令行模式下查看最后一行的内容。ed文本编辑器有命令行模式和输入模式两种工作模式，当第一次在命令行中输入ed指令，启动ed行文本编辑器，同时进入命令行模式。此时用户可通过ed编辑器的内建指令来进行模式的切换以及文本的编辑。ed 指令一次仅能完成一行文本的编辑，当用户要建立一个简单的小文件以及进行Shell脚本编辑时，使用该指令还是很方便的。

参数说明 参数及其说明如下：

续表

内建指令

命令模式下常用命令说明如下：

ed编辑器行寻址命令说明如下：

基础应用

范例411 启动ed文本编辑。

在命令行中直接输入ed指令将启动命令行编辑器，用户可以在其环境下进行编辑，或直接输入 w 文件名，新建一个文本文档。

[root@localhost ～]# ed　　　　　　//启动ed文本编辑

用户也可以在 ed 指令中直接指定要打开的文件，如果文件名不存在，将显示提示符“Newfile ：NoSuch file or dirctory”，用户可以编辑新文本文档。

[root@localhost ～]# ed newfile　　　　//启动ed文本编辑

Newfile：No Such file or dirctory

如果指定的文件存在，在 ed编辑器中将显示文件的大小，空文本文件将显示为 0。

[root@localhost ～]# ed newfile　　　　//启动ed文本编辑

0

范例412 ed文本编辑器的模式切换以及文本编辑。

在 ed编辑器中，用户可以通过输入内建指令 a，c，i，从命令行模式切换到输入模式，同时选择文本的编辑方式。从输入模式返回到命令行模式只需输入“.”，同时按下“Enter”键即可。

a命令（末行输入）：启动 ed文本编辑，切换到输入模式，编辑文本。

[root@localhost ～]# ed newfile　　//启动ed文本编辑

0

a　　　　　　　　　//切换到输入模式，将新输入内容加在最后一行的后面

i am a student

i am come from china

i命令（插入一行）：在 ed编辑器中，要进行输入模式下的不同输入方式之间的切换时，必须先切换到命令行状态。

.　　　　　　　　　//切换到命令行模式

i　　　　　　　　　//切换到输入模式，将新输入内容插入最后一行内容的前面

i don’t have the ability to say no.

c命令（替换）：将文档的最后一行替换为新输入的内容

.　　　　　　　　　//切换到命令行模式

c　　　　　　　　　//切换到输入模式，将新输入内容替换最后一行的内容

there is the end of the　file.

存盘并退出 ed编辑器。

.

w　　　　　　　　　//保存文件

74

q　　　　　　　　　//退出ed

[root@localhost ～]# cat newfile

i am a student

i don’t have the ability to say no.

there is the end of the　file.

[root@localhost ～]#

范例413 ed文本编辑器的指定行寻址。在ed编辑器的命令行模式下输入“0a”，

在进行模式切换时，对指定行进行寻址。“0”表示的是第一行之前的位置，使用该命令就可以在指定文档的开头进行编辑。

[root@localhost ～]# ed newfile　　//启动ed文本编辑

74

0a　　　　　　　　　//切换到输入模式，在指定的位置输入内容

There is the beginning of the file.

.

Wq　　　　　　　　　//保存并退出

105

[root@localhost ～]# cat newfile

There is the beginning of the file.

i am a student

i don’t have the ability to say no.

there is the end of the file.

[root@localhost ～]#

范例414 使用ed文本编辑器进行快速文本编辑。因为ed文本编辑器每次只能对

一行进行文本编辑，如果用户有多行需要编辑，一次输入一行就显得比较麻烦。而使用echo指令通过管道将其输出作为ed指令的输入，就能同时对多行文本进行编辑。

[root@localhost ～]# cat newfile　　　　　//显示文本内容

There is the beginning of the file.

i am a student

i don’t have the ability to say no.

there is the end of the file.

[root@localhost～]#（echo‘c’;echo‘edisaline-orientedtexteditor’;echo‘.’;echo

‘a’;echo‘there is the end of the file.’;echo‘.’;echo‘wq’）|ed newfile

[root@localhost ～]# cat newfile　　　　　//显示文本内容

There is the beginning of the file.

i am a student

i don’t have the ability to say no.

ed is a line-oriented text editor

there is the end of the file.

[root@localhost ～]#

4.2.2 jed：文本编辑指令

学习目标 掌握使用 jed 进行编辑的方法

语法 jed 必要参数 [-可选参数] [文件]

功能说明 jed 指令可用来编辑文本文件，适合编辑程序原始代码。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

基础应用

范例415 编辑指定文件can.c。

[root@localhost yy]jed -2 can.c　　//编辑文件can.c

执行指令“jed -2 can.c”将在屏幕上显示上下两个编辑区，对文件 can.c 进行编辑。

4.2.3 joe：文本编辑指令

学习目标 掌握 joe 指令的使用方法

语法 joe [-可选参数][文件]

功能说明 joe 指令是一个功能强大且全面的文本编辑器。使用 joe 编辑器可以一次打开多个文件，每个打开的文件都有各自的编辑区，用户可以在各个文件之间进行文件的剪贴。

参数说明 可选参数及其说明如下：

续表

【joe编辑器的相关操作】

PgUp：上一页。

PgDown：下一页。

Ctrl+a：将光标移到该行开始。

Ctrl+e：将光标移到该行结尾。

Ctrl+k+u：将光标移到文件起始处。

Ctrl+k+v：将光标移到文件结尾处。

Ctrl+k+h：显示帮助菜单。

Ctrl+k+f：查找字符串。

Ctrl+k+c：复制区块。

Ctrl+k+y：删除区块。

Ctrl+k+d：保存。

Ctrl+c：关闭文件。

基础应用

范例416 编辑文件。

[root@localhost yy]# joe a1　　　　　//编辑文件a1

Processing '/etc/joe/joerc'...done

Processing '/etc/joe/joerc'...done

IW　a1　　　　　Row 2　Col 1　17:24　Ctrl-K H for help

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Red hat Linux

Joe for red hat Linux

Joe version

[root@localhost yy]#

执行指令“joe a1”编辑文件 a1。

范例417 以只读方式打开指定文件。

[root@localhost ～]# joe -rdonly a1　　//以只读的方式打开文件a1

Processing '/etc/joe/joerc'...done

Processing '/etc/joe/joerc'...done

IW　a1 (Read only)　　　　　Row 2　Col 1　17:24　Ctrl-K H for help

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Red hat Linux

Joe for red hat Linux

Joe version

[root@localhost ～]#

执行指令“joe -rdonly a1”以只读方式打开文件 a1。

4.2.4 pico：文本编辑指令

学习目标 掌握 pico 文本编辑器的使用方法

语法 pico [-可选参数] [文件]

功能说明 pico 是一个纯文本编辑器，利用它可以进行文本输入、阅览、拷贝、剪贴等操作，以及文本搜索和拼写检查。如果系统中安装了pico文本编辑器，只要在Shell中输入pico指令就能启动pico编辑器。与其他编辑器相比，pico没有输入模式之分，可以直接进行文本的编辑。

参数说明 可选参数及其说明如下：

【进入指令后的操作】

Ctrl+A：该行的最前面。

Ctrl+D：删除行。

Ctrl+E：该行的最后面。

Ctrl+G：帮助文档。

Ctrl+J：重新对齐。

Ctrl+K：删除行，放在缓冲区，类似于剪切。

Ctrl+O：保存文件。

Ctrl+R：插入文件。

Ctrl+U：回到上一步。

Ctrl+V：显示下一页。

Ctrl+W：查找字符串。

Ctrl+X：关闭文件。

Ctrl+Y：页面滚动。

Ctrl+\：替换。

基础应用

范例418 直接启动pico文本编辑器。

[root@localhost ～]#pico //直接输入 pico 回车启动 pico 文本编辑器

执行指令“pico”，启动pico文本编辑器。

UW　PICO（tm） 4.10　　　　New Buffer

^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos

^X Exit^J Justify ^W Where Is ^V Next Page ^U UnCut Text^T To Spell

执行指令“pico filename”也可启动 pico 文本编辑器，同时打开文件 filename，在此不再赘述。在pico编辑环境的下方，列有两排最常用的操作按键，其中“^”表示的是“Ctrl”键。

范例419 在pico文本编辑环境下显示帮助信息。

UW　PICO（tm） 4.10　　　　New Buffer

Pico is designed to be a simple,easy-to-use text editor with a layout very similar to

the pine mailer.The status line at the top of the display show pico’s version,the cur-

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

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

^G（F1）　Display this help text

^F　　move Forward a character

^B　　move Borward a character

^P　　move to the Previous line

^N　　move to the next line

^A　　move to the beginning of the current line

^E　　move to the End of the current line

^V　(F8)　move forward a page of text

^Y（F7）　move backward a page of text

^X　　Exit help

从范例可以看出，在帮助信息中给出了pico环境下按键操作的详细说明。

4.2.5 sed：在线文本编辑指令

学习目标 能使用 sed 指令利用 script 来处理文本文件

语法 sed [-可选参数] {命令} [文本文件]

功能说明 sed 指令在处理文本文件的过程中是非交互的，用户可以通过将想要执行的script命令直接写到sed指令中来实现对指定文本文件的处理。由于sed指令的执行是非交互的，在一些需要强制执行的情况下，如执行一些简单的具有重复性的操作时，也是一个不错的选择。

参数说明 可选参数及其说明如下：

【script命令】

{行号}：指定文本文件中的行号。

a\{字符串}：行后追加字符串。

d：删除行。

i\{字符串}：行前追加字符串。

p：显示行。

r{文本}：执行文本处理。

s/{先前字符串}/{新字符串}/{替换方法}：使用指定的替换方法将先前字符串替换成新字符串。

基础应用

范例420 利用script的替换命令来执行指定字符串的替换。

[root@localhost yy]# cat b1　　//显示文件b1的信息

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 b1 1987

6 b1 1877

[root@localhost yy]# sed –e s/b1/filename/ b1 //用字符串filename替换掉文件b1中的字符b1

1 filename 1024

2 filename 1133

3 filename 0981

4 filename 1321

5 filename 1987

6 filename 1877

[root@localhost yy]# sed –e 5s/b1/filename/ b1 //用字符串 filename 替换掉文件 b1 中指定行中的字符b1

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 filename 1987

6 b1 1877

[root@localhost yy]#

执行指令“sed –e s/b1/filename/ b1”， 用指定字符串“filename”替换掉文件 b1 中的字符“b1”，而指令“sed –e 5s/b1/filename/ b1”的执行结果是将指定行号中的字符进行替换。

范例421 利用script命令在文件的行前和行后追加指定字符串。

[root@localhost yy]# cat b1　　　//显示文件b1的信息

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 b1 1987

6 b1 1877

[root@localhost yy]# sed –e i\b1 b1　//在行前追加字符串

b1

1 b1 1024

b1

2 b1 1133

b1

3 b1 0981

b1

4 b1 1321

b1

5 b1 1987

b1

6 b1 1877

[root@localhost yy]# sed –e 1i\b1 b1　//在指定的行前追加字符串

b1

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 b1 1987

6 b1 1877

[root@localhost yy]# sed –e a\b1 b1　//在行后追加字符串

1 b1 1024

b1

2 b1 1133

b1

3 b1 0981

b1

4 b1 1321

b1

5 b1 1987

b1

6 b1 1877

b1

[root@localhost yy]# sed –e 6a\b1 b1　//在指定行后追加字符串

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 b1 1987

6 b1 1877

b1

[root@localhost yy]#

在上面的范例中已讲述，通过 script 命令，实现在文件的所有行以及指定行前或行后追加字符串的方法。

范例422 利用script文件来执行指定字符的替换。

[root@localhost yy]# cat scpfile　　//显示文件scpfile的信息

2s/b1/filename/p

4s/b1/filename/p

6s/b1/filename/p

1i\b1

[root@localhost yy]# sed –n –f scpfile b1 //用script文件scpfile来执行指定字符的替换和追加

b1

1 b1 1024

2 filename 1133

3 b1 0981

4 filename 1321

5 b1 1987

6 filename 1877

[root@localhost yy]#

执行指令“sed –n –f scpfile b1”， 用指定 script 文件 scpfile 来执行指定字符的替换和指定行的追加。

4.3 Linux下全屏幕文本编辑器的命令行方式

4.3.1 emacs：文本编辑指令

学习目标 初步了解 emacs 编辑器的基础功能，学会使用 emacs 指令来进行文本编辑、电邮收发等各项功能。

语法 emacs [-可选参数] [文件名]

功能说明 Emacs (Editor MACroS 编辑器宏) 是一个功能强大的文本编辑器。该指令不仅可以用来编辑文本文件，还可以收发电邮、编辑远程文档、通过Telnet登录远程主机、登录IRC、查看日历、支持多种编程语言（如C/C++，Perl，Python，Lisp等）、管理日程和个人信息、阅读info和man文档、浏览网站以及强大的个人定制功能等各种功能。

Emacs编辑器能够运行在当前大多数的操作系统上，如GNU/Linux，Solaris，AIX，Mac OS X，MS-DOS，Microsoft Windows 以及 OpenVMS 等。Emacs 既可以在文本终端的命令行模式下运行，也可以在图形用户界面（GUI）环境下运行。在GUI环境下，Emacs为用户提供了菜单（Menubar）、工具栏（Toolbar）等交互方式。

参数说明 可选参数及其说明如下：

【Emacs快捷键】

文件编辑操作

C-f：前进一个字符。

C-b：后退一个字符。

M-f：前进一个字。

M-b：后退一个字。

C-a：移到行首。

C-e：移到行尾。

M-a：移到句首。

M-e：移到句尾。

C-p：后退一行。

C-n：前进一行。

M-x goto-line：跳到指定行。

C-v：向下翻页。

M-v：向上翻页。

M-<：缓冲区头部。

M->：缓冲区尾部。

C-M-f：向前匹配括号。

C-M-b：向后匹配括号。

C-l：当前行居中。

M-n or C-u n：重复操作随后的命令 n 次。

C-u：重复操作随后的命令 4 次。

C-u C-u：重复操作随后的命令 8 次。

C-x ESC ESC：执行历史命令记录，M-p 选择上一条命令，M-n 选择下一条命令。

C-d：删除一个字符。

M-d：删除一个字。

C-k：删除一行。

M-k：删除一句。

C-w：删除标记区域。

C-y：粘贴删除的内容。

C-@：标记开始区域。

C-x h：标记所有文字。

C-x C-x：交换光标位置和区域标记区开头。

M-w：复制标记区域。

C-_ or C-x u：撤销操作。

C-x C-f：打开文件，出现提示时输入/username@host:filepath 可编辑 FTP 文件。

C-x C-v：打开一个文件，取代当前缓冲区。

C-x C-s：保存文件。

C-x C-w：存为新文件。

C-x i：插入文件。

C-x C-q：切换为只读或者读写模式。

C-x C-x：退出 Emacs。

窗口操作

C-x 0：关闭本窗口。

C-x 1：只留下一个窗口。

C-x 2：垂直均分窗口。

C-x 3：水平均分窗口。

C-x o：切换到别的窗口。

C-x s：保存所有窗口的缓冲。

C-x b：选择当前窗口的缓冲区。

C-x^：纵向扩大窗口。

C-x }：横向扩大窗口。

目录操作

C-x d：打开目录模式。

C：拷贝当前文件。

d：标记为删除。

D：马上删除当前文件

i：在当前缓冲区的末尾插入子目录的内容。

g：刷新显示。

q：退出目录模式。

R：重命名当前文件。

s：按日期/文件名排序显示。

t：反向标记文件。

v：阅读光标所在的文件。

x：执行标记。

Z：压缩文件。

+：新建文件夹。

!：对光标所在的文件执行 Shell 命令。

执行Shell命令

M-x Shell：打开 Shell。

M-!：执行 Shell 命令 (Shell-command)。

M-1 M-!：执行 Shell 命令，命令输出插入光标位置，不打开新输出窗口。

M-|：针对某一特定区域执行命令(Shell-command-on-region)。

基础应用

范例423 命令行模式下启动Emacs文本编辑器。

[root@localhost ～]# emacs　　　　　//启动Emacs文本编辑器

在 Linux 的终端直接输入指令“emacs”将启动 Emacs 文本编辑器。用户也可以直接输入想要编辑的文件路径，编辑器将打开该文件，在交互模式下进行操作。

4.3.2 vim：文本编辑指令

学习目标 学习vim编辑器并掌握其使用方法，能运用该编辑器进行文件和源程序的编辑

语法 vim [-可选参数] [文件]

功能说明 vim 即 vi improve，是在 vi 文本编辑器的基础上发展而来的增强型 vi 文本编辑器。与传统的vi编辑器相比，vim增加了高亮、彩显等功能。它可工作在以下3种模式：命令行模式（command mode）、输入模式（input mode）和末行模式（last line mode），默认状态下的模式是命令行模式。现将3种模式下的常用操作命令列举如下：

【vim环境下的常用命令】

命令行模式：

D：删除光标所在行后的所有词。

G：将光标移至最后一行的行首。

h：将光标向左移一列。

i：将光标向右移一列。

j：将光标向上移一行。

k：将光标向下移一行。

nG：n 为数字，将光标移至第n 行。

p：将复制的内容粘贴到光标所在位置。

r：修改光标所在处的字符。

R：修改光标所在处的字符，按 Esc 键退出修改。

U：取消对行执行的所有改变。

W/w：将光标移至下一个字。

x：删除光标所在处的字符。

X：删除光标所在处的前一个字符。

d+ d：连按两次 d，将删除光标所在的行。

d+w：删除光标所在处的词，若光标位于 2 个字之间删除光标后的 1 个。

n+x：删除光标所在处及其后的共 n 个字符。

n+X：删除光标所在处及其前的共 n 个字符。

y+ y：整行复制。

y+w：复制光标所在处的整个字符串。

n+ d+ d：n 为数字，删除光标所在行及其下面的 n-1 行，共 n 行。

n+y+ w：n为数字，复制当前光标所在位的单词及紧跟其后的n-1个单词，共n个词。

n+y+ y：复制当前光标所在行及其下面的 n-1 行，共 n 行。

d+左方向键：连按将删除光标所在处的前一个字符。

d+右方向键：删除光标所在处的字符。

d+上方向键：删除光标所在行与其上一行。

d+下方向键：删除光标所在行与其下一行。

n+ d+上方向键：n 为数字，删除光标所在行及其上面的 n-1 行，共 n 行。

n+ d+下方向键：同 n+ d+ d。

Ctrl+ b：向上翻一页。

Ctrl+f：向下翻一页。

Ctrl+ u：向前翻半页。

Ctrl+ d：向后翻半页。

Ctrl+g：在最后一行处显示光标所在位置的行数和文章的总行数。

N+\：将光标移至第N 行。

0：将光标移至该行的行首。

$：将光标移至该行的行末。

{：将光标移至前面的“{”处。

}：将光标移至后面的“}”处。

.：重复执行上一次命令。

输入模式：

a：从当前光标所在字符之后开始输入。

A：从当前光标所在行的末端开始输入。

i：从当前光标处插入。

I：从当前光标所在行的行首开始插入。

o：在当前光标所在行下方新增一行，从新增行的行首开始输入。

O：在当前光标所在行上方新增一行，从新增行的行首开始输入。

末行模式：

：n：加载文件。

：w：存盘。

：w newfile：文件另存。

：wq：存盘并退出。

：w！：对只读文件强制写入存盘。

：q：退出。

：q！：强制退出。

：set nu：在每行开头显示行数。

：set none：取消每行开头的行数显示。

：！：强制执行。

：/ 字符串：匹配字符串查找，查找完成后突出显示匹配字符串，同时转至查找到的第一个匹配字符串，按n向下查找、N向上查找。

参数说明 可选参数及其说明如下：

基础应用

范例424 直接启动vim编辑器，进行文字编辑。

[root@localhost ～]# vim　　//启动vim编辑器

在Shell下输入指令“vim”，进入vim编辑环境。

进入vim编辑环境后，输入“：a”命令切换到输入模式，录入数据。

：a

Since Aug.10,when a ban on most carry-on liquids sent the amount of checked luggage soaring,

airlines have been misplacing many more bags,and the fumbling could well escalate during the busy holiday travel season.

在 vim 编辑环境下，完成数据输入后按“Esc”键，退出输入模式。此时输入“：w ax”保存输入数据。

：a

Since Aug.10,when a ban on most carry-on liquids sent the amount of checked luggage soaring,

airlines have been misplacing many more bags,and the fumbling could well escalate during the busy holiday travel season.

：w ax

完成文件保存后将显示该文件的相关信息如下所示。

：a

Since Aug.10,when a ban on most carry-on liquids sent the amount of checked luggage soaring,

airlines have been misplacing many more bags,and the fumbling could well escalate during the busy holiday travel season.

“ax” [New]　3L，132C　written　　　　　　　　6，1　　　　All

如果不再进行其他的文件编辑，就可以退出编辑器了。输入命令“：q”，退出vim编辑器。

：a

Since Aug.10,when a ban on most carry-on liquids sent the amount of checked luggage soaring,

airlines have been misplacing many more bags,and the fumbling could well escalate during the busy holiday travel season.

：q

输入命令“：q”后直接按回车键退出vim编辑环境，回到Shell环境下。

[root@localhost ～]# vim　　　　//启动vim编辑器

[root@localhost ～]#　　　　　　//退出vim编辑器

4.4 Linux下的文本编辑指令

4.4.1 col 指令：过滤控制字符

学习目标 学会滤除控制字符

语法 col [-可选参数]

功能说明 col 指令过滤控制字符，可以将文件的内容转换为纯文本模式，可处理 man指令的输出数据。同时col指令还能使用多个空格代替tab，能用于转存nroff和tbl的输出。

参数说明 可选参数及其说明如下：

基础应用

范例425 过滤控制字符，并保存为文本文件。

[root@localhost yy]# man cat > h.txt

[root@localhost yy]# cat h.txt

CAT(1)　　　　　　User Commands　　　　　　　CAT(1)

N^HNA^HAM^HME^HE

cat-concatenate files and print on the standard output

S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS

c^Hca^Hat^Ht [_^HO_^HP_^HT_^HI_^HO_^HN]...[_^HF_^HI_^HL_^HE]...

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

[root@localhost yy]# man cat | col -b > h1.txt　//滤掉RLF和HRLF字符

[root@localhost yy]# cat h1.txt

CAT(1)　　　　　　User Commands　　　　　　　CAT(1)

NAME

cat-concatenate files and print on the standard output

SYNOPSIS

cat [OPTION]...[FILE]..

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

执行指令“man cat | col -b > h1.txt”将 cat 的 man 信息重定向到纯文本文件 h1.txt 使用 cat指令输出结果，文本中 nroff 控制字符已经滤出。

4.4.2 colrm 指令：删除指定的列

学习目标 学会删除文件中的指定列

语法 colrm [开始列号[结束列号] ]

功能说明 colrm 指令可以从标准输入中读取数据删除指定的列，输出到标准输出。如果指令中参数只包含开始列，将删除指定列之后的所有的列；如果指令中参数包含开始列和结束列，将删除两个列值之间的所有的列。指令还可对指定文件进行操作。

基础应用

范例426 删除指定的列及其以后的所有列。

[root@localhost ～]# colrm 3　　//删除指定的第3列及其以后所有列

asdasdghhkl　　　　　　//输入数据，回车

as　　　　　　　　　//输出数据中删除了指定列及其之后的所有列

dghjjk　　　　　　　　//输入

dg　　　　　　　　　//输出输入“ctrl+d”退出

[root@localhost ～]#

执行指令“colrm 3”从标准输入输入“asdasdghhkl”回车输出为“as”，输入数据“dghjjk”输出“dg”，输入“ctrl+d”退出指令。

范例427 删除指定的两列及其中间的所有列。

[root@localhost ～]# colrm 3 5　　//删除指定列

asdasdghhkl　　　　　　//输入数据，回车

asdghhkl　　　　　　　//输出数据

dghjjk　　　　　　　　　//输入

dgk　　　　　　　　　//输出 输入“ctrl+d”退出

[root@localhost ～]#

执行指令“colrm 3 5”从标准输入输入“asdasdghhkl”回车输出为“asdghhkl”，输入数据“dghjjk”输出“dgk”，输入“ctrl+d”退出指令。

范例428 删除指定文件中的列。

[root@localhost yy]# cat a1　　　//显示文件a1的内容

Hello everyone

Hello everybody

How are you

Fine thank you and you

[root@localhost yy]# colrm 4 <a1　　//删除文件a1每一行的第4列及其之后的所有列

Hel

Hel

How

Fin

[root@localhost yy]# colrm 1 3 <a1　　//删除文件第1～3列之间的所有列

lo everyone

lo everybody

are you

e thank you and you

[root@localhost yy]#

执行指令“colrm 4 <a1”和指令“colrm 1 3 <a1”对指定文件进行操作。

4.4.3 comm 指令：比较排序文件

学习目标 掌握对两个有序文件进行比较的方法

语法 comm [-可选参数] 文件 1 文件 2

功能说明 comm 指令将两个排序文件逐行进行比较，然后输出结果。在不指定参数时，比较结果将分成三部分输出：一、输出文件 1 的独有行；二、输出文件 2 的独有行；三、输出文件1和文件2的共有行。如果指令中文件名称为“-”，指令将从标准输入中读入。

参数说明 可选参数及其说明如下：

基础应用

范例429 比较排序文件。

[root@localhost yy]# cat a1　//显示文件a1的内容

Hello everyone

Hello everybody

How are you

Fine thank you and you

[root@localhost yy]# cat a2　//显示文件a2的内容

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

Fine thank you and you

[root@localhost yy]# comm a1 a2 //比较排序文件a1和a2

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

Hello everyone

Hello everybody

How are you

Fine thank you and you

[root@localhost yy]#

执行指令“comm a1 a2”比较排序文件 a1 和 a2，结果分三部分输出三部分的内容。第一部分是文件1单独含有的行；第二部分是文件2单独含有的行；第三部分是两个文件共有的行。如上所示。

范例430 比较排序文件，同时对文件进行输出选择。

[root@localhost yy]# cat a1　　//显示文件a1的内容

Hello everyone

Hello everybody

How are you

Fine thank you and you

[root@localhost yy]# cat a2　　//显示文件a2的内容

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

Fine thank you and you

[root@localhost yy]# comm -1 a1 a2　//比较排序文件a1和a2，文件a1单独含有的行不显示

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

Fine thank you and you

[root@localhost yy]# comm -2 a1 a2　//比较排序文件a1和a2，文件a2单独含有的行不显示

Hello everyone

Hello everybody

How are you

Fine thank you and you

[root@localhost yy]# comm -3 a1 a2　//比较排序文件a1和a2，文件a1和a2共有的行不显示

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

aaaaaaaaaaaaaa

Hello everyone

Hello everybody

How are you

[root@localhost yy]#

执行指令“comm.-1 a1 a2”，“comm.-2 a1 a2” 和“comm.-3 a1 a2”比较排序文件 a1和a2，同时通过对参数的选择实现不同的输出。如上所示。

4.4.4 fmt 指令：编排文本文件

学习目标 掌握对文件格式进行编排的简单方法

语法 fmt [-可选参数] [文件]

功能说明 fmt 指令将依照指定的格式重排指定文件里的内容，然后输出到标准输出。若指令中未指定文件，从标准输入读取数据。

参数说明 必要参数的具体说明如下：

基础应用

范例431 对指定文件进行重新编排。

[root@localhost yy]# cat sr　　　//显示文件sr的内容

asdfgjkjl

asdsfgfhgjk

adsfghjklk

asfghk

q

sjkdfgdjkfg

sdjkdfhdjkfg

jsdhfklh

hgskjg

[root@localhost yy]# fmt a1　　　　　//重新编排文件sr

asdfgjkjl asdsfgfhgjk adsfghjklk asfghk

q sjkdfgdjkfg sdjkdfhdjkfg jsdhfklh hgskjg

[root@localhost yy]# cat sr | fmt　　　　//重新编排文件sr

asdfgjkjl asdsfgfhgjk adsfghjklk asfghk

q sjkdfgdjkfg sdjkdfhdjkfg jsdhfklh hgskjg

[root@localhost yy]# cat sr

sdfgjkjl

asdsfgfhgjk

adsfghjklk

asfghk

q

sjkdfgdjkfg

sdjkdfhdjkfg

jsdhfklh

hgskjg

[root@localhost yy]#

执行指令“fmt sr” 和指令“cat sr | fmt”对文件 sr 重新进行编排。

范例432 对起始字符为指定字符串的列进行合并。

[root@localhost yy]# cat a1　　　　　　//显示文件a1的内容

Hello everybody

Hello everyone

How are you

[root@localhost yy]# fmt –p hello a1　　　//对文件重新进行编排

Hello everybody Hello everyone

How are you

[root@localhost yy]#

执行指令“fmt –p hello a1”将从标准输入设备读取数据，然后进行编排。

范例433 从标准输入读取数据进行编排。

[root@localhost yy]# fmt　　　　　　//对输入数据进行重新编排

Afdsf ag

；agrsdfh

Fgjksdghfgj

Adfghfghj sdfh

Fgh　　　　　　　　　　　　//完成输入后按Ctrl+d退出

Afdsf ag ；agrsdfh Fgjksdghfgj Adfghfghj sdfh Fgh

[root@localhost yy]#

执行指令“fmt”将从标准输入设备读取数据，然后进行编排。

4.4.5 fold 指令：限制文件列宽

学习目标 能对文件的列宽进行限制

语法 fold [-可选参数] [文件]

功能说明 fold 指令可用来调整文件的列宽，读取指定文件的内容，如果文件中某行的列数超出限定的列数，将超出部分截断作为新的一行在该行后输出，要求新增加的行也满足限定列宽。fold 指令也可从标准输入中读取数据，然后将结果输出到标准输出。fold 指令的功能和fmt指令有类似之处，学习的时候要注意区别。

参数说明 可选参数及其说明如下：

基础应用

范例434 调整文件的列宽。

[root@localhost yy]# fold -w 3　　　　　//从标准输入中读入文件

a

aa

aaa

aaaa

aaaaa

aaaaaa

aaaaaaa　　　　　　　　　　　//“Ctrl+d”

a

aa

aaa

aaa

a

aaa

aa

aaa

aaa

aaa

aaa

a

[root@localhost yy]#

执行指令“fold -w 3”从标准输入设备中读取数据，然后将结果输出到标准输出设备，如本例所示。

范例435 调整文件的列宽，同时保存调整后的文件。

[root@localhost yy]#ls

a1.txt sr yy

[root@localhost yy]# fold -w 3 >aa.txt　　　　//从标准输入中读入文件

a

aa

aaa

aaaa

aaaaa

aaaaaa

aaaaaaa　　　　　　　　　　　　//“Ctrl+d”

[root@localhost yy]#ls

a1.txt aa.txt sr yy

[root@localhost yy]#cat aa.txt

a

aa

aaa

aaa

a

aaa

aa

aaa

aaa

aaa

aaa

a

[root@localhost yy]#

执行指令“fold -w 3 > aa.txt”从标准输入设备中读取数据，然后将结果输出到指定文件aa.txt中，如本例所示。

4.4.6 grep 指令 ：匹配搜索

学习目标 掌握匹配搜索的方法

语法 grep [-可选参数] 查找模式 [文件或者目录]

功能说明 grep 指令用于查找文件中符合指定模式的行，并将其输出到标准输出设备。如果指令中未指定文件名，将会从标准输入中读取数据。

参数说明 可选参数及其说明如下：

续表

【ACTION的值】

read：将目录视为一般文档文件进行处理，预设的 ACTION 的值为 read。

skip：忽略目录不处理。

recurse：相当于-r 参数，递归处理目录下的文件。

基础应用

范例436 在指定文件中查找含有匹配字符串的行。

[root@localhost yy]# cat sr　　　　　　//显示文件sr的内容

asd fgjkjl

asdsfgfhgjk

adsfghjklk

asfghk

q

sjkdfgdjkfg

sdjkdfhdjkfg

jsdhfklh

hgskjg

[root@localhost yy]# grep as sr　　　　　//在指定文件 sr查找匹配字符串“as”

asd fgjkjl

asdsfgfhgjk

asfghk

[root@localhost yy]# egrep as sr　　　　//在指定文件 sr查找匹配字符串“as”

asd fgjkjl

asdsfgfhgjk

asfghk

[root@localhost yy]# fgrep as sr　　　　//在指定文件 sr查找匹配字符串“as”

asd fgjkjl

asdsfgfhgjk

asfghk

[root@localhost yy]#

执行指令“grep as sr”，“egrep as sr”和“fgrep as sr”查找指定文件中含有字符串“as”的行，并将查找到的行输出到标准输出，输出结果如上所示。我们知道egrep、fgrep和grep指令都是用于实现指定模式搜索的指令，其中grep指令一次只搜索一个指定的模式，egrep是扩展的grep指令，能检索正则表达式，而fgrep指令则是快速grep。

范例437 在多个指定文件中查找含有匹配字符串的行。

[root@localhost yy]# cat a2　　　　　//显示文件a2的内容

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

aaaaaaaaaaaa

fine thank you and you

[root@localhost yy]# grep a a2 sr　　　//在指定文件 a2和文件 sr中查找匹配字符串“as”

a2：aaaaaaaaaaaa

a2：aaaaaaaaaaaa

a2：aaaaaaaaaaaa

a2：aaaaaaaaaaaa

a2：fine thank you and you

sr：asd fgjkjl

sr：asdsfgfhgjk

sr：adsfghjklk

sr：asfghk

[root@localhost yy]#

执行指令“grep a a2 sr”查找指定文件 a2 和文件 sr 中含有字符“a”的行，并将查找到的行输出到标准输出。如上所示。

范例438 查找含有匹配字符串的行，同时显示其后两行的内容。

[root@localhost yy]# grep –A 2 ads sr　　//查找匹配字符串“ads”同时显示匹配行及其后两行的内容

adsfghjklk

asfghk

[root@localhost yy]#

执行指令“grep –A 2 ads sr”查找指定文件 sr 中含有字符串“ads”的行，并将查找到的行以及该行的后两行输出到标准输出。

范例439 按照范本文件中给出的查找模式进行查找。

[root@localhost yy]# cat a3　　　//显示范本文件a3的内容

asd

ads

fg

sf

[root@localhost yy]# grep –f a3 sr　　//查找符合范本文件中查找模式

asd fgjkjl

asdsfgfhgjk

adsfghjklk

asfghk

sjkdfgdjkfg

sdjkdfhdjkfg

[root@localhost yy]#

执行指令“grep –f a3 sr”查找指定文件 sr 中含有范本文件中指定查找模式的行，并将查找到的行输出到标准输出。

范例440 列出目录下所有符合查找模式的文件名。

[root@localhost yy]# grep –l as *　　//列出所有符合查找模式的文件

a3

ar.txt

df.txt

h

h1.txt

ls.man.txt

sr

sr.txt

tt

ypbind

[root@localhost yy]#

执行指令“grep –l as *”l 列出所有符合查找模式的文件名。

范例441 反转显示所有不满足查找模式的行。

[root@localhost yy]# grep -v asd sr　　//列出文件sr中不含“asd”的行

adsfghjklk

asfghk

q

sjkdfgdjkfg

sdjkdfhdjkfg

jsdhfklh

hgskjg

[root@localhost yy]#

执行指令“grep -v asd sr”显示指定文件 sr 中不符合查找模式“asd”的所有行。

范例442 将查找模式看作word的形式对文件进行索引。

[root@localhost yy]# grep -w asd sr　　//将字符串“asd”看作word形式

asd fgjkjl

[root@localhost yy]#

执行指令“grep -w asd sr” 将查找模式看作 word 的形式对文件进行索引。

4.4.7 ispell 指令：拼字检查程序

学习目标 学会使用 ispell 指令对文件进行拼写检查

语法 ispell [-可选参数] [文件]

功能说明 ispell 指令使用/usr/lib/ispell/english.hash 下的预设字典来检查指定的文件。如果检查到文件中存在预设字典里没有的词汇，会建议你使用的词汇或让你将新的词汇加入个人字典。

参数说明 可选参数及其说明如下：

基础应用

范例443 检查指定文件。

[root@localhost yy]# cat a11　　//显示文件a11的内容

Hello everybody

Hello everyone

How are you

Linux

Red hat Linux

[root@localhost yy]# ispell a11　//检查文件a11

输入指令“ispell a2”回车将显示如下内容。

Hello everybody

Hello everyone

How are you

Linux

Red hat Linux

1）Linux　　　　　　　　6）Linuxes

2）lynx　　　　　　　　7）lix

3）Linus　　　　　　　　8）linkup

4）links　　　　　　　　9）Linc‘s

5）Linc　　　　　　　　0）Link

i）Ignore　　　　　　　　I）Ignore all

r）Replace　　　　　　　　R）Replace all

a) Add　　　　　　　　　l) Add Lower

b) Abort　　　　　　　　x)Exit

？

如果输入数字1，将文件中第四行中的Linux替换为Linux。这时的显示如下：

Hello everybody

Hello everyone

How are you

Linux

Red hat Linux

1）Linux　　　　　　　　6）Linuxes

2）lynx　　　　　　　　7）lix

3）Linus　　　　　　　　8）linkup

4）links　　　　　　　　9）Linc‘s

5）Linc　　　　　　　　0）Link

i）Ignore　　　　　　　　I）Ignore all

r）Replace　　　　　　　　R）Replace all

a) Add　　　　　　　　　l) Add Lower

b) Abort　　　　　　　　x)Exit

？

如果不想替换可按x键直接退出。

[root@localhost yy]# cat a11　　//显示文件a11的内容

Hello everybody

Hello everyone

How are you

Linux

Red hat Linux

[root@localhost yy]#

在执行完成后查看文件a11的内容可发现文件的拼写已更改。

本例使用指令“spell -d american iptables.sh”指定词典为美语词典进行检查。

4.4.8 join指令：连接两个指定的文件

学习目标 会运用 join 指令连接两个不同文件

语法 join [-可选参数] 文件 1 文件 2

功能说明 join 指令可以找出文件中指定栏位相同的行，然后连接两个指定的文件，输出到标准输出设备。

参数说明 可选参数及其说明如下：

基础应用

范例444 连接两个文件中栏位相同的行。

[root@localhost yy]# cat b1　　//显示文件b1的信息

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 b1 1987

6 b1 1877

[root@localhost yy]# cat b2　　//显示文件b2的信息

1 b2 0025

2 b2 0017

3 b2 0119

4 b2 0226

5 b2 0068

7 b2 0001

[root@localhost yy]# join b1 b2　　//连接两个文件

1 b1 1024 b2 0025

2 b1 1133 b2 0017

3 b1 0981 b2 0119

4 b1 1321 b2 0226

5 b1 1987 b2 0068

[root@localhost yy]#

执行指令“join b1 b2”，将文件 b1 和 b2 中栏位相同的部分连接起来，连接的顺序与指令中文件名的先后有关，一般情况下空格作为栏位的区分。

范例445 连接两个文件中栏位相同的行，同时显示选中文件中不相同的行。

[root@localhost yy]# cat b1　　//显示文件b1的信息

1 b1 1024 1

2 b1 1133 2

3 b1 0981 3

4 b1 1321 4

5 b1 1987 5

6 b1 1877 6

[root@localhost yy]# cat b2　　//显示文件b2的信息

1 b2 0025 1

2 b2 0017 2

3 b2 0119 3

4 b2 0226 4

5 b2 0068 5

7 b2 0001 7

[root@localhost yy]# join –a1 b1 b2　//连接两个文件b1和b2，同时显示文件b1中的栏位不同的行

1 b1 1024 1 b2 0025 1

2 b1 1133 2 b2 0017 2

3 b1 0981 3 b2 0119 3

4 b1 1321 4 b2 0226 4

5 b1 1987 5 b2 0068 5

6 b1 1877 6

[root@localhost yy]# join –a2 b1 b2　//连接两个文件b1和b2，同时显示文件b2中的栏位不同的行

1 b1 1024 1 b2 0025 1

2 b1 1133 2 b2 0017 2

3 b1 0981 3 b2 0119 3

4 b1 1321 4 b2 0226 4

5 b1 1987 5 b2 0068 5

7 b2 0001 7

[root@localhost yy]#

执行指令“join –a num b1 b2”，将文件 b1 和 b2 中栏位相同的部分连接起来，同时显示num指定的文件里栏位不同的行。num取得的数字1或2与文件在指令中的顺序是相关的， 1代表前者，2代表后者。

范例446 连接指定栏位相同的文件。

[root@localhost yy]# cat b1　　//显示文件b1的信息

1 b1 1024 1

2 b1 1133 2

3 b1 0981 3

4 b1 1321 4

5 b1 1987 5

6 b1 1877 6

[root@localhost yy]# cat b2　　//显示文件b2的信息

1 b2 0025 1

2 b2 0017 2

3 b2 0119 3

4 b2 0226 4

5 b2 0068 5

7 b2 0001 7

[root@localhost yy]# join –1 4 b1 b2　　//将文件b1的指定栏位与b2中的预设相比较

1 1 b1 1024 b2 0025 1

2 2 b1 1133 b2 0017 2

3 3 b1 0981 b2 0119 3

4 4 b1 1321 b2 0226 4

5 5 b1 1987 b2 0068 5

[root@localhost yy]# join –2 4 b1 b2　　//将文件b2的指定栏位与b1中的预设相比较

1 b1 1024 1 b2 0025

2 b1 1133 2 b2 0017

3 b1 0981 3 b2 0119

4 b1 1321 4 b2 0226

5 b1 1987 5 b2 0068

[root@localhost yy]# join –j 4 b1 b2　　//将文件b1与b2中的指定栏位相比较

1 b1 1024 1 b2 0025

2 b1 1133 2 b2 0017

3 b1 0981 3 b2 0119

4 b1 1321 4 b2 0226

5 b1 1987 5 b2 0068

[root@localhost yy]#

执行指令“join –1/2 栏位 b1 b2”，当指令中的参数为–1 时指定的是文件 1 的栏位，文件2是预设栏位；当指令中的参数为–2时指定的栏位是文件2的栏位，文件1是预设栏位。这里的参数–1/2 的意思与上面提到的 num 代表的意义相同。执行指令“join –l 栏位 b1 b2”同时指定了文件1和文件2的比较栏位。

4.4.9 look 指令：单字查询

学习目标 掌握 look 指令进行英文单字查询的方法

语法 look [-可选参数] 字首字符串 [文件]

功能说明 使用 look 指令进行英文单字查询时，根据输入的字首字符串，会输出所有符合该条件的单字。

参数说明 可选参数及其说明如下：

基础应用

范例447 查找以word作为起始字符串的单字。

[root@localhost ～]# look word　　//开始查找

Word

word

wordable

wordably

wordage

wordages

word-beat

word-blind

word-book

wordbook

wordbooks

word-bound

wordbreak

word-breaking

wordbuilding

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

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

wordstar

wordster

word-stock

Wordsworth

Wordsworthian

wordsworthian

wordsworthianism

word-wounded

wordy

[root@localhost ～]#

执行指令“look word”后，在标准输出设备上输出所有预设字典上含有的以指定字符串作为字首的单字。

4.4.10 sort 指令：将文本文件内容加以排序

学习目标 能使用 sort 指令对文本文件内容进行排序

语法 sort [-可选参数] [文件]

功能说明 利用 sort 指令可以对指定的文本文件的内容一行为单位进行排序。

参数说明 可选参数及其说明如下：

基础应用

范例448 对文件的内容进行排序。

[root@localhost yy]# cat b3　　　//显示文件b3的信息

9 b1 1024 0

6 b1 1133 1

3 b1 0981 2

5 b1 1321 3

7 b1 1987 4

2 b1 1877 5

1 b2 0025 6

4 b2 0017 7

8 b2 0119 8

0 b2 0226 9

[root@localhost yy]# sort b3　　　//对文件b3进行排序

0 b2 0226 9

1 b2 0025 6

2 b1 1877 5

3 b1 0981 2

4 b2 0017 7

5 b1 1321 3

6 b1 1133 1

7 b1 1987 4

8 b2 0119 8

9 b1 1024 0

[root@localhost yy]#

执行指令“sort b3”对文件 b3 进行排序，然后输出到标准输出。

范例449 对文件的内容进行逆排序。

[root@localhost yy]# cat b1　　　//显示文件b1的信息

1 b1 1024

2 b1 1133

3 b1 0981

4 b1 1321

5 b1 1987

6 b1 1877

[root@localhost yy]# sort –r b1　　//对文件b1的内容进行逆排序

6 b1 1877

5 b1 1987

4 b1 1321

3 b1 0981

2 b1 1133

1 b1 1024

[root@localhost yy]#

执行指令“sort –r b1”对文件 b1 进行逆排序，然后输出到标准输出。

4.4.11 spell指令：拼字检查程序

学习目标 掌握使用 spell 指令进行拼字检查的方法，比较 spell 指令和 ispell 指令的使用方法

语法 spell

功能说明 spell 指令可检查从标准输入设备输入的字符串有否拼写错误，如果检查到拼写错误，在输入结束后显示有拼写错误的字符。

基础应用

范例450 检查输入的字符串。

[root@localhost ～]# spell　　　　　//检查字符串

word

asddd

quit

sadf

save

ffg

exit　　　　　　　　　　//完成从标准输入设备输入字符串

asddd

sadf

ffg

[root@localhost ～]#

执行指令spell检查从标准输入设备输入的字符串的拼写错误，在结束输入的同时将拼写错误的字符串在屏幕上输出。

4.4.12 tr指令：转换文件中的字符

学习目标 能使用 tr 指令转换文件中的字符

语法 tr [-可选参数] 字符串 1 [字符串 2]

功能说明 tr 指令将标准输入输入的字符串转换为指定的字符串，然后输出到标准输出设备。

tr指令从标准输入设备读取数据，经过字符串转译后，输出到标准输出设备。

参数说明 可选参数及其说明如下：

基础应用

范例451 字符串转换。

[root@localhost yy]# cat b1 | tr b1 na　　　　//将字符串b1转换为字符串na

1 na 1024

2 na 1133

3 na 0981

4 na 1321

5 na 1987

6 na 1877

[root@localhost yy]# cat b1 | tr b1 name　　　　//将字符串b1转换为字符串na

1 na 1024

2 na 1133

3 na 0981

4 na 1321

5 na 1987

6 na 1877

[root@localhost yy]#

执行指令“cat b1 | tr b1 na”将文件 b1 中的字符串 b1 转换为字符串 na。执行指令“cat b1 | tr b1 name”文件 b1 中的字符串 b1 转换为字符串 na 而非字符串 2 中指定的字符串 name。虽然两个指令中指定的字符串2长度不同，但输出到标准输出的结果相同。

范例452 删除所有输入文本中与字符串1相匹配的字符。

[root@localhost yy]# cat b1 | tr –d b1　　//删除文本中与字符串b1相匹配的字符

024

2 33

3 098

4 32

5 987

6 877

[root@localhost yy]#

执行指令“cat b1 | tr –d b1” 删除文本中与字符串 b1 相匹配的字符，并输出到标准输出。

范例453 大小写字母转换。

[root@localhost yy]# cat a1

Hello everybody 1

Hello everyone 2

How are you 3

Fine thank you and you 4

I fine too 5

Linux 6

Red hat Linux 7

[root@localhost yy]# cat a1 | tr a-y A-Y　　//大小写字母转换

HELLO EVERYBODY 1

HELLO EVERYONE 2

HOW ARE YOU 3

FINE THANK YOU AND YOU 4

I FINE TOO 5

LINUX 6

RED HAT LINUX 7

[root@localhost yy]#

执行指令“cat a1 | tr a-y A-Y” 将文本中的字符转换为大写字母，并输出到标准输出。

4.4.13 uniq 指令：检查文件中重复出现的行

学习目标 掌握检查及删除文本文件中重复出现的行

语法 uniq [-可选参数] [输入文件[输出文件] ]

功能说明 uniq 指令用来检查文件中重复出现的行，并将重复的部分删除。

参数说明 可选参数及其说明如下：

基础应用

范例454 显示文件中每行重复出现的次数。

[root@localhost yy]# cat ar　　　//显示文件内容

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]# uniq –c ar　　//显示每行重复出现次数

1 Hello everybody

1 Hello everyone

1 How are you

1 Fine thank you and you

1 I fine too

3 Linux

1 Red hat Linux

[root@localhost yy]#

执行指令“uniq –c ar”显示文件 ar 中每行重复出现的次数。

范例455 不显示文件中的重复行。

[root@localhost yy]# cat ar　　　//显示文件内容

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]# uniq ar　　　//不显示文件中的重复行

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Red hat Linux

[root@localhost yy]#

执行指令“uniq ar” 不显示文件中的重复行。

范例456 显示时忽略指定行。

[root@localhost yy]# cat ar　　　//显示文件内容

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]# uniq –f2 ar　　//显示时忽略指定行

Hello everybody

How are you

Fine thank you and you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]# uniq –f4 ar　　//显示时忽略指定行

Hello everybody

Hello everyone

How are you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]#

执行指令“uniq –f2 ar”和指令“uniq –f4 ar” 不显示指令中的指定行。

4.5 其他编辑指令

4.5.1 egrep指令：输出匹配某种模式的行

学习目标 掌握指定模式搜索的方法

语法 egrep [-可选参数] 查找模式 [文件]

功能说明 egrep 指令相当于指令“grep-e”。具体的使用方法见 grep 指令。

4.5.2 ex指令：在Ex模式下启动vim文本编辑器

学习目标 掌握在 Ex 模式下启动 vim 文本编辑器的方法

语法 ex [-可选参数] [文件]

功能说明 ex 指令相当于指令“vi –E”，在 Shell 中输入 ex 指令将以 EX 模式启动 vim文本编辑器。在Ex模式下在vim中输入“vi”或“visual”，将从Ex模式回到普通模式。ex指令的语法及参数与vi指令相同。

基础应用

范例457 在Ex模式下启动vim文本编辑器。

[root@localhost ～]# ex　　//以Ex的模式启动vim文本编辑

执行指令“ex”，启动Ex模式下的vim文本编辑器。

4.5.3 fgrep指令：匹配字符串

学习目标 掌握指定模式搜索的方法

语法 fgrep [-可选参数] 查找模式 [文件]

功能说明 fgrep 指令相当于“grep –f”，在文件中查找符合条件的字符串。具体的使用方法见grep指令。

基础应用

范例458 字符匹配的反向选择。

[root@localhost ～]# cat abc　　//显示文件abc的内容

i am a student

i am from bj

i like sports

espacially basketball and football

my favorite football club is intermilan

i will love it for ever

oh,abc

[root@localhost ～]# fgrep -v bc abc　　//显示文件abc中不含“abc”的行

i am a student

i am from bj

i like sports

espacially basketball and football

my favorite football club is intermilan

i will love it for ever

[root@localhost ～]# fgrep bc abc　　//显示文件 abc 中含有“bc”的行

oh,abc

[root@localhost ～]#

实战思考

应用思考

1．使用指令“fgrep ab *”查找当前文件夹下含有字符串“ab”的文件，并将得到的文件信息输出到标准输出。

2．使用指令“fgrep -l ab *”列出当前文件夹下符合条件即含有字符串“ab”的所有文件。

4.5.4 mtype指令：显示MS-DOS文件的内容

学习目标 掌握如何使用 mtype 指令查看 MS-DOS 文件的内容

语法 mtype [-可选参数] 源文件 目标文件

功能说明 mtype指令是mtools工具指令，用来模拟MS-DOS的type指令，显示MS-DOS文件的内容。

参数说明

可选参数及其说明如下：

基础应用

范例459 显示mtype指令的版本信息。

[root@localhost ～]# mtype -V　　//显示版本信息

Mtype version 3.9.10，dated March 2nd，2005

Configured with the following options:enable-xdf disable-vold disable-new-vold

Disable-debug enable-raw-term

[root@localhost ～]#

执行指令“mtype -V”显示指令的版本信息。

4.5.5 vi 指令：文字编辑器

学习目标 了解 vi 编辑器的使用方法

语法 vi [-可选参数] [文件]

功能说明 vi 指令是 Linux 下的文字编辑器。vi 是“Visual interface”的意思，即可视化的文字编辑器。具体内容参照vim指令讲解部分。

4.5.6 wc 指令：计算字数

学习目标 能利用 wc 指令计算文件的字数

语法 wc [-可选参数] [文件]

功能说明 wc 指令可以用来计算指定文件的字节数、字数和行数，如果指令中未指定文件，将从标准输入设备中读取数据。

参数说明 可选参数及其说明如下：

基础应用

范例460 计算指定文件的字节数。

[root@localhost yy]# cat ar　　　　　//显示文件内容

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]# wc -c ar　　　　//计算字节数

109 ar

[root@localhost yy]#

执行指令“wc -c ar”计算文件 ar 的字符数。

范例461 计算指定文件的字数。

[root@localhost yy]# cat ar　　　//显示文件内容

Hello everybody

Hello everyone

How are you

Fine thank you and you

I fine too

Linux

Linux

Linux

Red hat Linux

[root@localhost yy]# wc -w ar　　　//计算字数

21 ar

[root@localhost yy]#

执行指令“wc -w ar”计算文件 ar 的字数。

范例462 从标准输入设备中读取数据计算行数。

[root@localhost yy]# wc -l　　　　//计算行数

The food

In this restaurant

Is out of this world

And don’t

Pad the bill

Like the restaurant

Down the street

7

[root@localhost yy]#

执行指令“wc -l”计算从标准输入设备中读取数据的行数。

范例463 计算从标准输入设备中读取数据的字节数、字数和行数。

[root@localhost ～]# wc　　　　　//计算字节数、字数和行数

I have just returned

from a visit

to my landlord

Mr Hathcliff

I am delighted

with the house

I am renting from him

7 23 115

[root@localhost ～]#

执行指令“wc”显示从标准输入设备中读取数据的字节数、字数和行数。显示的顺序先是行数值为7，再是字数，总共23个单词，最后是字节115个。

实战思考

应用思考

1．使用“wc -c *（*代表已经存在的文件名称）”指令计算文件*的字符数。

2．使用“wc -w *（*代表已经存在的文件名称）”指令显示文件*的单词数。

4.5.7 ext2ed 指令：ext2文件系统编辑

学习目标 了解 ext2ed 指令的用法

语法 ext2ed

功能说明 ext2ed 指令是 red hat Linux 提供的用来处理硬盘分区上数据的指令。如果不是相当熟悉ext2文件的系统结构，建议使用ext2ed指令来修改硬盘分区中的数据。Ext2文件系统中是以块为单位来存储的，通常情况下每个块的大小为默认值1k，不同的块以块号区分，ext2文件系统的结构如下图所示。

基础应用

范例464 ext2文件系统编辑。

[root@localhost root]#ext2ed　　　//文件系统编辑

本例使用指令ext2ed编辑文件系统。

4.5.8 view指令：文字编辑器

学习目标 了解 view 和 vi 指令的关系

语法 view[必要参数][选择性参数][文件]

功能说明 view 指令用来编辑文字文件，连接 vi 指令。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

【进入vi后的指令】

参见vi指令的说明。

基础应用

view指令的执行范例参见vi指令的执行范例。

4.5.9 gedit指令：gnome的文本编辑器

语法 gedit[必要参数][选择性参数][文件]

功能说明 gedit 指令用来编辑文本文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例465 编辑文件。

[root@localhost littleProg]# gedit abc　　//编辑文件

本例使用指令“gedit abc”编辑文件。

4.5.10 nano 指令：文本编辑器

学习目标 了解 nano 指令的基本应用

语法 nano[选择性参数][必要参数][文件]

功能说明 nano 指令是一个以取代 pico 指令为目标的小的、免费的、用户友好的编辑器。不只是复制pico指令的界面，nano指令同时执行一些在pico中没有的功能，如查找、替换和跳转到指定行数的功能。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

【编辑指令】

Ctrl+G：帮助菜单。

Ctrl+X：关闭文件。

Ctrl+O：保存。

Ctrl+R：插入文件。

Ctrl+W：搜索特定的文件。

Ctrl+K：删除一行。

Ctrl+U：回到上一步。

Ctrl+A：移到行的开始处。

Ctrl+E：行的末尾。

Ctrl+D：删除光标所在的字符。

Ctrl+\：替换。

基础应用

范例466 编辑文件。

[root@localhost ～]# nano 123　　　　//编辑文件123

GNU nano 1.3.5-cvs　　　　　　File: 123

a

ab

123

1234

abcde

abcdef

abcdefg

abcdefgh

abcdefghi

abcdefghij

abcdefghijk

abcdefghijkl

[ Read 12 lines ]

^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos

^X Exit　^J Justify ^W Where Is　^V Next Page　^U UnCut Txt　^T To Spell

本例使用指令“nano 123”编辑文件 123。

范例467 直接跳转到指定行进行编辑。

[root@localhost ～]# nano +5 123 //编辑文件 123，光标跳转到第5 行

GNU nano 1.3.5-cvsFile: 123

a

ab

123

1234

abcde

abcdef

abcdefg

abcdefgh

abcdefghi

abcdefghij

abcdefghijk

abcdefghijkl

[ Read 12 lines ]

^G Get Help　^O WriteOut　^R Read File　^Y Prev Page　^K Cut Text　^C Cur Pos

^X Exit　　^J Justify　^W Where Is　^V Next Page　^U UnCut Txt ^T To Spell

本例使用指令“nano +5 123”编辑文件，并且打开文件时直接跳转到第5 行进行编辑，这时光标停留在文件的第5行。

4.5.11 pr 指令：编排文件格式

学习目标 掌握 pr 指令的用法

语法 pr[必要参数][选择性参数][文件]

功能说明 pr 指令对指定的文件进行编排，然后将结果输出到标准输出。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例468 编排文件。

[root@localhost ～]# cat 123　　　//显示文件123的内容

000000　　00000000

111111　　11111111

222222　　22222222

333333　　33333333

444444　　44444444

555555　　55555555

666666　　66666666

777777　　77777777

888888　　88888888

999999　　99999999

[root@localhost ～]# pr 123 > 456　　　//编排文件123

[root@localhost ～]# cat 456　　　//显示文件456的内容

2007-05-27 17:18　　　　　123　　　　　Page 1

000000　　00000000

111111　　11111111

222222　　22222222

333333　　33333333

444444　　44444444

555555　　55555555

666666　　66666666

777777　　77777777

888888　　88888888

999999　　99999999

[root@localhost ～]#

本例使用指令“pr 123 > 456”编排文件 123，将结果重定向到文件 456；并使用指令 cat456显示文件456的内容，显示的结果如上所示。

范例469 设置文件为3栏。

[root@localhost ～]# cat abc　　　　　//显示文件内容

a

ab

abc

abcd

abcde

abcdef

abcdefg

abcdefgh

abcdefghi

abcdefghij

[root@localhost ～]# pr -3 abc>456　　　//编排文件

[root@localhost ～]# cat 456　　　　　//显示文件内容

2007-05-27 09:01　　　　　abc　　　　　Page 1

a　　　　　　abcde　　　　abcdefgh

ab　　　　　abcdef　　　　abcdefghi

abc　　　　　abcdefg　　　　abcdefghij

abcd

[root@localhost ～]#

本例使用指令“pr -3 abc>456”编排文件 abc，分 3 栏显示文件内容，并将结果重定向到文件 456；本例还使用指令 cat 456 显示文件的内容，如上所示。

4.5.12 tail 指令：显示文件的末尾内容

学习目标 学会使用 tail 指令显示文件的末尾部分内容

语法 tail[必要参数][选择性参数][文件]

功能说明 tail 指令用于读取文件的内容，将指定的文件的末尾部分输出到标准输出。不指定文件时，将把标准输入作为输入信息进行处理。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例470 显示文件的末尾内容。

[root@localhost ～]# tail -n 30 install.log //显示文件的末尾内容

GFS-kernel-2.6.11.8-20050601.152643.FC4.2.i586.rpm

GFS-kernel-smp-2.6.11.8-20050601.152643.FC4.2.i686.rpm

GFS-kernel-xen0-2.6.11.8-20050601.152643.FC4.2.i686.rpm

GFS-kernel-xenU-2.6.11.8-20050601.152643.FC4.2.i686.rpm

GFS-kernheaders-2.6.11.8-20050601.152643.FC4.2.i586.rpm

cman-kernel-2.6.11.5-20050601.152643.FC4.2.i586.rpm

cman-kernel-smp-2.6.11.5-20050601.152643.FC4.2.i686.rpm

cman-kernel-xen0-2.6.11.5-20050601.152643.FC4.2.i686.rpm

cman-kernel-xenU-2.6.11.5-20050601.152643.FC4.2.i686.rpm

cman-kernheaders-2.6.11.5-20050601.152643.FC4.2.i586.rpm

dlm-kernel-2.6.11.5-20050601.152643.FC4.2.i586.rpm

dlm-kernel-smp-2.6.11.5-20050601.152643.FC4.2.i686.rpm

dlm-kernel-xen0-2.6.11.5-20050601.152643.FC4.2.i686.rpm

dlm-kernel-xenU-2.6.11.5-20050601.152643.FC4.2.i686.rpm

dlm-kernheaders-2.6.11.5-20050601.152643.FC4.2.i586.rpm

glibc-2.3.5-10.i386.rpm

gnbd-kernel-2.6.11.2-20050420.133124.FC4.35.i586.rpm

gnbd-kernel-smp-2.6.11.2-20050420.133124.FC4.35.i686.rpm

gnbd-kernel-xen0-2.6.11.2-20050420.133124.FC4.35.i686.rpm

gnbd-kernel-xenU-2.6.11.2-20050420.133124.FC4.35.i686.rpm

gnbd-kernheaders-2.6.11.2-20050420.133124.FC4.35.i586.rpm

kernel-2.6.11-1.1369_FC4.i586.rpm

kernel-devel-2.6.11-1.1369_FC4.i586.rpm

kernel-smp-2.6.11-1.1369_FC4.i686.rpm

kernel-smp-devel-2.6.11-1.1369_FC4.i686.rpm

kernel-xen0-2.6.11-1.1369_FC4.i686.rpm

kernel-xen0-devel-2.6.11-1.1369_FC4.i686.rpm

kernel-xenU-2.6.11-1.1369_FC4.i686.rpm

kernel-xenU-devel-2.6.11-1.1369_FC4.i686.rpm

openssl-0.9.7f-7.i386.rpm

[root@localhost ～]#

本例使用指令“tail -n 30 install.log”显示文件 install.log 的末尾 30 行内容。

范例471 显示更新的log文件的末尾内容。

t@localhost:～# tcpdump >&2.log　　//监测tcp流量

本例使用指令“tcpdump >&2.log”检测网络 tcp 流量，并将结果重定向到文件 2.log。这个指令运行在一个单独的终端上。

同时，可以在另一个终端下显示文件内容。

root@localhost:～# tail -f 2.log　　　　//显示文件内容

17:10:42.886082 IP 192.168.88.46.1413 > 202.112.150.121.www: .ack 97401 win 17520

17:10:42.887368 IP 192.168.88.46.1413 > 202.112.150.121.www: .ack 98861 win 17520

17:10:42.923042　IP　192.168.88.46.1408　>　202.112.150.121.www:　P3442022626:3442023397(771) ack 1727122249 win 17520

17:10:42.941150 IP 202.112.150.121.www > 192.168.88.46.1408: P 1:165(164) ack 771 win65535

17:10:42.959328 IP 192.168.88.46.1410 > 202.112.150.121.www: P 1:788(787) ack 1376 win16144

//此处省略了部分结果

17:10:43.514885 IP 192.168.88.2.telnet > 192.168.88.7.1683: .26348:27808(1460) ack 1win 5840

17:10:43.516126 IP 192.168.88.2.telnet > 192.168.88.7.1683: .27808:29268(1460) ack 1win 5840

17:10:43.516383 IP 192.168.88.7.1683 > 192.168.88.2.telnet: .ack 24888 win 17520

17:10:43.517426 IP 192.168.88.2.telnet > 192.168.88.7.1683: .29268:30728(1460) ack 1win 5840

17:10:43.518664 IP 192.168.88.2.telnet > 192.168.88.7.1683: .30728:32188(1460) ack 1win 5840

17:10:43.518919 IP 192.168.88.7.1683 > 192.168.88.2.telnet: .ack 27808 win 17520

17:10:43.519968 IP 192.168.88.2.telnet > 192.168.88.7.1683: .32188:33648(1460) ack 1win 5840

17:10:43.521206 IP 192.168.88.2.telnet > 192.168.88.7.1683: .33648:35108(1460) ack 1win 5840

17:10:43.521461 IP 192.168.88.7

本例使用指令“tail -f 2.log”显示文件 2.log 末尾的内容。因为文件 2.log 是始终更新的，所以通过参数“-f”的指定，tail指令会不断读取文件2.log的内容，不停地将更新的文件末尾的内容发送到标准输出。这在程序调试中非常有用。

范例472 显示多个文件的末尾内容。

root@localhost:～# tail -n 5 *.log　　　//显示文件末尾内容

==> 1.log <==

17:01:27.241870 IP 202.112.146.68.1539 > iplab604.telnet: P 54717045:54717046(1) ack 2552300598 win 65335

1730 packets captured

2797 packets received by filter

1067 packets dropped by kernel

==> 2.log <==

17:12:22.600449 IP 192.168.88.7.1656 > 192.168.88.2.ssh: P 33792 69317:3379269369(52) ack 2677970800 win 16752

6064 packets captured

6226 packets received by filter

162 packets dropped by kernel

==> 7.log <==

17:19:08.600064 IP 192.168.88.2.ssh > 192.168.88.7.1656: P 3993: 4045(52) ack 2860 win8576

17:19:08.620153 arp who-has 211.71.75.1 tell 211.71.75.2

17:19:08.702110 IP 202.112.147.192.netbios-ns > 202.112.147.255.netbios-ns: NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST

17:19:08.709861 IPX 00123456.00:0a:e6:db:d2:fb.4000 > 00000000.ff:ff:ff:ff:ff:ff.0452: ipx-sap-nearest-req FileServer

17:19:08.710769 IP 192.168.88.2.telnet > 192.168.88.root@loca lhost:～#

本例使用指令“tail -n 5 *.log”显示多个文件 1.log，2.log 和 7.log 末尾的内容。

4.5.13 zcat 指令：显示压缩文件的内容

学习目标 能使用 zcat 查看压缩文件的内容

语法 zcat[必要参数][文件]

功能说明 zcat指令用于查看压缩文件的信息，并将压缩文件的信息输出到标准输出设备。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例473 显示压缩文件的内容。

[root@localhost temp]# zcat /usr/share/info/uucp.info-8.gz//显示压缩文件内容

This is uucp.info, produced by makeinfo version 4.1 from uucp.texi.

START-INFO-DIR-ENTRY

* UUCP: (uucp).　　　　Transfer mail and news across phone lines.

END-INFO-DIR-ENTRY

This file documents Taylor UUCP, version 1.07.

Copyright (C) 1992, 1993, 1994, 1995, 2002 Ian Lance Taylor

Permission is granted to make and distribute verbatim copies of this

manual provided the copyright notice and this permission notice are

preserved on all copies.

Permission is granted to copy and distribute modified versions of

this manual under the conditions for verbatim copying, provided also

that the section entitled "Copying" are included exactly as in the

//此处省略了部分结果

* seven-bit in port file:　　　　port File.

* speed in port file:　　　　　port File.

* speed in sys file:　　　　　Placing the Call.

* speed-range:　　　　　　　port File.

* spool:　　　　　　　　Miscellaneous (config).

* statfile:　　　　　　　Log File Names.

* stream:　　　　　　　　port File.

* strip-login:　　　　　　　Miscellaneous (config).

* strip-proto:　　　　　　　Miscellaneous (config).

* sysfile:　　　　　　　　Configuration File Names.

* system:　　　　　　　　Naming the System.

* time:　　　　　　　　When to Call.

* timegrade:　　　　　　　When to Call.

* timetable:　　　　　　　Miscellaneous (config).

* transfer:　　　　　　　File Transfer Control.

* type:　　　　　　　　port File.

* unknown:　　　　　　　　Miscellaneous (config).

* uuname:　　　　　　　　Miscellaneous (config).

* v2-files:　　　　　　　Miscellaneous (config).

* version:　　　　　　　　port File.

[root@localhost temp]#

本例使用指令“zcat /usr/share/info/uucp.info-8.gz”显示/usr/share/info/ uucp.info-8.gz 的内容。由于显示内容较多，中间部分已省略，不影响本例阅读。

第5章 磁盘操作管理

5.1 Linux下的文件系统简介

与其他操作系统一样，在Linux系统下用户的数据和程序也是以文件的形式保存的。所以在使用Linux的过程中，要经常对文件与目录进行操作。

（1）文件名与文件类型

文件名是一个文件的标识。Linux文件命名的规则与Windows下基本相同。它同样是由字母、数字、下画线、圆点组成，最大的长度是255个字符。

与 Windows 9x 一样，Linux 系统中也有普通文件和目录文件，不过目录文件在 Windows中被简称为目录。而在Linux系统中有一种特殊的文件，那就是设备文件。在Linux系统中，把每一个I/O设置都映射成为一个文件，可以像普通文件一样处理，这就使得文件与设备的操作尽可能统一。从用户的角度来说，对I/O设备的使用和一般文件的使用几乎一样，这样就可以不必了解I/O设备的细节。

（2）目录结构

与Windows下一样，在Linux中也是通过目录来组织文件的。但不同的是，在Linux下只有一个根目录，而不像Windows那样一个分区一个根目录。如果有多个分区的话，就需要将其他分区mount到根目录上来用。

大家回忆一下当时为 Linux 分区时，有一个选项要填，那就是 Mount Point，我们将其中一个写成了“/”，也就是根目录（这点与 Windows 相反，一个是“\”，一个是“/”，真是天生冤家）。其他的则可能是/home、/usr。

安装完系统后，你会发现/home、/usr就是根目录下面的home、usr目录。对了，整个分区就用于该目录了。

安装完Linux后有许许多多目录，下面我们就说明一些重要的。

/bin：存放着一百多个Linux下常用的命令、工具。

/dev：存放着Linux下所有的设备文件。

/home：用户主目录，每建一个用户，就会在这里新建一个与用户同名的目录，给该用户一个自己的空间。

/lost+found：顾名思义，一些丢失的文件可能会在这里找到。

/mnt：外部设备的挂接点，通常用cdrom与floppy两个子目录。它的存在简化了光盘与软盘的使用。你只需在塞入光盘后，运行 mount/mnt/cdrom，就可以将光盘上的内容 Mount到/mnt/cdrom 上，然后就可以访问了。不过你使用完成后，应该离开该目录，并执行umount/mnt/cdrom。同样，软盘就是mount/mnt/floppy和umount/mnt/floppy了。

/proc：这其实是一个假的目录，通过这里可以访问到内存里的内容。

/sbin：这里存放着系统级的命令与工具。

/usr：通常用来安装各种软件的地方。

/usr/X11R6 X Window 目录。

/usr/bin与/usr/sbin一些后安装的命令与工具。

/usr/include、/usr/lib 及/usr/share 则是存放一些共享链接库。

/usr/local 常用来安装新软件。

/usr/src Linux 源程序。

/boot：Linux就是从这里启动的。

/etc：这里存放着Linux大部分的配置文件。

/lib：静态链接库。

/root：root用户的主目录，这就是特权之一。

/var：通常用来存放一些变化中的东西。

/var/log：存放系统日志。

/var/spool：存放一些邮件、新闻、打印队列等。

5.2 Linux磁盘管理

5.2.1 badblocks 指令：检查磁盘坏道

学习目标 掌握 Shell 中检查磁盘中损坏区块的方法

语法 badblocks [-可选参数] 磁盘设备 [结束块 [起始块] ]

功能说明 badblocks 指令是磁盘检查命令，在此指令中必须指定将要检查的磁盘设备，而磁盘区块是不必需的。

参数说明 可选参数及其说明如下：

续表

【其他相关参数】

/dev/hd：IDE 磁盘。

/dev/sd：SCSI 磁盘。

/dev/ed：ESDI 磁盘。

/dev/fd：软磁盘。

基础应用

范例474 检测磁盘是否有坏道。

[root@localhost ～]# badblocks /dev/fd0H1440 //检测整个磁盘是否有坏道

执行指令“badblocks /dev/fd0H1440”检测指定磁盘/dev/fd0H1440 是否有坏道。

范例475 检测磁盘的指定区块是否有坏道。

[root@localhost ～]# badblocks –b 1024 /dev/hda1 –o hda-badblocks //检测磁盘是否有坏道

[root@localhost ～]# cat hda-badblocks //查看信息

[root@localhost ～]#

执行指令“badblocks –b 1024 /dev/hda1 –o hda-badblocks”检测指定磁盘/dev/hda1 是否有坏道，同时将检查结果保存到文件hda-badblocks中。如果磁盘存在坏道查看文件将显示列表，如果没检测出坏道则无信息被列出。

5.2.2 cfdisk 指令：磁盘分区

学习目标 掌握应用 cfdisk 对磁盘进行分区的方法

语法 cfdisk [-可选参数] [外围设备代号]

功能说明 cfdisk 指令是磁盘分区程序。它是基于鼠标的具有互动式操作界面的硬盘分区程序。与传统的fdisk相比利用鼠标键来操控分区操作，使整个过程显得更为简单。

参数说明 可选参数及其说明如下：

基础应用

范例476 硬盘分区。

[root@localhost ～]# cfsik　　//进行硬盘分区

执行指令“cfsik”进入图形界面，这时屏幕上会显示系统上所有安装的硬盘，你可以使用上下键来选择希望进行分区的硬盘。

5.2.3 df 指令：磁盘信息

学习目标 了解使用 df 指令检查磁盘文件系统的信息

语法 df [-可选参数] [文件或设备]

功能说明 使用 df 指令查看磁盘空间的信息。指令可以查找指定文件系统的占有情况。如果指令中未指定文件名，将显示当前所有挂载的文件系统的可用空间。默认情况下，磁盘空间将以 1KB 为单位进行显示，除非环境变量 POSIXLY_ CORRECT 被指定，那样的话将以512字节为单位进行显示。

参数说明 可选参数及其说明如下：

续表

基础应用

范例477 输出当前所有挂载的文件系统的可用空间。

[root@localhost ～]# df　　　　　//显示磁盘信息

Filesystem　　　1K-blocks　　used　Available use% Mounted on

/dev/mapper/VolGroupoo-LogVoloo

13077624　　　2493264　9909340　21% /

/dev/hda1　　　101086　　　　11885　83982　13% /boot

tmpfs　　　　257744　　　　　0　257744　0% /dev/shm

/dev/hdc　　　3926368　　　3926368　　0　100% /media/CentOS_5.2_Final

[root@localhost ～]#

执行指令“df”显示当前所有挂载的文件系统的可用空间，其中第一列表示文件系统所在的设备名称和分区；第二列显示的是各个分区的数据大小，以1024作为基本的数据块；第三列表示已用数据块的大小；第四列表示可用数据块的大小，但第三列和第四列的数据块之和不一定等于第二列中的数据块；第五列显示普通用户空间使用的百分比；最后一列给出了文件系统的挂载目录。

范例478 以可读性较高的方式显示信息。

[root@localhost ～]# df　-h　　　　　//显示磁盘信息

Filesystem　　　　Size　　　　　used Avail use% Mounted on

/dev/mapper/VolGroupoo-LogVoloo

13G　　　　2.4G　9.5G　21% /

/dev/hda1　　　99M　　　　　12M　83M　13% /boot

tmpfs　　　　252M　　　　　0　252M　0% /dev/shm

/dev/hdc　　　3.8G　　　　　3.8G　0　100% /media/CentOS_5.2_Final

[root@localhost ～]#

执行指令“df -h” 以可读性较高的方式显示当前所有挂载的文件系统的可用空间。

范例479 显示各文件系统的inode信息。

[root@localhost ～]# df　-ia　　　　　//显示磁盘信息

Filesystem　　　　Inodes　　　IUsed　IFree IUse% Mounted on

/dev/mapper/VolGroupoo-LogVoloo

3375104　　　93445　3281659　3% /

proc　　　　　　0　　　　0　　0　- /proc

sysfs　　　　　　0　　　　0　　0　- /sys

devpts　　　　　　0　　　　0　　0　- /dev/pts

/dev/hda1　　　　26104　　　　34　26070　1% /boot

tmpfs　　　　　64436　　　　1　64435　1% /dev/shm

none　　　　　　0　　　　0　　0　- /proc/sys

fs/binfmt_misc

sunrpc　　　　　　0　　　　0　　0　- /var/lib/

nfs/rpc_pipefs

/dev/hdc　　　　　0　　　　0　　0　- /media/

CentOS_5.2_Final

[root@localhost ～]#

执行指令“df –ia”显示各文件系统的全部 inode 信息。

范例480 显示文件系统的信息。

[root@localhost ～]# df -t ext2　　　//显示磁盘信息

Filesystem　　　1K-blocks　　　used　Available use% Mounted on

[root@localhost ～]#

执行指令“df -t ext2”显示当前磁盘的文件系统的信息。

5.2.4 eject指令：退出抽取式设备

学习目标 了解使用 eject 指令弹出光盘的方法

语法 eject [-可选参数] [设备]

功能说明 使用 eject 指令对已挂载的设备进行操作。

参数说明 可选参数及其说明如下：

续表

基础应用

范例481 退出光盘。

[root@localhost ～]# eject　/mnt/cdrom　　//退出光盘

[root@localhost ～]#

执行指令“eject /mnt/cdrom”退出光盘。

范例482 插入光盘。

[root@localhost ～]# eject　/mnt/cdrom　　//插入光盘

[root@localhost ～]#

执行指令“eject -t /mnt/cdrom” 插入光盘。

5.2.5 du 指令：显示目录或者文件所占的磁盘空间

学习目标 了解使用 du 指令查看目录或文件大小的方法

语法 du [-可选参数] [目录/文件]

功能说明 du指令能显示指定目录或文件的磁盘空间使用情况。如果指令中未指定目录或文件，将显示当前目录的磁盘占用情况。

参数说明 可选参数及其说明如下：

续表

基础应用

范例483 显示当前目录所占用的磁盘空间。

[root@localhost yy]# du　　//显示当前目录所占用的磁盘空间

8　　/home/yy/。mozilla/extensions

8　　/home/yy/。mozilla/plugins

24　/home/yy/。mozilla

400　。

[root@localhost yy]#

执行指令“du” 显示当前目录所占用的磁盘空间。

范例484 显示指定文件占用的磁盘空间。

[root@localhost ～]# du ax　　　//显示指定文件占用的磁盘空间

8　　ax

[root@localhost ～]# du cop1 zt a1.txt.bak s1.tar　//显示指定多个文件占用的磁盘空间

8　　cop1

16　zt

8　　a1.txt.bak

16　s1.tar

[root@localhost ～]#

执行指令“du ax”和指令“du cop1 zt a1.txt.bak s1.tar”分别显示指定文件 ax 和文件 cop1、zt、a1.txt.bak、s1.tar占用的磁盘空间。

5.2.6 fdisk 指令：Linux 磁盘分区

学习目标 掌握使用 fdisk 指令对磁盘进行分区的方法

语法 fdisk [-可选参数] 设备名称

功能说明 fdisk 指令是 Linux 下管理分区的程序。应用该程序不仅可以创建磁盘分区，还可以对磁盘进行维护，改变分区类型。

参数说明 可选参数及其说明如下：

【fdisk程序指令】

a：设置/删除可引导分区标记。

d：删除指定分区。

l：列出分区类型。

m：显示 fdisk 程序指令。

n：新建分区。

p：列出当前分区信息。

q：退出 fdisk 分区，对更改不保存。

t：改变分区 ID。

v：检测当前分区信息。

w：退出 fdisk 分区，保存更改。

基础应用

范例485 显示本地磁盘的分区表。

[root@localhost ～]# fdisk -l　　　//显示当前磁盘的情况

Disk /dev/hda: 15.0 GB, 15032385536 bytes

255 heads, 63 sectors/track, 1827 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot　　Start　　End　　Blocks　Id　System

/dev/hda1　*　　1　　13　　104391+　83　Linux

/dev/hda2　　　14　　78　　522112　　82　Linux swap

/dev/hda3　　　79　　1827　　14048843+　83　Linux

[root@localhost ～]#

执行指令“fdisk –l”显示本地磁盘上的分区表。其中 id 代表的是分区类型，‘83’是 Linux文件系统正确的分区类型，‘82’是 Linux swap 分区的正确类型。

范例486 对系统中的新硬盘进行配置。

[root@localhost ～]# fdisk /dev/hdb　　　//进入fdisk程序

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel.Changes will remain in memory only,

until you decide to write them.After that, of course, the previous

content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n

Command action

e　extended

p　primary partition(1-4)

p

Partition number (1-4)：2

First cylinder (1-512，default 1)：1

Last cylinder or +size or +sizeM or +sizeK (1-512，default 512)：+100M

Command (m for help): m

a　toggle a bootable flag

b　edit bsd disklabel

c　toggle the dos compatibility flag

d　delete a partition

l　list known partition types

m　print this menu

n　add a new partition

o　create a new empty DOS partition table

p　print the partition table

q　quit without saving changes

s　create a new empty Sun disklabel

t　change a partition's system id

u　change display/entry units

v　verify the partition table

w　write table to disk and exit

x　extra functionality

Command (m for help): p

Disk /dev/hdb: 15.0 GB, 15032385536 bytes

255 heads, 63 sectors/track, 1827 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot　　Start　　End　　Blocks　Id　System

/dev/hdb1　　　1　　　13　　104391+　83　Linux

/dev/hda2　　　14　　1827　14570955　8e　Linux LVM

Command (m for help): w

[root@localhost ～]#

执行指令“fdisk /dev/hdb”对系统中的新硬盘进行配置，进入 fdisk 程序。在 Command (m for help): 后输入 fdisk 程序指令。

5.2.7 hdparm指令：显示和设定硬盘参数

学习目标 通过 hdparm 指令提供的相关功能来显示和设置 IDE 或 SCSI 硬盘的参数

语法 hdparm [-可选参数] [设备]

功能说明 hdparm 指令为我们提供了一个通过命令行接口来显示和设置硬盘参数的方法，使工作变得更为简便。但该指令在早期的Linux内核下有些功能不能正常运行，用户要想使用该指令则需将自己的Linux内核版本升级到1.2.13或更高的版本。

参数说明 可选参数及其说明如下：

基础应用

范例487 显示硬盘参数。

[root@localhost ～]# hdparm -g /dev/hda　　//显示硬盘参数

/dev/hda:

geometry = 31068/15/63，sectors = 29360128，start = 0

[root@localhost ～]#

执行指令“hdparm -g /dev/hda”显示/dev/hda 硬盘的磁轨、磁头、磁区等参数。

范例488 显示硬盘参数。

[root@localhost ～]# hdparm –v /dev/hda　　//显示硬盘参数

/dev/hda:

mulctount = 64 （on）

Io_support = 0 （default 16-bit）

unmaskirq = 0 （off）

using_dma = 1 （on）

keepsettings = 0 （off）

readonly = 0 （off）

readahead = 256 （on）

geometry = 31068/15/63，sectors = 29360128，start = 0

[root@localhost ～]#

执行指令“hdparm -v /dev/hda”显示/dev/hda 硬盘的所有相关参数。

5.2.8 mkswap 指令：设置交换区

学习目标 能使用 mkswap 指令在文件或者设备上设置交换区

语法 mkswap [-可选参数] 设备 [区块大小]

功能说明 mkswap 指令可将磁盘设备或文件设置为 Linux 的交换区。在建立完交换区之后，要使用swapon指令开启swap。

参数说明 可选参数及其说明如下：

基础应用

范例489 设置交换区。

[root@localhost ～]# mkswap -L spnn /dev/hdb1

执行指令“mkswap –L spnn /dev/hdb1”设置交换区，同时指定一个供swapon使用的标签。

5.2.9 sfdisk 指令：硬盘分区工具程序

学习目标 学会应用 sfdisk 指令进行分区和该指令的相关操作

语法 sfdisk [-可选参数] 设备号

功能说明 sfdisk 指令不仅可以作为硬盘的分区工具，同时还能显示硬盘上的分区设置信息，以及对硬盘设备的分区进行检查。如果用户对现有的硬盘分区不太满意，还可以使用该指令对自己的硬盘进行重分区。

参数说明 可选参数的具体说明如下：

基础应用

范例490 显示分区信息。

[root@localhost ～]# sfdisk -l　　　　　//显示磁盘的分区信息

Disk /dev/sda: 1044 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting

from 0

Device Boot Start　End　#cyls　#blocks　Id　System

/dev/sda1　*　0+　12　13-　104391　83　Linux

/dev/sda2　　13　1826　1814　14570955　8e　Linux LVM

/dev/sda3　　0　　-　　0　　0　0　Empty

/dev/sda4　　0　　-　　0　　0　0　Empty

[root@localhost zx]# fdisk -d　　　　//显示磁盘的分区信息

# partition table of /dev/had

unit: sectors

/dev/sda1　:　start =　　63, size =　208782, Id = 83, bootable

/dev/sda2　:　start =　208845, size = 29141910, Id = 8e

/dev/sda3　:　start =　　0, size =　　0, Id =　0

/dev/sda4　:　start =　　0, size =　　0, Id =　0

[root@localhost ～]#

执行指令“sfdisk –l”和“sfdisk -d”，以不同的形式显示磁盘的分区信息。

5.2.10 losetup指令：设置循环

学习目标 能使用 losetup 指令卸除/设置循环设备

语法 losetup [-可选参数] 文件

功能说明 losetup 指令可用来循环设备，通过把文件虚拟成区块设备来模拟整个文件系统，用户可以将其视为设备挂载到指定的目录下来使用。

参数说明 可选参数及其说明如下：

基础应用

范例491 卸除循环设备。

[root@localhost ～]# losetup /dev/loop2

执行指令“losetup /dev/loop2”停止设备 /dev/loop2。

实战思考

应用思考

使用指令losetup将指定文件虚拟化为设备，同时指定设备号和加密编码文件，然后按照设备的形式对其进行操作。

5.2.11 mbadblocks 指令：检查MS-DOS 文件系统的磁盘是否有损坏的磁区

学习目标 了解 mbadblocks 指令检查 MS-DOS 文件系统的磁盘是否损坏的方法

语法 mbadblocks [-V] 设备号

功能说明 mbadblocks 是 mtools 工具指令，使用该指令可对 MS-DOS 文件系统的磁盘驱动器进行检查，然后标示出损坏的磁区。

参数说明 可选参数及其说明如下：

基础应用

范例492 磁盘检查。

[root@localhost ～]# mbadblocks device

执行指令“mbadblocks device” 进行磁盘检查。

5.2.12 mcd指令：在MS-DOS 文件系统中切换工作目录

学习目标 学会在 MS-DOS 文件系统中切换工作目录

语法 mcd [目录名]

功能说明 mcd 是 mtools 工具指令，使用该指令可在 MS-DOS 文件系统中进行工作目录切换。若直接输入指令，则显示当前所在磁盘与工作目录。

基础应用

范例493 显示当前工作目录。

[root@localhost ～]# mcd

A:

[root@localhost ～]#

执行指令“mcd” 显示当前工作目录。Mcd 命令或不跟参数时将回传当前目录。

5.2.13 mdeltree 指令：删除MS-DOS 目录/文件

学习目标 了解删除 MS-DOS 目录/文件的方法

语法 mdeltree [-v] [目录/文件]

功能说明 mdeltree 是 mtools 工具指令，使用 deltree 指令可删除 MS-DOS 文件系统中的目录及目录下所有子目录与文件。

参数说明 可选参数及其说明如下：

基础应用

范例494 删除MS-DOS文件。

[root@localhost ～]# mdeltree msdosfile

执行指令“mdeltree msdosfile” 删除 MS-DOS 文件 msdosfile。

5.2.14 mdu 指令：显示 MS-DOS 目录所占用的磁盘空间

学习目标 了解 mdu 指令查看 MS-DOS 目录所占用的磁盘空间的方法

语法 mdu [-可选参数] [目录]

功能说明 mdu 是 mstools 工具指令，执行 mdu 指令显示 MS-DOS 文件系统中目录所占用的磁盘空间。

参数说明 可选参数及其说明如下：

基础应用

范例495 显示D盘中文件目录所占用的磁盘空间。

[root@localhost ～]# mdu –a D:

5.2.15 mformat 指令：对 MS-DOS 文件系统的磁盘进行格式化

学习目标 能使用 mformat 对 MS-DOS 文件系统的磁盘进行格式化

语法 mformat [-可选参数] [驱动器代号]

功能说明 mformat 是 mtools 工具指令，执行 mformat 指令可将指定的磁盘分区格式化为MS-DOS文件系统。

参数说明 可选参数及其说明如下：

续表

基础应用

范例496 磁盘格式化。

[root@localhost ～]# mformat /dev/fd0

执行指令“mformat /dev/fd0” 格式化磁盘。

5.2.16 mkbootdisk 指令：建立目前系统的启动盘

学习目标 学会运用指令 mkbootdisk 建立目前系统的启动盘

语法 mkbootdisk [-可选参数] 内核版本

功能说明 在系统安装完成后使用 mkbootdisk 指令可制作一张当前 Linux 系统的启动盘。在制作启动盘前，必须了解当前系统的内核版本。

参数说明 可选参数及其说明如下：

续表

基础应用

范例497 制作当前系统的启动盘。

[root@localhost ～]# mkbootdisk -–device /dev/fd0 2.6.26-1

执行指令“mkbootdisk -–device /dev/fd0 2.6.26-1” 制作当前系统的启动盘。

5.3 Linux文件和目录操作

5.3.1 cd 指令：切换目录

学习目标 能进行命令行方式下的目录切换

语法 cd [目标目录]

功能说明 cd 指令可以切换当前目录到指定目录，但要求用户拥有该目录的权限。与DOS下的cd指令相比它们的用法和意思几乎完全相同，但DOS下的cd是“”，而Linux下是“/”。而且与DOS下的cd与“\”可以直接相接相比，在Linux系统下cd与“/”之间必须要有空格，否则系统会提示出错。

基础应用

范例498 切换到根目录。

[root@localhost /]# pwd　　　//显示当前目录

/

[root@localhost ～]# cd /root　　//切换到根目录

[root@localhost ～]# pwd　　　//显示当前目录

/root

[root@localhost ～]#

执行指令“cd /root” 切换当前目录到/root 根目录，cd /是切换到主目录而不是根目录。

范例499 切换到指定目录。

[root@localhost ～]# cd /usr/bin　//切换目录到/usr/bin

[root@localhost bin]# pwd　　　//显示当前目录

/usr/bin

[root@localhost bin]# cd /root　　//切换到根目录

[root@localhost ～]#

执行两次目录切换，第一次从根目录切换到指定目录/usr/bin，第二次从目录/usr/bin下切换回根目录。

范例500 切换到上层目录。

[root@localhost bin]# pwd　　　//显示当前目录

/usr/bin

[root@localhost bin]# cd ..　　//返回上层目录

[root@localhost usr]# pwd　　　//显示当前目录/

/usr

[root@localhost usr]#cd ..　　　//返回上层目录

[root@localhost ～]#

执行两次指令“cd ..”最终返回到根目录/root 下。

5.3.2 dd 指令：转换复制文件

学习目标 学会使用 dd 指令进行文件复制

语法 dd [-可选参数]

功能说明 dd 指令可复制指定输入文件到指定的输出文件或设备，并根据指定的转换在复制过程中进行格式转换。如果指令未指定输入文件，将从标准输入中读取数据。

参数说明 可选参数及其说明如下：

【文件转换关键字】

ASCII：把 EBCDIC 码转换成 ASCII 码。

ebcdic：把 ASCII 码转换成 EBCDIC 码。

ibm：把 ASCII 码转换成 alternate EBCDIC 码。

block：把变动位转换成固定的字符。

ublock：把固定位转换成变动位。

ucase：把小写字母转换成大写字母。

lcase：把大写字母转换成小写字母。

swab：交换每一对输入字节。

noerror：不因出错而停止处理。

基础应用

范例501 复制指定的输入文件到输出文件。

[root@localhost ～]# dd if=/root/anaconda-ks.cfg of=/home/yy/ar　　//复制文件

2+1 recoders in

2+1 recoders out

1159 bytes (1.2 KB) copied, 0.0007734 seconds, 1.5MB/s

[root@localhost ～]#

执行指令“dd if=/root/anaconda-ks.cfg of=/home/yy/ar”，复制文件/root/anaconda-ks.cfg 到指定路径的文件ar中。

范例502 在文件复制过程中指定输入/输出字节数。

[root@localhost ～]# dd if=/root/anaconda-ks.cfg of=/home/yy/arbs=128　　//复制文件

9+1 recoders in

9+1 recoders out

1159 bytes (1.2 KB) copied, 0.000451001 seconds, 2.6MB/s

[root@localhost ～]#

执行指令“dd if=/root/anaconda-ks.cfg of=/home/yy/ar”并指定文件复制过程中的输入/输出字节数。

范例503 在文件复制过程中指定文件转换格式。

[root@localhost yy]# cat a1

Hello everyone

Hello everybody

How are you

Fine thank you and you

I fine too

Linux

Red hat Linux

[root@localhost yy]# dd if=a1 of=cop1 conv=swab　　//复制文件

0+1 recoders in

0+1 recoders out

98 bytes (98 B) copied, 0.000255707 seconds, 383MB/s

[root@localhost yy]# cat a1

eHll overeoyenh

leole evyrobydh

woa ery uo

ifent ahkny uoa dny uoi

f ni eot

oilun

xer dah tilun

x

[root@localhost yy]#

执行指令“dd if=a1 of=cop1 conv=swab” 复制文件，同时转换文件的格式。

5.3.3 chroot 指令：改变根目录

学习目标 能把根目录更换成用户指定的目录

语法 chroot[-可选参数] 目录 [执行指令]

功能说明 chroot 指令可以用来改变操作系统当前用户的根目录环境，但要求用户指定的新的根目录下必须拥有操作系统的必要文件和结构。使用chroot指令可以对登录本系统的用户进行限制，同时也可以增加系统的安全性。

参数说明 可选参数及其说明如下：

基础应用

范例504 改变用户的根目录。

[root@localhost ～]#chroot /home/mn　　//改变根目录

执行指令“chroot /home/mn”改变用户的根目录后，等用户再登录时，系统默认的根目录将是/home/mn。

5.3.4 mdir 指令：显示 MS-DOS 目录

学习目标 能使用 mdir 指令显示 MS-DOS 目录

语法 mdir [-可选参数] 目录

功能说明 运行 mdir 指令将显示指定的 MS-DOS 文件系统中目录下的内容，mdir 指令是mtools工具指令。

参数说明 可选参数及其说明如下：

基础应用

范例505 显示MS-DOS目录。

[root@localhost ～]#mdir -w dosdirectory　　//以横排方式显示MS-DOS目录

运行指令“mdir - w dosdir”，以横排方式显示 MS-DOS 目录下的文件和子目录名称。

5.3.5 dirname 指令：显示文件除名字外的路径

学习目标 能使用 dirname 指令显示路径

语法 dirname[选择性参数][路径]

功能说明 dirname 指令打印出指定路径除了名字之外的路径前缀。

参数说明 选择性参数的具体说明如下：

基础应用

范例506 显示文件指定路径除了名字之外的路径前缀。

[root@localhost ～]# dirname /home/kk/a.c //显示除了名字之外的路径前缀

/home/kk

[root@localhost ～]#

本例使用指令“dirname /home/kk/a.c”显示路径/home/kk/a.c 中除了文件名字 a.c 的路径前缀，也就是/home/kk，如上所示。

5.3.6 dirs 指令：显示目录信息

学习目标 了解 dir 显示目录信息的方法

语法 dirs [-可选参数]

功能说明 dirs指令用来显示当前目录的相关信息。Dirs –l指令与 pwd指令的功能相同，显示当前目录的完整路径。

参数说明 可选参数及其说明如下：

基础应用

范例507 显示当前目录信息。

[root@localhost ～]# dirs　　　//显示堆栈中的记录

～

[root@localhost ～]# dirs –l

/root

执行指令“dirs”显示目录堆栈中的记录，指令“dirs –l”显示的是目录的完整路径。

5.3.7 ls 指令：列出目录内容

学习目标 能使用 ls 指令查看目录内容

语法 ls [-可选参数] [目录]

功能说明 ls 指令可显示指定目录的内容，包括文件和子目录的名称。如果指令中未指定目录名，则显示当前目录的信息。

参数说明 可选参数及其说明如下：

续表

基础应用

范例508 每列只显示一个文件或目录名称。

[root@localhost ～]# ls -1

=

123

a1

anaconda-ks.cfg

Desktop

had-bad-list

install.log

[root@localhost ～]#

执行指令“ls -1” 以每列只显示一个文件或目录名的方式，显示当前目录下的文件和子目录名。

范例509 显示文件或目录的详细信息。

[root@localhost ～]# ls –l

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 =

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 123

-rw-r--r--　1 root　　root　　132　11-29 09:35 a1

-rw-r--r--　1 root　　root　　1822　01-11 16:51 anaconda-ks.cfg

drwxr-xr-r　3 root　　root　　4096　01-11 15:52 Desktop

-rw-r--r--　1 root　　root　　1822　01-11 16:51 had-bad-list

-rw-r--r--　1 root　　root　　4096　01-11 15:52 install.log

[root@localhost ～]# ll

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 =

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 123

-rw-r--r--　1 root　　root　　132　11-29 09:35 a1

-rw-r--r--　1 root　　root　　1822　01-11 16:51 anaconda-ks.cfg

drwxr-xr-r　1 root　　root　　4096　01-11 15:52 Desktop

-rw-r--r--　1 root　　root　　1822　01-11 16:51 had-bad-list

-rw-r--r--　1 root　　root　　4096　01-11 15:52 install.log

[root@localhost ～]#

执行指令“ls -1”显示当前目录下的文件和子目录的详细信息，从范例中可以看出指令“ls -1”和“l1”的执行效果相同。

范例510 将列表输出到指定文件。

[root@localhost ～]# cat a2

A1

A1

[root@localhost ～]# ll > a2

[root@localhost ～]# cat a2

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 =

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 123

-rw-r--r--　1 root　　root　　132　11-29 09:35 a1

-rw-r--r--　1 root　　root　　1822　01-11 16:51 anaconda-ks.cfg

drwxr-xr-r　1 root　　root　　4096　01-11 15:52 Desktop

-rw-r--r--　1 root　　root　　1822　01-11 16:51 had-bad-list

-rw-r--r--　1 root　　root　　4096　01-11 15:52 install.log

[root@localhost ～]# ll >> a2

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 =

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 123

-rw-r--r--　1 root　　root　　132　11-29 09:35 a1

-rw-r--r--　1 root　　root　　1822　01-11 16:51 anaconda-ks.cfg

drwxr-xr-r　1 root　　root　　4096　01-11 15:52 Desktop

-rw-r--r--　1 root　　root　　1822　01-11 16:51 had-bad-list

-rw-r--r--　1 root　　root　　4096　01-11 15:52 install.log

total 120

-rw-r--r--　1 root　　root　　　　28　11-29 09:27 =

-rw-r--r--　1 root　　root　　　　38　11-29 09:30 123

-rw-r--r--　1 root　　root　　132　11-29 09:35 a1

-rw-r--r--　1 root　　root　　1822　01-11 16:51 anaconda-ks.cfg

drwxr-xr-r　1 root　　root　　4096　01-11 15:52 Desktop

-rw-r--r--　1 root　　root　　1822　01-11 16:51 had-bad-list

-rw-r--r--　1 root　　root　　4096　01-11 15:52 install.log

[root@localhost ～]#

执行指令“ll >a2”将结果保存到文件 a2 中，然后执行指令“ll >>a2”将结果保存到文件a2的末尾。在上述指令中使用了Shell中的两个特殊字符。

【Shell的特殊字符】

通配符：

*：代表任意字符串。

？：代表单个字符。

[]：代表指定的字符范围，连续字符用连字符“-” ：如[ac-ek]，表示 acdek。

输入/输出重定向：

>：将指令执行结果输出到指定文件，如文件已存在，覆盖原文件内容，或重定向输出设备。

>>：将指令执行结果追加到指定文件的后面。

<：以指定文件的内容作为输入。

其他：

单引号：不处理任何变量和命令。

双引号：只处理变量，不处理命令。

反引号：命令处理。

5.3.8 mkdir 指令：建立目录

学习目标 建立目录

语法 mkdir [-可选参数] 目录名

功能说明 mkdir 指令建立目录时，只有当指定的目录不存在才创建它。使用 mkdir 指令不仅能建立目录，同时还能设置该目录的权限。

参数说明 可选参数及其说明如下：

基础应用

范例511 创建一个新目录，同时指定目录的属性。

[root@localhost ～]# mkdir -m a=r wx

[root@localhost ～]# ll wx

dr--r--r--　2 root　　root　　4096　11-29 09:27 wx

[root@localhost ～]#

执行指令“mkdir -m a=r wx”创建一个新目录 wx，同时指定目录的属性。

5.3.9 mlabel指令：显示/设置MS-DOS磁盘驱动器的标签名称

学习目标 能使用 mlabel 指令显示/设置 MS-DOS 磁盘驱动器的标签名称

语法 mlabel [-可选参数] 驱动器号 [标签名]

功能说明 mlabel 指令是 mtools 工具指令，使用该指令可显示或设置指定 MS-DOS 磁盘驱动器的标签名称。

参数说明 可选参数及其说明如下：

基础应用

范例512 删除磁盘驱动器的标签名。

[root@localhost ～]# mlabel -c /dev/cd-rom

执行指令“mlabel –c /dev/cd-rom” 删除磁盘驱动器/dev/cd-rom 的标签名。

5.3.10 mmd指令：在MS-DOS文件系统中建立目录

学习目标 能使用 mmd 指令在 MS-DOS 文件系统中建立目录

语法 mmd [目录...]

功能说明 mmd 指令是 mtools 工具指令，使用该指令可在 MS-DOS 的文件系统中建立目录。

基础应用

范例513 创建目录。

[root@localhost ～]# mmd c：/mydev

执行命令“mmd C:/mydev”将在磁盘中创建一个 mydev 目录。

范例514 创建多个目录。

[root@localhost ～]# mmd c：/mydev c:/mytest

执行命令“mmd C:/mydev C:/mytest”将在磁盘中创建目录 mydev 和目录 mytest。

5.3.11 mmount指令：挂载MS-DOS文件系统

学习目标 能使用 mmount 指令挂载 MS-DOS 文件系统

语法 mmount [驱动器代号] [mount 参数]

功能说明 mmount 指令是 mtools 工具指令，可将 MS-DOS 文件系统挂载到 Linux 目录中。具体应用方法与mount指令相同。

5.3.12 mpartition指令：建立/删除MS-DOS的分区

学习目标 了解 mpartition 指令建立/删除磁盘分区的方法

语法 mpartition [-可选参数] 驱动器代号

功能说明 mpartition 指令是 mtools 工具指令，使用该指令可建立或删除 MS-DOS 的磁盘分区。

参数说明 可选参数及其说明如下：

基础应用

范例515 创建分区。

[root@yingzheng ～]# mpartition –c c：

执行指令“mpartition –c c：”创建分区。

5.3.13 mrd指令：删除MS-DOS文件系统中的目录

学习目标 能使用 mrd 指令删除 MS-DOS 文件系统中的目录

语法 mrd [目录...]

功能说明 mrd 指令是 mtools 工具指令，与 mmd 指令是一对，使用 mrd 指令可删除MS-DOS的目录。

基础应用

范例516 删除指定目录。

[root@yingzheng ～]# mrd c：/mytest

5.3.14 pwd指令：显示工作目录

学习目标 了解 pwd 指令显示当前工作目录的方法

语法 pwd [-可选参数]

功能说明 pwd 指令可以用来获得用户当前所在目录的绝对路径。

参数说明 可选参数及其说明如下：

基础应用

范例517 显示当前工作目录的绝对路径。

[root@localhost yy]# pwd　　　　　//显示当前目录的绝对路径

/home/yy

[root@localhost ～]#

执行指令“pwd”查看用户当前所在目录的绝对路径。

5.3.15 restore 指令：还原dump操作备份文件

学习目标 了解还原 dump 备份文件的方法

语法 restore 必要参数 [-可选参数]

功能说明 使用 restore 指令可对已作过备份的文件进行恢复，这样就可以在源文件损坏时对其进行恢复。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

基础应用

范例518 从驱动器A中的备份文件恢复源文件。

[root@localhost ～]# restore A：C：/home/mary　　　　　//恢复源文件

执行指令“restore A：C：/home/mary”利用备份文件恢复源文件。

范例519 数据恢复。

[root@localhost ～]# restore –r –f /home/mary/dcp

执行指令“restore –r –f /home/mary/dcp” 恢复数据。

5.3.16 lndir 指令：连接目录内容

学习目标 使用 lndir 指令建立源目录下文件和子目录的符号链接

语法 lndir [-可选参数] 源目录 [目标目录]

功能说明 执行 lndir 指令将在指定目标目录中建立与源目录下文件和子目录相对应的符号链接。如果没有指定的目标目录，则在当前目录中建立符号链接。在该指令中源目录必须使用绝对路径。

参数说明 可选参数及其说明如下：

基础应用

范例520 在指定目录中建立源目录下文件和子目录的符号链接。

[root@localhost yy]# lndir /home/yy/prog-c ab

/home/yy/prog-c/work.txt:

/home/yy/prog-c/project:

/home/yy/prog-c/project/src:

/home/yy/prog-c/project/src/user:

/home/yy/prog-c/project/src/user/class-def:

/home/yy/prog-c/project/src/user/can:

/home/yy/prog-c/project/src/user/can/can.c:

/home/yy/prog-c/project/src/user/can/can.h:

[root@localhost yy]#

执行指令“lndir /home/yy/prog-c ab”，在指定目标目录 ab 中建立与源目录/home/yy/prog-c下文件和子目录相对应的符号链接。

5.3.17 rmdir 指令：删除目录

学习目标 了解 Shell 指令的目录删除方法

语法 rmdir [-可选参数] 目录

功能说明 rmdir 指令的功能与 rm 指令类似，但 rmdir 指令只能删除一个空目录。如果指定的删除目录的内容不为空，则显示错误信息。

参数说明 可选参数的具体说明如下：

基础应用

范例521 删除目录。

[root@localhost zx]# pwd　　　　　//显示路径

/home/mary/test/zx

[root@localhost zx]# ll　　　　　　//显示目录内容

total 0

[root@localhost zx]# cd ..　　　　　//返回上层目录

[root@localhost test]# ll　　　　　//返回上层目录

total 8

drwxr-xr-x　2　root　root　4096　jan　19　11:17　zx

[root@localhost test]# rmdir –p /home/yy/test/zx

[root@localhost test]# cd ..　　　　//返回上层目录

[root@localhost yy]# ll

total 352

-rw-r--r--　1 root root　2　jan 4 2008 11

-rw-------　1 root root　72　jan 2 2008 a1.txt

-rw-------　1 root root　63　jan 2 2008 a1.txt

-rw-------　1 root root　162　jan 2 2008 a2.txt

-rw-r--r--　1 root root　97　jan 2 2008 a.c

-rw-r--r--　1 root root　67520　jan 2 2008 14:53 b1

drwxr-xr-x　2 root root　4096　jan 2 2008 Desktop

-rw-r--r--　1 root root　71488　jan 1 2008 16:10 sr.tar

-rw-r--r--　1 root root　142　jan 2 2008 09:11 tt.c

[root@localhost yy]#

执行指令“rmdir –p /home/yy/test/zx”，删除空目录 zx 的同时删除除了 zx 之外同样为空的目录test。

5.3.18 tree 指令：以树状图显示目录内容

学习目标 掌握使用 tree 指令以树状图显示目录的内容

语法 tree [-可选参数] [目录]

功能说明 使用 tree 指令可显示指定目录下以及子目录下的所有文件。

参数说明 可选参数的具体说明如下：

续表

基础应用

范例522 显示目录树。

[root@localhost ～]# tree　　　　　　//显示目录树

。

|-- 123

|-- 11

|-- =

|-- Desktop

|　|-- new file。txt

|　|-- new file。txt ～

|　|-- yy

|　　|-- 17:00

|　　|-- a1.txt

|　　|-- a2.txt

|　　|-- ar.txt

|　　|-- tv

|　　　|-- abs

|　　　|-- bbs

|　　　|-- cbs

|　　　|-- cnn

|　　　|-- kbs

|　　　|-- sbs

|　|-- men -> ./grub

|　|-- initrd-2.6.11-1.1369_FC4.img

|-- install.log

|-- install.log.new

|-- install.log.syslog

|-- lib

|-- lib.a

|-- lib.new

|-- lost+found

|-- memtest86+-1.55.1

|-- nc

|-- nohup.out

|-- restoresymtable

|-- sushi

|-- System.map-2.6.11-1.1369_FC4

|-- abc

|-- anaconda-ks.cfg

|-- config-2.6.11-1.1369_FC4

|-- temp

|-- vmlinuz-2.6.11-1.1369_FC4

|-- wc

|-- work

5 directories, 56 files

[root@localhost ～]#

执行指令“tree”显示当前目录的目录树。

5.4 Linux文件系统管理

5.4.1 automount 指令：为 auto 文件系统配置挂载点

学习目标 了解指令的执行和挂载文件系统的方法

语法 automount [-可选参数] [挂载点映射类型[格式]映射[映射参数] ]

功能说明 automount 指令可以为 auto 文件系统配置挂载点。文件系统指的是文件存在的物理空间，在Linux系统中，我们把每个分区看作一个文件系统。而每个文件系统又有不同的目录结构，要想得到Linux文件系统总的目录结构，就需要通过挂载这些不同的分区即文件系统来实现。简而言之，就是将一个文件系统的顶层目录挂到一个文件系统的子目录上，使之成为一个整体的过程就是挂载。子目录就是所谓的挂载点，而且这个挂载点必须是一个目录，可以为空也可以不为空，但挂载后目录下以往的内容将不可用。automount指令和mount指令一样都不能建立挂载点，所以要求给出的挂载点一定是已经存在的目录名。

参数说明 可选参数及其说明如下：

续表

【其他相关参数】

文件：映射一个通常的文字文件。

程序：映射一个可执行的程序。

yp：映射一个 NIS（YP）数据库。

nisplus：映射一个 NIS+数据库。

hesiod：映射一个 hesiod 数据库。

ldap：映射一个 ldap 参数。

格式：映射数据的格式。

映射：使用的映射文件的位置信息。

映射参数：所有不使用“-”选项的指令将被看作“-o”参数来挂载。

基础应用

范例523 直接输入命令。

[root@localhost ～]# automount

automount：programme is already running

[root@localhost ～]#

执行指令“automount”显示程序已经运行。

范例524 设置超时时间。

[root@localhost ～]#automount -t 9//设置超时时间

[root@localhost ～]#

执行指令“automount -t 9”设置超时时间。

5.4.2 e2fsck 指令：检查 ext2 文件系统

学习目标 学会检查和修复指定的文件系统

语法 e2fsck [-可选参数] 磁盘

功能说明 e2fsck 指令可检查 ext2 文件系统的正确与否。

参数说明 可选参数及其说明如下：

【e2fsck执行的返回值】

0：没有发生任何错误。

1：文件系统发生错误，并已修正。

2：文件系统发生错误，并已修正。

4：文件系统发生错误，未修正。

8：运作时发生错误。

16：语法错误。

128：共享函数库发生错误。

基础应用

范例525 检查磁盘。

[root@localhost ～]# e2fsck /dev/hdb　　　//检查磁盘

执行指令“e2fsck /dev/hdb”检查 ext2 文件系统，并执行默认的处理信息。

5.4.3 mkdosfs 指令：建立 MS-DOS 文件系统

学习目标 能使用 mkdosfs 指令在 Linux 系统下建立 MS-DOS 文件系统

语法 mkdosfs [-可选参数] 设备 [区块数]

功能说明 运行 mkdosfs 指令将指定磁盘格式化为 MS-DOS 文件系统的格式。

参数说明 可选参数及其说明如下：

基础应用

范例526 创建一个MS-DOS文件系统，同时设置文件系统的磁盘标签。

[root@localhost ～]# mkdosfs –n Tdos /dev/fd0

执行指令“mkdosfs –n Tdos /dev/fd0” 将软盘格式化为 MS-DOS 文件系统，同时设置文件系统的磁盘标签为Tdos。

5.4.4 mke2fs 指令：建立 ext2 文件系统

学习目标 建立 Linux 系统下的 ext2 文件系统

语法 mke2fs [-可选参数] 设备 [区块数]

功能说明 使用 mke2fs 指令建立 Linux 系统的 ext2 文件系统。

参数说明 可选参数及其说明如下：

续表

基础应用

范例527 创建ext2文件系统。

[root@localhost ～]# mke2fs -c /dev/hdb1

执行指令“mke2fs -c /dev/hdb1”，在指定设备上创建 ext2 文件系统。

5.4.5 mkfs 指令：建立各种文件系统

学习目标 能使用 mkfs 为指定的设备或者挂载点建立各种文件系统

语法 mkfs [-可选参数] 设备名 [区块数]

功能说明 mkfs 指令可用来在指定的设备上建立各种文件系统，它通过调用相关的程序来执行文件系统的构建，本身并不执行系统构建。

参数说明 可选参数及其说明如下：

基础应用

范例528 创建ext2文件系统。

[root@localhost ～]# mkfs –fs q /dev/hf0

执行指令“mkfs –fs q /dev/hf0” 在指定设备上创建 ext2 文件系统。

5.4.6 mkfs.ext2 指令：建立 ext2 文件系统

学习目标 建立 Linux 系统下的 ext2 文件系统

语法 mkfs.ext2 [-可选参数] 设备 [区块数]

功能说明 mkfs.ext2 指令的功能和 mke2fs 相同，都是用于建立 Linux 系统的 ext2 文件系统程序。详细用法见mke2fs指令。

5.4.7 mkfs.msdos 指令：建立 MS-DOS 文件系统

学习目标 能在 Linux 系统下建立 MS-DOS 文件系统

语法 mkfs.msdos [-可选参数] 设备 [区块数]

功能说明 mkfs.msdos 指令的功能和 mkdosfs 相同，都是用于将指定磁盘格式化为MS-DOS文件系统的格式。详细用法见mkdosfs指令。

5.4.8 mkinitrd 指令：建立要载入 ramdisk 的映像文件

学习目标 学会建立要载入 ramdisk 的映像文件

语法 mkinitrd [-可选参数] 必要参数

功能说明 mkinitrd 指令可根据内核版本和指定参数，来制作用以自动加载和系统初始化的启动映像文件，生成映像文件。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

续表

基础应用

范例529 在指定目录建立一个映像文件。

[root@localhost ～]# mkinitrd /boot/initrd-2.6.26-1.img 2.6.26-1

执行指令“mkinitrd /boot/initrd-2.6.26-1.img 2.6.26-1” 在指定路径下创建一个映像文件。

5.4.9 mkisofts 指令：建立 iso 9660 映像文件

学习目标 能使用 mkisofs 指令生成 ISO 9660 映像文件

语法 mkisofs [-可选参数] 文件/目录

功能说明 mkisofs指令可将指令中指定的文件/目录根据给定的参数生成ISO 9660镜像文件。

参数说明 可选参数及其说明如下：

续表

基础应用

范例530 制作iso9660映像。

[root@localhost ～]# mkisofs -o Yiso wc

INFO: UTF-8 character encoding detected by locale settings.

Assuming UTF-8 encoded filenames on source filesystem,

use -input-charset to override.

Total translation table size: 0

Total rockridge attributes bytes: 0

Total directory bytes: 0

Path table size(bytes): 10

Max brk space used 0

174 extents written (0 MB)

执行指令“mkisofs -o Yiso wc” 将指令中指定的文件 wc 生成映像文件 Yiso。

5.4.10 fsconf 指令：设置文件系统相关功能

学习目标 了解 fsconf 来设置 red hat Linux 文件系统的相关功能

语法 fsconf [-可选参数]

功能说明 fsconf 是专门用来设置 Red Hat Linux 中各项设置的程序。

参数说明 可选参数及其说明如下：

5.4.11 umount 指令：卸除文件系统

学习目标 卸除文件系统

语法 umount [-可选参数] 文件系统

功能说明 umount 指令和 mount 指令是一对，使用 umount 指令可卸载经 mount 指令进行挂载的文件系统。这里特别提醒一下，umount卸载的对象一定是目前Linux目录中存在的文件系统，当然也可直接使用设备名或文件系统的挂载点来表示文件系统。

参数说明 可选参数及其说明如下：

基础应用

范例531 取消软区的挂载。

[root@localhost ～]# umount /mnt/floppy　　//取消软区的挂载

执行指令“umount /mnt/floppy”来取消经指令“mount –o ro /dev/fd0 /mnt/floppy”挂载的软区。同理，也可以使用该指令来卸载系统中所挂载的光驱以及其他的移动设备等。

5.4.12 mount 指令：挂载文件系统

学习目标 熟练掌握 mount 指令对指定设备的挂载方法

语法 mount [-可选参数] 必要参数

功能说明 使用mount指令可将指定设备挂载到已存在的目录。当文件系统挂载完成后，用户可通过对该目录进行操作，来实现对指定设备的文件读写等动作。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

续表

基础应用

范例532 挂载一个光驱设备。

[root@localhost ～]# mount /dev/cdrom /mnt/cdrom

[root@yingzheng ～]# cd /mnt/cdrom

[root@yingzheng cdrom]# ls

ARMLinuxpatch-2.4.13-ac2-rmk1.bz2　ARMLinuxpatch-2.4.13-ac2-rmk1.bz2

ARMLinuxpatch-2.4.13-ac5-rmk1-broken.bz2　ARMLinuxpatch-2.4.13-ac5-rmk2.bz2

ARMLinux_gnutools　　　　　　diff-2.4.18-rmk7-pxa1.gz

Hardware　　　　uCLinux_gnutools

uCLinux-dist-20020927.tar.gz

v2.6

[root@yingzheng cdrom]

执行指令“mount /dev/cdrom /mnt/cdrom”，将指定光驱设备“/dev/cdrom”挂载到“/mnt/cdrom”下。因为mount指令不能建立挂载点，所以如果该挂载点不存在，应先建立该挂载点。完成挂载后，用户就可通过对目录“/mnt/cdrom”的操作来实现对光驱的读写。

范例533 以指定方式挂载设备。

[root@yingzheng ～]# mount –o ro /dev/fd0 /mnt/floppy

[root@yingzheng ～]#

执行指令“mount –o ro /dev/fd0 /mnt/floppy”，将指定软驱设备“/dev/ fd0”以只读方式挂载到“/mnt/floppy”下。现简要介绍“-o”参数挂载文件系统时的操作参数。

【挂载文件系统时的操作参数】

codepage：内码集。

iocharset：字符集。

ro：以只读方式挂载。

rw：以读写方式挂载。

nouser：一般用户无法挂载。

user：一般用户可挂载。

范例534 指定挂载设备的文件类型。

[root@yingzheng ～]# mount –t iso9660 /dev/cdrom /mnt/cdrom

[root@yingzheng ～]#

执行指令“mount –t iso9660 /dev/cdrom /mnt/cdrom” 指定挂载设备的文件类型为iso9660。现简要介绍“-t”参数挂载文件系统时的文件类型。

【文件类型】

msdos：fat16。

nfs：网路文件。

iso9660：CD-MOS 光盘标准文件。

hpfs：OS/2 文件系统。

auto：自动检测文件系统。

范例535 移出一个挂载到新目录。

[root@yingzheng ～]# ls /mnt/cdrom

ARMLinuxpatch-2.4.13-ac2-rmk1.bz2　ARMLinuxpatch-2.4.13-ac2-rmk1.bz2

ARMLinuxpatch-2.4.13-ac5-rmk1-broken.bz2　ARMLinuxpatch-2.4.13-ac5-rmk2.bz2

ARMLinux_gnutools　　　　　　diff-2.4.18-rmk7-pxa1.gz

Hardware　　　　uCLinux_gnutools

uCLinux-dist-20020927.tar.gz

v2.6

[root@yingzheng ～]# mount --move /mnt/cdrom /mnt/cd-rom

[root@yingzheng ～]# ls /mnt/cdrom

[root@yingzheng ～]# ls /mnt/cd-rom

ARMLinuxpatch-2.4.13-ac2-rmk1.bz2　ARMLinuxpatch-2.4.13-ac2-rmk1.bz2

ARMLinuxpatch-2.4.13-ac5-rmk1-broken.bz2　ARMLinuxpatch-2.4.13-ac5-rmk2.bz2

ARMLinux_gnutools　　　　　　diff-2.4.18-rmk7-pxa1.gz

Hardware　　　　uCLinux_gnutools

uCLinux-dist-20020927.tar.gz

v2.6

[root@yingzheng ～]#

执行指令“mount --move /mnt/cdrom /mnt/cd-rom”，将一个已挂载的设备从当前挂载点移动到指定的新挂载点。

5.4.13 mkfs.minix 指令：建立 minix 文件系统

语法 mkfs.minix[选择性参数][必要参数][选择性参数]

功能说明 mkfs 的一种实际构建工具。中间的必要参数是设备或者挂载点，后面的选择性参数是块大小。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例536 把软盘制作为Minix文件系统。

[root@yingzheng 100dpi]#mkfs /dev/fd0

5.5 其他相关指令

5.5.1 stat 指令：显示 inode 内容

学习目标 了解 stat 指令的文件信息查看功能

语法 stat [-可选参数] 文件

功能说明 stat 指令与 ls 指令相比能显示更详细的文件信息。

参数说明 可选参数的具体说明如下：

基础应用

范例537 stat指令显示指定的文件信息。

[root@localhost ～]# ll　　　　　//显示文件信息

total 352

-rw-r--r--　1 root root　2　jan 4 2008 11

-rw-------　1 root root　72　jan 2 2008 a1.txt

-rw-------　1 root root　63　jan 2 2008 a1.txt

-rw-------　1 root root　162　jan 2 2008 a2.txt

-rw-r--r--　1 root root　97　jan 2 2008 a.c

-rw-r--r--　1 root root　67520　jan 2 2008 14:53 b1

drwxr-xr-x　2 root root　4096　jan 2 2008 Desktop

-rw-r--r--　1 root root　71488　jan 1 2008 16:10 sr

-rw-r--r--　1 root root　142　jan 2 2008 09:11 tt.c

[root@localhost zx]# stat sr　　　//显示文件信息

File: 'sr'

Size:　84　Blocks: 16　IO Block: 4096　regular File

Device: fd00h/64768d　Inode: 1572898　Links: 1

Access: (0644/-rw-r--r--) Uid: (　0/　root)　Gid: (　0/　root)

Access: 2009-01-19 11:15:02.000000000 +0500

Modify: 2009-01-01 12:39:01.000000000 +0500

Change: 2009-01-06 13:22:57.000000000 +0500

[root@localhost ～]# ls sr

sr

[root@localhost ～]#

执行指令“stat sr”显示文件 sr 的详细信息，其中包括文件的最后修改时间和最后访问时间等详细的文件信息。

范例538 显示文件系统的信息。

[root@localhost zx]# stat –f sr　　//显示文件信息

File: 'sr'

ID:　0　Namelen: 255　Type: ext2/ext3

Block Size:4096　　Fundamental block size: 4096

Block: Total: 3269406　Free: 2645444　Available:2476689

Inodes: Total: 3375104　Free: 3281333

[root@localhost ～]#

执行指令“stat –f sr”显示文件 sr 的有关文件系统的信息，而非文件信息。

范例539 以简单的行模式显示文件信息。

root@localhost zx]# stat –t sr　　　//显示文件信息

sr　84 16　81a4　fd00　1572898　1　0　0　1011456902　1009906741　1010341377

[root@localhost ～]#

执行指令“stat –t sr” 以简单的行模式显示文件信息。

5.5.2 swapoff指令：关闭系统交换分区

学习目标 能关闭系统的 swap 交换区

语法 swapoff [-可选参数] [设备]

功能说明 swapoff 指令与 swapon 指令是一对，swapoff 指令可用于关闭系统交换分区。

参数说明 可选参数的具体说明如下：

基础应用

范例540 关闭交换分区。

[root@localhost ～]# swapoff /dev/hda2　　//关闭交换分区

[root@localhost ～]#

执行指令“swapoff /dev/hda2”关闭交换分区/dev/hda2。

范例541 关闭所有交换分区。

[root@localhost ～]# swapoff -a　　//关闭交换分区

[root@localhost ～]#

执行指令“swapoff -a”关闭/etc/fstab 文件中设置为交换分区的所有设备。

5.5.3 swapon指令：启动系统交换分区

学习目标 学会启动系统交换区

语法 swapon[[-可选参数] [设备]

功能说明 swapon 指令用来启动 Linux 系统中的交换分区，建立虚拟内存。

参数说明 可选参数的具体说明如下：

续表

基础应用

范例542 开启/etc/fstab文件中的所有交换分区。

[root@localhost ～]# swapon -a　　//开启交换分区

[root@localhost ～]#

执行指令“swapon -a”将开启/etc/fstab 文件中的所有 swap 交换分区。

范例543 显示交换分区的信息。

[root@localhost ～]# swapon -s　　//显示交换分区

Filename　　　　　Type　　　Size　Used　Priority

/dev/hda2　　　　partition　1048568　0　　-2

[root@localhost ～]#

执行指令“swapon -s”显示交换分区的信息。

5.5.4 symlinks指令：维护符号链接的工具程序

学习目标 学习应用 symlink 指令检查/维护目录中符号链接的方法

语法 symlinks [-可选参数] 目录

功能说明 使用 symlinks 指令不仅可以检查指定的单个目录中的符号链接，还可以检查多个目录中的符号链接，同时显示符号链接的类型。

【symlinks检查的符号链接类型】

absolute：符号链接使用了绝对路径。

dangling：原始文件已经不存在。

lengthy：符号链接的路径中包含了多余的“../”。

messy：符号链接的路径中包含了多余的“/”。

other_fs：原始文件位于其他文件系统中。

relative：符号链接使用了相对路径。

参数说明 可选参数的具体说明如下：

续表

基础应用

范例544 显示指定目录下的符号链接。

[root@localhost ～]# symlinks -v /root　　//显示符号链接

[root@localhost ～]# symlinks -v /home/yy /home/mary　　//显示多个目录下的符号链接

absolute: /home/mary/ypbind -> /home/mary/ypbindyy

[root@localhost ～]#

5.5.5 mt 指令：磁带驱动操作

学习目标 了解 mt 指令的基本用法

语法 mt[选择性参数][必要参数][选择性参数]

功能说明 mt 指令用来进行磁带驱动的操作。

参数说明 必要参数的具体说明如下：

续表

选择性参数的具体说明如下：

基础应用

范例545 mt的版本信息查看。

[root@localhost ～]# mt -v　　//查看版本信息

GNU mt version 2.5

tonykorn97:～ # rpm -aq | grep mt

mtr-gtk-0.54-194.1

mtools-3.9.9-196.1

mtx-1.2.18rel-116.1

mt_st-0.7-419.1

qt3-non-mt-3.3.1-41.11

pmtools-20010730-172.3

mtr-0.54-194.1

[root@localhost ～]#

5.5.6 quotastats指令：显示磁盘空间的限制

学习目标 掌握 quotastats 指令的基本应用

语法 quotastats

功能说明 quotastats 指令用来显示系统的磁盘空间限制的当前状态。

基础应用

范例546 显示磁盘配额限制的状态。

[root@localhost ～]# quotastats　　　//显示磁盘配额限制的状态

Kernel quota version: 6.5.1

Number of dquot lookups: 0

Number of dquot drops: 0

Number of dquot reads: 0

Number of dquot writes: 0

Number of quotafile syncs: 19

Number of dquot cache hits: 0

Number of allocated dquots: 0

Number of free dquots: 0

Number of in use dquot entries (user/group): 0

[root@localhost ～]#

本例使用指令quotastats显示当前系统下磁盘配额限制的状态。

5.5.7 raidstop指令：关闭软件控制的磁盘阵列

学习目标 掌握 raidstop 指令的用法

语法 raidstop[必要参数][选择性参数][磁盘]

功能说明 raidstop 指令用来关闭磁盘阵列。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例547 关闭所有的磁盘阵列。

[root@localhost ～]#raidstop -a　　//关闭所有的磁盘阵列

本例使用指令“raidstop –a”关闭所有软件控制的磁盘阵列。

5.5.8 sync指令：将内存缓冲区内的数据写入磁盘

学习目标 了解 sync 指令的基本用法

语法 sync[选择性参数]

功能说明 sync 指令将缓冲区数据写入磁盘。

参数说明 选择性参数的具体说明如下：

基础应用

范例548 将内存数据写入磁盘。

[root@localhost ～]# sync　　　　//将内存数据写入磁盘

本例使用指令sync将内存数据写入磁盘。

第6章 Linux网络服务

6.1 Linux的网络服务

网络通信主要是通过本地计算机和其他计算机之间进程间的数据交换，实现分布式或并行处理等任务。Linux中的网络服务多是指基于TCP/IP的Internet网。TCP/IP协议由以下几部分组成。

应用层、表示层、回话层：系统或软件程序、转换格式、建立会话关系。

传输层：校验数据。

网络层：解释网络地址。

数据链路层：校验物理层上的错误，封装数据。

物理层：物理链路。

6.2 Linux的网络配置指令

6.2.1 dnsconf 指令：设置 DNS 服务器组态

学习目标 掌握 dnsconf 指令对 DNS 服务器域增减的处理，以及对 DNS 服务器主机的相关操作

语法 dnsconf [-可选参数]

功能说明 dnsconf 指令是Linuxconf 的符号链接。它向管理员提供了图形界面的操作方式，使管理DNS服务器更加方便。

参数说明 可选参数及其说明如下：

基础应用

范例549 新增主机记录。

[root@localhost ～]# dnsconf set INT 92.168.1.1　　　　//新增主机记录

执行指令“dnsconf set INT 92.168.1.1” 新增主机 INT的记录。

6.2.2 getty指令：设置终端配置

学习目标 能使用getty指令来开启和配置终端

语法 getty[-可选参数][终端号]

功能说明 getty指令可对终端机进行初始化，设置终端的连线速率等。在早期的 UNIX 系统中，由于没有控制台，人们通过一些端点设备来连接到计算机实现用户与主机的通信，这个端点设备就被称为终端。如今人们仍可使用getty指令来配置指定的终端。

参数说明 可选参数及其说明如下：

基础应用

范例550 开启终端。

[root@localhost ～]# getty ttys2　//开启终端

执行指令“getty ttys2”开启终端ttys 2。

6.2.3 ifconfig指令：显示或者配置网络设备

学习目标 能够使用ifconfig 指令启动/关闭指定的网卡，并可以为网卡配置地址信息，同时配置网络设备

语法 ifconfig [网络设备][-可选参数]

功能说明 ifconfig 指令不仅可用来配置网络设备的相关参数，还可显示当前系统中的网络设备的状态。在系统开机/重启时，将调用该指令读取配置文件内容，而先前进行的配置将丢失，系统又恢复到默认状态。

参数说明 可选参数及其说明如下：

基础应用

范例551 不接任何参数，输出当前网络接口的信息。

[root@localhost ～]# ifconfig　　//显示当前网络设备的工作状态

eth0　　Link encap:Ethernet　HWaddr 00：0F：11：67：7E：45

inet addr:192.168.1.88 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: 2007:da8:205:130:20c:29ff:fe32:451c/64 Scope:Global

inet6 addr: fe80::20c:29ff:fe32:451c/64 Scope:Link

UP BROADCAST RUNNING MULTICAST　MTU:1500　Metric:1

RX packets:12508 errors:0 dropped:0 overruns:0 frame:0

TX packets:100 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1349900 (1.2 MiB)　TX bytes:6807 (6.6 KiB)

Interrupt:10 Base address:0x1080

lo　　Link encap:Local Loopback

inet addr:127.0.0.1　Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING　MTU:16436　Metric:1

RX packets:1118 errors:0 dropped:0 overruns:0 frame:0

TX packets:1118 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1253452 (1.2 MiB) TX bytes:1253452 (1.2 MiB)

[root@localhost ～]#

从范例可以看出，当我们直接输入 ifconfig 命令时，系统会输出当前系统的网络信息。其中eth0 表示的是第一块网卡，HWaddr 表示网卡的物理地址（MAC地址）是 00:0F:11:67:7E: 45；inet addr 表示网卡的 IP 地址为 192.168.1.88，Bcast 表示广播地址 192.168.1.255，Mask为掩码地址255.255.255.0；而lo表示主机的回坏地址，一般用来测试网络程序。当不想让局域网或外网用户查看时，就只能在本地主机上运行和查看所用的网络接口，此时的回坏地址为127.0.0.1。

范例552 配置网卡参数。

[root@localhost ～]# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 //配置网卡参数

[root@localhost ～]# ifconfig eth1 add 3ffe:3240:1001:2001::1/ 26 //配置网卡 eth1 的IPv6地址

[root@localhost ～]#

在范例中列举了使用ifconfig指令配置网卡的IP地址和子网掩码的方法。从实例可以看出IPv4和IPv6地址的配置方法不同，前者可直接进行配置，而IPv6地址的配置和删除需与参数add和del一起使用。

范例553 启动和关闭网卡eth1。

[root@localhost ～]# ifconfig eth1 down　　//关闭网卡eth1

[root@localhost ～]# ifconfig eth1 up　　//开启网卡eth1

[root@localhost ～]#

当我们需要修改网卡或进行其他操作时，可能需要关闭每个网卡。使用down和up就可以轻松地完成对指定网卡的关闭和激活。这两个参数的作用相当于指令“ifdown+网卡”和指令“ifup+网卡”。

范例554 修改网卡eth1 的物理地址。

[root@localhost ～]# ifconfig eth1　　//显示指定网卡eth1的工作状态

eth1　　Link encap:Ethernet　HWaddr 00：06：B2：4F：32：26

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: 2007: 3ffe:3240:1001:2001::1/ 26 Scope:Global

inet6 addr: 3ffe:3240:1001:2001::1/ 26 Scope:Link

UP BROADCAST RUNNING MULTICAST　MTU:1500　Metric:1

RX packets:12508 errors:0 dropped:0 overruns:0 frame:0

TX packets:100 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1349900 (1.2 MiB)　TX bytes:6807 (6.6 KiB)

Interrupt:10 Base address:0x1080

lo　　Link encap:Local Loopback

inet addr:127.0.0.1　Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING　MTU:16436　Metric:1

RX packets:1118 errors:0 dropped:0 overruns:0 frame:0

TX packets:1118 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1253452 (1.2 MiB)　TX bytes:1253452 (1.2 MiB)

[root@localhost ～]# ifconfig eth1 down　　　//关闭网卡eth1

[root@localhost ～]# ifconfig eth1 hw ether　00：12：B2：56：64：2B　//修改网卡 eth1的物理地址

[root@localhost ～]# ifconfig eth1 up　　　//开启网卡eth1

[root@localhost ～]# ifconfig eth1　　　　//显示指定网卡eth1的工作状态

eth1　　Link encap:Ethernet　HWaddr 00：12：B2：56：64：2B

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: 2007: 3ffe:3240:1001:2001::1/ 26 Scope:Global

inet6 addr: 3ffe:3240:1001:2001::1/ 26 Scope:Link

UP BROADCAST RUNNING MULTICAST　MTU:1500　Metric:1

RX packets:12508 errors:0 dropped:0 overruns:0 frame:0

TX packets:100 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:1349900 (1.2 MiB)　TX bytes:6807 (6.6 KiB)

Interrupt:10 Base address:0x1080

lo　　Link encap:Local Loopback

inet addr:127.0.0.1　Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING　MTU:16436　Metric:1

RX packets:1118 errors:0 dropped:0 overruns:0 frame:0

TX packets:1118 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:1253452 (1.2 MiB)　TX bytes:1253452 (1.2 MiB)

[root@localhost ～]#

修改网卡物理地址前需要先关闭将要进行修改的网卡，然后使用参数hw对指定网卡的MAC地址进行修改，如上所示。但执行指令“ifconfig eth1 hw ether 00:12:B2:56:64:2B”只能临时修改MAC 地址，要想永久修改就需要把其加入启动脚本文件中。如果使用的是 RedHat 可在文件/etc/sysconfig/network-scripts/ifcfg-eth1中加入MACADDR=00-12-B2-56-64-2B。

6.2.4 nc 指令：设置路由器

学习目标 掌握使用nc 指令进行路由器设计的方法。

语法 nc [-可选参数] [主机名] [端口号]

功能说明 nc 指令可用来设置路由器的各相关参数，打开和监听 TCP 链接和端口，对端口进行扫描，发送UDP数据包，处理IPv4和IPv6地址，实现基于HTTP客户端和服务端的Shell脚本、socks或者HTTP代理指令的ssh等功能。

参数说明 可选参数及其说明如下：

基础应用

范例555 TCP 和UDP 端口扫描。

[root@localhost ～]# nc -v -z -w2 192.168.1.1 1-100 //TCP 端口扫描

nc: connect to 192.168.1.1 port 1 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 2 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 3 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 4 (tcp) failed: Connection refused

……………………

nc: connect to 192.168.1.1 port 95 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 96 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 97 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 98 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 99 (tcp) failed: Connection refused

nc: connect to 192.168.1.1 port 100 (tcp) failed: Connection refused

[root@localhost ～]# nc -u -v -z -w2 192.168.1.1 1-5000//UDP 端口扫描

Connection to 192.168.1.1 101 port [udp/sunrpc] succeeded!

Connection to 192.168.1.1 1261 port [udp/ipp] succeeded!

Connection to 192.168.1.1 2711 port [udp/*] succeeded!

[root@localhost ～]#

在范例中我们先执行指令“nc -v -z -w2 192.168.1.1 1-100”对TCP 端口进行扫描，然后执行指令“nc -u -v -z -w2 192.168.1.1 1-10000”扫描端口和小于5000 的UDP 连接端口。

范例556 远端连接。

[root@localhost ～]# nc -nv 192.168.1.3 10 //使用 IP 地址进行远端连接

Connection to 192.168.1.3 10 port [tcp/*] succeeded!

maryplay　　　　　　　　//用户输入

<!DOCTYPE HTML PUBLIC "-//IETf　　//DTD HTML 2.0//EN">

<html><head>

<title>302 Found</title>

</head><body>

<h1>Found</h1>

<p>The　document　has　moved　<a　href="http://202.112.146.70/apache2-default/">here</a>.</p>

<hr>

<address>Apache/2.2.3　(Debian)　mod_python/3.2.10　Python/2.4.4　PHP/4.4.4-8mod_perl/2.0.2 Perl/v5.8.8 Server at 202.112.146.70 Port 80</address>

</body></html>

[root@localhost ～]#

在范例中执行指令“nc -nv 192.168.1.3 10”，通过指定远端主机的IP 地址192.168.1.3 和端口号10进行远端连接。

6.2.5 ping指令：测试网络

学习目标 学习使用ping 指令来进行网络测试。

语法 ping [-可选参数] 网络地址

功能说明 ping 是Linux 系统中常用的网络指令，它常用来测试与目标主机的连通，查看网络上的主机是否在工作。执行 ping 指令会发送一个符合 ICMP 传输协议的要求响应的ECHO_REQUEST数据包到网络主机上，并显示响应情况，通过显示的响应信息我们就可以来确定主机的当前运行状态。

参数说明

可选参数及其说明如下：

续表

基础应用

范例557 使用ping 指令进行网络测试。

[root@localhost～]# ping 128.168.120.205//检测 ping 的与远端主机的连通情况

在 Shell 中输入“ping ”指令，将发送要求响应的数据包到指定的目标主机，如果网络连通将返回如下信息。

PING 128.168.120.205 (128.168.120.205) 56(84) bytes of data

64 bytes from 128.168.120.205: icmp_seq=1 ttl=64 time=0.720 ms

64 bytes from 128.168.120.205: icmp_seq=2 ttl=64 time=0.181 ms

64 bytes from 128.168.120.205: icmp_seq=3 ttl=64 time=0.191 ms

64 bytes from 128.168.120.205: icmp_seq=4 ttl=64 time=0.188 ms

64 bytes from 128.168.120.205: icmp_seq=5 ttl=64 time=0.189 ms

--- 128.168.120.205 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4000ms

rtt min/avg/max/mdev = 0.181/0.293/0.720/0.214 ms

[root@localhost～]#

如过测试结果是不通，则显示结果如下：

PING 128.168.120.205 (128.168.120.205) 56(84) bytes of data.

From 128.168.120.204 icmp_seq=1 Destination Host Unreachable

From 128.168.120.204 icmp_seq=2 Destination Host Unreachable

From 128.168.120.204 icmp_seq=3 Destination Host Unreachable

From 128.168.120.204 icmp_seq=4 Destination Host Unreachable

From 128.168.120.204 icmp_seq=5 Destination Host Unreachable

From 128.168.120.204 icmp_seq=6 Destination Host Unreachable

--- 128.168.120.205 ping statistics ---

8 packets transmitted, 0 received, +6 errors, 100% packet loss, time 7005ms

, pipe 4

[root@localhost～]#

同时ping还可以指定发送的次数具体命令如下：

[root@localhost～]# ping -c 10 128.168.120.205//指定发送数据包的次数

输出结果如下：

PING 128.168.120.205 (128.168.120.205) 56(84) bytes of data.

64 bytes from 128.168.120.205: icmp_seq=1 ttl=64 time=1.25 ms

64 bytes from 128.168.120.205: icmp_seq=2 ttl=64 time=0.260 ms

64 bytes from 128.168.120.205: icmp_seq=3 ttl=64 time=0.242 ms

64 bytes from 128.168.120.205: icmp_seq=4 ttl=64 time=0.271 ms

64 bytes from 128.168.120.205: icmp_seq=5 ttl=64 time=0.274 ms

64 bytes from 128.168.120.205: icmp_seq=6 ttl=64 time=0.295 ms

64 bytes from 128.168.120.205: icmp_seq=7 ttl=64 time=0.269 ms

64 bytes from 128.168.120.205: icmp_seq=8 ttl=64 time=0.270 ms

64 bytes from 128.168.120.205: icmp_seq=9 ttl=64 time=0.253 ms

64 bytes from 128.168.120.205: icmp_seq=10 ttl=64 time=0.289 ms

--- 128.168.120.205 ping statistics ---

10 packets transmitted, 10 received, 0% packet loss, time 9000ms

rtt min/avg/max/mdev = 0.242/0.367/1.251/0.295 ms

[root@localhost ～]#

6.2.6 netstat 指令：显示网络状态

学习目标 掌握netstat 指令的使用方法，通过显示的信息分析当前网络状态。

语法 netstat[必要参数][选择性参数]

功能说明 netstat 指令可以显示Linux 系统中与IP，TCP，UDP和ICMP 协议相关的网络信息，通过输出的路由表和网络接口信息，用户可以很清楚地了解当前系统的网络运行状况。

参数说明 可选参数及其说明如下：

续表

基础应用

范例558 显示Linux 系统的路由表。

[root@localhost ～]# netstat -r　　　　　//显示系统的路由表

Kernel IP routing table

Destination　Gateway　　Genmask　　Flags　MSS Window　irtt Iface

192.168.1.0　　*　　255.255.255.0　U　　0 0　　0 eth0

169.254.1.1　　*　　255.255.0.0　　U　　0 0　　0 eth0

172.0.1.1　　*　　255.0.0.0　　U　　0 0　　0 eth0

default　　192.168.88.3　0.0.0.0　UG　　0 0　　　0 eth0

[root@localhost ～]#

执行指令“netstat –r”将显示本地主机上的路由表信息，表中保存的是本地主机于特定终端的路径。

范例559 查看本地主机详细的网络端口状况。

[root@localhost ～]# netstat -an　　//显示详细的网络状况

Active Connections

Proto　Local Address　　Foreign Address　　State

TCP　192.168.1.127:119　64.232.189.98:81　　LISTENING

TCP　192.168.1.127:147　209.85.175.147:80　ESTABLISHED

TCP　192.168.1.127:149　202.108.23.231:80　ESTABLISHED

TCP　192.168.1.127:152　202.108.22.230:80　TIME_WAIT

TCP　192.168.1.127:153　202.108.22.230:80　TIME_WAIT

TCP　192.168.1.127:654　202.108.22.230:80　TIME_WAIT

TCP　192.168.1.127:661　202.108.23.238:80　CLOSE_WAIT

TCP　192.168.1.127:705　202.108.23.231:80　ESTABLISHED

TCP　192.168.1.127:712　192.168.1.100:139　TIME_WAIT

UDP　127.0.0.1:1014　　*:*

UDP　192.168.1.127:132　*:*

UDP　192.168.1.127:139　*:*

UDP　192.168.1.127:196　*:*

UDP　192.168.1.127:1000　*:*

[root@localhost ～]#

执行指令“netstat –an”显示本地主机端口的详细网络信息。

范例560 显示网络统计信息。

[root@localhost ～]# netstat -s　　　//显示网络统计信息

Ip:

96529 total packets received

0 forwarded

89 with unknown protocol

0 incoming packets discarded

8956 incoming packets delivered

4379 requests sent out

Icmp:

2 ICMP messages received

0 input ICMP message failed.

ICMP input histogram:

destination unreachable: 2

0 ICMP messages sent

0 ICMP messages failed

ICMP output histogram:

destination unreachable: 0

Tcp:

11 active connections openings

5 passive connection openings

0 failed connection attempts

0 connection resets received

1 connections established

4004 segments received

2079 segments send out

2 segments retransmited

0 bad segments received.

0 resets sent

Udp:

189 packets received

1 packets to unknown port received.

0 packet receive errors

79 packets sent

TcpExt:

8 TCP sockets finished time wait in fast timer

620 delayed acks sent

1 delayed acks further delayed because of locked socket

4 packets directly queued to recvmsg prequeue.

1096 packets directly received from prequeue

1099 packets header predicted

1 packets header predicted and directly queued to user

758 acknowledgments not containing data received

649 predicted acknowledgments

0 TCP data loss events

2 other TCP timeouts

[root@localhost ～]#

执行指令“netstat –s” 按照各个协议如 IP、TCP、UDP、ICMP、TCPEXT 等分别显示其网络统计数据，其中包括各协议数据包的接收信息等内容。

范例561 显示网卡信息列表。

[root@localhost ～]# netstat -i　　　//显示网卡列表

Kernel Interface table

Iface　MTU Met　RX-OK RX-ERR RX-DRP RX-OVR　TX-OK TX-ERR TX-DRP TX-OVR Flg

eth0　　1500　0　787165　0　0　0　55138　0　0　0 BMRU

eth1　　1500　0　521655　0　0　0　1938　0　0　0 BMRU

lo　　16436　0　1752　0　0　0　1752　0　0　0 LRU

[root@localhost ～]#

执行指令“netstat –i”显示系统中的网卡列表，及网卡的相关信息如本例所示。

范例562 显示广播组的成员关系。

[root@localhost ～]# netstat -g　　　//显示广播组的成员

IPv6/IPv4 Group Memberships

Interface　　RefCnt Group

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

lo　　　1　ALL-SYSTEMS.MCAST.NET

eth0　　　1　224.0.0.250

eth0　　　1　ALL-SYSTEMS.MCAST.NET

lo　　　1　ff03::1

eth0　　　2　ff03::1:ffe5:4351

eth0　　　1　ff03::1

[root@localhost ～]#

执行指令“netstat –g”显示广播功能群组的成员关系。

6.2.7 ppp-off指令：关闭ppp 连线

学习目标 掌握使用指令切断ppp 连线的方法

语法 ppp-off

功能说明 使用ppp-off 指令用户可关闭ppp 网络连线。

基础应用

范例563 切断系统的ppp 连线。

[root@localhost ～]#ppp-off　　//切断ppp连线

6.2.8 pppsetup 指令：设置ppp 连线

学习目标 设置PPP 连线

语法 pppsetup

功能说明 pppsetup 指令是ppp 连线程序，它具有很方便的交互界面，能使PPP 连线的过程更加轻松。

基础应用

范例564 设置ppp 连线。

[root@localhost ～]#pppsetup　　　　//设置ppp连线

本例使用指令pppsetup设置ppp连线。

6.2.9 pppstats指令：显示ppp 连线状态

学习目标 了解pppstats 指令显示PPP 连线状态的基本使用

语法 pppstats [-可选参数]

功能说明 运用pppstats 指令可显示ppp 网络连线的一些相关状态信息。

参数说明 可选参数及其说明如下：

基础应用

范例565 显示ppp 的连线状态。

[root@localhost ～]#pppstats　　　　//显示ppp的连线状态

本例使用指令pppstats显示ppp的连线状态。

6.2.10 samba 指令：控制Samba服务端

学习目标 学会使用samba 指令来控制Samba 服务器

语法 samba [可选参数]

功能说明 利用samba 指令，用户可控制Samba 服务器的启动、停止或回报当前状态。

参数说明 可选参数及其说明如下：

基础应用

范例566 启动Samba 服务器。

[root@localhost ～]#samba start　　　//启动samba

运行指令“samba start”将启动Samba 服务器。

范例567 关闭Samba 服务器。

[root@localhost ～]#samba stop　　　//关闭samba

运行指令“samba stop”将关闭Samba 服务器的运行。

范例568 显示Samba 服务器的状态。

[root@localhost ～]#samba status　　//显示samba状态

运行指令“samba status”系统将显示Samba 服务器的运行状态。

6.2.11 setserial 指令：设置或显示串口的相关信息

学习目标 通过 setserial 指令可设置、修改串口属性或显示目前串口的名称、使用的端口地址、中断以及其他选项

语法 setserial [-可选参数] 设备 [串口参数]

功能说明 setserial 是一个用来设置和取得与一个串行口有关的信息与设置的程序。这些信息包括某个指定串口的I/O地址、中断号，以及break键是否被当作引起安全注意键等。在通常的引导过程中，只有端口 1 到4 被初始化，并使用默认的 I/O 地址和中断号。使用指令setserial用户就能对其他的串口进行初始化，或是修改COM1到COM4的设置为非默认状态。一般这个程序会在 rc.serial 脚本中使用，此脚本通常会在 /etc/rc.local 中被执行。

参数说明 可选参数及其说明如下：

【串口参数】

port 端口号：设置I/O 地址。

irq 中断号：设置硬件的中断号IRQ。

uart 异步通信（UART）类型：设置异步通信(UART)的类型如：none、8250、16450、16550、16550A、16550、16650V2和16750。

auto_irq：在自动配置的过程中，自动分配IRQ 中断号，但一般不使用该参数。

^auto_irq：在自动配置的过程中，并不自动分配IRQ 中断号。

skip_test：在自动配置的过程中，忽略UART 检测。

^skip_tet：在自动配置的过程中，不忽略UART 的检测。

baud_base 波特率：设置此端口的波特率，此值为时钟频率除以 16，一般情况此项值为 115200，这也是UART 能支持的最快波特率。

spd_hi：程序要求 38.4bit/s 时，使用57.6bit/s 的连接速度。

spd_vhi：当要求38.4bit/s 时，使用115bit/s 的连接速度。

spd_normal：当要求38.4bit/s 时，使用38.4bit/s 的速度。

divisor（除数）：自定义除数。

sak：设置break 键为引发安全注意键。

^sak：禁用引发安全注意键。

fourport：配置端口为AST Fouroart 卡。

^fourport：禁用 AST Fourport 配置。

closedelaydelay（延时）：指定时间长度，单位是百分之一秒。DTR 在联出设备被关闭后，仍会保持一个低速串行通路，在有数据进来之前会重新启动DTR选项的默认值为50，即半秒延时。

close_delaydelay（延时）：指定时间长度，单位是百分之一秒，在接受端被禁之前关闭端口，需等待从串行口传来的数据。如果指定为“none”，将不会有延时。如果指定为“infinite”，将会以不确定的时间等待缓冲数据的传输。此选项的默认值是“none”。

closing_wait2delay（延时）：指定时间的长度，单位是百分之一秒，在接受端被禁用后，在关闭端口时会等待从串口传来的数据。

session_lockout：对不同的任务，锁定联出设备的端口(/dev/cuaXX)。也就是说，一旦有一个进程打开端口，就不允许其他不同号的任务打开此端口，直到前一个进程放开此端口。

^session_lockout：对联出的端口不开启上述功能。

pgrp_lockout：对不同进程组，锁定联出端口(/dev/cuaXX)。也就是说，一旦一个进程打开一个端口，就不允许其他进程组的进程共享此端口，直到前一个进程释放它。

^hup_notify：当进程锁定拨号时，而此时联邮设备正挂起的话，不通知进程。

split_termios：对联出设备的终端设置与联入设备的终端设置分开对待。

callout_nohup：如果这个特殊串口被当成一个联出设备打开，那么当载波检测消失时，不挂起通信端口。

^callout_nohup：当串行口当作联出设备打开时，不忽略挂起通信端口。当然，如果挂起的话HUPCL终端标识将会被启用。

^low_latency：以更高的CPU 占用率来使得接受滞延达到最小。

基础应用

范例569 显示第四个串行设备的详细信息。

[root@localhost ～]# setserial -a /dev/ttyS3　　　//显示串行设备的详细信息

/dev/ttyS3, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4

Baud_base: 115200, close_delay: 50, divisor: 0

closing_wait: 3000

Flags: spd_normal skip_test

[root@localhost ～]#

系统中的串口设备号一般为：/dev/ttys0(COM1)，/dev/ttys1(COM2)，/dev/ttys2(COM3)，/dev/ttys3(COM4)。

范例570 设置指定串口的传输速率。

[root@localhost ～]# setserial -v /dev/ttyS0 spd_vhi　　//显示串行设备的详细信息

6.3 网络通信指令

6.3.1 cu 指令：主机间通信

学习目标 学会使用cu 指令通过串口与远端主机进行通信

语法 cu 必要参数 [-可选参数]

功能说明 cu指令属于 uucp 软件包，可用来连接两台电脑上的串口，以进行主机间的通信。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

基础应用

范例571 通过指定连接设备与远端主机连线。

[root@localhost ～]# cu -l /dev/ttyS1 -s 9600

cu: open (/dev/ttyS1): Permission denied

cu: /dev/ttyS1: Line in use

[root@localhost ～]#

范例572 拨号连接。

[root@localhost temp]# cu -c 24701266　　//与远端主机连线

执行指令“cu -c 24701266”与远端主机进行拨号连接。

6.3.2 dip 指令：IP拨号连接

学习目标 学会使用dip 指令创建IP 拨号连接

语法 dip [-可选参数] [script 文件]

功能说明 dip 指令用来控制调制解调器，以拨号的方式建立双向连接。

参数说明 可选参数及其说明如下：

续表

基础应用

范例573 启动拨号连接。

[root@localhost ～]# dip -i　　　　//启动拨号连接

执行指令“dip –i” 启动拨号连接。

6.3.3 efax 指令：收发传真

学习目标 学会使用efax 指令收发传真

语法 efax [-可选参数]

功能说明 efax 是一个支持Class 1 与Class 2 调制解调器收发传真的易于使用的工具，它可以在KDE桌面系统上运行。

参数说明 可选参数及其说明如下：

6.3.4 pine指令：处理电邮和新闻组

学习目标 学会使用pine 指令来收发日常的电子邮件和浏览新闻

语法 pine [-可选参数] 收件人邮箱地址

功能说明 pine 指令可以处理一般的电子邮件和新闻组的文章，使用该指令可以对电邮及新闻组进行保存、阅读、删除和发送等各种功能处理；同时pine还支持MIME格式，用户可以使用pine指令将MIME格式的对象保存为文件，并为其指定能直接打开对象文件的外挂程序。

参数说明 可选参数及其说明如下：

基础应用

范例574 使用pine 指令管理和收发电邮。

[root@localhost ～]# pine　　//启动pine

在Shell环境下输入pine指令，启动pine，进入下面的欢迎界面。

在该界面下按下“Enter”键退出欢迎界面，进入pine的默认环境

通过方向键控制光标，从而选择操作类型，如写邮件、浏览邮件、管理地址簿等，如果要浏览邮件可以通过查看邮件索引来显示当前目录下的邮件

通过光标选择邮件，按“Enter”键对选中邮件进行阅读，在pine的显示界面按下r键即可对选中邮件进行回复。同时也可在Linux 的命令行下输入指令“pine yy2008@163.net”进入以下界面进行邮件的编辑。

在输入完成后可通过 Ctrl+X 来发出已完成的邮件。

6.3.5 sendmail 指令：邮件服务器程序

学习目标 学会使用sendmail 传送邮件和相关配置方法

语法 sendmail [-可选参数]

功能说明 sendmail 是较常用的SMTP 电邮服务器，发送或接收电子邮件都是通过服务器实现的。

一般的电邮服务分为三种：一为（MTA）消息传输主体，是通过网络发送电邮的服务器；二为（MDA）邮件发送主体及一个相关的邮件处理程序；三是（MUA）邮件用户主体，也就是帮助服务器发送/接收电邮的应用程序。当用户发送电子邮件时，它并不能直接将信件发送到对方的计算机上，而是通过邮件用户主体把邮件提交给消息传输主体。消息传输主体得到邮件后，先将其保存在自身的缓冲队列中，然后根据邮件的目标地址，消息传输主体将找到对负责这个目标地址的消息传输主体服务器，通过网络将邮件传送给它。对方的服务器接收到邮件之后，将其缓冲存储在本地，直到电子邮件的接收者通过邮件用户主体查看信息。

Sendmail 作为 Internet 的邮件服务器程序与电邮客户机相比配置更加复杂，它和大多数复杂的 Linux 服务一样拥有许多配置文件，如宏 sendmail.mc、配置文件 sendmail.cf 和submit.cf。在sendmail服务器接收电子邮件时使用sendmail.cf，发送电子邮件时使用submit.cf。下面简单介绍指令的应用。

参数说明 可选参数及其说明如下：

续表

基础应用

范例575 启动sendmail 邮件服务器程序。

[root@localhost ～]# sendmail -bd –q30m　　//启动邮件服务器

执行指令“sendmail -bd –q30m”将以后台守护进程的模式运行，并每隔半小时对邮件队列进行一次检查。

6.3.6 smbclient 指令：可存取 SMB/CIFS 服务器的用户端程序

学习目标 了解 SMB 和 CIFS 服务器通信协议的基本内容，学会如何运用 smbclient 指令实现Linux系统下的Windows资源共享

语法 smbclient [-可选参数]

功能说明 smbclient 指令是可存取SMB/CIFS 服务器的用户端程序，在Linux 系统中运用 smbclient 命令可实现对 Windows 系统共享文件夹下资源的共享。SMB（Server Message Block ）协议在 Microsoft 中被用于实现不同计算机之间的打印机、串口等的共享；CIFS （Common Internet File System）协议是SMB 协议扩展到Internet 上一种共享数据的标准。

因此，只要在Linux和Windows系统中都安装了支持SMB/CIFS协议的软件，就可以实现不同系统间的资源共享。

参数说明 可选参数及其说明如下：

基础应用

范例576 已知IP地址为192.168.10.120的Windows系统和IP地址为192.168.10.122的Linux系统同在一个局域网中。在Windows系统中存在共享文件夹sem，以及用户adv（管理员）、grp和guest，现在要从Linux系统下访问Windows的共享文件夹。

[root@localhost ～]# smbclient //192.168.60.188/sem -U adv　　//访问共享文件夹sem

Password:

smb: \> cd winnt

smb: \winnt\>

smb: \>ls

11.c ax.text ar.txt as.cpp re.c setxt.doc work.doc

[root@localhost ～]# smbclient –c ”ls \winnt”//192.168.60.188/sem -U adv//访问共享文件夹sem

Password:

11.c ax.text ar.txt as.cpp re.c setxt.doc work.doc

[root@localhost ～]#

范例577 在网络中的Windows 系统中创建文件夹。

[root@localhost ～]# smbclient –c ” mkdir share1”//192.168.60.188/sem -U adv%password

//访问共享文件夹sem

smb: \>ls

11.c ax.text ar.txt as.cpp re.c setxt.doc work.doc

[root@localhost ～]# smbclient –c ”ls”//192.168.60.188/sem -U adv//访问共享文件夹 sem

share1 winnt

[root@localhost ～]#

6.3.7 smbd 指令：Samba 服务端

学习目标 了解smbd 指令的用法和功能

语法 smbd [-可选参数]

功能说明 smbd 指令是Samba 程序监控程序，当需要重新编辑Samba 配置文件并有较大改动时，需重启Samba的两个监控程序smbd和nmbd。

参数说明 可选参数及其说明如下：

基础应用

范例578 启动Samba 监控程序。

[root@localhost ～]# smbd -D　　//启动Samba监控程序smbd

执行指令“smbd –D”将以后台方式启动Samba 监控程序smbd。

[root@localhost ～]# service smb restart　　　//重启Samba监控程序

运行指令“service smb restart”将重启Samba 的两个监控程序smbd 和nmbd。

6.3.8 ssh 指令：加密的远程登录工具

学习目标 在了解远程登录概念的基础上，学习ssh 指令的应用以及与telnet 的区别。

语法 ssh [-可选参数] 远程主机 [执行指令]

功能说明 ssh 指令与 telnet 指令都是用于登录远程主机的远程管理工具，相比之下 ssh的最大优势就是，它是以加密方式进行信息传送因此更加安全。在 ssh 指令中还可以直接输入想要在远程主机上运行的指令，运用灵活，是telnet的替代指令。

参数说明

可选参数及其说明如下：

[执行指令]：是由用户输入的想要在远程主机上执行的指令。如果在指令中为对此项进行指定，ssh将进入交互模式登录远程主机。

基础应用

范例579 远程登录主机。

[root@localhost ～]# ssh –l wirte@192.168.88.1　//远程登录

wirte@192.168.88.1’s password:　//执行远程登录，系统将要求用户输入密码

Last login: Wed May 30 17:07:12 2008 from 192.168.88.1 on pts/4

[root@localhost ～]#

在分时系统中允许多个用户同时使用一台计算机，为了保证系统的安全和记账方便，系统要求每个用户使用单独的账号作为登录标识，同时系统还要求用户在进入该系统之前输入标识和口令，这个过程就称为“登录”。而远程登录就是指用户通过本地主机和网络连接登录到远程主机上的过程。在指令中192.168.88.1是远程主机地址，wirte是系统账户，而要求输入的密码就是账户口令。

6.3.9 statserial 指令：samba 服务器程序

学习目标 学会利用statserial 指令来显示串口状态以判断串口是否正常

语法 statserial [-可选参数] 串口设备

功能说明 statserial 指令是root 用户用来显示指定串行端口的统计信息，帮助用户诊断端口的故障。如果指令不是一次显示后退出，用户可以通过组合键“Ctrl+C”终止显示终端串口状态的显示。

参数说明 可选参数及其说明如下：

基础应用

范例580 显示指定串口的统计信息。

执行指令“statserial /dev/ttyS0”将显示指定串行端口/dev/ttyS0 详细的状态信息，以组合键“Ctrl+C”终止系统的循环显示。

范例581 仅显示一次串口状态，然后结束程序。

与本例相比，程序执行一次后将自动退出，不用手动输入组合键来退出显示程序。

6.3.10 talk 指令：与其他用户交谈

学习目标 掌握talk 指令的用法实现网络用户间的交谈。

语法 talk 用户名 终端机号

功能说明 talk 指令是用于Internet 上的两用户之间进行交谈的服务程序。只要知道对方的地址，就可以邀请对方进行交谈。

基础应用

范例582 已知当前用户adc 登录在主机yy.cic.shengyang.edu.cn 上，希望和登录在主机triger.cic.shengyang.edu.cn上的用户guest进行交谈。利用talk指令向对方发出邀请。

[adc@localhost ～]$ talk guest@triger.cic.shengyang.edu.cn　　//发出邀请

当前用户向交谈对象发出邀请后，Internet 的相关程序Talk Daemon 会向被邀请用户的终端传送如下信息，并响铃提示。

Message from Talk_Daemon@triger.cic.shengyang.edu.cn at 12:01 …

talk: connection requested by adc@yy.cic.shengyang.edu.cn

talk: respond with: talk adc@yy.cic.shengyang.edu.cn

此时，被邀用户将根据提示信息进行输入。

[guest @localhost ～]$ talk adc@yy.cic.shengyang.edu.cn

连接建立后，在双方的终端屏幕上将显示以下信息并响铃。

Connection established

这时，用户就可以进行输入交谈了。如果要结束交谈，可由任何一方按下Ctrl_C来中断连接，并在屏幕上回显信息。

Connection closing.Exiting

6.3.11 tcpdump指令：倾倒网络传输数据

学习目标 学会使用tcpdump指令截获网络中传输的数据流通过终端显示进行网络故障的troubleshooting。

语法 tcpdump [-可选参数]

功能说明 tcpdump 指令通过将网络接口卡设置为混杂模式来截获经过网络接口的每一个分组信息，在Linux操作系统中只有系统管理员才能执行此指令。在UNIX内核中提供了BSD 分组滤波器BPF（BSD Packet Filter），tcpdump 用它来截获和过滤来自一个被置为混杂模式的网络接口卡的分组。

参数说明 可选参数及其说明如下：

续表

【关键字】

host 地址：指定主机地址。

net 地址：指定网络地址。

port 端口：指定端口号。

src：指明ip 包中源地址。

dst：指明目的网络地址。

'and'/'&&'：与运算。

'or' /'││'：或运算。

'not '/ '! '：非运算。

fddi：协议关键字，指定 tcpdump 将监听的相关协议的信息包为分布式光纤数据接口网的网络协议。

ip：协议关键字，指定 tcpdump 将监听的相关协议的信息包为ip 协议。

arp：协议关键字，指定 tcpdump 将监听的相关协议的信息包为arp 协议。

tcp：协议关键字，指定 tcpdump 将监听的相关协议的信息包为tcp 协议。

udp：协议关键字，指定 tcpdump 将监听的相关协议的信息包为udp 协议。

注：如果没有指定任何协议，则tcpdump将会监听所有协议的信息包。

基础应用

范例583 直接启动tcpdump 显示网络界面上所有流过的数据包信息。

[root@localhost ～]# tcpdump　　　　//显示tcp数据包信息

tcpdump: listening on eth0

13:07:42.764721 202.106.245.47.netbios-ns > 202.106.245.126.netbios-ns: udp 50

13:07:42.967589 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43

0000 0000 0080 0000 1007 cf08 0900 0000

0e80 0000 902b 4695 0980 8701 0014 0002

000f 0000 902b 4695 0008 00

13:07:43.21461 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97

ffff 0060 0004 ffff ffff ffff ffff ffff

0452 ffff ffff 0000 e85b 6d85 4008 0002

0640 4d41 5354 4552 5f57 4542 0000 0000

0000 00

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

--------------------------------------------------- //省略部分结果

执行指令“tcpdump”显示网络界面上所有流过的数据包信息。

范例584 显示指定网卡上所有流过的数据包信息。

[root@localhost ～]# tcpdump -i eth0 //显示指定网卡上所有流过的数据包信息

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

17:23:49.274983 IP 192.168.88.121.ssh > 192.168.88.220.1868: P 4212038691: 4212038807(116) ack 1607253131 win 8576

17:23:49.291321 IP 192.168.88.220.1868 > 192.168.88.121.ssh: .ack 116 win 16108

17:23:49.301819 IP 192.168.88.121.ssh > 192.168.88.220.1868: P 116:232(116) ack 1 win 8576

17:23:49.301819 IP 192.168.88.220.ssh > 192.168.88.121.1868: P 3216:3348(132) ack 1 win 8576

17:23:49.307740 IP 192.168.88.121.1868 > 192.168.88.220.ssh: P 3216:3348(132).ack 3348win 16152

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

--------------------------------------------------- //省略部分结果

执行指令“tcpdump -i eth0”显示指定网卡eth0 上所有流过的数据包信息。

6.3.12 telnet 指令：远程登录

学习目标 了解telnet 指令远程登录的应用

语法 telnet [-可选参数] 主机名/IP

功能说明 telnet 指令是TCP/IP 协议的一员，应用该协议可以将本地用户的计算机变成远程主机系统里的一个终端，用户可以通过该终端的输入命令来操作远程主机，获取信息。使用telnet指令进行远程登录必须知道主机的IP地址/域名、登录账号和口令。telnet指令进行远程登录是使用名文传输信息，虽然简便但存在严重的安全隐患。

参数说明

可选参数及其说明如下：

续表

基础应用

范例585 远程登录主机。

[root@localhost ～]# telnet 192.168.1.1　　//远程登录

Trying 192.168.1.1...

Connected to 192.168.1.1 (192.168.1.1).

Escape character is '^]'.

Fedora 10

login: mary　　　　　　　　　//输入用户名

Password:xxxxxxxx　　　　　　　//输入密码

Last login: Tue Mar 30 17:07:12 2007 from 192.168.1.1

[mary @localhost ～]$　　　　//登录上远程主机，等待输入命令，输入Exit退出远程主机

6.3.13 testparm 指令：测试Samba配置文件

学习目标 掌握使用testparm 指令测试Samba 的设置是否正确无误

语法 testparm [-可选参数] [配置文件] [主机]

功能说明 testparm 指令可以用来测试Samba 配置文件的语法是否正确无误。如果指令中未指定地址，系统将自动检测/etc/samba目录下的文件smb.conf。

参数说明 可选参数及其说明如下：

基础应用

范例586 测试Samba 配置文件。

[root@localhost ～]# testparm　　　　//测试Samba配置文件

Load smb config files from /etc/samba/smb.conf

Processing section "[homes]"

Processing section "[printers]"

Loaded services file OK.

Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

//按“回车”键继续

# Global parameters

[global]

workgroup = MYGROUP

server string = Samba Server

log file = /var/log/samba/%m.log

max log size = 50

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

printcap name = /etc/printcap

dns proxy = No

idmap uid = 16777216-33554431

idmap gid = 16777216-33554431

cups options = raw

[homes]

comment = Home Directories

read only = No

browseable = No

[printers]

comment = All Printers

path = /var/spool/samba

printable = Yes

browseable = No

[root@localhost ～]#

6.3.14 traceroute 指令：显示数据包到主机间的路径

学习目标 在了解网络结构的基础上掌握traceroute 指令的应用。

语法 traceroute [-可选参数] 主机名/IP

功能说明 traceroute 指令通过发送数据包到指定的远端计算机并等待其返回，来追踪网络数据从本地计算机到远端主机所走的路径。在互联网中的信息传送是通过网络中的传输介质和设备，如路由器、交换机、服务器、网关等，将信息从一端送达另一端。这些网络设备一般都拥有一个独立的IP地址。traceroute程序就利用ICMP及IP header的TTL（Time To Live）栏位信息来获取所经过的网络设备的域名和 IP 地址，以及三个数据包（traceroute 指令每执行一次都要对指定设备测试3次）每次来回所花时间。

参数说明 可选参数及其说明如下：

基础应用

范例587 显示到达目的地的数据包路由。

root@localhost:～# traceroute www.sina.com　　//追踪路由

traceroute to www.sina.com (202.108.33.32), 30 hops max, 40 byte packets

1 202.108.33.32 (202.108.33.32) 1.616 ms 2.101 ms 12.737 ms

2 202.108.33.02 (202.108.33.02) 1.510 ms 11.748 ms 13.655 ms

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

------------------------------------------------------------- //省略部分信息

12 202.109.68.12 (202.109.68.12) 167.71 ms 168.904ms 177.607 ms

在范例中，执行指令“traceroute www.sina.com”后在本地主机的终端上显示了到指定域www.sina.com 所经过的所有网络设备的IP 号。

6.3.15 rlogin 指令：远端登录

学习目标 了解rlogin 的原理和操作

语法 rlogin 远端主机 [-可选参数]

功能说明 rlogin 是“remote login”（远程登录）的缩写，用来连接当前本地主机系统到远端的主机系统，允许用户启动远程系统上的交互命令会话。在TCP/IP网络上，提供了两种远程登录工具，一为Telnet，是标准的提供远程登录功能的应用，几乎每个TCP/IP的实现都提供这个功能；二为Rlogin，起源于伯克利UNIX，开始它只能工作在UNIX系统之间，现在已经可以在其他操作系统上运行。与Telnet相比，Rlogin比较简单。

参数说明 可选参数及其说明如下：

基础应用

范例588 启动rlogin 工具。

[root@localhost ～]# chkconfig rlogin on　//启动rlogin工具

[root@localhost ～]#

执行指令“chkconfig rlogin on”，将启动rlogin 工具。

范例589 登录到指定的远端主机。

[root@localhost ～]#rlogin 192.168.129.1　//登录主机192.168.129.1

login: mary　　　//输入登录帐户

Password:********* //输入登录密码

[mary@localhost ～]$

输入指令“rlogin 192.168.129.1”将连接到指定的远端主机192.168.129.1，然后按系统提示输入登录系统的用户名和密码完成登录操作。

6.3.16 rsh 指令：远端登录的Shell

学习目标 了解rsh 指令

语法 rsh [-可选参数] 主机 指令

功能说明 rsh 指令将指令传送到远端主机上执行，然后将远端主机上的执行结果输出到本地主机的标准输出。

参数说明 可选参数及其说明如下：

基础应用

范例590 执行远程指令。

[root@localhost ～]# rsh -l mary 192.168.126.1 /bin/pwd

执行指令“rsh -l mary 192.168.129.1 /bin/pwd”将以账号mary登录远程主机192.168.129.1，执行指令/bin/pwd。要正确执行该指令，须先在远程主机192.168.129.1上启动rlogin指令。

6.3.17 tty指令：显示标准输入设备名称

学习目标 能使用tty 指令显示当前终端的设备名称

语法 tty [-可选参数]

功能说明 在Linux 系统中所有外设都有自己的名称和代号，并将这些名称和代号以文件的形式存放于/dev的目录下。tty指令通过查询该文件获取当前的终端名。

参数说明 可选参数及其说明如下：

基础应用

范例591 显示当前终端的设备名称。

[root@localhost ～]# tty　　　　　//显示当前终端的设备名称

/dev/pts/1

[root@localhost ～]#

本例使用指令tty显示当前终端的名称，显示为/dev/pts/1。

6.3.18 uucp指令：将特定文件拷贝到另一个特定系统

学习目标 能运用该命令在两系统间进行文件传输

语法 uucp [-可选参数] 源文件名 文件/目录

功能说明 uucp 指令用于在两系统之间进行文件传输，类似 cp 命令。它可以将本系统的文件拷贝到其他系统，也可以将其他系统中的文件拷贝到当前系统中。

参数说明 可选参数及其说明如下：

基础应用

范例592 文件传送。

[root@localhost home]# uucp～/win sse!～/cse/　　//传送文件到网络上指定的系统

执行指令“uucp ～/win sse!～/cse/”将文件传送到网络上指定的系统。

[root@localhost ～]# uucp sse!～/mmt/who～mary　//传送网络上指定系统的文件到本系统

执行指令“uucp sse!～/mmt/who ～mary”将网络上指定系统的文件传送到本系统。指令中的 sse!～/mmt/who 中 sse!是网络中的系统名称，～/mmt/who 指定完整的路径名称，～表示的目前工作目录。

6.3.19 uulog指令：显示uucp记录信息

学习目标 了解如何查询UUCP 记录文件信息

语法 uulog [-可选参数]

功能说明 uulog 指令显示UUCP 记录文件中的记录信息。

参数说明 可选参数及其说明如下：

基础应用

范例593 显示uucp 的记录信息。

[root@localhost ～]# uulog　　　　//显示uucp记录信息

uucico - - (2008-12-31 12:11:01.16 5640) Incoming call (login root port pts/1)

uucico - - (2008-12-32 00:14:12.78 5931) Incoming call (login root port pts/1)

uucico - -(2008-12-32 21:13:45.03 2653) No work

[root@localhost ～]#

6.3.20 uuname指令：显示uucp远端主机

学习目标 掌握查看uucp 远端主机的方法

语法 uucp [-可选参数]

功能说明 uuname 指令显示全部的uucp 远端主机。

参数说明 可选参数及其说明如下：

基础应用

范例594 显示UUCP 远端主机的名称。

[root@localhost ～]# uuname　　　//显示远端主机名称

6.3.21 uustat指令：显示uucp状态

学习目标 学会使用uustat 指令查看uucp 状态

语法 uustat [-可选参数]

功能说明 uustat 指令可显示、删除或启动当前队列中等待执行的 uucp 任务。

参数说明 可选参数及其说明如下：

续表

基础应用

范例595 显示全部的UUCP 任务。

[root@localhost ～]# uustat -a　　//显示全部的UUCP任务

范例596 删除全部的UUCP 任务。

[root@localhost ～]# uustat --kill-all　　//删除全部的UUCP任务

6.3.22 uux指令：在远端的uucp主机上运行指令

学习目标 掌握如何使用UUCP 在远端主机上运行指令

语法 uux [-可选参数] 指令

功能说明 uux 是UUCP 组中的一个命令，执行uux 指令，会先将工作送到队列，再由uucico来执行工作。uux指令可在远端uucp主机上执行指令。

参数说明 可选参数及其说明如下：

续表

基础应用

范例597 在远端uucp 主机执行指令。

[mary@localhost ～]$ uux winds!pwd　//在远端主机执行指令pwd

6.3.23 wall指令：发送信息

学习目标 学会使用wall 指令向所有登录系统的用户传送信息

语法 wall [信息]

功能说明 执行 wall 指令可以向所有的终端用户发送广播信息，如果你不想接收任何 wall 信息，可以使用“mesg n”指令来禁止其他用户将信息直接显示在你的屏幕上。在 wall 指令中的信息是用户想要发送的信息，它可以是一个事先写好的文件通过重定向的功能将文件内容输出到终端。如果指令中给出发送信息，系统将从标准输入设备读取数据作为传送信息。

基础应用

范例598 直接传送消息。

[root@localhost ～]# wall there will a meeting at 13：30　　　//直接传送消息

Broadcast message from root (pts/4) (wed Jan 01 09:00:07 2008):

there will a meeting at 13：30

[root@localhost ～]#

范例599 指定一个文件作为发送消息。

[root@localhost ～]# wall </home/yy/a1.txt　　　//指定一个文件作为发送消息

Broadcast message from root (pts/4) (wed Jan 01 09:00:07 2008):

An accident happened at the meeting of two roads

[root@localhost ～]#

范例600 从标准输入设备读取数据作为传送信息。

[root@localhost ～]# wall　　//从标准输入设备读取数据

1245758　　//以Ctrl+D退出

Broadcast message from root (pts/1) (wed Jan 01 09:00:07 2008)

1245758

[root@localhost ～]#

6.3.24 write指令：传送信息

学习目标 了解write 传送信息的基本应用

语法 write 用户名 [终端机编号]

功能说明 write 指令是向同在一个系统中的另一个用户发送信息的工具。在 write 指令中，要求发送方和接收方位于同一主机上才能进行信息的传送。而当用户可能不只登录本地主机一次时，就需要通过指定接收信息的终端机编号来发送信息。

基础应用

范例601 向指定的用户终端传送消息。

[root@localhost ～]# write tom　　　//向指定的用户 tom发送信息

Hello tom

Are you ok　//以Ctrl+D退出

[root@localhost ～]#

执行指令“write tom”后，write 命令将等待用户从终端输入信息。当用户完成输入退出后，将在指定用户tom的终端显示发送信息。

[tom@localhost ～]$

Message from root@localhost.localdomain on pts/1 at 09:37 ...

Hello tom

Are you ok

EOF

在接收用户tom的终端上，不仅显示了传送信息本身还显示了信息的来源、时间，同时在显示信息的结尾处还加上了结束符EOF。

6.3.25 ytalk 指令：与其他用户交谈

学习目标 能使用ytalk 指令与在线的其他用户进行交谈

语法 ytalk [-可选参数] 用户名

功能说明 通过 ytalk 指令可以与在线的其他用户进行交谈，也可以与指定的其他主机上的用户进行交谈。

参数说明 可选参数及其说明如下：

基础应用

范例602 与指定的用户交谈。

[root@localhost ～]# ytalk marY　　//与用户mary交谈

6.3.26 gaim指令：即时信息传输

学习目标 了解gaim 指令的用法

语法 gaim[必要参数][选择性参数]

功能说明 gaim 指令用于即时信息的传输。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例603 启动gaim。

[root@localhost root]# gaim　　//启动gaim

本例使用指令gaim启动gaim。

6.4 其他网络服务指令

6.4.1 apachectl指令：apache HTTP服务器控制接口

学习目标 能使用 apachectl 指令启动/关闭 apache HTTP 服务器，并且掌握各个参数的功能及应用

语法 apachectl [-可选参数]

功能说明 apachectl 指令是 Apache HTTP 服务器的一个控制接口，管理员可通过apachectl 指令来控制 Apache HTTP 服务器的后台工作，如 Apache HTTP 的开启、关闭等与参数相应的功能。

参数说明 可选参数及其说明如下：

基础应用

范例604 启动服务器。

[root@localhost ～]# apachectl start //启动 apache HTTP 服务器

httpd (pid 9990) already running

[root@localhost ～]#

执行指令“apachectl start”显示服务器Apache HTTP 以启动。

范例605 关闭服务器。

[root@localhost ～]# apachectl stop //关闭 apache HTTP 服务器

[root@localhost ～]#

6.4.2 arp 指令：地址转换协议

学习目标 了解arp 协议的基础及其两个指令arpwatch 和arptable，能运用arp 指令显示和修改ARP缓存的信息

语法 arp [-可选参数]

功能说明 使用 arp 指令可查看主机的 ARP 缓存，确定 IP 地址与对应的网卡物理的地址。ARP 即Address Resolution Protocol，是一个重要的TCP/IP 协议，在ARP 表中保存的是IP地址与对应的物理网卡地址MAC的对应关系。ARP缓存中的数据是动态的，每当发送一个指定地点的数据包且ARP高速缓存中不存在当前地址项目时，ARP就会自动添加该地址。通过arp指令我们还可以修改IP地址和MAC地址对，为缺省网关和本地服务器进行地址匹配。

参数说明 可选参数及其说明如下：

基础应用

范例606 使用arp 指令进行绑定，已知待绑定主机的IP：192.168.1.25，MAC：00：06：B2：4F：32：26。

[root@localhost ～]# arp　//显示当前主机的ARP信息

Address　　　HWtype HWaddress　　　Flags Mask　　　　Iface

192.168.1。214　ether　00：0F：11：67：7E：45　C　　　　　　eth0

192.168.1。106　ether　00：87：13：A1：5F：D0　C　　　　　　eth0

192.168.1。88　ether　00：9A：1B：91：6D：37　C　　　　　　eth0

192.168.1。0　　ether　00：01：29：E1：40：32　C　　　　　　eth0

[root@localhost ～]# echo‘192.168.1.25　00：06：B2：4F：32：26’>/etc/ip-mac

[root@localhost ～]# arp –f /etc/ip-mac　//

[root@localhost ～]# arp

Address　　　HWtype HWaddress　　　Flags Mask　　　　Iface

192.168.1。214　ether　00：0F：11：67：7E：45　C　　　　　　eth0

192.168.1。106　ether　00：87：13：A1：5F：D0　C　　　　　　eth0

192.168.1。88　ether　00：9A：1B：91：6D：37　C　　　　　　eth0

192.168.1。0　　ether　00：01：29：E1：40：32　C　　　　　　eth0

192.168.1.25　　ether　00：06：B2：4F：32：26　C　　　　　　eth0

[root@localhost ～]#

在范例中我们对指定地址进行了绑定，在arp指令的显示信息中Address表示主机的IP地址，HWtype 表示主机的硬件类型，HWaddress 表示主机的硬件地址，Flags Mask 是记录标示，C表示高速缓存信息。

6.4.3 arping指令：ARP请求报文

学习目标 能使用该指令向相邻主机发送ARP 报文

语法 arp [-可选参数] 必要参数

功能说明 使用arping 指令可以向同一网络的主机发送ARP 报文。

参数说明 必要参数及其说明如下：

可选参数及其说明如下：

基础应用

范例607 发送报文。

[root@localhost ～]# arping -U -I eth0 -s 192.168.1.201 192.168.1.1　//显示当前主机的ARP信息

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.344ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 3.176ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.295ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.267ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 2.390ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.466ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 3.291ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 5.414ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.279ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.167ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 1.294ms

Unicast reply from 192.168.1.1 [00:14:32:78:69:54] 5.168ms

Sent 12 probes (1 broadcast(s))

Received 12 response(s)

[root@localhost ～]#

在指令“arping -U -I eth0 -s 192.168.1.201 192.168.1.1”中eth0 是目的主机，192.168.1.201是发送机的IP，192.168.1.1是网关。

6.4.4 arpwatch 指令：监听ARP 记录

学习目标 掌握 arpwatch 指令监听 ARP 信息的方法，并可以将相关信息记录到相应的文件中

语法 arpwatch [-可选参数]

功能说明 arpwatch 指令可监听本地网卡的ARP 数据包信息，了解以太网地址MAC 和IP地址的配对情况，同时通过E-mail的形式将其发送到系统日志/var/log/message中报告当前ARP数据的变化。

参数说明 可选参数及其说明如下：

【系统报告信息解释】

ethernet broadcast：主机的MAC 地址是广播地址。

ip broadcast：主机的IP 地址是广播地址。

bogon：源IP 地址不是本地子网地址。

ethernet mismatch：源MAC 地址与ARP 数据包里的地址不匹配。

reused old ethernet address：MAC 地址发生变化。

suppressed DECnet flip flop：禁止“flip flop”报告。

基础应用

范例608 监听指定网卡的ARP 信息。

[root@localhost:～]# arpwatch -i eth0　//监听网卡eth0的ARP信息

[root@localhost:～]#

因为系统的默认监听网卡为 eth0，所以指令“arpwatch -i eth0”的执行效果与指令“arpwatch”的结果相同。arpwatch指令将作为后台程序运行，监听网卡eth0的ARP信息，同时将其保存到默认的系统日志。

范例609 将监听到的ARP 信息发送给指定用户。

[root@localhost:～]# arpwatch -i eth1 -s root@localhost.localdomain //监听网卡 eth1 的ARP信息发送到本地的root用户邮箱中

[root@localhost:～]#

执行指令“arpwatch -i eth1 -s root@localhost.localdomain” 监听网卡eth1 的ARP 信息发送到指定的本地用户root的邮箱。

范例610 将监听到的ARP 信息保存到指定。

[root@localhost:～]# arpwatch –f arp1.log　　//监听网卡 eth0 的 ARP 信息，录到文件arp1.log中

[root@localhost:～]#

6.4.5 arptables指令：管理系统的ARP 表

学习目标 掌握arptables 指令通过过滤守护进程防止ARP 欺骗

语法 arpwatch [-t table]chain target [-可选参数]

功能说明 arptables 与 iptables 类似，但 arptables 指令工作在 arp 协议层。用户可通过arptables指令来管理Linux内核ARP规则表里的各项出路规则，进而设置系统的内核如何运用指定规则对接收到的ARP帧进行检测。

在 arptables 指令中链（chain）指的是一个排序规则列表中的单个设置；目标（target）即是当一个ARP帧与一个规则相匹配时的操作说明；而表（table）就是一个过滤器，在内核中只有一个 ARP 表，它包含了 INPUT（发送帧的源主机）、OUTPUT（本地产生的帧）、FORWARD（由桥代码转发的帧）。

参数说明

可选参数及其说明如下：

续表

基础应用

范例611 删除指定规则。

[root@localhost:～]# arptables -D INT -s 192.168.1.1 -j DROP //删除指定规则

[root@localhost:～]#

执行指令“arptables -D INT -s 192.168.1.1 -j DROP”删除指定的ARP 规则。

范例612 添加规则。

[root@localhost:～]# arptables -A INT -s 192.168.1.1 -j DROP //添加规则

[root@localhost:～]#

6.4.6 httpd 指令：apache http 服务器程序

学习目标 学会使用httpd 指令来启动httpd 服务器、检查相关apache 超文本传输协议服务器程序，并能显示配置文件。

语法 httpd [-可选参数]

功能说明 httpd 指令是apache http 超文本传输协议服务器程序。它可直接启动服务器，创建一个子进程或者多线程来处理请求。

参数说明 可选参数及其说明如下：

基础应用

范例613 启动httpd 服务器。

[root@localhost ～]# httpd　　//直接启动服务器

httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 forServerName

[root@localhost ～]# ps -A|grep httpd　//查找httpd进程

6467 ?　　00:00:00 httpd

6468 ?　　00:00:00 httpd

6469 ?　　00:00:00 httpd

6470 ?　　00:00:00 httpd

6471 ?　　00:00:00 httpd

6472 ?　　00:00:00 httpd

6473 ?　　00:00:00 httpd

6474 ?　　00:00:00 httpd

[root@localhost ～]#

执行指令“httpd”直接启动HTTP服务器。

范例614 检查配置文件的语法错误。

[root@localhost ～]# httpd -t　　//检查配置文件的语法是否有错

httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 forServerName

Syntax OK

[root@localhost ～]#

实战思考

应用思考

尝试执行“httpd -M”指令来显示被激活的Apache 服务器的众多功能模块信息。

6.4.7 mesg指令：控制终端的写入

学习目标 能使用mesg 指令许可或者禁止其他用户发送信息到当前终端设备之上

语法 mesg [可选参数]

功能说明 mesg 指令可通过输入参数来控制其他用户能否使用write 指令发送信息到当前用户使用的显示终端。

参数说明 可选参数及其说明如下：

基础应用

范例615 查看当前状态。

[root@localhost ～]# mesg

is y

[root@localhost ～]

当在终端直接输入mesg指令时，系统将显示当前的状态。

范例616 禁止其他用户发送信息到当前显示终端。

[root@localhost ～]# mesg n

[root@localhost ～]# mesg

is n

[root@localhost ～]

在 Shell 命令行模式下，输入指令“mesg n”将禁止其他用户的信息在当前终端上显示。

范例617 允许其他用户发送信息到当前显示终端。

[root@localhost ～]# mesg n

[root@localhost ～]# mesg

is y

进入允许状态。

[mary@localhost ～]# $ write root gra/3//在另一个终端上写入

Hello

How are you

从另一终端输入数据，以“Ctrl+d”结束。

[root@localhost ～]#

Message from mary@localhost on gra/4 at 12:01 ...

Hello

How are youEOF

[root@localhost ～]#

6.4.8 minicom 指令：调制解调器通信程序

学习目标 掌握minicom 指令的具体应用条件和功能

语法 minicom [-可选参数] [配置文件]

功能说明 minicom 是一个开源的友好的调制解调器串行通信程序，使用该指令可实现PPP拨号连线。

参数说明 可选参数及其说明如下：

基础应用

范例618 设置终端机的属性。

[root@localhost ～]# minicom –attrib=on

[root@localhost ～]

实战思考

应用思考

minicom指令和cu指令都是串行通信工具，但cu的使用更为简单，用户可对比二者的功能差异。

6.4.9 newaliases指令：重建别名数据库

学习目标 学会使用newaliases 新建一个别名数据库副本

语法 newliases

功能说明 newaliases 指令能将 /etc/aliases 文件转换成一个 sendmail 所能了解的数据库。每次该文件更改时，都必须运行这条命令，重新初始化，使变动生效。运行这条命令和使用 -bi 标志运行 sendmail 命令是等价的。

6.4.10 bye 指令：中断FTP连接

学习目标 中断FTP 连线并结束程序

语法 bye

功能说明 在FTP 模式下输入bye 指令将中断连线，结束FTP 的执行，返回到Linux 的命令行界面。

基础应用

范例619 中断目前的作业连线。

ftp> bye

[root@locahost ～]#

在ftp模式下输入指令bye即可中断目前的作业连线，并结束ftp的执行。

6.4.11 ftpcount指令：显示ftp登录用户数

学习目标 能使用ftpcount 指令显示当前以ftp 登录的用户数

语法 ftpcount

功能说明 显示登录本地ftp 的用户数、支持的用户上限。

基础应用

范例620 显示当前ftp 用户数。

[root@localhost ～]#ftpcount　　//显示ftp用户数

运行指令“ftpcount”显示当前登录ftp的用户数。

6.4.12 ftpshut指令：定时关闭ftp服务器

学习目标 能使用ftpshut 指令在指定时间关闭ftp 服务器

语法 ftpshut [-可选参数] [时间] [字符串]

功能说明 ftpshut 指令用来在指定的时间关闭ftp 服务器，并可以设置关闭前的字符串。

参数说明 选择性参数的具体说明如下：

基础应用

范例621 关闭ftp 服务器。

[root@localhost ～]# ftpshut　　//定时关闭ftp

本例使用指令“ftpshut -d 10 -l 8 0000 "byebye"”在指定时间关闭ftp。

范例622 关闭ftp 服务器。

[root@localhost ～]# ftpshut -d 10 -l 8 0000 "byebye"　　　　　//定时关闭ftp

本例使用指令“ftpshut -d 10 -l 8 0000 "byebye"”在指定时间关闭ftp。

6.4.13 ftpwho指令：显示ftp登录用户信息

学习目标 能使用ftpwho 指令显示当前所有ftp 登录用户信息

语法 ftpwho

功能说明 ftpwho 指令用来显示当前 ftp 登录的都有哪些用户，以及这些目前正在进行的操作。

基础应用

范例623 显示登录用户。

[root@localhost ～]# ftpwho　　//显示登录用户

本例使用指令“ftpwho”显示ftp登录用户。

6.4.14 fetchmail指令：获得邮件

学习目标 了解fetchmail 指令的用法

语法 fetchmail[必要参数][选择性参数][邮件服务器]

功能说明 fetchmail 指令用于邮件收取和发送，它从远端邮件服务器获取邮件并将其发送到本地客户端。用户可以用通常的邮件用户代理如mutt，elm或者mail来处理收到的邮件，也可以通过设置使得fetchmail指令周期性地收取邮件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

续表

基础应用

范例624 从邮件服务器下载邮件。

[root@localhost ～]# fetchmail -p POP3 -u 04515674 mail.njtu.edu.cn　　//下载邮件

Enter password for 04515674@mail.njtu.edu.cn:

5 messages for 04515674 at mail.njtu.edu.cn (1063170 octets).

reading message 04515674@mail.njtu.edu.cn:1 of 5 (2001 octets) ..flushed

reading message 04515674@mail.njtu.edu.cn:2 of 5 (1666 octets) .flushed

reading message 04515674@mail.njtu.edu.cn:3 of 5 (1899 octets) .flushed

reading message 04515674@mail.njtu.edu.cn:4 of 5 (1899 octets) .flushed

reading　　message　　04515674@mail.njtu.edu.cn:5　　of　　5　　(1055705octets) ...............................................................................

.......................................................................................

.......................................................................................

.......................................................................................

...................................................................................

flushed

You have new mail in /var/spool/mail/root

[root@localhost ～]#

本例使用指令“fetchmail -p POP3 -u 04515674 mail.njtu.edu.cn”下载邮件。通过参数“-p POP3”指定传输协议为POP3，通过参数“-u 04515674”指定用户名为04515674，最后一个参数为指定的邮件服务器。

范例625 收取所有的邮件，并在邮件服务器上保留原邮件。

[root@localhost ～]# fetchmail -ak -p POP3 -u 06145891 mail.bjtu.edu.cn　//下载邮件

Enter password for 06145891@mail.bjtu.edu.cn:

183 messages for 06145891 at mail.bjtu.edu.cn (30069496 octets).

reading message 06145891@mail.bjtu.edu.cn:1 of 183 (2268 octets) ..not flushed

reading message 06145891@mail.bjtu.edu.cn:2 of 183 (2949 octets) ..not flushed

reading message 06145891@mail.bjtu.edu.cn:3 of 183 (12573 octets) ............notflushed

reading message 06145891@mail.bjtu.edu.cn:4 of 183 (7550 octets) .......not flushed

reading message 06145891@mail.bjtu.edu.cn:5 of 183 (25220 octets) .........................not flushed

reading message 06145891@mail.bjtu.edu.cn:6 of 183 (9214 octets) .........not flushed

reading message 06145891@mail.bjtu.edu.cn:7 of 183 (3118 octets) ...not flushed

reading message 06145891@mail.bjtu.edu.cn:8 of 183 (2889 octets) ..not flushed

reading message 06145891@mail.bjtu.edu.cn:9 of 183 (76784 octets) ...................not flushed

reading message 06145891@mail.bjtu.edu.cn:10 of 183 (1350 octets) .not flushed

reading message 06145891@mail.bjtu.edu.cn:11 of 183 (1827 octets) .not flushed

reading message 06145891@mail.bjtu.edu.cn:12 of 183 (215465 octets) .....................not flushed

//此处省略了部分结果

reading message 06145891@mail.bjtu.edu.cn:97 of 183 (1786 octets) .not flushed

reading message 06145891@mail.bjtu.edu.cn:98 of 183 (6568 octets) .fetchmail: terminated with signal 2

You have new mail in /var/spool/mail/root

[root@localhost ～]#

本例使用指令“fetchmail -ak -p POP3 -u 06145891 mail.bjtu.edu.cn”以用户06145891登录到邮件服务器mail.bjtu.edu.cn下载邮件，通过参数“-ak”的设定收取所有的邮件，并保存邮件在邮件服务器上的备份。

6.4.15 getlist指令：下载新闻

学习目标 了解getlist 指令的用法

语法 getlist[选择性参数]

功能说明 getlist 指令可从新闻服务器上下载新闻列表，并将结果输出到标准输出。

参数说明 选择性参数的具体说明如下：

基础应用

范例626 下载新闻列表。

[root@localhost littleProg]# getlist -h news.jinghua.net//下载新闻列表

本例使用指令“getlist -h news.jinghua.net”从主机news.jinghua.net 上下载新闻列表。

6.4.16 mail 指令：收发邮件

学习目标 能用mail 指令收发邮件

语法 mail[必要参数][选择性参数][邮箱地址]

功能说明 mail 指令是一个邮件管理工具，它在命令行下工作。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

【进入mail后的指令】

数字键：选择邮件。

+：上一封。

-：下一封。

h：显示标题。

q：退出mail 程序，退出前删除标记的邮件。

x：退出mail 程序。

？：帮助信息。

p<邮件号>：读取指定邮件号的邮件。

d<邮件号>：删除邮件。

u<邮件号>：恢复邮件。

R<邮件号>：回复邮件。

r<邮件号>：回复邮件，既寄给发件人，也寄给其他收件人。

m<邮箱地址>：发邮件到指定邮箱。

基础应用

范例627 发送邮件。

[root@localhost ～]# mail 02211025@bjtu.edu.cn　//发送邮件

Subject: life　　　　　　　　　//输入邮件主题

life is like a box of chocolate,before you eat it,you never know what you will get

//输入邮件内容

Cc: 06111021@bjtu.edu.cn　　　　　　//输入副本的发送

本例使用指令“mail 02211025@bjtu.edu.cn”将邮件发送到02211025@ bjtu.edu.cn，发送邮件的内容为“life is like a box of chocolate,before you eat it,you never know what you will get”，副本发送到06111021@bjtu.edu.cn。

范例628 查询当前用户的邮件信息。

本例使用指令mail查询当前用户的邮件信息。

6.4.17 mailq指令：显示发件箱的邮件

学习目标 掌握mailq 的用法

语法 mailq[必要参数]

功能说明 mailq 指令用来显示发件箱的邮件。

参数说明 必要参数的具体说明如下：

基础应用

范例629 显示待发送的邮件。

root@localhost:～# mailq -v　　　　　//显示待发送的邮件

150d　867 1HAvys-0005CP-Ti <root@localhost>

root@localhost

143d　867 1HDTJi-0001Uc-Sl <root@localhost>

root@localhost

120d　867 1HLoHc-0001DN-F6 <root@localhost>

root@localhost

118d　867 1HMXEQ-0001Yp-Pn <root@localhost>

root@localhost

80d　867 1HaJLK-0000KZ-Jp <root@localhost>

root@localhost

59d　867 1HhvLo-0007TR-FQ <root@localhost>

root@localhost

45d　867 1Hn01V-0003iZ-Nc <root@localhost>

root@localhost

24d　867 1Huc20-0002Uo-4O <root@localhost>

root@localhost

17d　867 1Hx9Mr-0004mo-94 <root@localhost>

root@localhost

root@localhost:～#

本例使用指令“mailq –v”显示待发送的邮件。

6.4.18 mutt指令：e-mail管理

学习目标 掌握mutt 指令的用法

语法 mutt[参数]

功能说明 mutt 指令是一个使用文字模式的邮件管理器。

参数说明 必要参数的具体说明如下：

基础应用

范例630 运行mutt。

root@localhost:～# mutt　　　　　　//执行mutt

q:Quit d:Del u:Undel s:Save m:Mail r:Reply g:Group ?:Help

---Mutt: (no mailbox) [Msgs:0]---(threads/ date)----------------------- --(all)---

运行指令mutt，进入以上界面。

范例631 显示帮助信息。在【范例】的界面中输入“？”，显示帮助信息。

i:Exit　-:PrevPg　<Space>:NextPg ?:Help

^B　　　M <pipe-message> ur...call urlview to extract URLs out of a message

^D　　　delete-thread　　delete all messages in thread

^E　　　edit-type　　　edit attachment content type

^F　　　forget-passphrase　wipe passphrase(s) from memory

<Tab>　　next-new-then-unread　jump to the next new or unread message

<Return>　　display-message　　display a message

^K　　　extract-keys　　　extract supported public keys

^N　　　next-thread　　　jump to the next thread

^P　　　previous-thread　　jump to previous thread

^R　　　read-thread　　　mark the current thread as read

^T　　　untag-pattern　　untag messages matching a pattern

^U　　　undelete-thread　　undelete all messages in thread

<Esc><Tab> previous-new-then-unre jump to the previous new or unread message

<Esc>C　　decode-copy　　　make decoded (text/plain) copy

<Esc>P　　check-traditional-pgp　check for classic pgp

<Esc>V　　collapse-all　　　collapse/uncollapse all threads

<Esc>b　　M <search>～b　　　search in message bodies

<Esc>c　　change-folder-readonly open a different folder in read only mode

<Esc>d　　delete-subthread　　delete all messages in subthread

<Esc>e　　resend-message　　use the current message as a template for a

+　　　　　　　　new one

Help for index　　　　　　　　　　-- (15%)

6.4.19 nntpget指令：从新闻服务器下载文章

语法 nntpget[必要参数][选择性参数][nntp 服务器]

功能说明 nntpget 指令从指定新闻服务器下载文章。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例632 显示处理信息。

[root@localhost:～]# nntpget –v

6.4.20 slrn指令：新闻阅读程序

语法 slrn[必要参数][选择性参数]

功能说明 slrn 指令用来阅读和管理新闻组。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例633 连接新闻组服务器。

[root@localhost root]#slrn -h news.usc.net -f /root/.jnewsrc　　//连接新闻组服务器

本例使用指令“slrn -h news.usc.net -f /root/.jnewsrc”连接新闻组服务器。

6.4.21 wget指令：从互联网下载资源

语法 wget[必要参数][选择性参数]

功能说明 wget 指令用于从互联网下载资源。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例634 下载文件。

root@localhost:～# wget -Q 10M www.sina.com.cn　　//下载文件

--18:15:00--　http://www.sina.com.cn/

=> `index.html'

Resolving www.sina.com.cn...202.205.3.142, 202.205.3.143, 202.205.3.130

Connecting to www.sina.com.cn|202.205.3.142|:80...connected.

HTTP request sent, awaiting response...200 OK

Length: unspecified [text/html]

[　　　　　<=>　　] 277,867　　8.59K/s

18:15:27 (11.10 KB/s) - `index.html' saved [277867]

root@localhost:～#

本例使用指令“wget -Q 10M www.sina.com.cn”从网站www.sina.com.cn 下载10MB 的资料。

6.4.22 host 指令：dns 查询

语法 host[必要参数][选择性参数]名字[服务器]

功能说明 host 指令是一个执行 DNS 查询的简单工具。它通常转换指定的主机名称为IP地址。当不指定参数时，它将显示host指令的用法。

参数说明 必要参数的具体说明如下：

续表

选择性参数的具体说明如下：

基础应用

范例635 显示host 的帮助信息。

[root@localhost sha1]# host　　　　　//host帮助信息

Usage: host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time]

[-R number] hostname [server]

-a is equivalent to -v -t *

-c specifies query class for non-IN data

-C compares SOA records on authoritative nameservers

-d is equivalent to -v

-l lists all hosts in a domain, using AXFR

-i IP6.INT reverse lookups

-N changes the number of dots allowed before root lookup is done

-r disables recursive processing

-R specifies number of retries for UDP packets

-t specifies the query type

-T enables TCP/IP mode

-v enables verbose output

-w specifies to wait forever for a reply

-W specifies how long to wait for a reply

-4 use IPv4 query transport only

-6 use IPv6 query transport only

[root@localhost sha1]#

直接输入host，按“Enter”键，将输出host的帮助信息。

范例636 DNS 查询。

[root@localhost sha1]# host www.bjtu.edu.cn //查询主机名称

www.bjtu.edu.cn has address 202.112.144.31

[root@localhost sha1]# host 202.112.144.31 //查询 IP 地址

Host 31.144.112.202.in-addr.arpa not found: 3(NXDOMAIN)

[root@localhost sha1]#

本例首先使用指令“host www.bjtu.edu.cn”查询主机名称，然后使用指令“host202.112.144.31”查询IP地址。

范例637 查询详细的信息。

[root@localhost sha1]# host -a www.bjtu.edu.cn　　//查询详细的DNS信息

Trying "www.bjtu.edu.cn"

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50411

;; flags:qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:

;www.bjtu.edu.cn.　　　IN　ANY

;; ANSWER SECTION:

www.bjtu.edu.cn.　　10800　IN　A　　202.112.144.31

;; AUTHORITY SECTION:

bjtu.edu.cn.　　　10800　IN　NS　jupiter.njtu.edu.cn.

bjtu.edu.cn.　　　10800　IN　NS　mars.njtu.edu.cn.

;; ADDITIONAL SECTION:

mars.njtu.edu.cn.　　10800　IN　A　　202.112.144.30

jupiter.njtu.edu.cn.　10800　IN　A　　202.112.144.65

Received 127 bytes from 202.112.144.30#53 in 10 ms

[root@localhost sha1]#

本例使用指令“host -a www.bjtu.edu.cn”查询详细的DNS 信息，可以看到有两个DNS服务器。

范例638 指定DNS 服务器进行查询。

[root@localhost sha1]# host -a www.bjtu.edu.cn jupiter.njtu.edu.cn //指定服务器进行DNS查询

Trying "www.bjtu.edu.cn"

Using domain server:

Name: jupiter.njtu.edu.cn

Address: 202.112.144.65#53

Aliases:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15236

;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 5, ADDITIONAL:7

;; QUESTION SECTION:

;www.bjtu.edu.cn.　　　IN　ANY

;; AUTHORITY SECTION:

edu.cn.　　　　85190　IN　NS　NS2.NET.edu.cn.

edu.cn.　　　　85190　IN　NS　NS2.CUHK.HK.

edu.cn.　　　　85190　IN　NS　dns2.edu.cn.

edu.cn.　　　　85190　IN　NS　DENEB.DFN.DE.

edu.cn.　　　　85190　IN　NS　DNS.edu.cn.

;; ADDITIONAL SECTION:

DNS.edu.cn.　　　171217　IN　A　　202.112.0.35

DNS.edu.cn.　　　171217　IN　AAAA　2001:da8:1:100::20

NS2.NET.edu.cn.　　84817　IN　A　　202.112.0.33

NS2.NET.edu.cn.　　84817　IN　AAAA　2001:250:c006::2

NS2.CUHK.HK.　　　55619　IN　A　　137.189.6.21

dns2.edu.cn.　　　85190　IN　A　　202.112.0.13

DENEB.DFN.DE.　　84817　IN　A　　192.76.176.9

Received 279 bytes from 202.112.144.65#53 in 10 ms

[root@localhost sha1]#

本例使用指令“host -a www.bjtu.edu.cn jupiter.njtu.edu.cn”指定DNS 服务器为jupiter.njtu.edu.cn查询主机www.bjtu.edu.cn。

范例639 按照类型进行查询。

[root@localhost sha1]# host -t MX bjtu.edu.cn　//查询邮件交换机的记录

bjtu.edu.cn mail is handled by 10 smg.njtu.edu.cn.

[root@localhost sha1]#

本例使用指令“host -t MX bjtu.edu.cn”查询邮件交换机的记录。

6.4.23 iptables指令：IPv4的包过滤和nat的管理

语法 iptables[-t 表][必要参数][选择性参数]

功能说明 iptable 指令用来设置、维护或者检测Linux 内核的IP 数据包、表，并且定义了不止一种数据表。每一个表包含一定数量的路由链，也有能维护用户定义的路由链。每一个路由链定义了相应的接收数据包的规则。表的类型如下。

filter：信息包过滤表。

mangle：高级路由表。

nat：转发包过滤表。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

续表

基础应用

范例640 显示信息包过滤表。

root@localhost:～# iptables -t filter -L　//显示信息包过滤表

Chain INPUT (policy ACCEPT)

target　prot opt source　　destination

ACCEPT　0　--　anywhere　　anywhere

ACCEPT　0　--　anywhere　　anywhere

ACCEPT　icmp --　anywhere　anywhere

ACCEPT　udp　--　anywhere　anywhere　udp dpt:2304

ACCEPT　tcp　--　anywhere　anywhere　tcp dpts:ftp:telnet

ACCEPT　tcp　--　anywhere　anywhere　tcp dpt:www

ACCEPT　tcp　--　anywhere　anywhere　tcp dpt:8888

ACCEPT　0　--　anywhere　　anywhere　state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT)

target　prot opt source　　　destination

ACCEPT　0　--　anywhere　　　192.168.88.88

ACCEPT　0　--　192.168.88.0/24　　anywhere

ACCEPT　0　--　anywhere　anywhere　state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)

target　prot opt source　　　destination

root@localhost:～#

本例使用指令“iptables -t filter –L”显示信息包过滤表。

范例641 显示高级路由表。

root@localhost:～# iptables -t mangle -L　//显示高级路由表

Chain PREROUTING (policy ACCEPT)

target　prot opt source　　　destination

Chain INPUT (policy ACCEPT)

target　prot opt source　　　destination

Chain FORWARD (policy ACCEPT)

target　prot opt source　　　destination

Chain OUTPUT (policy ACCEPT)

target　prot opt source　　　destination

Chain POSTROUTING (policy ACCEPT)

target　prot opt source　　　destination

root@localhost:～#

本例使用指令“iptables -t mangle –L”显示主机的高级路由表。

范例642 显示转发包过滤表。

root@localhost:～# iptables -t nat -L　　　//显示转发包过滤表

Chain PREROUTING (policy ACCEPT)

target　prot opt source　　　destination

DNAT tcp -- anywhere iplab604 tcp dpt:3389 to:192　.168.88.88:3389

Chain POSTROUTING (policy ACCEPT)

target　prot opt source　　　destination

MASQUERADE　0　--　192.168.88.0/24　anywhere

SNAT 0 --192.168.88.88 anywhere to:202.112.146.70

Chain OUTPUT (policy ACCEPT)

target　prot opt source　　　destination

root@localhost:～#

本例使用指令“iptables -t nat –L”显示转发包过滤表信息。

范例643 INPUT 链设置。

[root@localhost ～]# iptables -P INPUT DROP //设置 INPUT 链的规则

本例使用指令“iptables -P INPUT DROP”设置INPUT 链的默认规则为DROP，与INPUT链的规则不匹配的数据包将被丢弃。

范例644 OUTPUT 链设置。

[root@localhost ～]# iptables -P OUTPUT DROP //设置 OUTPUT链的规则

本例使用指令“iptables -P OUTPUT DROP”设置OUTPUT 链的默认规则为DROP，与OUTPUT链的规则不匹配的数据包将被丢弃。

范例645 FORWARD 链设置。

[root@localhost ～]# iptables -P FORWARD DROP //设置 FORWARD 链的规则

本例使用指令“iptables -P FORWARD DROP”设置FORWARD链的默认规则为DROP，与FORWARD链的规则不匹配的数据包将被丢弃。

范例646 添加规则。

[root@localhost ～]# iptables -A INPUT -s 192.168.88.7 -j ACCEPT

//添加规则

[root@localhost ～]#

本例使用指令“iptables -A INPUT -s 192.168.88.7 -j ACCEPT”添加规则，接收源地址是192.168.88.7的数据包。

[root@localhost ～]# iptables -A INPUT -s 192.168.88.7 -j DROP

//添加规则

[root@localhost ～]#

然后使用指令“iptables -A INPUT -s 192.168.88.7 -j DROP”添加规则，丢弃源地址是192.168.88.7的数据包。

范例647 删除规则。

[root@localhost ～]# iptables -D INPUT --dport 80 -j DROP

//删除规则

[root@localhost ～]#

本例使用指令“iptables -D INPUT --dport 80 -j DROP”删除INPUT 链中阻塞80 端口的数据包的规则。

[root@localhost ～]# iptables -D INPUT 3 //删除规则

[root@localhost ～]#

然后使用指令“iptables -D INPUT 3”，删除INPUT 链中的第3 条规则。

范例648 插入规则。

[root@localhost ～]# iptables -I INPUT 1 -s 192.168.88.7 -j ACCEPT

//插入规则

本例使用指令“iptables -I INPUT 1 -s 192.168.88.7 -j ACCEPT”在INPUT 链中1 号规则的位置上插入一条新的规则，新规则的内容是源于192.168.88.7的数据包。

范例649 更换规则。

[root@localhost ～]# iptables -R INPUT 1 -s 192.168.88.7 -j ACCEPT

//更换规则

本例使用指令“iptables -R INPUT 1 -s 192.168.88.7 -j ACCEPT”更换INPUT 链中1 号规则为新的规则，新规则的内容是源于192.168.88.7的数据包。

6.4.24 iptables-save指令：IP列表存储

语法 iptables-save[-c][-t 表]

功能说明 iptables-save 指令用来输出iptable 到标准输出。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例650 显示iptable 设置。

root@localhost:～# iptables-save　　//显示iptable设置

# Generated by iptables-save v1.3.6 on Thu May 24 04:40:16 2007

*mangle

:PREROUTING ACCEPT [834359:490508468]

:INPUT ACCEPT [66789:18462492]

:FORWARD ACCEPT [613800:454909818]

:OUTPUT ACCEPT [24584:15999458]

:POSTROUTING ACCEPT [638382:470909124]

COMMIT

# Completed on Thu May 24 04:40:16 2007

# Generated by iptables-save v1.3.6 on Thu May 24 04:40:16 2007

*nat

:PREROUTING ACCEPT [71744143:7018491963]

:POSTROUTING ACCEPT [32953:1853286]

:OUTPUT ACCEPT [32163:1791912]

-A PREROUTING -d 202.112.146.70 -p tcp -m tcp --dport 3389 -j DNAT --to-destinat ion 192.168.88.88:3389

-A POSTROUTING -s 192.168.88.0/255.255.255.0 -o eth1 -j MASQUERADE

-A POSTROUTING -s 192.168.88.88 -j SNAT --to-source 202.112.146.70

COMMIT

# Completed on Thu May 24 04:40:16 2007

# Generated by iptables-save v1.3.6 on Thu May 24 04:40:16 2007

*filter

:INPUT ACCEPT [26710398:9570338513]

:FORWARD ACCEPT [15991:19168654]

:OUTPUT ACCEPT [4969768:2145883292]

-A INPUT -i lo -j ACCEPT

-A INPUT -i eth0 -j ACCEPT

-A INPUT -i eth1 -p icmp -j ACCEPT

-A INPUT -i eth1 -p udp -m udp --dport 2304 -j ACCEPT

-A INPUT -i eth1 -p tcp -m tcp --dport 21:23 -j ACCEPT

-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -i eth1 -p tcp -m tcp --dport 8888 -j ACCEPT

-A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -d 192.168.88.88 -j ACCEPT

-A FORWARD -s 192.168.88.0/255.255.255.0 -j ACCEPT

-A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT

# Completed on Thu May 24 04:40:16 2007

root@localhost:～#

本例使用指令“iptables-save”显示当前iptables的设置。

范例651 显示filter 表的设置。

root@localhost:～# iptables-save -t filter //filter 表的设置

# Generated by iptables-save v1.3.6 on Thu May 24 04:44:31 2007

*filter

:INPUT ACCEPT [26711145:9570386824]

:FORWARD ACCEPT [15991:19168654]

:OUTPUT ACCEPT [4970272:2145916938]

-A INPUT -i lo -j ACCEPT

-A INPUT -i eth0 -j ACCEPT

-A INPUT -i eth1 -p icmp -j ACCEPT

-A INPUT -i eth1 -p udp -m udp --dport 2304 -j ACCEPT

-A INPUT -i eth1 -p tcp -m tcp --dport 21:23 -j ACCEPT

-A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -i eth1 -p tcp -m tcp --dport 8888 -j ACCEPT

-A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -d 192.168.88.88 -j ACCEPT

-A FORWARD -s 192.168.88.0/255.255.255.0 -j ACCEPT

-A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

COMMIT

# Completed on Thu May 24 04:44:31 2007

root@localhost:～#

本例使用指令“iptables-save -t filter”显示filter 表的设置。

范例652 显示mangle 表的设置。

root@localhost:～# iptables-save -t mangle //显示 mangle 表的设置

# Generated by iptables-save v1.3.6 on Thu May 24 04:46:08 2007

*mangle

:PREROUTING ACCEPT [851347:495665608]

:INPUT ACCEPT [68335:18578218]

:FORWARD ACCEPT [624216:459405852]

:OUTPUT ACCEPT [25298:16048556]

:POSTROUTING ACCEPT [649512:475454256]

COMMIT

# Completed on Thu May 24 04:46:08 2007

root@localhost:～#

本例使用指令“iptables-save -t mangle”显示当前mangle 表的设置。

范例653 显示nat 表的设置。

root@localhost:～# iptables-save -t nat //显示 nat 表的设置

# Generated by iptables-save v1.3.6 on Thu May 24 04:47:19 2007

*nat

:PREROUTING ACCEPT [71751530:7019235259]

:POSTROUTING ACCEPT [32954:1853338]

:OUTPUT ACCEPT [32164:1791964]

-A PREROUTING -d 202.112.146.70 -p tcp -m tcp --dport 3389 -j DNAT --to-destination192.168.88.88:3389

-A POSTROUTING -s 192.168.88.0/255.255.255.0 -o eth1 -j MASQUERADE

-A POSTROUTING -s 192.168.88.88 -j SNAT --to-source 202.112.146.70

COMMIT

# Completed on Thu May 24 04:47:19 2007

root@localhost:～#

本例使用指令“iptables-save -t nat”显示当前nat 表的设置。

6.4.25 mingetty指令：精简版的getty

语法 mingetty[必要参数][选择性参数][tty]

功能说明 适用于本机上的登录程序，不适合串口。

参数说明

必要参数的具体说明如下：

选择性参数的具体说明如下：

6.4.26 mkfifo指令：创建管道

语法 mkfifo[选择性参数][必要参数]

功能说明 根据指定的名字创建FIFO 管道。

参数说明

必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例654 创建一个只读权限的管道。

[yingzheng@yingzheng ～]$ ls -l

总用量 4

pr--r--r-- 1 yingzheng yingzheng 0 5 月 20 03:06 newfifo

6.4.27 mtr 指令：网络诊断工具

语法 mtr[必要参数][选择性参数]

功能说明 集中了traceroute 指令和ping 指令功能的网络诊断程序。

参数说明

必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例655 诊断主机到192.168.11.44 之间的网络状况。

[root@yingzheng ～]# mtr 192.168.11.44

My traceroute [v0.69]

yingzheng (0.0.0.0)(tos=0x0 psize=64 bitpattern=0x00) Mon May 21 07:15:28 2007

Keys: Help Display mode Restart statistics Order of fields quit

Last 50 pings

Scale:.:979 ms 1:949 ms 2:919 ms 3:849 ms a:669 ms b:499 ms c:199 ms

6.4.28 netconfig指令：设置各项网络功能

语法 netconfig

功能说明 netconfig指令用来设置网络环境，它提供图形化界面，可以设置本地主机名称、域名、IP地址、网络掩码、网关以及域名服务器。

基础应用

范例656 网络配置。

[root@localhost ～]# netconfig　　　　//网络配置

输入指令netconfig，之后会出现以上的图形界面，选择Yes，进行本地主机的网络配置，将进入下面的图形界面。

可根据以上的图形界面和其中的提示信息进行本地网络的配置。

6.4.29 nslookup 指令：dns 查找

语法 nslookup[必要参数][选择性参数][主机名称][服务器名称]

功能说明 nslookup 指令是一个查找Internet 域名服务器的程序。nslookup 有两种模式：交互模式和非交互模式。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例657 DNS 查询。

[root@localhost ～]# nslookup www.bjtu.edu.cn　//DNS查询

Server:　　202.112.144.30

Address:　　202.112.144.30#53

Name: www.bjtu.edu.cn

Address: 202.112.144.31

[root@localhost ～]#

本例使用指令“nslookup www.bjtu.edu.cn”查询域名www.bjtu.edu.cn 的IP 地址，返回结果如上所示。

范例658 交互方式查询域名。

[root@localhost ～]# nslookup　　//启动nslookup程序

> www.bjtu.edu.cn　　　　　//查询www.bjtu.edu.cn域名

Server:　　202.112.144.30

Address:　　202.112.144.30#53

Name:　www.bjtu.edu.cn

Address: 202.112.144.31

> set all　　　　　　　//设置关键字

Default server: 202.112.144.30

Address: 202.112.144.30#53

Set options:

novc　　　　nodebug　　nod2

search　　　recurse

timeout = 0　　retry = 3　　port = 53

querytype = A　　class = IN

srchlist = localdomain

> server 202.112.144.30　　　//指定DNS服务器为202.112.144.30

Default server: 202.112.144.30

Address: 202.112.144.30#53

> www.bjtu.edu.cn　　　　//查询www.bjtu.edu.cn

Server:　　202.112.144.30

Address:　　202.112.144.30#53

Name:　www.bjtu.edu.cn

Address: 202.112.144.31

> exit　　　　　　　//退出程序

[root@localhost ～]#

本例首先使用指令nslookup启动nslookup指令，进入交互模式，输入“www.bjtu.edu.cn”，然后按“Enter”键，查询域名 www.bjtu.edu.cn；再使用指令“set all”设置关键字，发现当前的配置下主DNS服务器为202.112.144.65，第二服务器为202.112.144.30；接着使用指令“server 202.112.144.30”设置 DNS 查询的主服务器为 202.112.144.30，这时再查询域名为www.bjtu.edu.cn的IP地址，是通过服务器202.112.144.30查询的，而不是通过202.112.144.65查询的；最后使用指令exit退出nslookup程序。

6.4.30 pppd 指令：ppp 连线的守护进程

语法 pppd[必要参数][选择性参数][IP 地址]

功能说明 pppd 指令用来建立主机间的ppp 链接。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

基础应用

范例659 建立ppp 链接。

[root@localhost ～]# pppd　　//建立ppp链接

～ÿ}#À!}!}!} }4}"}&} } } } }%}&í •.}'}"}(}"3}$～～ÿ) #À!)!)!) )4)")&) ) ) ) )%)&í •.)')")(}"3}$～～ÿ} #À!}!}!} }4}"}&} } } } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!} }4}"}&} } } } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!} }4}"}&}} } } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!} }4}"}&} } } } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!} }4}"}&} }} } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!}}4}"}&} } } } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!} }4}"}&} } } } }%}&í •.}'}"}(}"3}$～～ÿ}#À!}!}!} }4}"}&} } } } }%}&í •.}'}"}(}"3}$～[root@localhost ～]#

本例使用pppd指令尝试建立ppp连线，结果出现一堆乱码，这是正常的，尝试失败后将返回命令行。

6.4.31 route 指令：显示并设置路由

语法 route[必要参数][选择性参数]

功能说明 route 指令维护了内核的 IP 路由表。它的原始用途是为特定主机或者网络设置静态路由。可以通过“add”或者“del”参数改变路由表。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

【支持的地址族】

inet：DARPA 互联网。

inet6：IPv6。

ax25：AMPR AX.25。

netrom：AMPR NET/ROM。

ipx：Novell IPX。

ddp：Appletalk DDP。

X25：CCITT X.25。

基础应用

范例660 显示当前的路由表。

-sh-2.05b# route　　　　　　　　//显示路由表

Kernel IP routing table

Destination　Gateway　Genmask　Flags Metric Ref　Use Iface

192.168.88.0　*　　255.255.255.0　U　0　0　0 eth0

169.254.0.0　*　　255.255.0.0　U　0　0　0 eth0

127.0.0.0　　*　255.0.0.0　　U　0　0　0 lo

default　　192.168.88.2　0.0.0.0　UG　0　0　0 eth0

-sh-2.05b#

本例使用指令route显示当前系统的路由表。

范例661 删除默认网关。

-sh-2.05b# route del default gw 192.168.88.2　　//删除默认网关

-sh-2.05b# route　　//显示路由表

Kernel IP routing table

DestinationGateway Genmask Flags Metric Ref Use Iface

192.168.88.0 * 255.255.255.0U 0 0 0 eth0

169.254.0.0* 255.255.0.0 U 0 0 0 eth0

127.0.0.0* 255.0.0.0 U 0 0 0 lo

-sh-2.05b#

本例使用指令“route del default gw 192.168.88.2”删除默认网关192.168.88.2，然后使用指令route显示路由表，发现默认网关被删除。

范例662 增加默认网关。

-sh-2.05b# route add default gw 192.168.88.2　//增加默认网关

-sh-2.05b# route　　　　　　　　//显示路由表

Kernel IP routing table

Destination　Gateway　Genmask　Flags Metric Ref　Use Iface

192.168.88.0　*　255.255.255.0　U　0　0　　0 eth0

169.254.0.0　*　255.255.0.0　　U　0　0　　0 eth0

127.0.0.0　　*　255.0.0.0　　U　0　0　　0 lo

default　192.168.88.2　0.0.0.0　UG　　0　0　　0 eth0

-sh-2.05b#

本例使用指令“route add default gw 192.168.88.2”增加默认网关192.168.88.2；使用指令route显示路由表，可以看到默认网关192.168.88.2已被加到路由表中。

范例663 增加一条路由。

-sh-2.05b# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

//增加路由

-sh-2.05b# route　　　　　　//显示路由表

Kernel IP routing table

Destination　Gateway　Genmask　Flags Metric Ref　Use Iface

192.168.88.0　*　　255.255.255.0 U　0　0　0 eth0

169.254.0.0　*　　255.255.0.0　U　0　0　0 eth0

127.0.0.0　　*　　255.0.0.0　U　0　0　0 lo

224.0.0.0　　*　240.0.0.0　　U　0　0　　0 eth0

default　　192.168.88.2　0.0.0.0　UG　0　0　0 eth0

-sh-2.05b#

本例使用指令“route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0”增加一条到达224.0.0.0的路由。

范例664 增加一条屏蔽路由。

-sh-2.05b# route add -net 10.0.0.0 netmask 255.0.0.0 reject　　//增加一条屏蔽路由

-sh-2.05b# route

Kernel IP routing table

Destination　Gateway　Genmask　Flags Metric Ref　Use Iface

192.168.88.0　*255.255.255.0　　U　0　0　0 eth0

169.254.0.0　*　255.255.0.0　　U　0　0　0 eth0

10.0.0.0　　-　255.0.0.0　　!　0　-　0 -

127.0.0.0　　*　255.0.0.0　　U　0　0　0 lo

224.0.0.0　　*　240.0.0.0　　U　0　0　0 eth0

default　192.168.88.2　0.0.0.0　UG　0　0　0 eth0

-sh-2.05b#

本例使用指令“route add -net 10.0.0.0 netmask 255.0.0.0 reject”增加一条屏蔽路由，目的地为10.x.x.x的路由将被拒绝。

6.4.32 tracepath 指令：追踪路径

语法 tracepath[目的地址][端口号]

功能说明 tracepath 指令用来实现主机连接到目的地址时所经过的路由。

基础应用

范例665 显示连接到目的地址时的路由。

[root@localhost ～]# tracepath www.sohu.com　　//显示连接路由

1:　192.168.88.76 (192.168.88.76)　　　　0.219ms pmtu 1500

1:　192.168.88.2 (192.168.88.2)　　　　　2.295ms

2:　202.112.146.2 (202.112.146.2)　　　　3.384ms

3:　10.10.146.1 (10.10.146.1)　　　　　3.444ms

4:　10.10.147.1 (10.10.147.1)　　　　　19.639ms

5:　10.20.70.1 (10.20.70.1)　　　　　　10.353ms

6:　10.10.42.2 (10.10.42.2)　　　　　　8.194ms

7:　202.112.42.65 (202.112.42.65)　　　　3.761ms

8:　202.112.62.241 (202.112.62.241)　　　　4.146ms

9:　202.112.53.74 (202.112.53.74)　　　　4.066ms

10:　202.112.38.82 (202.112.38.82)　　　　3.822ms

11:　202.205.13.218 (202.205.13.218)　　　　6.186ms

12: no reply

13: no reply

[root@localhost ～]#

本例使用指令“tracepath www.sohu.com”显示连接到目的地www.sohu.com 的路由，由于主机没有登录账号，故不能连接到www.sohu.com。

第7章 Linux的日志与进程管理

7.1 Linux日志系统与进程简介

日志对于系统的安全来说非常重要，它记录了系统每天发生的各种各样的事情，用户可以通过它来检查错误发生的原因，或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态，监测和追踪侵入者。Linux 的所有日志文件都在/var/log下。默认情况下没有记录FTP的活动，用户可以通过修改/etc/ftpacess让系统记录FTP的一切活动。

Linux系统一般有3个主要的日志子系统：连接时间日志、进程统计日志和错误日志。

连接时间日志：连接时间日志由多个程序执行，把记录写入/var/og/wtmp和/var/run/utmp，使系统管理员能够跟踪谁在何时登录到系统。

进程统计日志：由系统内核执行。当一个进程终止时，为每个进程往进程统计文件（pacct或acct）中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计。

错误日志：各种系统守护进程、用户程序和内核通过向文件/var/og/messages报告值得注意的事件。另外还有许多UNIX类程序创建日志，像HTTP和FTP这样提供网络服务的服务器也有详细的日志。

在Linux系统中所有运行的程序都可以称之为进程，这些进程都是互相关联的。在Linux中，除了初始化进程外的所有进程都有一个父进程。进程的一个比较正式的定义是：在自身的虚拟位址空间运行的一个单独的程序。进程由程序产生但不是程序，程序是静态的，而进程是动态的。

7.2 Linux日志文件配置和管理

7.2.1 logrotate指令：管理log文件

学习目标 学会使用 logrotate 指令来管理 log 日志文件

语法 logrotate [-可选参数] [配置文件]

功能说明 logrotate 指令可用来管理系统的 log 文件。一般系统是根据默认的 logrotate的配置文件/etc/logrotate.conf 中的配置，来决定系统经过多长时间后自动进行一次 logrotate工作。使用logrotate指令，用户可以通过指定配置文件后参数来设置定期管理的时间间隔，以及删除和压缩等处理。

参数说明 可选参数及其说明如下：

基础应用

范例666 为logrotate指令指定新的配置文件。

[root@localhost ～]# logrotate /root/newlog.config

[root@localhost ～]#

执行指令“logrotate /root/newlog.config”将为logrotate指定新的配置文件/root/newlog.config。

7.3 Linux 的进程管理

7.3.1 ipcs指令：显示进程间通信的信息

学习目标 能通过 ipcs 指令来显示当前系统的进程通信的相关信息，了解进程与线程的关系以及各进程间如何进行通信

语法 ipcs [-可选参数]

功能说明 Linux 是一款多任务的操作系统，系统中的每个线程都可能由一个或多个进程来组成，它们之间的信息通信可通过文件形式、内存共享、信号量、邮箱、管道以及消息队列等来进行。Ipcs指令就是用来显示各通信方式的使用状态信息的工具。使用ipcs指令加各参数可选择显示的通信方式信息。

参数说明 可选参数及其说明如下：

基础应用

范例667 显示系统进程间通信的状态。

[root@localhost ～]# ipcs　　　//显示进程间通信

------ Shared Memory Segments --------

key　　　shmid　owner　perms　bytes　nattch　status

0x00000000 458752　root　644　　790528　2　　dest

0x00000000 491521　root　644　　790528　2　　dest

0x00000000 524290　root　644　　790528　2　　dest

------ Semaphore Arrays --------

key　　semid　owner　perms　nsems

------ Message Queues --------

key　　msqid　owner　perms　used-bytes　messages

[root@localhost ～]#

7.3.2 jobs 指令：显示所有后台程序

学习目标 能通过 jobs 指令来查询当前系统的后台作业信息

语法 jobs [-可选参数] [字符串]

功能说明 jobs 指令可用来显示系统中正在运行的所有后台作业的信息，也可通过进程号或指定指令的开头字符串来显示指定的作业信息。这里的作业相当于系统的线程。

参数说明 可选参数及其说明如下：

基础应用

范例668 通过指定指令的开头字符串来显示作业信息。

[root@localhost ～]# jobs　cat　//显示进程间通信

[1] – Stopped　cat

[root@localhost ～]#

7.3.3 kill 指令：杀死执行中的进程

学习目标 了解 kill 指令的信号机制，掌握 kill 指令杀死进程的方法

语法 kill [-可选参数] [进程号]

功能说明 kill 指令不仅可以用来杀死指定的进程，还可以用来显示 kill 所能传送的所有信号。Kill指令杀死进程，就是通过发送指定的信号到相应进程来实现。

不指定信号时将发送SIGTERM(15)终止指定进程。若仍无法终止该程序可用“-KILL”参数，其发送的信号为SIGKILL(9)，将强制结束进程。使用ps指令或jobs指令可以查看进程号。root用户能影响任何用户的进程，非root用户只能影响自己的进程。

参数说明 可选参数及其说明如下：

基础应用

范例669 显示kill全部的信号名。

[root@localhost ～]# kill -l

1) SIGHUP　　2) SIGINT　　3) SIGQUIT　4) SIGILL

5) SIGTRAP　6) SIGABRT　7) SIGBUS　　8) SIGFPE

9) SIGKILL　10) SIGUSR1　11) SIGSEGV　12) SIGUSR2

13) SIGPIPE　14) SIGALRM　15) SIGTERM　17) SIGCHLD

18) SIGCONT　19) SIGSTOP　20) SIGTSTP　21) SIGTTIN

22) SIGTTOU　23) SIGURG　24) SIGXCPU　25) SIGXFSZ

26) SIGVTALRM　27) SIGPROF　28) SIGWINCH　29) SIGIO

30) SIGPWR　31) SIGSYS　33) SIGRTMIN　34) SIGRTMIN+1

35) SIGRTMIN+2　36) SIGRTMIN+3　37) SIGRTMIN+4　38) SIGRTMIN+5

39) SIGRTMIN+6　40) SIGRTMIN+7　41) SIGRTMIN+8　42) SIGRTMIN+9

43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13

47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-14 50) SIGRTMAX-13

51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10 54) SIGRTMAX-9

55) SIGRTMAX-8　56) SIGRTMAX-7　57) SIGRTMAX-6　58) SIGRTMAX-5

59) SIGRTMAX-4　60) SIGRTMAX-3　61) SIGRTMAX-2　62) SIGRTMAX-1

63) SIGRTMAX

[root@localhost ～]#

现在对kill所能传送的所有信号介绍如下：

SIGHUP（1）：控制终端上检测到挂断或控制线程死亡；SIGINT（2）：交互注意信号；SIGQUIT（3）：交互中止信号；SIGILL（4）：检测到非法硬件的指令；SIGTRAP（5）：从陷阱返回；SIGABRT（6）：异常终止信号；SIGEMT（7）：EMT 指令；SIGFPE（8）：不正确的算术操作信号；SIGKILL（9）：强制终止进程信号；SIGBUS（10）：总线错误；SIGSEGV （11）：检测到非法的内存调用；SIGSYS（12）：系统call的错误参数；SIGPIPE（13）：在无读者的管道上写；SIGALRM（14）：报时信号；SIGTERM( 15)：终止信号；SIGURG（16）：IO 信道紧急信号；SIGSTOP（17）：暂停信号；SIGTSTP（18）：交互暂停信号；SIGCONT （19）：如果暂停则继续；SIGCHLD（20）：子线程终止或暂停；SIGTTIN（21）：后台线程组一成员试图从控制终端上读出；SIGTTOU（22）：后台线程组的成员试图写到控制终端上；SIGIO（23）：允许I/O信号；SIGXCPU（24）：超出CPU时限；SIGXFSZ（25）：超出文件大小限制；SIGVTALRM（26）：虚时间警报器；SIGPROF（27）：侧面时间警报器；SIGWINCH （28）：窗口大小的更改；SIGINFO（29）：消息请求；SIGUSR1（30）：保留作为用户自定义的信号1；SIGUSR2（31）：保留作为用户自定义的信号。

范例670 指定信号编号来杀死进程

[root@localhost ～]# kill -9 1933

执行指令“kill -9 1933”将强制杀死进程号为 1933 的进程。

7.3.4 bg指令：将程序放在后台执行

学习目标 能利用 bg 指令将指定任务放到后台执行

语法 bg [可选参数]

功能说明 bg 指令可用来将程序放到后台执行，但指令的运行结果仍然会在终端的输出设备上进行。如果不想看见输出，可以试试用输出重定向‘>’将执行结果输出到文件，或输入stty tostop 命令强制停止该作业。

bg 指令通过将暂挂的程序作为后台作业运行，可在当前环境中恢复执行这些作业。如果指定的程序已经在后台运行，则bg 命令不起作用并退出。指令的执行效果与在指令后加上&相同。

参数说明 可选参数及其说明如下：

基础应用

范例671

将当前正在运行的程序放到后台执行。

[root@localhost ～]# cat

12546

12546

12354

12354//按Ctrl+Z将正在运行的进程挂起

[1]+ Stoppedcat

[root@localhost ～]# ed

//按Ctrl+Z将正在运行的进程挂起

[2]+ Stoppeded

[root@localhost ～]# bg　　//将挂起的进程放到后台执行

[2]+ ed &

[2]+　Stopped　　　　ed

[root@localhost ～]# bg 1

[1]+ cat &

[root@localhost ～]#

7.3.5 gitps 指令：显示程序情况

学习目标 能使用 Shell 指令来显示进程的状况

语法 gitps [-可选参数][终端][用户]

功能说明 gitps 指令可用来显示及管理进程的执行状况。

参数说明 可选参数及其说明如下：

基础应用

范例672 显示指定用户的进程信息。

[root@localhost ～]# gitps marY　　//显示指定用户的进程信息

执行指令“gitps mary”将显示属于指定用户 mary 下所有的进程信息。具体显示不再赘述。

7.3.6 nice 指令：设置优先级

学习目标 掌握如何使用 nice 指令来设置程序执行的优先级

语法 nice [-可选参数] [指令[属性]]

功能说明 nice 指令可用来设置程序运行的优先级。优先级的范围为−20～19，共四十个等级，各等级分别代表了不同的优先级，其中数值最小的−20 的优先级最高，数值最大的19的优先级最低。在通常情况下系统默认的程序优先级为0，如果用户想让某个程序更快执行可通过nice指令来重新指定程序的优先级。

直接输入nice指令不跟任何参数时，将在系统的终端显示当前程序的优先级。Linux系统与Windows一样都属于软实时系统。

参数说明 可选参数及其说明如下：

基础应用

范例673 设置程序运行的优先级。

[root@localhost ～]# nice　-n 17 free –s 60&　　//在后台运行free指令，设置优先级为17

[1] 6038

[root@localhost ～]#　total　used　free　shared　buffers　cached

Mem:　　515492　473116　42376　　0　79928　274000

-/+ buffers/cache:　119188　396304

Swap:　1048568　　0　1048568

[root@localhost ～]# ps -l　　　　　//显示系统进程

F S　UID　PID　PPID　C PRI　NI ADDR SZ WCHAN　TTY　　TIME CMD

0 S　0　6085　6082　0　75　0 -　1133 wait　pts/1　00:00:00 bash

0 S　0　6098　6085　0　94　17 -　444 wait　pts/1　00:00:00 free

4 R　0　6100　6085　0　78　0 -　1051 -　pts/1　00:00:00 ps

[root@localhost ～]#

执行指令“nice –n 17 free –s 60&”将指令free –s 60&的优先级设为17，并在后台运行该指令。通过指令ps –l 输出中的NI项就可查看当前系统中相关进程的优先级。

7.3.7 ps 指令：报告程序状况

学习目标 学会使用 ps 指令来显示当前程序运行状态

语法 ps [-可选参数]

功能说明 ps 指令可用来显示当前系统下所有运行程序的执行状态，其中还包含了运行在该系统下的其他用户的进程信息。根据ps指令的进程报告，用户可以随时查看系统中哪些进程正在运行、运行的状态、进程是否结束、进程是否僵死、占用了多少资源等信息，然后根据需求对相关进程进行中断、删除等处理。

参数说明 可选参数及其说明如下：

基础应用

范例674 显示所有的进程信息。

[root@localhost ～]# ps -a　　　　　//显示系统进程

F S　UID　PID　PPID　C PRI　NI ADDR SZ WCHAN　TTY　　TIME CMD

0 S　0　6098　6085　0　94　17 -　444 wait　pts/1　00:00:00 free

4 R　0　6100　6085　0　78　0 -　1051 -　pts/1　00:00:00 ps

[root@localhost ～]#

ps命令还经常用于监控后台进程的工作情况。因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的，所以如果需要检测其情况，便可以使用ps命令来完成。

7.3.8 pstree指令：以树状图显示程序

学习目标 能运用 pstree 指令来查看系统中进程之间的关系

语法 pstree [-可选参数] [程序]

功能说明 pstree 指令相当于 ps –H 指令，以树状图的方式来显示程序，使进程间的派生关系一目了然。

参数说明 可选参数及其说明如下：

基础应用

范例675 特别表明正在运行的进程。

[root@localhost ～]# pstree -anh　　　//显示进程间的关系

init

|-(keventd)

|-(kapmd)

|-(ksoftirqd_CPU0)

|-(kswapd)

|-(kscand/DMA)

|-(kscand/Normal)

|-(kscand/HighMem)

|-(bdflush)

|-(kupdated)

|-(mdrecoveryd)

|-(kjournald)

|-(khubd)

|-(kjournald8)

|-syslogd/0

|-klogd -x

|-(portmap/0)

|-(rpc.statd)

|-apmd-p 10 -w 5 -W -P /etc/sysconfig/apm-scripts/ apmscript

|-sshd

|　'-sshd

|　　'-sh

|　　'-pstree-apnh

|-xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid

|-(sendmail)

|-(sendmail)

|-gpm, -t imps2 -m /dev/mouse

|-crond

|-(xfs)

|-(atd)

|-mingetty tty1

|-mingetty tty2

|-(gdm-binary)

|　'-(gdm-binary2)

|　　|-X,1813 :0 -auth /var/gdm/:0.Xauth vt7

|　　'-gdmgreeter

[root@localhost ～]#

执行指令“pstree –anh”显示当前系统下所有进程间的关系。

7.3.9 renice 指令：调整优先级

学习目标 能利用 renice 指令来修改运行程序的优先级

语法 renice 优先级 [-可选参数]

功能说明 renice 指令可用来重新设置运行程序的优先级，优先级可取范围在−20 到 19之间的任意一数值，但只有系统管理员才可以修改其他用户的优先级设置。

参数说明

可选参数及其说明如下：

基础应用

范例676 修改所有隶属于指定用户组或用户的程序的优先级。

[root@localhost ～]# renice 2 -g adc　/修改所有隶属于指定用户组的程序的优先级

0: old priority 0, new priority 2

[root@localhost ～]# renice 1 -u root　//修改所有隶属于指定用户的程序的优先级

0: old priority -10, new priority 1

[root@localhost ～]#

范例677 修改指定进程的优先级。

[root@localhost ～]# ps -a　　　　//显示所有进程

PID TTY　　TIME CMD

6024 pts/1　00:00:00 ps

[root@localhost ～]# renice 1 -p 6024　//修改指定进程的优先级

6024: old priority 1, new priority 1

[root@localhost ～]#

执行指令“renice 1 -p 6024”，将进程号为 6024 的进程的优先级改变为 1。

7.3.10 skill 指令：管理进程

学习目标 能利用 skill 指令向执行中的进程发送信息来管理进程操作

语法 skill [信息] [-可选参数] 选择程序规则

功能说明 skill 可以将指定的信息发送各正在执行的程序，来管理程序的执行状况。预设的信息为 TERM（中断），信息有三种写法：分别为 -9（代号）；-SIGKILL（名称）；或使用 -l / -L 参数加上使用信息。而选择程序的规则有如下几种：终端机代号、使用者名称、程序代号、命令名称。

参数说明

可选参数及其说明如下：

【信息功能】

ALRM ：代号为 14，离开。

HUP：代号为1，离开。

INT：代号为2，离开。

KILL：代号为 9，离开/ 强迫关闭。

PIPE：代号为13，离开。

POLL：离开。

PROF：离开。

TERM：代号为15，离开。

USR1：离开。

USR2：离开。

VTALRM：离开。

Ctrl-a X：关闭当前窗口。

STKFLT：离开/ 只适用于 i386、m68k、arm 和 ppc 硬件。

UNUSED ：离开/ 只适用于 i386、m68k、arm 和 ppc 硬件。

TSTP：停止 /产生与内容相关的行为。

TTIN：停止 /产生与内容相关的行为。

TTOU：停止 /产生与内容相关的行为。

STOP：停止 /强迫关闭。

CONT：重新启动，如果在停止状态则重新启动，否则忽略。

PWR：忽略 /在某些系统中会离开。

WINCH：忽略。

CHLD：忽略。

ABRT：代号为6，核心。

FPE：代号为8，核心。

ILL：代号为4，核心。

QUIT：代号为3，核心。

SEGV：代号为11，核心。

TRAP：代号为5，核心。

SYS：核心 /或许尚未实现。

EMT：核心 /或许尚未实现。

BUS：核心 /核心失败。

XCPU：核心 /核心失败。

XFSZ：核心 /核心失败。

基础应用

范例678 停止所有在ptt装置上的程序。

[root@localhost～]# skill -KILL -v ptt/* //停止程序

执行指令“skill -KILL -v ptt/*”将停止指定设备上的所有程序。

范例679 停止指定使用者的程序。

[root@localhost～]# skill -STOP –u mark sum //停止程序

执行指令“skill -STOP –u mark sum”将停止指定用户 mark、sum 的所有程序。

7.3.11 top 指令：显示进程信息

学习目标 能使用 top 显示当前系统的进程信息

语法 top [-可选参数]

功能说明 top 指令可以通过它所提供的互动式界面，显示当前系统中正在执行的进程的相关信息，包括进程ID、内存占用率、CPU占用率等。用户还可以使用热键对信息加以管理。在top指令的执行过程中，如果用户按下space键将立即刷新输出信息。

参数说明 可选参数及其说明如下：

基础应用

范例680 显示进程信息。

[root@localhost ～]# top　　　　　　　　　//显示进程信息

top - 11:17:48 up 4：31, 2 user, load average: 0.04, 0.05, 0.01

Tasks: 112 total, 2 running, 111 sleeping, 0 stopped, 0 zombie

Cpu(s): 0.7% us, 1.7% sy, 0.0% ni, 98.3% id, 0.0% wa, 0.0% hi, 0.0% si

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

-----------------------------------------------------//省略部分输出

PID USERPR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

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

-----------------------------------------------------//省略部分输出

执行 top指令将循环显示当前系统的进程信息，包括进程 ID、内存占用率、CPU占用率等。

7.3.12 fg指令：将后台任务拉到前台执行

学习目标 学会进行前后台切换

语法 fg[任务号]

功能说明 fg 指令可以把后台执行的任务拉到前台执行。

基础应用

范例681 将后台的程序拉到前台执行。

[root@localhost ～]# ftp 192.168.88.2 &　　//程序在后台执行

[1] 9860

[root@localhost ～]# Connected to 192.168.88.2.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.88.2:root): iplab604

-bash: iplab604: command not found

[1]+　Stopped　　　　ftp 192.168.88.2

[root@localhost ～]# fg %1　　　　　//将后台程序拉到前台执行

ftp 192.168.88.2

本例使用指令“ftp 192.168.88.2 &”使得程序在后台执行，然后使用指令“fg %1”将 ftp进程拉到前台执行。

7.3.13 killall指令：杀死同名的所有进程

语法 killall[必要参数][选择性参数][指令名]

功能说明 killall 指令用来结束同名的所有进程。

参数说明 必要参数的具体说明如下：

续表

选择性参数的具体说明如下：

基础应用

范例682 杀死同名的所有进程。

[root@localhost ～]# ps -A　　　　//显示所有的进程

PID TTY　　TIME CMD

1 ?　　00:00:01 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:00 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?　　00:00:00 kacpid

//此处省略了部分结果

3355 ?　　00:00:17 gnome-terminal

3357 ?　　00:00:00 gnome-pty-helpe

3358 pts/2　00:00:00 bash

3377 pts/2　00:00:03 joe

6734 pts/1　00:00:00 ps

[root@localhost ～]# killall joe　　//杀死同名的所有进程

[root@localhost ～]# killall joe　　//杀死同名的所有进程

joe: no process killed

[root@localhost ～]# ps -A　　　　//显示进程

PID TTY　　TIME CMD

1 ?　　00:00:01 init

2 ?　　00:00:00 ksoftirqd/0

3 ?　　00:00:00 watchdog/0

4 ?　　00:00:00 events/0

5 ?　　00:00:00 khelper

6 ?　　00:00:00 kthread

8 ?00:00:00 kacpid

61 ?00:00:00 kblockd/0

//此处省略了部分结果

3345 ?00:00:00 notification-ar

3347 ?00:00:03 clock-applet

3349 ?00:00:36 mixer_applet2

3355 ?00:00:17 gnome-terminal

3357 ?00:00:00 gnome-pty-helpe

3358 pts/2 00:00:00 bash

6739 pts/1 00:00:00 ps

[root@localhost ～]#

本例使用指令“ps –A”显示当前系统正在运行的所有进程，其中有一个正在运行的进程的名称为“3377 pts/2 00:00:03 joe”。本例使用指令“killall joe”杀死所有的同名进程，然后再运行指令“ps –A”，发现 joe 指令已被杀死。

范例683 向进程发送指定信号。

[root@localhost ～]# kill -l　　　　//显示所有的信号

1) SIGHUP　　2) SIGINT　　3) SIGQUIT　4) SIGILL

5) SIGTRAP　6) SIGABRT　7) SIGBUS　　8) SIGFPE

9) SIGKILL　10) SIGUSR1　11) SIGSEGV　12) SIGUSR2

13) SIGPIPE　14) SIGALRM　15) SIGTERM　17) SIGCHLD

18) SIGCONT　19) SIGSTOP　20) SIGTSTP　21) SIGTTIN

22) SIGTTOU　23) SIGURG　24) SIGXCPU　25) SIGXFSZ

26) SIGVTALRM　27) SIGPROF　28) SIGWINCH　29) SIGIO

30) SIGPWR　31) SIGSYS　34) SIGRTMIN　35) SIGRTMIN+1

36) SIGRTMIN+2　37) SIGRTMIN+3　38) SIGRTMIN+4　39) SIGRTMIN+5

40) SIGRTMIN+6　41) SIGRTMIN+7　42) SIGRTMIN+8　43) SIGRTMIN+9

44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13

52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9

56) SIGRTMAX-8　57) SIGRTMAX-7　58) SIGRTMAX-6　59) SIGRTMAX-5

60) SIGRTMAX-4　61) SIGRTMAX-3　62) SIGRTMAX-2　63) SIGRTMAX-1

64) SIGRTMAX

[root@localhost ～]# joe &　　　　　//后台运行joe指令

[2] 6806

[root@localhost ～]# Processing '/etc/joe/joerc'...done

Processing '/etc/joe/joerc'...done

[2]+　Stopped　　　　joe

[root@localhost ～]# killall -TERM joe　　//杀死joe指令

[root@localhost ～]#

本例使用指令“kill –l”显示所有的信号信息，使用指令“killall -TERM joe”杀死所有名为joe的指令。

第8章 X-Window视窗系统的简介和配置

8.1 X视窗系统协议介绍

X 视窗系统协议是用于 UNIX 和 Linux 的图形显示系统协议（X-Window/X Protocol：X-Window或X-Protocol或X-System），X-Window是麻省理工学院（MIT）电脑科学研究室在1984年开发的。严格地讲，X-Window系统并不是一个软件，而是一个协议，一个定义系统所必须具备哪些功能的协议。

X 视窗系统是一个图形结构，用于 UNIX 和 Linux 下的图形系统。X 视窗系统很少用于 VMS ，MVS 和 MS-WINDOWS 等系统。它为显示窗口图形提供了固有的面向客户机 / 服务器的基础。X 视窗系统提供了一个公共协议，通过它客户程序可以查询和更新 X 服务器上的信息。X 视窗系统（X协议）允许网络中不同计算机上的进程在其他网络显示器上显示内容。

X视窗系统由三个相关部分组成，分别是server（服务器）、client（客户端）和通信通道。

（1）Server 服务器：是一种运行在用户桌面的程序，用于管理视频系统，包括交互式 I/O设备，如鼠标、键盘和一些特殊设备等。

Server的主要功能有：

在屏幕上显示图形请求；

回复请求信息；

报告请求中的错误；

管理键盘、鼠标和显示器设备；

将键盘和鼠标输入复用到连接各自 X 客户机（ X 事件）的网络上；

创建、映射和删除视窗；

在视窗中写和绘图。

（2）Client 客户端：是一个运行在连接 X 服务器以显示图形的另一个主机上的应用程序。Client客户端不能直接对鼠标和键盘进行操作，它们只能发出一个请求给Server服务器以完成其相应请求。

客户端的主要功能有：

发送请求给服务器；

从服务器处接收事件；

从服务器处接收错误。

（3）通信通道：是在Server服务器端和Client客户端传送资讯的媒介，通过这个媒介Client客户端将需求传送给 Server 服务器，而服务器则通过该通道回传状态及一些其他的资讯给Client客户端。

8.2 命令行模式下的X-Window指令

8.2.1 startx 指令：启动 X-Window 图形界面

学习目标 了解 X-Window 的基本部件，能运用该指令在命令行模式下启动 X-Window图形界面。

语法 startx

功能说明 startx 指令可用来启动 X-Window 图形界面。在 Linux 系统中 X-Window 是定义一个图形界面系统所必需的功能的协议。它具体包含三个部分：

（1）Server服务器，实现显示和输入设备的控制功能，能建立视窗界面或回应Client的需求；

（2）Client用户端，是Server的客户，可以向Server发送请求；

（3）通信通道，是为Server和Client传送信息。

基础应用

范例684 启动图形界面。

[root@localhost ～]# startx　　　//启动图形界面

8.2.2 xhost 指令：设置 X 服务器的访问权限

学习目标 学会使用 xhost 指令来设置 X 服务器的访问权限

语法 xhost [-可选参数]

功能说明 xhost 指令可用来添加或删除 X 服务器接受连接的列表上的主机名。

参数说明 可选参数具体说明如下：

基础应用

范例685 显示访问 X 服务器的当前主机。

[root@localhost ～]# xhost　　//显示访问主机

Access control enabled，only authorized clients can connect

SI：localuser：liveuser

[root@localhost ～]#

直接输入 xhost 指令将在标准输出设备上显示访问 X 服务器的当前主机名。

范例686 添加或删除 X 服务器访问列表中的指定主机。

[root@localhost ～]# xhost + 192.168.10.1　　//添加指定主机到 X服务器访问列表

192.168.10.1 being added to access control list

[root@localhost ～]#

执行指令“xhost + 192.168.10.1”将允许主机 192.168.10.1 访问 X 服务器。要想禁止该主机访问服务器，可将指定主机从X服务器的访问列表中删除。

[root@localhost ～]# xhost - 192.168.10.1　　//从 X服务器的访问列表中删除指定的主机

192.168.10.1 being removed from access control list

[root@localhost ～]#

8.2.3 xinit 指令：启动X-Window

学习目标 掌握 xinit 指令的使用

语法 xinit [ [ 客户机 ] 选项 ] [ - - [ x 服务器] [显示器名称 ] 选项 ]

功能说明 xinit 指令可用来启动 X-Window 的 X 服务器。该指令不能从 /etc/init 或使用多视窗系统的环境中直接启动 X 服务器。如果指令中未给出任何特定的客户机程序，xinit指令将查找一个要运行的文件来启动客户机程序。当客户机退出后，xinit将结束X服务器。

基础应用

范例687 启动X-Window。

[root@localhost ～]# xinit　　　//启动X-Window

8.2.4 xlsclients 指令：显示正在运行的X 程序

学习目标 能使用 xlsclients 指令来显示客户端应用程序信息

语法 xlsclients [-可选参数]

功能说明 运行xlsclients指令将显示某指定显示器中当前正在执行的客户端应用程序信息。

参数说明 可选参数具体说明如下：

基础应用

范例688 输出所有显示器上的客户端应用程序信息。

[liveuser@localhost ～]$ xlsclients　　　//输出所有显示器上的客户端应用程序信息

Localhost.localdomain　　gnome-session

Localhost.localdomain　　gnome-settings-deamon

Localhost.localdomain　　metacity

Localhost.localdomain　　gnome-panel

Localhost.localdomain　　nantilus

Localhost.localdomain　　gpk-update-icon

Localhost.localdomain　　gnome-power-manager

Localhost.localdomain　　nm-applet

Localhost.localdomain　　Bluetooth-applet

Localhost.localdomain　　kerneloops-applet

Localhost.localdomain　　imsettings-applet

Localhost.localdomain　　applet-py

Localhost.localdomain　　sealert

Localhost.localdomain　　gnome-screensaver

Localhost.localdomain　　transhapplet

Localhost.localdomain　　wnck-applet

Localhost.localdomain　　mixer_applet2

Localhost.localdomain　　gdm-user-switch-applet

Localhost.localdomain　　notification-area-applet

Localhost.localdomain　　clock-applet

Localhost.localdomain　　gnome-terminal

[liveuser@localhost ～]$

8.2.5 xlsfonts 指令：显示目前X 服务器可使用的字体

学习目标 学会使用 xlsfonts 指令来查看当前 x server 可使用的字体

语法 xlsfonts [-可选参数]

功能说明 执行 xlsfonts 指令能显示目前 x server 可使用的字体，也能使用范本样式仅列出符合条件的字体。

参数说明 可选参数具体说明如下：

续表

基础应用

范例689 显示目前 x server 可使用的字体。

[liveuser@localhost ～]$　xlsfonts　//显示可用的字体

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

---------------------------------------------　　　　　//省略输出

[liveuser@localhost ～]$

8.2.6 xset 指令：设置 X-Window

学习目标 学会使用 xset 指令来设置 X-Window

语法 xset [-可选参数]

功能说明 用户可在终端输入 xset 指令来设置 X-Window 的各项参数，在使用 xset 指令设置X-Window的各项参数时需要先启动X-Window系统。如果直接输入xset指令，将显示当前的设置。

参数说明 可选参数具体说明如下：

基础应用

范例690 显示当前设置。

[liveuser@localhost ～]$ xset　　　　　//显示当前设置

usage:　xset [-display host:dpy] option ...

To turn bell off:

-b　　　b off　　　b 0

To set bell volume, pitch and duration:

b [vol [pitch [dur]]]　　b on

To disable bug compatibility mode:

-bc

To enable bug compatibility mode:

bc

To turn keyclick off:

-c　　　c off　　　c 0

To set keyclick volume:

c [0-100]　　c on

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

--------------------------------------------- //省略输出

To turn auto –repeat off or on:

-r [keycode]　　r off

r [keycode]　　r on

r rate [delay　[rate]]

For screen –saver control:

s [timeout [cycle]]　s defaule　　s on

s blank　　　　s noblank　　s　off

s expose　　　s noexpose

s activate　　s reset

For status information:　q

[liveuser@localhost ～]$

第9章 Linux的命令行下编程指令

在前面讲述了如何利用文本编辑器编写程序的源代码，本章将就程序的编译和调试进行讲解。

9.1 Shell命令行功能介绍

Shell是遵循一定的语法将输入的命令转换加以解释并传递给系统的命令行解释器，使用Shell用户可以很方便地启动、挂起、停止和编写程序。

Shell本身就是一个程序，它是用C语言编写的程序，但同时又是一种程序设计语言，并提供很多在高级语言中才具有的结构控制指令等。

目前流行的Shell有ash、bash、ksh等，用echo命令来查看$SHELL就可以知道你的Shell类型了。

Shell 命令行的输入是有一定规则的，在命令行中输入的第一个字必须是一个命令名，第二个参数是命令的选项和参数，这个要参照命令的语法。命令行中的每个字必须用空格或TAB隔开。在Shell中一行可以输入多个命令，每个命令之间用分号隔开，这些命令将按顺序执行。

（1）输入重定向：输入重定向是指把命令和可执行程序的标准输入重定向到指定的文档中。即输入不是来自键盘而是来自一个指定的文档。输入重定向的一般形式如下：

命令<文件名

（2）输出重定向：输出重定向是指把命令或可执行程序的标准输出重定向到指定的文档中。这时该命令或可执行程序的输出将被写入指定的文档中，而不会在屏幕上显示。

输出重定向的一般形式如下：

命令>文件名

（3）管道：管道可以实现命令间数据的传递，即将一个程序或命令的输出作为另一个程序或命令的输入。用管道连接起来的多个命令执行后在屏幕上显示的将是最后一个命令的执行输出。管道是通过在命令间加入管道符号“|”来实现的。

（4）Linux 的 Shell 编程：Shell 编程类似于 DOS 中的批处理文件，称为 Shell script。Shell程序有其自身的控制流程和函数定义格式，在Linux的命令行下可以使用Shell脚本进行程序的编译和调试。

9.2 命令行下常用的编程指令

因为Linux下的程序开发多为C语言，所以本章将以C语言的编译和调试为主。

9.2.1 autoconf 指令：产生配置脚本

学习目标 了解 autotools 工具中 autoconf 指令的基本功能

语法 autoconf [参数]

功能说明 autoconf 指令调用 m4 生成 Shell 脚本的配置文件，由 autoconf 生成的配置脚本在运行时与 autoconf 是无关的。autoconf 支持交叉编译，它需要使用 GNU m4 来生成脚本。由autoconf生成的配置脚本通常被称为configure，使用autoconf生成configure脚本，需要输入文件configure.in。在运行时configure会创建一些文件，在文件中将以适当的值替换配置参数。

参数说明 参数及其说明如下：

基础应用

范例691 生成的执行脚本。

[root@localhost ～]# autoconf　　//生成配置文件

执行指令“autoconf”生成configure配置文件。

9.2.2 autoheader 指令：为configure产生模板头文件

学习目标 了解 autoheader 指令与 configure 文件产生的关系，学会使用 autoheader 指令用来产生模板头文件。

语法 autoheader [-可选参数] [模板文件]

功能说明 autoheader 指令是 autotools 工具，可根据给定的模板文件来生成模板的头文件，供configure文件使用。

参数说明 可选参数及其说明如下：

续表

【autoheader警告信息列举】

obsolet：旧的架构。

all：所有的警告信息。

no-CATEGORY：关闭警告信息。

none：关闭所有的警告。

error：出现错误。

基础应用

范例692 生成模板头文件。

[root@localhost ～]# autoheader　　//生成头文件

执行指令“autoheader”将根据当前文件夹下的configure.in或configure.ac文件来生成相应的头文件。

实战思考

应用思考

使用 autoheader 指令于开发软件包或者安装相应的软件，使得当前文件夹下存在的configure.in或者configure.ac文件直接运行产生相应的头文件，为下一步的配置工作做准备。

9.2.3 autoreconf 指令：更新已经生成的配置文件

学习目标 学会使用 autoreconf 指令来更新 configure 配置文件

语法 autoreconf [-可选参数] [文件]

功能说明 autoreconf 指令是 autotools 工具，可以对以前编译的配置文件进行重复编译。

参数说明 可选参数及其说明如下：

续表

【autoreconf警告信息列举】

obsolet：旧的架构。

all：所有的警告信息。

no-CATEGORY：关闭警告信息。

none：关闭所有的警告。

error：出现错误。

基础应用

范例693 更新已生成的执行脚本。

[root@localhost ～]# autoreconf　　　//更新配置文件

执行指令“autoreconf”可重新编译configure配置文件。

9.2.4 autoscan指令：生成configure.in模板文件

学习目标 学会使用 autoscan指令来生成 configure.in 模板文件

语法 autoscan [-可选参数] [源目录]

功能说明 autoscan指令是autotools工具，可根据目录下的源文件来生成一个configure.in模板文件。

参数说明 可选参数及其说明如下：

基础应用

范例694 生成configure.in模板文件。

[root@localhost ～]# autoscan　//生成configure.in文件

9.2.5 autoupdate指令：更新configure.in文件

学习目标 了解 autoupdate 指令与 configure.in 文件的关系，学会使用 autoscan指令来更新configure.in文件。

语法 autoupdate [-可选参数] [模板文件]

功能说明 如果给定模板文件，如 configure.in 或者 config ure.ac，那么 autoupdate 指令将更新configure.in文件，语法标准参考当前版本autoconf的语法标准。autoupdate支持对原始的、没经过编译的文件进行编译。

参数说明 可选参数及其说明如下：

基础应用

范例695 更新configure.in文件。

[root@localhost ～]# autoupdate　　//更新已有的configure.in文件

执行指令“autoupdate”将对之前使用autoscan指令生成的configure.in模板文件进行更新。

9.2.6 gcc 指令：GNU的C和C++编译器

学习目标 了解 gcc 的编译过程，熟练掌握 gcc 指令编译 C 和 C++程序的方法

语法 gcc[参数][文件名]

功能说明 gcc（GNU Compiler Collection）是目前 Linux 下符合 ANSI C 标准的、最常用的C语言编译器。它通过四个阶段来实现程序编译的过程，预处理、编译、汇编以及链接。它功能强大，能够通过不同的前端模块来支持各种语言。

【gcc 支持的语言列举】

.c：c 语言程序。

.C 或.cc：C++源程序。

.m：Objective-C 源程序。

.i：预处理后的 c 程序。

.ii：预处理后的 c++程序。

.s 或.S：汇编语言程序。

.h：头文件。

.o：目标文件。

.a：静态链接库。

.so：动态链接库。

参数说明

可选参数及其说明如下：

续表

基础应用

范例696 文件编译。

[mary@localhost c]$ gcc -o skfile.c //编译文件

[mary@localhost c]$

执行指令“gcc -o skfile.c”将生成名为 a.out 的可执行文件，输入指令“./a.out”就可以运行这个可执行文件。用户也可以用如下方法来自己指定输出的可执行文件的名称，然后运行该文件。

[mary@localhost c]$ gcc -o skfile skfile.c　　//编译文件

[mary@localhost c]$

执行指令“gcc -o skfile skfile.c”将生成名为 skfile 的可执行文件。这时，用户就可以通过在命令行中输入“./skfile”来执行该文件。

范例697 文件编译。

[mary@localhost c]$ gcc –E skfile.c -o skfile.i //预编译

[mary@localhost c]$ gcc –c skfile.i -o skfile.o //生成目标文件

[mary@localhost c]$ gcc skfile.o -o skfile　　//生成可执行文件

[mary@localhost c]$

在上例中通过单步编译，先将C语言源程序进行预编译，然后对预编译后的.i进行编译，生成目标文件，最后生成可执行文件。它实现的功能与直接输入范例522中的指令来实现的功能相同，gcc 指令在编译源程序时，也是先调用预处理程序对源文件进行展开，接着调用as和ccl来将进行预处理后的源文件编译成目标文件，然后gcc指令会调用ld链接程序把目标文件链接成一个可执行程序。

范例698 指定搜索库的路径。

[mary@localhost c]$ gcc skfile.c –L /home/mary/Lib -o skfile　　//编译文件同时指定搜索库路径

[mary@localhost c]$

9.2.7 gdb 指令：GNU 调试器

学习目标 学会使用 gdb 指令进行跟踪调试

语法 gdb [可执行程序名]

功能说明 gdb 是 GNU 发布的一个 Linux/UNIX 下的调试工具，使用 gdb 可以观察程序运行时的内部结构和内存使用情况。现将gdb的一些功能列举如下：设置断点以使程序在指定的代码行上停止执行；监视程序中变量的值；动态地改变程序的执行环境；按照用户的定义运行程序，可以一行行地执行代码。

参数说明 gdb 的内置命令及其说明如下：

续表

基础应用

范例699 启动gdb调试器。

[mary@localhost pro]$ gdb　　//启动gdb

GNU gdb Fedroa (6.8-29.fc10)

Copyright（C） 2008 Free Software Foundation, Inc.

Lincense GPLv3+：GNU GPL version 3 or later http://gnu.org/lincenses/gpl.html

This is free software:you are free to change and redistribute it .

There is NO WARRANTY,to the extent peeermitted by law.Type “show copying” and “show warranty”for

details.

This GDB was Configured as”i 386-redhat-linux gnu”.

(gdb)help

List of classes of commands:

aliases –-Aliases of other commands

breakpoints -–Making program stop at certain points

data –-Examining data

files –-Specifying and examining files

internals –-Maintenance commands

obscure –-Obscure features

running –-Running the program

stack –-Examining the stack

status –-Status inquiries

support –-Support facilities

tracepoints –-Tracing of program execution without stopping the program

user-defined –-User-defined commands

Type “help” followed by a class name for a list of commands in that class.

Type “help all” for the list of all commands.

Type “help” followed by command name for full documentation.

Type “apropos word” to search for commands related to “word” command name abbrevitations are allowed if unambiguous.

(gdb)

在命令行下输入gdb指令回车，就可以运行gdb调试器，并在屏幕上输出以上所示内容和(gdb)，这时用户可通过在提示的(gdb)后输入内建命令进行调试。

9.2.8 gdbserver指令：远端GNU服务器

学习目标 了解 gdbserver 指令与 GNU 服务器的关系，学会使用 gdbserver 指令远端调试程序

语法 gdbserver [终端] [-可选参数] [进程号]

功能说明 gdbserver 指令可用来控制远端 gdb 服务器的程序调试。

参数说明 可选参数及其说明如下：

基础应用

范例700 运行远端调试程序。

[mary@localhost Prog]$ gdbserver tty2 --attend 519//远端程序调试

9.2.9 ld指令：链接目标文件和库文件

学习目标 了解 ld 指令的执行原理

语法 ld [-可选参数] [文件名]

功能说明 ld 指令可以将目标文件和库文件链接到一起，生成执行文件。在 gcc 命令中， gcc编译器会自动调用该程序。

参数说明 可选参数具体说明如下：

续表

基础应用

范例701 目标文件链接。

[mary@localhost Prog]$ ld –o skfile /home/mary/Prog/corr.o am.o　　//文件链接

9.2.10 make 指令：编译内核或模块

学习目标 了解make指令编译内核的过程，掌握使用make指令来进行内核安装的一般过程

语法 make [-可选参数] [makefile 文件]

功能说明 make 又称 GNU ，是 Linux 系统中的一种代码维护工具，它可以根据程序中各模板的更新情况以及相互间的依赖关系，来自动地维护目标代码。而文件或模块间的依赖关系是在makefile文件中进行定义的。

参数说明 可选参数具体说明如下：

续表

基础应用

范例702 根据默认的makefile编译。

[root@localhost ～]# make

在命令行中直接输入make指令，程序将查找makefile文件，然后根据makefile文件中各模块或文件之间的依赖性进行编译。

范例703 根据指定的makefile文件编译。

[root@localhost ～]# make –f helo.mk

执行指令“make –f helo.mk”将指定的文件 helo.mk 作为 makefile 文件。

范例704 安装模块。

[root@localhost ～]# make fil_install

9.2.11 nm 指令：显示目标文件中的符号

学习目标 了解nm指令的基本用法，能使用该指令来获取目标文件中的符号信息和属性

语法 nm [-可选参数] 目标文件

功能说明 nm 指令是 binutils 开发工具中的成员，它可用来输出指定模块文件中的符号表，即变量类型和数值。

【符号的类型】

A：符号值为绝对值，且不会被链接所改变。

B：未初始化数据。

C：公共符号。

D：已初始化数据。

I：符号的间接引用。

N：调试符号。

R：只读数据。

T：文本代码符号。

U：未定义符号。

W：弱定义符号。

-：stabs 符号用于保留调试信息。

?：未知类型的符号。

o：符号名。

参数说明 可选参数具体说明如下：

基础应用

范例705 显示指定目标文件的符号。

[root@localhost ～]# nm skfile.o　　//显示符号

U　bin

00000000　T　minus

U times

[root@localhost ～]#

第10章 格式转换

10.1 文件格式概念

文件格式又称文件类型，其实是电脑为了存储信息而使用的特殊编码方式，扩展名是应用程序识别的方式。

文件的格式是多种多样的，即信息的编码方式不同。在电脑中只有0和1两种类别的信号，而编码就是使用这两种信号来实现多样性。不同的编码格式则采用不同的扩展名来区别。

10.2 格式转换指令

10.2.1 dvips 指令：将DVI文件转换为Postscript文件

语法 dvips[必要参数][选择性参数][源文件][目标文件]

功能说明 dvips 指令用于将 DVI 文件转换为 Postscript 文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

mf，afm2tfm，tex，latex，lpr

基础应用

范例706 转换DVI文件为Postscript文件。

[root@localhost other]# dvips -o abc.ps abc.dvi//转换文件为Postcript文件

本例使用指令“dvips -o abc.ps abc.dvi”转换 abc.dvi 文件为 abc.ps 文件。

10.2.2 fiascotopnm 指令：将压缩的 fiasco 镜像文件转换为 pgm或ppm格式

语法 fiascotopnm[必要参数][选择性参数][文件]

功能说明 fiascotopnm 指令用来转换 fiasco 文件为 pgm 或者 ppm 格式文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

pnm

基础应用

范例707 转换文件格式。

[root@localhost ～]#fiascotopnm foo.wfa >foo.ppm //转换文件

本例使用指令“fiascotopnm foo.wfa >foo.ppm”转换文件类型。

10.2.3 gemtopbm指令：转换图形文件

语法 gemtopbm[必要参数][文件]

功能说明 gemtopbm 指令用来将 gem 文件转换为 pbm 文件。

参数说明 必要参数的具体说明如下：

内建指令

gemtopnm

基础应用

范例708 转换图形文件。

[root@localhost littleProg]#gemtopbm abc.img >abc.pbm//转换文件

本例使用指令“gemtopbm abc.img >abc.pbm”将.img 文件转换为.pbm 文件。

10.2.4 giftopnm指令：文件转换

语法 giftopnm[必要参数][选择性参数][文件]

功能说明 使用 giftopnm 指令将 GIF 文件转换为 pnm 文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

gemtopbm

基础应用

范例709 转换gif文件。

[root@localhost littleProg]# giftopnm /var/www/manual/ mod/mod_ python/ icons/up.gif >111.pnm //转换文件

[root@localhost littleProg]#

本例使用指令“giftopnm /var/www/manual/mod/mod_python/icons/up.gif >111.pnm”将文件/var/www/manual/mod/mod_python/icons/up.gif转换为111.pnm文件。

10.2.5 iconv 指令：字符集转换

语法 iconv[必要参数][选择性参数][文件]

功能说明 iconv 指令可用于相关字符集的转换。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

fmt

基础应用

范例710 列出已知的编码字符集合。

[root@localhost ～]# iconv -l　　　　//显示支持的格式

The following list contain all the coded character sets known.This does

not necessarily mean that all combinations of these names can be used for

the FROM and TO command line parameters.One coded character set can be

listed with several different names (aliases).

437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,

866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4,

8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1: 1993/UCS4,

ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,

ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5,

BIG-FIVE, BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BS_4730, CA, CN-BIG5, CN-GB,

CN, CP-AR, CP-GR, CP-HU, CP037, CP038, CP273, CP274, CP275, CP278, CP280,

CP281, CP282, CP284, CP285, CP290, CP297, CP367, CP420, CP423, CP424, CP437,

CP500, CP737, CP775, CP813, CP819, CP850, CP851, CP852, CP855, CP856, CP857,

CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP866NAV, CP868, CP869,

CP870, CP871, CP874, CP875, CP880, CP891, CP903, CP904, CP905, CP912, CP915,

CP916, CP918, CP920, CP922, CP930, CP932, CP933, CP935, CP936, CP937, CP939,

//此处省略了部分结果

OSF10020129, OSF10020352, OSF10020354, OSF10020357, OSF100 20359, OSF10020360,

OSF10020364, OSF10020365, OSF10020366, OSF10020367, OSF100 20370, OSF10020387,

OSF10020388, OSF10020396, OSF10020402, OSF10020417, PT, PT2, PT154, R8,

RK1048, ROMAN8, RUSCII, SE, SE2, SEN_850200_B, SEN_850200_C, SHIFT-JIS,

SHIFT_JIS, SHIFT_JISX0213, SJIS-OPEN, SJIS-WIN, SJIS, SS636127,

STRK1048-2002, ST_SEV_358-88, T.61-8BIT, T.61, T.618BIT, TCVN-5712, TCVN,

TCVN5712-1, TCVN5712-1:1993, TIS-620, TIS620-0, TIS620.2529-1, TIS620.2533-0,

TIS620, TS-5881, TSCII, UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4BE, UCS-4LE,

UCS2, UCS4, UHC, UJIS, UK, UNICODE, UNICODEBIG, UNICODELITTLE, US-ASCII, US,

UTF-7, UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, UTF7,

UTF8, UTF16, UTF16BE, UTF16LE, UTF32, UTF32BE, UTF32LE, VISCII, WCHAR_T,

WIN-SAMI-2, WINBALTRIM, WINDOWS-31J, WINDOWS-874, WINDOWS-936, WINDOWS-1250,

WINDOWS-1251, WINDOWS-1252, WINDOWS-1253, WINDOWS-1254, WINDOWS-1255,

WINDOWS-1256, WINDOWS-1257, WINDOWS-1258, WINSAMI2, WS2, YU

[root@localhost ～]#

本例使用指令“iconv –l”显示所有支持的编码字符格式。

10.2.6 pcxtoppm指令：转换图形文件

语法 pcxtoppm[必要参数][选择性参数][文件]

功能说明 pcxtoppm 指令用来转换 pcx 图形文件，转换后的文件后缀为.ppm，并将结果输出到标准输出。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

Ppmtopcx，ppm

基础应用

范例711 转换pcx文件。

[root@localhost ～]# pcxtoppm 123.pcx　　//转换pcx文件

本例使用指令“pcxtoppm 123.pcx”转换 pcx 文件 123。

10.2.7 pfbtops 指令：转换字体文件

语法 pfbtops[选择性参数][文件]

功能说明 pfbtops 指令用来转换字体文件。

参数说明 选择性参数的具体说明如下：

内建指令

grops

基础应用

范例712 转换字体文件。

[root@localhost ～]# pfbtops /usr/share/texmf/fonts/ type1/urw/ helvetic/ uhvbo8ac.pfb>uhvbo8ac.pfa　　//转换字体文件

[root@localhost ～]# tail -n 30 uhvbo8ac.pfa//显示文件的最后 30 行

e9379748ecb285c670091b884f0bab2e5e9a80af18d59c666bdd0334ac34ef85

f7257d1597d834f14948201b5e469525eda86873fd96b72e1f0d04e7e5655946

5c36fd96b028286ddb813f02341b0104d050f04d4ca15366c33eb1e6a0dadf46

ee0787d23221c01412c9755466257617bbda509ffe67aa38bf03874b68eeec64

f81af569049e4a1196320274669801b0af5fed1fbd7a2c082ef896b15a13f3a8

//此处省略了部分结果

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

cleartomark

[root@localhost ～]#

本例使用指令“pfbtops /usr/share/texmf/fonts/type1/urw/ helvetic/ uhvbo8ac.pfb >uhvbo8ac.pfa”转换字体文件uhvbo8ac.pfb。

10.2.8 picttoppm指令：文件转换

语法 picttoppm[选择性参数][必要参数][文件]

功能说明 picttoppm指令将pict类型文件转换为ppm类型文件。

参数说明 必要参数的具体说明如下：

选择性参数的具体说明如下：

内建指令

pfbtops，pcxtoppm

基础应用

范例713 转换文件。

root@localhost:～#picttoppm abc.pict　　　//转换pict文件

本例使用指令“picttoppm abc.pict”转换文件 picttoppm abc.pict。

10.2.9 pi1toppm指令：转换图形文件

语法 piltoppm[选择性参数][图形文件]

功能说明 piltoppm 指令用来将 pi1 文件转换为 ppm 文件，并将结果输出到标准输出。

参数说明 选择性参数的具体说明如下：

内建指令

pcxppm，picttoppm

基础应用

范例714 转换文件。

root@localhost:～#pi1toppm abc.pi1　　//转换pi1文件

本例使用指令“pi1toppm abc.pi1”转换 pi1 文件 abc。

10.2.10 pjtoppm指令：转换打印文件

语法 pjtoppm[文件]

功能说明 pjtoppm 指令将打印文件转换成 Portable Pixmap 格式的文件，并将结果输出到标准输出。

内建指令

picttoppm，pcxtoppm

基础应用

范例715 转换文件。

[root@localhost ～]#pjtoppm fromprinter　　　//转换文件

本例使用指令“pjtoppm fromprinter”将打印文件转换成 Portable Pixmap 格式的文件，并将结果输出到标准输出。

10.2.11 qrttoppm指令：转换qrt文件

语法 qrttoppm[qrt 文件]

功能说明 qrttoppm 指令可以把 qrt 文件转换为 ppm 文件，并将结果输出到标准输出。

内建指令

pcxtoppm，picttoppm

基础应用

范例716 转换扫描文件fromraytracer。

[root@localhost ～]#qrttoppm fromraytracer　　//转换qrt文件

本例使用指令“qrttoppm fromraytracer”转换指定的 qrt 文件 fromraytracer 为 ppm 文件，并将结果输出到标准输出。

10.2.12 sox 指令：音频文件转换

语法 sox[必要参数][选择性参数]

功能说明 sox 指令可转换各种音频文件。

参数说明 必要参数的具体说明如下：

续表

选择性参数的具体说明如下：

图书在版编目（CIP）数据

Linux指令从入门到精通/宋磊，宋馥莉，雷文莉编著.--北京：人民邮电出版社，2014.1

ISBN　978-7-115-33223-3

Ⅰ．①L…　Ⅱ．①宋…②宋…③雷…　Ⅲ．①Linux操作系统　Ⅳ．①TP316.89

中国版本图书馆CIP数据核字（2013）第241773号

内容提要

Linux是一款开源的操作系统，用户很容易从网上获得其源代码，并根据自己的喜好随意对其进行修改和传播。因此，Linux操作系统受到全球广大计算机爱好者的喜爱。本书讲解的Linux指令及其用法，是学习Linux系统的必备基础。本书共讲解指令【444】个、范例【716】个，内容全面、翔实。读者可以通过指令的语法、功能、参数说明以及具体的应用范例掌握指令的基础知识，也可以根据应用范例，实际动手体验指令的具体功能。

本书指令按照常用功能顺序和字母顺序进行索引，读者既可以按照功能顺序进行学习，也可以按照字母顺序进行查找，是不可多得的学习Linux指令的书籍。本书不仅适合Linux初学者学习使用，而且可以作为Linux系统管理员的参考手册。

◆编著　宋磊　宋馥莉　雷文利

责任编辑　傅道坤

责任印制　程彦红　焦志炜

◆人民邮电出版社出版发行　　北京市丰台区成寿寺路11号

邮编　100164　　电子邮件　315@ptpress.com.cn

网址　http://www.ptpress.com.cn

北京鑫正大印刷有限公司印刷

◆开本：800×1000　1/16

印张：32.5

字数：663千字　　2014年1月第1版

印数：1-3000册　　2014年1月北京第1次印刷

定价：69.00元

读者服务热线：(010)81055410　印装质量热线：(010)81055316

反盗版热线：(010)81055315