﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-YGB.Grushy-文章分类-Linux命令</title><link>http://www.cnitblog.com/ygb/category/1632.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 00:08:15 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 00:08:15 GMT</pubDate><ttl>60</ttl><item><title>linux指令大全[3]［注］来源于天津Linux热线</title><link>http://www.cnitblog.com/ygb/articles/5501.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:16:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5501.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5501.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5501.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5501.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5501.html</trackback:ping><description><![CDATA[名称：/etc/aliases <br>

使用权限：系统管理者 <br>

使用方式： 请用 newaliases 更新资料库 <br>

说明： <br>

sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx
的信时，它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list
就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫 <a href="mailto:redlinux@link.ece.uci.edu">redlinux@link.ece.uci.edu</a> 的 mailinglist，但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。 <br>

<br>

/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。范例： <br>

# newaliases <br>

<br>

下面命令会做相同的事， <br>

# sendmail -bi <br>

<br>

相关命令: <br>

mail, mailq, newaliases, sendmail <br>

<br>

” mail [返回] <br>

名称：mail <br>

<br>

使用权限：所有使用者 <br>

<br>

<br>

使用方式：mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] user1 [user 2 ...] <br>

<br>

<br>

说明： <br>

mail 不仅只是一个指令， mail 还是一个电子邮件程式，不过利用 mail 来读信的人应该很少吧！对于系统管理者来说 mail 就很有用，因为管理者可以用 mail 写成 script ，定期寄一些备忘录提醒系统的使用者。 <br>

<br>

<br>

参数： <br>

i 忽略 tty 的中断讯号。 (interrupt) <br>

I 强迫设成互动模式。 (Interactive) <br>

v 列印出讯息，例如送信的地点、状态等等。 (verbose) <br>

n 不读入 mail.rc 设定档。 <br>

s 邮件标题。 <br>

c cc 邮件地址。 <br>

b bcc 邮件地址。 <br>

<br>

<br>

范例： <br>

<br>

<br>

将信件送给一个或以上的电子邮件地址，由于没有加入其他的选项，使用者必须输入标题与信件的内容等。而 user2 没有主机位置，就会送给邮件伺服器的 user2 使用者。 <br>

<br>

<br>

<br>

mail <a href="mailto:user1@email.addr">user1@email.addr</a>ess <br>

mail <a href="mailto:user1@email.addr">user1@email.addr</a>ess user2 <br>

<br>

<br>

<br>

将 mail.txt 的内容寄给 user2 同时 cc 给 user1 。如果将这一行指令设成 cronjob 就可以定时将备忘录寄给系统使用者。 <br>

<br>

mail -s 标题 -c user1 user2 &lt; mail.txt <br>

<br>

<br>

<br>

指令：mesg <br>

使用权限 : 所有使用者 <br>

<br>

使用方式 : mesg [y|n] <br>

<br>

说明 ： 决定是否允许其他人传讯息到自己的终端机介面 <br>

<br>

<br>

把计  <br>

<br>

y : 允许讯息传到终端机介面上。 <br>

n : 不允许讯息传到终端机介面上 。 <br>

如果没有设定，则讯息传递与否则由终端机界面目前状态而定。 <br>

<br>

例子 : <br>

改变目前讯息设定，改成不允许讯息传到终端机介面上 : <br>

mesg n <br>

<br>

<br>

与 mesg 相关的指令有： talk，write，wall。 <br>

<br>

<br>

名称：/etc/aliases <br>

使用权限：系统管理者 <br>

使用方式： newaliases <br>

说明： <br>

sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx
的信时，它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list
就会用到这个功能，在 mailinglist 中，我们可能会创造一个叫 <a href="mailto:redlinux@link.ece.uci.edu">redlinux@link.ece.uci.edu</a> 的 mailinglist，但实际上并没有一个叫 redlinux 的使用者。实际 aliases 档的内容是将送给这个使用者的信都收给 mailing list 处理程式负责分送的工作。 <br>

<br>

/etc/aliases 是一个文字模式的档案，sendmail 需要一个二进位格式的 /etc/aliases.db。newaliases 的功能传是将 /etc/aliases 转换成一个 sendmail 所能了解的资料库。 <br>

<br>

参数：没有任何参数。 范例： <br>

# newaliases <br>

<br>

下面命令会做相同的事， <br>

# sendmail -bi <br>

<br>

相关命令: <br>

mail, mailq, newaliases, sendmail <br>

<br>

<br>

<br>

名称 : talk <br>

使用权限 : 所有使用者 <br>

<br>

使用方式 : <br>

<br>

talk person [ttyname] <br>

说明 : 与其他使用者对谈 <br>

<br>

把计 : <br>

<br>

person : 预备对谈的使用者帐号，如果该使用者在其他机器上，则可输入 <a href="mailto:person@machine.name">person@machine.name</a> <br>

ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty 传讯息 <br>

<br>

例子.1 : <br>

<br>

与现在机器上的使用者Rollaend对谈，此时 Rollaend 只有一个连线 : <br>

talk Rollaend <br>

<br>

<br>

接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk jzlee`即可开始对谈，结束请按 ctrl+c <br>

<br>

例子.2 :与linuxfab.cx上的使用者Rollaend对谈，使用pts/2来对谈 : <br>

talk <a href="mailto:Rollaend@linuxfab.cx">Rollaend@linuxfab.cx</a> pts/2 <br>

<br>

<br>

接下来就是等Rollaend回应，若Rollaend接受，则Rollaend输入 `talk <a href="mailto:jzlee@jzlee.home">jzlee@jzlee.home</a>`即可开始对谈，结束请按 ctrl+c <br>

<br>

注意 : 若萤幕的字会出现不正常的字元，试着按 ctrl+l 更新萤幕画面。 <br>

<br>

<br>

名称 : wall <br>

使用权限 : 所有使用者 <br>

<br>

使用方式 : <br>

<br>

wall [ message ] <br>

使用说明： <br>

wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D) <br>

<br>

例子 : <br>

<br>

传讯息"hi" 给每一个使用者 : <br>

wall hi <br>

<br>

<br>

<br>

<br>

名称 : write <br>

使用权限 : 所有使用者 <br>

<br>

使用方式 : <br>

<br>

write user [ttyname] <br>

说明 : 传讯息给其他使用者 <br>

<br>

把计 : <br>

<br>

user : 预备传讯息的使用者帐号 <br>

ttyname : 如果使用者同时有两个以上的 tty 连线，可以自行选择合适的 tty 传讯息 <br>

<br>

例子.1 : <br>

<br>

传讯息给 Rollaend，此时 Rollaend 只有一个连线 : <br>

write Rollaend <br>

<br>

<br>

接下来就是将讯息打上去，结束请按 ctrl+c <br>

<br>

例子.2 :传讯息给 Rollaend，Rollaend 的连线有 pts/2，pts/3 : <br>

write Rollaend pts/2 <br>

<br>

<br>

接下来就是将讯息打上去，结束请按 ctrl+c <br>

<br>

注意 : 若对方设定 mesg n，则此时讯席将无法传给对方 <br>

<br>

名称：kill <br>

使用权限：所有使用者 <br>

<br>

使用方式： <br>

<br>

kill [ -s signal | -p ] [ -a ] pid ... <br>

kill -l [ signal ] <br>

说明：kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号 <br>

把计 <br>

<br>

-s (signal) : 其中可用的讯号有 HUP (1), KILL (9), TERM (15), 分别代表着重跑, 砍掉, 结束; 详细的信号可以用 kill -l <br>

-p : 印出 pid , 并不送出信号 <br>

-l (signal) : 列出所有可用的信号名称 <br>

范例： <br>

<br>

将 pid 为 323 的行程砍掉 (kill) : <br>

kill -9 323 <br>

<br>

将 pid 为 456 的行程重跑 (restart) : <br>

kill -HUP 456 <br>

<br>

<br>

<br>

<br>

名称：nice <br>

使用权限：所有使用者 <br>

<br>

使用方式：nice [-n adjustment] [-adjustment] [--adjustment=adjustment] [--help] [--version] [command [arg...]] <br>

<br>

说明：以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先序) <br>

<br>

<br>

把计 <br>

<br>

-n adjustment, -adjustment, --adjustment=adjustment 皆为将该原有优先序的增加 adjustment <br>

--help 显示求助讯息 <br>

--version 显示版本资讯 <br>

范例： <br>

将 ls 的优先序加 1 并执行 : <br>

nice -n 1 ls <br>

<br>

将 ls 的优先序加 10 并执行 : <br>

nice ls将 ls 的优先序加 10 并执行 <br>

<br>

注意 : 优先序 (priority) 为作业系统用来决定 CPU 分配的参数，Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程，优先序越高，所可能获得的 CPU时间就越多。 <br>

<br>

<br>

<br>

名称：ps <br>

使用权限：所有使用者 <br>

使用方式：ps [options] [--help] <br>

说明：显示瞬间行程 (process) 的动态 <br>

参数： <br>

ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义 <br>

-A 列出所有的行程 <br>

-w 显示加宽可以显示较多的资讯 <br>

-au 显示较详细的资讯 <br>

-aux 显示所有包含其他使用者的行程 <br>

<br>

au(x) 输出格式 : <br>

<br>

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br>

USER: 行程拥有者 <br>

PID: pid <br>

%CPU: 占用的 CPU 使用率 <br>

%MEM: 占用的记忆体使用率 <br>

VSZ: 占用的虚拟记忆体大小 <br>

RSS: 占用的记忆体大小 <br>

TTY: 终端的次要装置号码 (minor device number of tty) <br>

STAT: 该行程的状态: <br>

D: 不可中断的静止 (通悸□□缜b进行 I/O 动作) <br>

R: 正在执行中 <br>

S: 静止状态 <br>

T: 暂停执行 <br>

Z: 不存在但暂时无法消除 <br>

W: 没有足够的记忆体分页可分配 <br>

&lt;: 高优先序的行程 <br>

N: 低优先序的行程 <br>

L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O) <br>

START: 行程开始时间 <br>

TIME: 执行的时间 <br>

COMMAND:所执行的指令 <br>

<br>

范例： <br>

<br>

ps <br>

PID TTY TIME CMD <br>

2791 ttyp0 00:00:00 tcsh <br>

3092 ttyp0 00:00:00 ps <br>

% ps -A <br>

PID TTY TIME CMD <br>

1 ? 00:00:03 init <br>

2 ? 00:00:00 kflushd <br>

3 ? 00:00:00 kpiod <br>

4 ? 00:00:00 kswapd <br>

5 ? 00:00:00 mdrecoveryd <br>

....... <br>

% ps -aux <br>

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br>

root 1 0.0 0.7 1096 472 ? S Sep10 0:03 init [3] <br>

root 2 0.0 0.0 0 0 ? SW Sep10 0:00 [kflushd] <br>

root 3 0.0 0.0 0 0 ? SW Sep10 0:00 [kpiod] <br>

root 4 0.0 0.0 0 0 ? SW Sep10 0:00 [kswapd] <br>

........ <br>

<br>

<br>

<br>

名称：pstree <br>

使用权限：所有使用者 <br>

使用方式： <br>

pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user] <br>

pstree -V <br>

说明：将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该使用者所拥有的行程 <br>

参数： <br>

-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号 <br>

-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 * <br>

范例： <br>

<br>

pstree <br>

<br>

init-+-amd <br>

|-apmd <br>

|-atd <br>

|-httpd---10*[httpd] <br>

%pstree -p <br>

init(1)-+-amd(447) <br>

|-apmd(105) <br>

|-atd(339) <br>

%pstree -c <br>

init-+-amd <br>

|-apmd <br>

|-atd <br>

|-httpd-+-httpd <br>

| |-httpd <br>

| |-httpd <br>

| |-httpd <br>

.... <br>

<br>

<br>

<br>

名称：renice <br>

使用权限：所有使用者 <br>

<br>

使用方式：renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...] <br>

<br>

说明：重新指定一个或多个行程(Process)的优先序(一个或多个将根据所下的参数而定) <br>

<br>

把计 <br>

<br>

-p pid 重新指定行程的 id 为 pid 的行程的优先序 <br>

-g pgrp 重新指定行程群组(process group)的 id 为 pgrp 的行程 (一个或多个) 的优先序 <br>

-u user 重新指定行程拥有者为 user 的行程的优先序 <br>

范例： <br>

将行程 id 为 987 及 32 的行程与行程拥有者为 daemon 及 root 的优先序号码加 1 : <br>

renice +1 987 -u daemon root -p 32 <br>

<br>

注意 : 每一个行程(Process)都有一个唯一的 (unique) id <br>

<br>

<br>

<br>

名称：top <br>

使用权限：所有使用者 <br>

<br>

使用方式：top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] <br>

<br>

说明：即时显示 process 的动态 <br>

<br>

把计 <br>

<br>

d : 改变显示的更新速度，或是在交谈式指令列( interactive command)按 s <br>

q : 没有任何延迟的显示速度，如果使用者是有 superuser 的权限，则 top 将会以最高的优先序执行 <br>

c : 切换显示模式，共有两种模式，一是只显示执行档的名称，另一种是显示完整的路径与名称S : 累积模式，会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来 <br>

s : 安全模式，将交谈式指令取消, 避免潜在的危机 <br>

i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程 <br>

n : 更新的次数，完成后将会退出 top <br>

b : 批次档模式，搭配 "n" 参数一起使用，可以用来将 top 的结果输出到档案内 <br>

<br>

范例： <br>

显示更新十次后退出 ; <br>

top -n 10 <br>

<br>

使用者将不能利用交谈式指令来对行程下命令 : <br>

top -s <br>

<br>

将更新显示二次的结果输入到名称为 top.log 的档案里 : <br>

top -n 2 -b &lt; top.log <br>

<br>

名称：skill <br>

<br>

使用权限：所有使用者 <br>

<br>

使用方式： skill [signal to send] [options] 选择程序的规则 <br>

<br>

说明： <br>

<br>

送个讯号给正在执行的程序,预设的讯息为 TERM (中断) , 较常使用的讯息为 HUP , INT , KILL , STOP , CONT ,和 0 <br>

<br>

讯息有三种写法:分别为 -9 , -SIGKILL , -KILL , 可以使用 -l 或 -L 已列出可使用的讯息。 <br>

<br>

一般参数： <br>

<br>

-f 快速模式/尚未完成 <br>

<br>

-i 互动模式/ 每个动作将要被确认 <br>

<br>

-v 详细输出/ 列出所选择程序的资讯 <br>

<br>

-w 智能警告讯息/ 尚未完成 <br>

<br>

-n 没有动作/ 显示程序代号 <br>

<br>

参数：选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。 <br>

<br>

-t 终端机代号 ( tty 或 pty ) <br>

<br>

-u 使用者名称 <br>

<br>

-p 程序代号 ( pid ) <br>

<br>

-c 命令名称 可使用的讯号: <br>

<br>

以下列出已知的讯号名称,讯号代号,功能。 <br>

<br>

名称 (代号) 功能/ 描述 <br>

<br>

ALRM 14 离开 <br>

<br>

HUP 1 离开 <br>

<br>

INT 2 离开 <br>

<br>

KILL 9 离开/ 强迫关闭 <br>

<br>

PIPE 13 离开 <br>

<br>

POLL 离开 <br>

<br>

PROF 离开 <br>

<br>

TERM 15 离开 <br>

<br>

USR1 离开 <br>

<br>

USR2 离开 <br>

<br>

VTALRM 离开 <br>

<br>

STKFLT 离开/ 只适用于i386, m68k, arm 和 ppc 硬体 <br>

<br>

UNUSED 离开/ 只适用于i386, m68k, arm 和 ppc 硬体 <br>

<br>

TSTP 停止 /产生与内容相关的行为 <br>

<br>

TTIN 停止 /产生与内容相关的行为 <br>

<br>

TTOU 停止 /产生与内容相关的行为 <br>

<br>

STOP 停止 /强迫关闭 <br>

<br>

CONT 从新启动 /如果在停止状态则从新启动,否则忽略 <br>

<br>

PWR 忽略 /在某些系统中会离开 <br>

<br>

WINCH 忽略 <br>

<br>

CHLD 忽略 <br>

<br>

ABRT 6 核心 <br>

<br>

FPE 8 核心 <br>

<br>

ILL 4 核心 <br>

<br>

QUIT 3 核心 <br>

<br>

SEGV 11 核心 <br>

<br>

TRAP 5 核心 <br>

<br>

SYS 核心 /或许尚未实作 <br>

<br>

EMT 核心 /或许尚未实作 <br>

<br>

BUS 核心 /核心失败 <br>

<br>

XCPU 核心 /核心失败 <br>

<br>

XFSZ 核心 /核心失败 <br>

<br>

范例： <br>

<br>

停止所有在 PTY 装置上的程序 <br>

skill -KILL -v pts/* <br>

<br>

停止三个使用者 user1 , user2 , user3 <br>

skill -STOP user1 user2 user3 <br>

<br>

<br>

<br>

其他相关的命令: kill <br>

<br>

<br>

<br>

名称：expr <br>

<br>

使用权限：所有使用者 <br>

### 字串长度 <br>

<br>

shell&gt;&gt; expr length "this is a test" <br>

14 <br>

<br>

### 数字商数 <br>

<br>

shell&gt;&gt; expr 14 % 9 <br>

5 <br>

<br>

### 从位置处抓取字串 <br>

<br>

shell&gt;&gt; expr substr "this is a test" 3 5 <br>

is is <br>

<br>

### 数字串 only the first character <br>

<br>

shell&gt;&gt; expr index "testforthegame" e <br>

2 <br>

<br>

### 字串真实重现 <br>

<br>

shell&gt;&gt; expr quote thisisatestformela <br>

thisisatestformela <br>

<br>

<br>

<br>

<br>

名称: tr <br>

<br>

### 1.比方说要把目录下所有的大写档名换为小写档名? <br>

<br>

似乎有很多方式，"tr"是其中一种: <br>

<br>

#!/bin/sh <br>

<br>

dir="/tmp/testdir"; <br>

files=`find $dir -type f`; <br>

for i in $files <br>

do <br>

dir_name=`dirname $i`; <br>

ori_filename=`basename $i` <br>

new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` &gt; /dev/null; <br>

#echo $new_filename; <br>

mv $dir_name/$ori_filename $dir_name/$new_filename <br>

done <br>

<br>

<br>

### 2.自己试验中...lowercase to uppercase <br>

<br>

tr abcdef...[del] ABCDE...[del] <br>

tr a-z A-Z <br>

tr [:lower:] [:upper:] <br>

<br>

shell&gt;&gt; echo "this is a test" | tr a-z A-Z &gt; www <br>

shell&gt;&gt; cat www <br>

THIS IS A TEST <br>

<br>

### 3.去掉不想要的字串 <br>

<br>

shell&gt;&gt; tr -d this ### 去掉有关 t.e.s.t <br>

this <br>

<br>

man <br>

man <br>

test <br>

e <br>

<br>

### 4.取代字串 <br>

<br>

shell&gt;&gt; tr -s "this" "TEST" <br>

this <br>

TEST <br>

th <br>

TE <br>

<br>

<br>

<br>

<br>

指令：clear <br>

用途：清除萤幕用。 <br>

<br>

使用方法：在 console 上输入 clear。 <br>

<br>

<br>

名称: reset, tset <br>

使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal] <br>

<br>

使用说明: <br>

<br>

reset 其实和 tset 是一同个命令，它的用途是设定终端机的状态。一般而言，这个命令会自动的从环境变数、命令列或是其它的组态档决定目前终端机的型态。如果指定型态是 ? 的话，这个程式会要求使用者输入终端机的型别。 <br>

<br>

由于这个程式会将终端机设回原始的状态，除了在 login
时使用外，当系统终端机因为程式不正常执行而进入一些奇怪的状态时，你也可以用它来重设终端机o 例如不小心把二进位档用 cat
指令进到终端机，常会有终端机不再回应键盘输入，或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。选项说明: <br>

<br>

<br>

-p <br>

将终端机类别显示在萤幕上，但不做设定的动作。这个命令可以用来取得目前终端机的类别。 <br>

-e ch <br>

将 erase 字元设成 ch <br>

-i ch <br>

将中断字元设成 ch <br>

-k ch <br>

将删除一行的字元设成 ch <br>

-I <br>

不要做设定的动作，如果没有使用选项 -Q 的话，erase、中断及删除字元的目前值依然会送到萤幕上。 <br>

-Q <br>

不要显示 erase、中断及删除字元的值到萤幕上。 <br>

-r <br>

将终端机类别印在萤幕上。 <br>

-s <br>

将设定 TERM 用的命令用字串的型式送到终端机中，通常在 .login 或 .profile 中用 <br>

范例: <br>

让使用者输入一个终端机型别并将终端机设到该型别的预设状态。 <br>

# reset ? <br>

<br>

<br>

<br>

将 erase 字元设定 control-h <br>

# reset -e ^B <br>

<br>

<br>

<br>

将设定用的字串显示在萤幕上 <br>

# reset -s <br>

Erase is control-B (^B). <br>

Kill is control-U (^U). <br>

Interrupt is control-C (^C). <br>

TERM=xterm; <br>

<br>

名称：compress <br>

<br>

使用权限：所有使用者 <br>

<br>

<br>

使用方式：compress [-dfvcV] [-b maxbits] [file ...] <br>

<br>

<br>

说明： <br>

compress 是一个相当古老的 unix 档案压缩指令，压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案，压缩后的档案可以以
uncompress 解压。若要将数个档案压成一个压缩档，必须先将档案 tar 起来再压缩。由于 gzip
可以产生更理想的压缩比例，一般人多已改用 gzip 为档案压缩工具。 <br>

<br>

<br>

参数： <br>

c 输出结果至标准输出设备（一般指荧幕） <br>

f 强迫写入档案，若目的档已经存在，则会被覆盖 (force) <br>

v 将程式执行的讯息印在荧幕上 (verbose) <br>

b 设定共同字串数的上限，以位元计算，可以设定的值为 9 至 16 bits 。由于值越大，能使用的共同字串就 越多，压缩比例就越大，所以一般使用预设值 16 bits (bits) <br>

d 将压缩档解压缩 <br>

V 列出版本讯息 <br>

<br>

<br>

范例： <br>

<br>

<br>

将 source.dat 压缩成 source.dat.Z ，若 source.dat.Z 已经存在，内容则会被压缩档覆盖。 <br>

<br>

<br>

<br>

compress -f source.dat <br>

<br>

<br>

<br>

将 source.dat 压缩成 source.dat.Z ，并列印出压缩比例。 <br>

-v 与 -f 可以一起使用 <br>

<br>

<br>

<br>

compress -vf source.dat <br>

<br>

<br>

<br>

将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。 <br>

<br>

<br>

<br>

compress -c source.dat &gt; target.dat.Z <br>

<br>

<br>

<br>

-b 的值越大，压缩比例就越大，范围是 9-16 ，预设值是 16 。 <br>

<br>

<br>

<br>

compress -b 12 source.dat <br>

<br>

<br>

<br>

将 source.dat.Z 解压成 source.dat ，若档案已经存在，使用者按 y 以确定覆盖档案，若使用 -df
程式则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档名，所以 source.dat 会自动当作 source.dat.Z 处理。 <br>

<br>

<br>

<br>

compress -d source.dat <br>

compress -d source.dat.Z <br>

<br>

<br>

<br>

<br>

名称： lpd <br>

<br>

使用权限： 所有使用者 <br>

<br>

使用方式：lpd [-l] [#port] <br>

lpd 是一个常驻的印表机管理程式，它会根据 /etc/printcap 的内容来管理本地或远端的印表机。/etc/printcap
中定义的每一个印表机必须在 /var/lpd 中有一个相对应的目录，目录中以 cf
开头的档案表示一个等待送到适当装置的印表工作。这个档案通常是由 lpr 所产生。 <br>

<br>

lpr 和 lpd 组成了一个可以离线工作的系统，当你使用 lpr 时，印表机不需要能立即可用，甚至不用存在。lpd 会自动监视印表机的状况，当印表机上线后，便立即将档案送交处理。这个得所有的应用程式不必等待印表机完成前一工作。 <br>

<br>

参数： <br>

<br>

<br>

-l: 将一些除错讯息显示在标准输出上。 <br>

#port: 一般而言，lpd 会使用 getservbyname 取得适当的 TCP/IP port，你可以使用这个参数强迫 lpd 使用指定的 port。 <br>

<br>

范例： <br>

这个程式通常是由 /etc/rc.d 中的程式在系统启始阶段执行。 <br>

<br>

<br>

<br>

名称 lpq <br>

-- 显示列表机贮列中未完成的工作 用法 <br>

<br>

lpq [l] [P] [user] <br>

<br>

说明 <br>

lpq 会显示由 lpd 所管理的列表机贮列中未完成的项目。 <br>

<br>

范例 <br>

范例 1. 显示所有在 lp 列表机贮列中的工作 <br>

<br>

<br>

# lpq -PlpRank Owner Job Files Total Size1st root 238 (standard input) 1428646 bytes <br>

<br>

<br>

<br>

<br>

相关函数 <br>

lpr,lpc,lpd <br>

<br>

<br>

<br>

名称： lpr <br>

<br>

使用权限： 所有使用者 <br>

<br>

使用方式：lpr [ -P printer ] <br>

将档案或是由标准输入送进来的资料送到印表机贮列之中，印表机管理程式 lpd 会在稍后将这个档案送给适当的程式或装置处理。lpr 可以用来将料资送给本地或是远端的主机来处理。 <br>

<br>

参数： <br>

<br>

<br>

-p Printer: 将资料送至指定的印表机 Printer，预设值为 lp。 <br>

<br>

范例： <br>

将 <a href="http://www.c/" target="_blank">www.c</a> 和 kkk.c 送到印表机 lp。 <br>

lpr -Plp <a href="http://www.c/" target="_blank">www.c</a> kkk.c <br>

<br>

<br>

<br>

<br>

名称: lprm <br>

-- 将一个工作由印表机贮列中移除 用法 <br>

<br>

/usr/bin/lprm [P] [file...] <br>

<br>

说明 <br>

尚未完成的印表机工作会被放在印表机贮列之中，这个命令可用来将常未送到印表机的工作取消。由于每一个印表机都有一个独立的贮列，你可以用 -P 这个命令设定想要作用的印列机。如果没有设定的话，会使用系统预设的印表机。 <br>

<br>

这个命令会检查使用者是否有足够的权限删除指定的档案，一般而言，只有档案的拥有者或是系统管理员才有这个权限。 <br>

<br>

范例 <br>

将印表机 hpprinter 中的第 1123 号工作移除 <br>

<br>

<br>

lprm -Phpprinter 1123 <br>

<br>

<br>

将第 1011 号工作由预设印表机中移除 <br>

<br>

<br>

lprm 1011 <br>

<br>

<br>

<br>

<br>

名称： fdformat <br>

<br>

使用权限： 所有使用者 <br>

<br>

使用方式：fdformat [-n] device <br>

<br>

使用说明 : <br>

对指定的软碟机装置进行低阶格式化。使用这个指令对软碟格式化的时候，最好指定像是下面的装置： <br>

<br>

<br>

/dev/fd0d360 磁碟机 A: ，磁片为 360KB 磁碟 <br>

/dev/fd0h1440 磁碟机 A: ，磁片为 1.4MB 磁碟 <br>

/dev/fd1h1200 磁碟机 B: ，磁片为 1.2MB 磁碟 <br>

如果使用像是 /dev/fd0 之类的装置，如果里面的磁碟不是标准容量，格式化可能会失败。在这种情况之下，使用者可以用 setfdprm 指令先行指定必要参数。 <br>

<br>

参数： <br>

<br>

<br>

-n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。 <br>

<br>

范例： <br>

<br>

fdformat -n /dev/fd0h1440 <br>

<br>

将磁碟机 A 的磁片格式化成 1.4MB 的磁片。并且省略确认的步骤。 <br>

<br>

<br>

<br>

名称： mformat <br>

<br>

使用权限： 所有使用者 <br>

<br>

使用方式： <br>

<br>

mformat [-t cylinders] [-h heads] [-s sectors] [-l volume_label] [-F]
[-I fsVer-sion] [-S sizecode] [-2 sectors_on_track_0] [-M
software_sector_size] [-a] [-X] [-C] [-H hidden_sectors] [-r
root_sectors] [-B boot_sector] [-0 rate_on_track_0] [-A
rate_on_other_tracks] [-1] [-k] drive: <br>

<br>

在已经做过低阶格式化的磁片上建立 DOS 档案系统。如果在编译 mtools 的时候把 USE_2M 的参数打开，部分与 2M 格式相关的参数就会发生作用。否则这些参数（像是 S,2,1,M）不会发生作用。 <br>

<br>

参数： <br>

<br>

-t 磁柱（synlider）数 <br>

-h 磁头（head）数 <br>

-s 每一磁轨的磁区数 <br>

-l 标签 <br>

-F 将磁碟格式化为 FAT32 格式，不过这个参数还在实验中。 <br>

-I 设定 FAT32 中的版本号。这当然也还在实验中。 <br>

-S 磁区大小代码，计算方式为 sector = 2^(大小代码+7) <br>

-c 磁丛（cluster）的磁区数。如果所给定的数字会导致磁丛数超过 FAT 表的限制，mformat 会自动放大磁区数。 <br>

-s <br>

-M 软体磁区大小。这个数字就是系统回报的磁区大小。通常是和实际的大小相同。 <br>

-a 如果加上这个参数，mformat 会产生一组 Atari 系统的序号给这块软碟。 <br>

-X 将软碟格式化成 XDF 格式。使用前必须先用 xdfcopy 指令对软碟作低阶格式化的动作。 <br>

-C 产生一个可以安装 MS-DOS 档案系统的磁碟影像档（disk image）。当然对一个实体磁碟机下这个参数是没有意义的。 <br>

-H 隐藏磁区的数目。这通常适用在格式化硬碟的分割区时，因为通常一个分割区的前面还有分割表。这个参数未经测试，能不用就不用。 <br>

-n 磁碟序号 <br>

-r 根目录的大小，单位是磁区数。这个参数只对 FAT12 和 FAT16 有效。 <br>

-B 使用所指定的档案或是设备的开机磁区做为这片磁片或分割区的开机磁区。当然当中的硬体参数会随之更动。 <br>

-k 尽量保持原有的开机磁区。 <br>

-0 第 0 轨的资料传输率 <br>

-A 第 0 轨以外的资料传输率 <br>

-2 使用 2m 格式 <br>

-1 不使用 2m 格式 <br>

<br>

范例： <br>

mformat a: <br>

<br>

这样会用预设值把 a: （就是 /dev/fd0）里的磁碟片格式化。 <br>

<br>

<br>

<br>

名称： mkdosfs <br>

<br>

使用权限： 所有使用者 <br>

<br>

使用方式： mkdosfs [ -c | -l filename ] <br>

[ -f number_of_FATs ] <br>

[ -F FAT_size ] <br>

[ -i volume_id ] <br>

[ -m message_file ] <br>

[ -n volume_name ] <br>

[ -r root_dir_entry ] <br>

[ -s sector_per_cluster ] <br>

[ -v ] <br>

device <br>

[ block_count ] <br>

<br>

<br>

<br>

说明： 建立 DOS 档案系统。 device 指你想要建立 DOS 档案系统的装置代号。像是 /dev/hda1 等等。 block_count 则是你希望配置的区块数。如果 block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。 <br>

<br>

参数： <br>

<br>

<br>

-c 建立档案系统之前先检查是否有坏轨。 <br>

-l 从得定的档案中读取坏轨记录。 <br>

-f 指定档案配置表（FAT , File Allocation Table)的数量。预设值为 2 。目前 Linux 的 FAT 档案系统不支援超过 2 个 FAT 表。通常这个不需要改。 <br>

-F 指定 FAT 表的大小，通常是 12 或是 16 个位元组。12 位元组通常用于磁碟片，16 位元组用于一般硬碟的分割区，也就是所谓的
FAT16 格式。这个值通常系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用，反之在硬碟上用 FAT12 亦然。 <br>

-i 指定 Volume ID。一般是一个 4 个位元组的数字，像是 2e203a47 。如果不给系统会自己产生。 <br>

-m 当使用者试图用这片磁片或是分割区开机，而上面没有作业系统时，系统会给使用者一段警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案编辑好，然后用这个参数指定，或是用 <br>

-m - <br>

这样系统会要求你直接输入这段文字。要特别注意的是，档案里的字串长度不要超过 418 个字，包括展开的跳栏符号（TAB）和换行符号（换行符号在 DOS 底下算两个字元！） <br>

-n 指定 Volume Name，就是磁碟标签。如同在 DOS 底下的 format 指令一样，给不给都可以。没有预设值。 <br>

-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预设值是在软碟上是 112 或是 224 ，在硬碟上是 512。没事不要改这个数字。 <br>

-s 每一个磁丛（cluster）的磁区数。必须是 2 的次方数。不过除非你知道你在作什么，这个值不要乱给。 <br>

-v 提供额外的讯息 <br>

<br>

范例： <br>

mkdosfs -n Tester /dev/fd0 将 A 槽里的磁碟片格式化为 DOS 格式，并将标签设为 Tester <img src ="http://www.cnitblog.com/ygb/aggbug/5501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:16 <a href="http://www.cnitblog.com/ygb/articles/5501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux指令大全[2]［注］来源于天津Linux热线</title><link>http://www.cnitblog.com/ygb/articles/5500.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:15:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5500.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5500.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5500.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5500.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5500.html</trackback:ping><description><![CDATA[<div>名称 : at <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : at -V [-q queue] [-f file] [-mldbv] TIME <br>
<br>
说明 : at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令，TIME 的格式是 HH:MM其中的 HH 为小时，MM
为分钟，甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。 <br>
<br>
如果想要指定超过一天内的时间，则可以用 MMDDYY 或者 MM/DD/YY 的格式，其中 MM 是分钟，DD 是第几日，YY
是指年份。另外，使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间，其中的时间间隔可以是 minutes, hours, days,
weeks <br>
<br>
另外，使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后，at 会进入交谈模式并要求输入指令或程式，当你输入完后按下 ctrl+D 即可完成所有动作，至于执行的结果将会寄回你的帐号中。 <br>
<br>
把计 : <br>
<br>
-V : 印出版本编号 <br>
-q : 使用指定的伫列(Queue)来储存，at 的资料是存放在所谓的 queue 中，使用者可以同时使用多个 queue，而 queue 的编号为 a, b, c... z 以及 A, B, ... Z 共 52 个 <br>
-m : 即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者 <br>
-f file : 读入预先写好的命令档。使用者不一定要使用交谈模式来输入，可以先将所有的指定先写入档案后再一次读入 <br>
-l : 列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l) <br>
-d : 删除指定 (使用者也可以直接使用 atrm 而不用 at -d) <br>
-v : 列出所有已经完成但尚未删除的指定 <br>
<br>
例子 : <br>
三天后的下午 5 点锺执行 /bin/ls : <br>
at 5pm + 3 days /bin/ls <br>
<br>
三个星期后的下午 5 点锺执行 /bin/ls : <br>
at 5pm + 2 weeks /bin/ls <br>
<br>
明天的 17:20 执行 /bin/date : <br>
at 17:20 tomorrow /bin/date <br>
<br>
1999 年的最后一天的最后一分钟印出 the end of world ! <br>
at 23:59 12/31/1999 echo the end of world ! <br>
<br>
<br>
<br>
<br>
名称：cal <br>
<br>
使用权限：所有使用者 <br>
<br>
使用方式：cal [-mjy] [month [year]] <br>
<br>
说明： <br>
<br>
显示日历。若只有一个参数，则代表年份(1-9999)，显示该年的年历。年份必须全部写出：``cal 89\ 将不会是显示 1989 年的年历。使用两个参数，则表示月份及年份。若没有参数则显示这个月的月历。 <br>
1752 年 9 月第 3 日起改用西洋新历，因这时大部份的国家都采用新历，有 10 天被去除，所以该月份的月历有些不同。在此之前为西洋旧历。 <br>
<br>
匡兜 <br>
<br>
-m : 以星期一为每周的第一天方式显示。 <br>
-j : 以凯撒历显示，即以一月一日起的天数显示。 <br>
-y : 显示今年年历。 <br>
<br>
范例： <br>
<br>
cal : 显示本月的月历。 <br>
<br>
<br>
<br>
[root@mylinux /root]# date <br>
Tue Aug 15 08:00:18 CST 2000 <br>
[root@mylinux /root]# cal <br>
August 2000 <br>
Su Mo Tu We Th Fr Sa <br>
1 2 3 4 5 <br>
6 7 8 9 10 11 12 <br>
13 14 15 16 17 18 19 <br>
20 21 22 23 24 25 26 <br>
27 28 29 30 31 <br>
<br>
[root@mylinux /root]# <br>
<br>
<br>
cal 2001 : 显示公元 2001 年年历。 <br>
<br>
[root@mylinux /root]# cal 2001 <br>
2001 <br>
<br>
January February March <br>
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br>
1 2 3 4 5 6 1 2 3 1 2 3 <br>
7 8 9 10 11 12 13 4 5 6 7 8 9 10 4 5 6 7 8 9 10 <br>
14 15 16 17 18 19 20 11 12 13 14 15 16 17 11 12 13 14 15 16 17 <br>
21 22 23 24 25 26 27 18 19 20 21 22 23 24 18 19 20 21 22 23 24 <br>
28 29 30 31 25 26 27 28 25 26 27 28 29 30 31 <br>
<br>
April May June <br>
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br>
1 2 3 4 5 6 7 1 2 3 4 5 1 2 <br>
8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 <br>
15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 <br>
22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 <br>
29 30 27 28 29 30 31 24 25 26 27 28 29 30 <br>
<br>
July August September <br>
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br>
1 2 3 4 5 6 7 1 2 3 4 1 <br>
8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 <br>
15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 <br>
22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 <br>
29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 <br>
30 <br>
October November December <br>
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa <br>
1 2 3 4 5 6 1 2 3 1 <br>
7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 <br>
14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 <br>
21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 <br>
28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 <br>
30 31 <br>
<br>
[root@mylinux /root]# <br>
<br>
<br>
<br>
<br>
<br>
cal 5 2001 : 显示公元 2001 年 5 月月历。 <br>
<br>
<br>
<br>
[root@mylinux /root]# cal 5 2001 <br>
May 2001 <br>
Su Mo Tu We Th Fr Sa <br>
1 2 3 4 5 <br>
6 7 8 9 10 11 12 <br>
13 14 15 16 17 18 19 <br>
20 21 22 23 24 25 26 <br>
27 28 29 30 31 <br>
<br>
[root@mylinux /root]# <br>
<br>
<br>
<br>
<br>
<br>
cal -m : 以星期一为每周的第一天方式，显示本月的月历。 <br>
<br>
<br>
<br>
[root@mylinux /root]# cal -m <br>
August 2000 <br>
Mo Tu We Th Fr Sa Su <br>
1 2 3 4 5 6 <br>
7 8 9 10 11 12 13 <br>
14 15 16 17 18 19 20 <br>
21 22 23 24 25 26 27 <br>
28 29 30 31 <br>
<br>
[root@mylinux /root]# <br>
<br>
<br>
<br>
<br>
<br>
cal -jy : 以一月一日起的天数显示今年的年历。 <br>
<br>
<br>
<br>
[root@mylinux /root]# cal -jy <br>
2000 <br>
<br>
January February <br>
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br>
1 32 33 34 35 36 <br>
2 3 4 5 6 7 8 37 38 39 40 41 42 43 <br>
9 10 11 12 13 14 15 44 45 46 47 48 49 50 <br>
16 17 18 19 20 21 22 51 52 53 54 55 56 57 <br>
23 24 25 26 27 28 29 58 59 60 <br>
30 31 <br>
March April <br>
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br>
61 62 63 64 92 <br>
65 66 67 68 69 70 71 93 94 95 96 97 98 99 <br>
72 73 74 75 76 77 78 100 101 102 103 104 105 106 <br>
79 80 81 82 83 84 85 107 108 109 110 111 112 113 <br>
86 87 88 89 90 91 114 115 116 117 118 119 120 <br>
121 <br>
May June <br>
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br>
122 123 124 125 126 127 153 154 155 <br>
128 129 130 131 132 133 134 156 157 158 159 160 161 162 <br>
135 136 137 138 139 140 141 163 164 165 166 167 168 169 <br>
142 143 144 145 146 147 148 170 171 172 173 174 175 176 <br>
149 150 151 152 177 178 179 180 181 182 <br>
<br>
July August <br>
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br>
183 214 215 216 217 218 <br>
184 185 186 187 188 189 190 219 220 221 222 223 224 225 <br>
191 192 193 194 195 196 197 226 227 228 229 230 231 232 <br>
198 199 200 201 202 203 204 233 234 235 236 237 238 239 <br>
205 206 207 208 209 210 211 240 241 242 243 244 <br>
212 213 <br>
September October <br>
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br>
245 246 275 276 277 278 279 280 281 <br>
247 248 249 250 251 252 253 282 283 284 285 286 287 288 <br>
254 255 256 257 258 259 260 289 290 291 292 293 294 295 <br>
261 262 263 264 265 266 267 296 297 298 299 300 301 302 <br>
268 269 270 271 272 273 274 303 304 305 <br>
<br>
November December <br>
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat <br>
306 307 308 309 336 337 <br>
310 311 312 313 314 315 316 338 339 340 341 342 343 344 <br>
317 318 319 320 321 322 323 345 346 347 348 349 350 351 <br>
324 325 326 327 328 329 330 352 353 354 355 356 357 358 <br>
331 332 333 334 335 359 360 361 362 363 364 365 <br>
366 <br>
<br>
[root@mylinux /root]# <br>
<br>
<br>
<br>
<br>
名称 : crontab <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : <br>
<br>
crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e } <br>
说明 : <br>
crontab 是用来让使用者在固定时间或固定间隔执行程式之用，换句话说，也就是类似使用者的时程表。-u user 是指设定指定 user
的时程表，这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话，就是表示设定自己的时程表。
<br>
<br>
餐数 : <br>
<br>
-e : 执行文字编辑器来设定时程表，内定的文字编辑器是 VI，如果你想用别的文字编辑器，则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) <br>
-r : 删除目前的时程表 <br>
-l : 列出目前的时程表 <br>
<br>
时程表的格式如下 : <br>
f1 f2 f3 f4 f5 program <br>
<br>
其中 f1 是表示分钟，f2 表示小时，f3 表示一个月份中的第几日，f4 表示月份，f5 表示一个星期中的第几天。program 表示要执行的程式。 <br>
当 f1 为 * 时表示每分钟都要执行 program，f2 为 * 时表示每小时都要执行程式，其余类推 <br>
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行，f2 为 a-b 时表示从第 a 到第 b 小时都要执行，其余类推 <br>
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次，f2 为 */n 表示每 n 小时个时间间隔执行一次，其余类推 <br>
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行，f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行，其余类推 <br>
<br>
使用者也可以将所有的设定先存放在档案 file 中，用 crontab file 的方式来设定时程表。 <br>
例子 : <br>
<br>
每月每天每小时的第 0 分钟执行一次 /bin/ls : <br>
0 7 * * * /bin/ls <br>
<br>
在 12 月内, 每天的早上 6 点到 12 点中，每隔 20 分钟执行一次 /usr/bin/backup : <br>
0 6-12/3 * 12 * /usr/bin/backup <br>
<br>
周一到周五每天下午 5:00 寄一封信给 alex@domain.name : <br>
0 17 * * 1-5 mail -s "hi" alex@domain.name &lt; /tmp/maildata <br>
<br>
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha" <br>
20 0-23/2 * * * echo "haha" <br>
<br>
注意 : <br>
<br>
当程式在你所指定的时间执行后，系统会寄一封信给你，显示该程式执行的内容，若是你不希望收到这样的信，请在每一行空一格之后加上 &gt; /dev/null 2&gt;&amp;1 即可。 <br>
<br>
名称 : date <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : <br>
<br>
date [-u] [-d datestr] [-s datestr] [--utc] [--universal]
[--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT]
[MMDDhhmm[[CC]YY][.ss]] <br>
<br>
说明 : <br>
<br>
date 可以用来显示或设定系统的日期与时间，在显示方面，使用者可以设定欲显示的格式，格式设定为一个加号后接数个标记，其中可用的标记列表如下 : <br>
<br>
时间方面 : <br>
<br>
% : 印出 % <br>
%n : 下一行 <br>
%t : 跳格 <br>
%H : 小时(00..23) <br>
%I : 小时(01..12) <br>
%k : 小时(0..23) <br>
%l : 小时(1..12) <br>
%M : 分钟(00..59) <br>
%p : 显示本地 AM 或 PM <br>
%r : 直接显示时间 (12 小时制，格式为 hh:mm:ss [AP]M) <br>
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数 <br>
%S : 秒(00..61) <br>
%T : 直接显示时间 (24 小时制) <br>
%X : 相当于 %H:%M:%S <br>
%Z : 显示时区 <br>
<br>
日期方面 : <br>
%a : 星期几 (Sun..Sat) <br>
%A : 星期几 (Sunday..Saturday) <br>
%b : 月份 (Jan..Dec) <br>
%B : 月份 (January..December) <br>
%c : 直接显示日期与时间 <br>
%d : 日 (01..31) <br>
%D : 直接显示日期 (mm/dd/yy) <br>
%h : 同 %b <br>
%j : 一年中的第几天 (001..366) <br>
%m : 月份 (01..12) <br>
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形) <br>
%w : 一周中的第几天 (0..6) <br>
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形) <br>
%x : 直接显示日期 (mm/dd/yy) <br>
%y : 年份的最后两位数字 (00.99) <br>
%Y : 完整年份 (0000..9999) <br>
<br>
若是不以加号作为开头，则表示要设定时间，而时间格式为 MMDDhhmm[[CC]YY][.ss]，其中 MM 为月份，DD 为日，hh 为小时，mm 为分钟，CC 为年份前两位数字，YY 为年份后两位数字，ss 为秒数 <br>
把计 : <br>
<br>
-d datestr : 显示 datestr 中所设定的时间 (非系统时间) <br>
--help : 显示辅助讯息 <br>
-s datestr : 将系统时间设为 datestr 中所设定的时间 <br>
-u : 显示目前的格林威治时间 <br>
--version : 显示版本编号 <br>
<br>
例子 : <br>
显示时间后跳行，再显示目前日期 : <br>
date +%T%n%D <br>
<br>
显示月份与日数 : <br>
date +%B %d <br>
<br>
显示日期与设定时间(12:34:56) : <br>
date --date 12:34:56 <br>
<br>
注意 : <br>
<br>
当你不希望出现无意义的 0 时(比如说 1999/03/07)，则可以在标记中插入 - 符号，比如说 date +%-H:%-M:%-S
会把时分秒中无意义的 0 给去掉，像是原本的 08:09:04 会变为 8:9:4。另外，只有取得权限者(比如说 root)才能设定系统时间。
<br>
<br>
当你以 root 身分更改了系统时间之后，请记得以 clock -w 来将系统时间写入 CMOS 中，这样下次重新开机时系统时间才会持续抱持最新的正确值。 <br>
<br>
<br>
名称 : sleep <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : sleep [--help] [--version] number[smhd] <br>
<br>
说明 : sleep 可以用来将目前动作延迟一段时间 <br>
<br>
参数说明 : <br>
<br>
--help : 显示辅助讯息 <br>
--version : 显示版本编号 <br>
number : 时间长度，后面可接 s、m、h 或 d <br>
其中 s 为秒，m 为 分钟，h 为小时，d 为日数 <br>
<br>
例子 : <br>
显示目前时间后延迟 1 分钟，之后再次显示时间 : <br>
date;sleep 1m;date <br>
<br>
<br>
<br>
名称： time <br>
使用权限： 所有使用者 <br>
<br>
使用方式： time [options] COMMAND [arguments] <br>
<br>
说明： time 指令的用途，在于量测特定指令执行时所需消耗的时间及系统资源等资讯。例如 CPU
时间、记忆体、输入输出等等。需要特别注意的是，部分资讯在 Linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time
指令所预设的方式并不相同，以致于 time 指令无法取得这些资料。 <br>
<br>
把计 <br>
<br>
-o or --output=FILE <br>
设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已经存在，系统将覆写其内容。 <br>
-a or --append <br>
配合 -o 使用，会将结果写到档案的末端，而不会覆盖掉原来的内容。 <br>
-f FORMAT or --format=FORMAT <br>
以 FORMAT 字串设定显示方式。当这个选项没有被设定的时候，会用系统预设的格式。不过你可以用环境变数 time 来设定这个格式，如此一来就不必每次登入系统都要设定一次。 <br>
一般设定上，你可以用 <br>
\t <br>
表示跳栏，或者是用 <br>
\n <br>
表示换行。每一项资料要用 % 做为前导。如果要在字串中使用百分比符号，就用 。（学过 C 语言的人大概会觉得很熟悉） <br>
time 指令可以显示的资源有四大项，分别是： <br>
<br>
Time resources <br>
Memory resources <br>
IO resources <br>
Command info <br>
<br>
详细的内容如下： <br>
<br>
<br>
Time Resources <br>
E 执行指令所花费的时间，格式是：[hour]:minute:second。请注意这个数字并不代表实际的 CPU 时间。 <br>
e 执行指令所花费的时间，单位是秒。请注意这个数字并不代表实际的 CPU 时间。 <br>
S 指令执行时在核心模式（kernel mode）所花费的时间，单位是秒。 <br>
U 指令执行时在使用者模式（user mode）所花费的时间，单位是秒。 <br>
P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的 CPU 时间除以总时间。 <br>
<br>
<br>
Memory Resources <br>
M 执行时所占用的实体记忆体的最大值。单位是 KB <br>
t 执行时所占用的实体记忆体的平均值，单位是 KB <br>
K 执行程序所占用的记忆体总量（stack+data+text）的平均大小，单位是 KB <br>
D 执行程序的自有资料区（unshared data area）的平均大小，单位是 KB <br>
p 执行程序的自有堆叠（unshared stack）的平均大小，单位是 KB <br>
X 执行程序间共享内容（shared text）的平均值，单位是 KB <br>
Z 系统记忆体页的大小，单位是 byte。对同一个系统来说这是个常数 <br>
<br>
<br>
IO Resources <br>
F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆体页已经置换到置换档（swap file)中，而且已经分配给其他程序。此时该页的内容必须从置换档里再读出来。 <br>
R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆体页虽然已经置换到置换档中，但尚未分配给其他程序。此时该页的内容并未被破坏，不必从置换档里读出来 <br>
W 此程序被交换到置换档的次数 <br>
c 此程序被强迫中断（像是分配到的 CPU 时间耗尽）的次数 <br>
w 此程序自愿中断（像是在等待某一个 I/O 执行完毕，像是磁碟读取等等）的次数 <br>
I 此程序所输入的档案数 <br>
O 此程序所输出的档案数 <br>
r 此程序所收到的 Socket Message <br>
s 此程序所送出的 Socket Message <br>
k 此程序所收到的信号 ( Signal )数量 <br>
<br>
<br>
Command Info <br>
C 执行时的参数以及指令名称 <br>
x 指令的结束代码 ( Exit Status ) <br>
<br>
<br>
<br>
<br>
-p or --portability <br>
这个选项会自动把显示格式设定成为： <br>
real %e <br>
user %U <br>
sys %S <br>
这么做的目的是为了与 POSIX 规格相容。 <br>
-v or --verbose <br>
这个选项会把所有程式中用到的资源通通列出来，不但如一般英文语句，还有说明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。 <br>
<br>
范例： <br>
利用下面的指令 <br>
time -v ps -aux <br>
<br>
我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料： <br>
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <br>
root 1 0.0 0.4 1096 472 ? S Apr19 0:04 init <br>
root 2 0.0 0.0 0 0 ? SW Apr19 0:00 [kflushd] <br>
root 3 0.0 0.0 0 0 ? SW Apr19 0:00 [kpiod] <br>
...... <br>
root 24269 0.0 1.0 2692 996 pts/3 R 12:16 0:00 ps -aux <br>
<br>
Command being timed: "ps -aux" <br>
User time (seconds): 0.05 <br>
System time (seconds): 0.06 <br>
Percent of CPU this job got: 68% <br>
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.16 <br>
Average shared text size (kbytes): 0 <br>
Average unshared data size (kbytes): 0 <br>
Average stack size (kbytes): 0 <br>
Average total size (kbytes): 0 <br>
Maximum resident set size (kbytes): 0 <br>
Average resident set size (kbytes): 0 <br>
Major (requiring I/O) page faults: 238 <br>
Minor (reclaiming a frame) page faults: 46 <br>
Voluntary context switches: 0 <br>
Involuntary context switches: 0 <br>
Swaps: 0 <br>
File system inputs: 0 <br>
File system outputs: 0 <br>
Socket messages sent: 0 <br>
Socket messages received: 0 <br>
Signals delivered: 0 <br>
Page size (bytes): 4096 <br>
Exit status: 0 <br>
<br>
<br>
<br>
名称： uptime <br>
使用权限： 所有使用者 <br>
使用方式： uptime [-V] <br>
说明： uptime 提供使用者下面的资讯，不需其他参数： <br>
<br>
现在的时间 <br>
系统开机运转到现在经过的时间 <br>
连线的使用者数量 <br>
最近一分钟，五分钟和十五分钟的系统负载 <br>
参数： -V 显示版本资讯。 <br>
范例： uptime <br>
其结果为： <br>
10:41am up 5 days, 10 min, 1 users, load average: 0.00, 0.00, 1.99 <br>
<br>
名称：chfn <br>
<br>
使用权限：所有使用者 <br>
<br>
用法：shell&gt;&gt; chfn <br>
<br>
说明：提供使用者更改个人资讯，用于 finger and mail username <br>
<br>
范例： <br>
<br>
shell&gt;&gt; chfn <br>
Changing finger information for user <br>
Password: [del] <br>
Name[]:Johnney Huang ### 提供 finger 时的资料 <br>
Office[]:NCCU <br>
Office Phone[]: [del] <br>
Home Phone[]: [del] <br>
<br>
<br>
名称：chsh <br>
<br>
使用权限：所有使用者 <br>
<br>
用法：shell&gt;&gt; chsh <br>
<br>
说明：更改使用者 shell 设定 <br>
<br>
范例： <br>
<br>
shell&gt;&gt; chsh <br>
Changing fihanging shell for user1 <br>
Password: [del] <br>
New shell [/bin/tcsh]: ### [是目前使用的 shell] <br>
[del] <br>
<br>
shell&gt;&gt; chsh -l ### 展示 /etc/shells 档案内容 <br>
/bin/bash <br>
/bin/sh <br>
/bin/ash <br>
/bin/bsh <br>
/bin/tcsh <br>
/bin/csh <br>
<br>
<br>
<br>
” finger [返回] <br>
名称： finger <br>
使用权限： 所有使用者 <br>
<br>
使用方式： finger [options] user[@address] <br>
<br>
说明：finger 可以让使用者查询一些其他使用者的资料。会列出来的资料有： <br>
<br>
Login Name <br>
User Name <br>
Home directory <br>
Shell <br>
Login status <br>
mail status <br>
.plan <br>
.project <br>
.forward <br>
<br>
其中 .plan ，.project 和 .forward 就是使用者在他的 Home Directory 里的 .plan ，
.project 和 .forward 等档案里的资料。如果没有就没有。finger
指令并不限定于在同一伺服器上查询，也可以寻找某一个远端伺服器上的使用者。只要给一个像是 E-mail address 一般的地址即可。 <br>
把计 <br>
<br>
-l <br>
多行显示。 <br>
<br>
-s <br>
单行显示。这个选项只显示登入名称，真实姓名，终端机名称，闲置时间，登入时间，办公室号码及电话号码。如果所查询的使用者是远端伺服器的使用者，这个选项无效。 <br>
<br>
范例：下列指令可以查询本机管理员的资料： <br>
finger root <br>
<br>
其结果如下： <br>
Login: root Name: root <br>
Directory: /root Shell: /bin/bash <br>
Never logged in. <br>
No mail. <br>
No Plan. <br>
<br>
<br>
<br>
<br>
名称：last <br>
<br>
使用权限：所有使用者 <br>
<br>
使用方式：shell&gt;&gt; last [options] <br>
<br>
说明：显示系统开机以来获是从每月初登入者的讯息 <br>
<br>
把计 <br>
<br>
-R 省略 hostname 的栏位 <br>
-num 展示前 num 个 <br>
username 展示 username 的登入讯息 <br>
tty 限制登入讯息包含终端机代号 <br>
<br>
范例： <br>
<br>
shell&gt;&gt; last -R -2 <br>
johnney pts/1 Mon Aug 14 20:42 still logged in <br>
johnney pts/0 Mon Aug 14 19:59 still logged in <br>
<br>
wtmp begins Tue Aug 1 09:01:10 2000 ### /var/log/wtmp <br>
<br>
<br>
shell&gt;&gt; last -2 minery <br>
minery pts/0 140.119.217.115 Mon Aug 14 18:37 - 18:40 (00:03) <br>
minery pts/0 140.119.217.115 Mon Aug 14 17:22 - 17:24 (00:02) <br>
<br>
wtmp begins Tue Aug 1 09:01:10 2000 <br>
<br>
<br>
<br>
<br>
名称:login <br>
<br>
这个命令都不会就不要干算了！呵呵我也不在这里多费笔墨耽误大家美好青春了^_^ <br>
<br>
<br>
<br>
名称：passwd <br>
<br>
使用权限：所有使用者 <br>
<br>
使用方式：passwd [-k] [-l] [-u [-f]] [-d] [-S] [username] <br>
<br>
说明：用来更改使用者的密码 <br>
<br>
参数： <br>
-k <br>
<br>
-l <br>
<br>
-u <br>
<br>
-f <br>
<br>
-d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用. <br>
<br>
-S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用. <br>
<br>
[username] 指定帐号名称. <br>
<br>
<br>
<br>
名称 : who <br>
使用权线 : 所有使用者都可使用 <br>
<br>
使用方式 : who - [husfV] [user] <br>
<br>
说明 : 显示系统中有那些使用者正在上面，显示的资料包含了使用者 ID，使用的终端机，从那边连上来的，上线时间，呆滞时间，CPU 使用量，动作等等。 <br>
<br>
把计 : <br>
<br>
-h : 不要显示标题列 <br>
-u : 不要显示使用者的动作/工作 <br>
-s : 使用简短的格式来显示 <br>
-f : 不要显示使用者的上线位置 <br>
-V : 显示程式版本 <br>
</div>

		<!-- / message --><!-- message, attachments, sig -->
	
				
		
		
	
		
	
	
	
	
	
		
		<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:15 <a href="http://www.cnitblog.com/ygb/articles/5500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最常用的基本操作命令［推荐篇］</title><link>http://www.cnitblog.com/ygb/articles/5498.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:14:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5498.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5498.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5498.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5498.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5498.html</trackback:ping><description><![CDATA[Linux基本操作命令<br>

<br>

首先介绍一个名词“控制台（console）”，它就是我们通常见到的使用字符操作界面的人机接口，例如dos。我们说控制台命令，就是指通过字符界面输
入的可以操作系统的命令，例如dos命令就是控制台命令。我们现在要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意，和dos命令不
同的是，Linux的命令（也包括文件名等等）对大小写是敏感的，也就是说，如果你输入的命令大小写不对的话，系统是不会做出你期望的响应的。<br>

<br>

ls <br>

    这个命令就相当于dos下的dir命令一样，肯定是我第一个就要介绍的，这也是Linux控制台命令中最为重要几个命令之一。ls最常用的参数有三个： -a -l -F。<br>

<br>

ls -a<br>

<br>

    Linux上的文件以.开头的文件被系统视为隐藏文件，仅用ls命令是看不到他们的，而用ls -a除了显示 一般文件名外，连隐藏文件也会显示出来。<br>

<br>

ls -l（这个参数是字母L的小写，不是数字1）<br>

<br>

    这个命令可以使用长格式显示文件内容，如果需要察看更详细的文件资料，就要用到ls -l这个指令。例如我在某个目录下键入ls -l可能会显示如下信息（最上面两行是我自己加的）：<br>

    位置1 2 3 4 5 6 7<br>

    文件属性 文件数 拥有者 所属的group 文件大小 建档日期 文件名<br>

drwx------ 2 Guest users 1024 Nov 21 21:05 Mail<br>

-rwx--x--x 1 root root 89080 Nov 7 22:41 tar*<br>

-rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname*<br>

lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat-&gt;gzip<br>

-rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh*<br>

-rwsr-x--- 1 root bin 9853 Aug 15 5:46 su*<br>

    下面，我为大家解释一下这些显示内容的意义。<br>

第一个栏位，表示文件的属性。Linux的文件基本上分为三个属性：可读（r），可写（w），可执行（x）。但是这里有十个格子可以添（具体程序实现时，
实际上是十个bit位）。第一个小格是特殊表示格，表示目录或连结文件等等，d表示目录，例如drwx------;l表示连结文件，如
lrwxrwxrwx;如果是以一横“-”表示，则表示这是文件。其余剩下的格子就以每3格为一个单位。因为Linux是多用户多任务系统，所以一个文件
可能同时被许多人使用，所以我们一定要设好每个文件的权限，其文件的权限位置排列顺序是（以-rwxr-xr-x为例）：<br>

rwx(Owner)r-x(Group)r-x(Other)<br>

这个例子表示的权限是：使用者自己可读，可写，可执行；同一组的用户可读，不可写，可执行；其它用户可读，不可写，可执行。另外，有一些程序属性的执行部
分不是X,而是S,这表示执行这个程序的使用者，临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序，让使用者执行时，
拥有root身份。<br>

    第二个栏位，表示文件个数。如果是文件的话，那这个数目自然是1了，如果是目录的话，那它的数目就是该目录中的文件个数了。<br>

    第三个栏位，表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。<br>

    第四个栏位，表示所属的组（group）。每一个使用者都可以拥有一个以上的组，不过大部分的使用者应该都只属于一个组，只有当系统管理员希望给予某使用者特殊权限时，才可能会给他另一个组。<br>

    第五栏位，表示文件大小。文件大小用byte来表示，而空目录一般都是1024byte，你当然可以用其它参数使文件显示的单位不同，如使用ls –k就是用kb莱显示一个文件的大小单位，不过一般我们还是以byte为主。<br>

    第六个栏位，表示创建日期。以“月，日，时间”的格式表示，如Aug 15 5:46表示8月15日早上5:46分。<br>

    第七个栏位，表示文件名。我们可以用ls –a显示隐藏的文件名。<br>

<br>

ls –F（注意，是大写的F）<br>

<br>

使用这个参数表示在文件的后面多添加表示文件类型的符号，例如*表示可执行，/表示目录，@表示连结文件，这都是因为使用了-F这个参数。但是现在基本上
所有的Linux发行版本的ls都已经内建了-F参数，也就是说，不用输入这个参数，我们也能看到各种分辨符号。<br>

<br>

cd <br>

这个命令是用来进出目录的，它的使用方法和在dos下没什么两样，所以我觉得没什么可说的，但有两点我补充一下。首先，和dos不同的是Linux的目录
对大小写是敏感的，如果大小写没拼对，你的cd操作是成功不了的。其次，cd如果直接输入，cd后面不加任何东西，会回到使用者自己的Home
Directory。假设如果是root，那就是回到/root.这个功能同cd ~是一样的。<br>

<br>

mkdir、rmdir <br>

    mkdir命令用来建立新的目录，rmdir用来删除以建立的目录，这两个指令的功能不再多加介绍，他们同dos下的md,rd功能和用法都是基本一样的。<br>

<br>

cp <br>

    这个命令相当于dos下面的copy命令，具体用法是：cp –r 源文件(source) 目的文件(target)<br>

    参数r是指连同元文件中的子目录一同拷贝。熟悉dos的读者用起这个命令来会觉得更方便，毕竟比在dos下面要少敲两下键盘。<br>

<br>

rm <br>

    这个命令是用来删除文件的，和dos下面的rm（删除一个空目录）是有区别的，大家千万要注意。Rm命令常用的参数有三个： -i,-r,-f。<br>

    比如我现在要删除一个名字为text的一个文件：rm –i test<br>

系统会询问我们：“rm:remove
‘test’?y”，敲了回车以后，这个文件才会真的被删除。之所以要这样做，是因为linux不象dos那样有undelete的命令，或者是可以用
pctool等工具将删除过的文件救回来，linux中删除过的文件是救不回来的，所以使用这个参数在删除前让你再确定一遍，是很有必要的。<br>

    rm –r 目录名：这个操作可以连同这个目录下面的子目录都删除，功能上和rmdir相似。<br>

    rm –f 文件名（目录名）：这个操作可以进行强制删除。<br>

<br>

mv <br>

这个命令的功能是移动目录或文件，引申的功能是给目录或文件重命名。它的用法同dos下面的move基本相同，这里不再多讲。当使用该命令来移动目录时，
他会连同该目录下面的子目录也一同移走。另外因为linux下面没有rename的命令，所以如果你想给一个文件或目录重命名时可以用以下方法：mv
原文件（目录）名 新的文件（目录）名。<br>

<br>

du，df <br>

du命令可以显示目前的目录所占的磁盘空间，df命令可以显示目前磁盘剩余的磁盘空间。如果du命令不加任何参数，那么返回的是整个磁盘的使用情况，如果
后面加了目录的话，就是这个目录在磁盘上的使用情况（这个功能可是dos没有的呦）。不过我一般不喜欢用du，因为它给出的信息是在是太多了，我看不过
来，而df这个命令我是最常用的，因为磁盘上还剩多少空间对我来说是很重要的。<br>

<br>

cat <br>

    这个命令是linux中非常重要的一个命令，它的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写，类似于dos下面的type命令。它的用法如下：<br>

cat text 显示text这个文件；<br>

cat file1 file2 依顺序显示file1,file2的内容；<br>

cat file1 file2&gt;file3 把file1,file2的内容结合起来，再“重定向（&gt;）”到file3文件中。<br>

“〉”是一个非常有趣的符号，是往右重定向的意思，就是把左边的结果当成是输入，然后输入到file3这个文件中。这里要注意一点是file3是在重定向
以前还未存在的文件，如果file3是已经存在的文件，那么它本身的内容被覆盖，而变成file1+file2的内容。如果〉左边没有文件的名称，而右边
有文件名，例如：<br>

cat
&gt;file1：结果是会“空出一行空白行”，等待你输入文字，输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d]，就会结束编辑，并产生
file1这个文件，而file1的内容就是你刚刚输入的内容。这个过程和dos里面的copy con file1的结果是一样的。<br>

    另外，如果你使用如下的指令：<br>

cat file1&gt;&gt;file2：这将变成将file1的文件内容“附加”到file2的文件后面，而file2的内容依然存在，这种重定向符〉〉比〉常用，可以多多利用。<br>

<br>

more,less <br>

这是两个显示一般文本文件的指令。如果一个文本文件太长了超过一个屏幕的画面，用cat来看实在是不理想，就可以试试more和less两个指令。
More指令可以使超过一页的文件临时停留在屏幕，等你按任何的一个键以后，才继续显示。而less除了有more的功能以外，还可以用方向键往上或网下
的滚动文件，所以你随意浏览，阅读文章时，less是个非常好的选择。<br>

<br>

clear <br>

    这个命令是用来清除屏幕的，它不需要任何参数，和dos下面的clr具有相同的功能，如果你觉得屏幕太紊乱，就可以使用它清除屏幕上的信息。<br>

<br>

pwd <br>

    这个命令的作用是显示用户当前的工作路径，这个命令不用多说，大家一试即知。<br>

<br>

ln <br>

    这是linux中又一个非常重要命令，请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接，这个命令最常用的参数是-s,具体用法是：ln –s 源文件 目标文件。<br>

当我们需要在不同的目录，用到相同的文件时，我们不需要在每一个需要的目录下都放一个必须相同的文件，我们只要在某个固定的目录，放上该文件，然后在其它
的目录下用ln命令链接（link）它就可以，不必重复的占用磁盘空间。例如：ln –s /bin/less /usr/local/bin/less<br>

-s 是代号（symbolic）的意思。<br>

这里有两点要注意：第一，ln命令会保持每一处链接文件的同步性，也就是说，不论你改动了哪一处，其它的文件都会发生相同的变化；第二，ln的链接又软链
接和硬链接两种，软链接就是ln –s ** **,它只会在你选定的位置上生成一个文件的镜像，不会占用磁盘空间，硬链接ln **
**,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件，无论是软链接还是硬链接，文件都保持同步变化。<br>

    如果你用ls察看一个目录时，发现有的文件后面有一个@的符号，那就是一个用ln命令生成的文件，用ls –l命令去察看，就可以看到显示的link的路径了。<br>

<br>

man <br>

如果你的英文足够好，那完全可以不靠任何人就精通linux，只要你会用man。Man实际上就是察看指令用法的help，学习任何一种UNIX类的操作
系统最重要的就是学会使用man这个辅助命令。man是manual(手册)的缩写字，它的说明非常的详细，但是因为它都是英文，看起来非常的头痛。建议
大家需要的时候再去看man，平常吗，记得一些基本用法就可以了。<br>

<br>

logout <br>

一看就知道了，这是退出系统的命令，我就不多说了。要强调的一点是，linux是多用户多进程的操作系统，因此如果你不用了，退出系统就可以了，关闭系统
你就不用操心了，那是系统管理员的事情。但有一点切记，即便你是单机使用linux，logout以后也不能直接关机，因为这不是关机的命令。<img src ="http://www.cnitblog.com/ygb/aggbug/5498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:14 <a href="http://www.cnitblog.com/ygb/articles/5498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux指令大全[1]［注］来源于天津Linux热线</title><link>http://www.cnitblog.com/ygb/articles/5499.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:14:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5499.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5499.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5499.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5499.html</trackback:ping><description><![CDATA[<div>cat cd <br>
chmod chown <br>
cp cut <br>
<br>
名称：cat <br>
使用权限：所有使用者 <br>
使用方式：cat [-AbeEnstTuv] [--help] [--version] fileName <br>
说明：把档案串连接后传到基本输出（萤幕或加 &gt; fileName 到另一个档案） <br>
参数： <br>
-n 或 --number 由 1 开始对所有输出的行数编号 <br>
-b 或 --number-nonblank 和 -n 相似，只不过对于空白行不编号 <br>
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行，就代换为一行的空白行 <br>
-v 或 --show-nonprinting <br>
<br>
范例： <br>
cat -n textfile1 &gt; textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 <br>
cat -b textfile1 textfile2 &gt;&gt; textfile3 把 textfile1 和 textfile2 的档案内容加上行号（空白行不加）之后将内容附加到 textfile3 <br>
<br>
名称 : cd <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : cd [dirName] <br>
<br>
说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略，则变换至使用者的 home directory (也就是刚 login 时所在的目录)。 <br>
<br>
另外，"~" 也表示为 home directory 的意思，"." 则是表示目前所在的目录，".." 则表示目前目录位置的上一层目录。 <br>
<br>
范例 : 跳到 /usr/bin/ : <br>
cd /usr/bin <br>
<br>
跳到自己的 home directory : <br>
cd ~ <br>
<br>
跳到目前目录的上上两层 : <br>
cd ../.. <br>
<br>
<br>
<br>
指令名称 : chmod <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : chmod [-cfvR] [--help] [--version] mode file... <br>
<br>
说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。 <br>
<br>
把计 : <br>
<br>
mode : 权限设定字串，格式如下 : [ugoa...][[+-=][rwxX]...][,...]，其中u 表示该档案的拥有者，g 表示与该档案的拥有者属于同一个群体(group)者，o 表示其他以外的人，a 表示这三者皆是。 <br>
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 <br>
r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 <br>
-c : 若该档案权限确实已经更改，才显示其更改动作 <br>
-f : 若该档案权限无法被更改也不要显示错误讯息 <br>
-v : 显示权限变更的详细资料 <br>
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) <br>
--help : 显示辅助说明 <br>
--version : 显示版本 <br>
<br>
范例 :将档案 file1.txt 设为所有人皆可读取 : <br>
chmod ugo+r file1.txt <br>
<br>
将档案 file1.txt 设为所有人皆可读取 : <br>
chmod a+r file1.txt <br>
<br>
将档案 file1.txt 与 file2.txt 设为该档案拥有者，与其所属同一个群体者可写入，但其他以外的人则不可写入 : <br>
chmod ug+w,o-w file1.txt file2.txt <br>
<br>
将 ex1.py 设定为只有该档案拥有者可以执行 : <br>
chmod u+x ex1.py <br>
<br>
将目前目录下的所有档案与子目录皆设为任何人可读取 : <br>
chmod -R a+r * <br>
<br>
此外chmod也可以用数字来表示权限如 chmod 777 file <br>
语法为：chmod abc file <br>
<br>
其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。 <br>
<br>
r=4，w=2，x=1 <br>
若要rwx属性则4+2+1=7； <br>
若要rw-属性则4+2=6； <br>
若要r-x属性则4+1=7。 <br>
<br>
范例： <br>
chmod a=rwx file <br>
<br>
和 <br>
chmod 777 file <br>
<br>
效果相同 <br>
chmod ug=rwx,o=x file <br>
<br>
和 <br>
chmod 771 file <br>
<br>
效果相同 <br>
<br>
<br>
<br>
<br>
<br>
若用chmod 4755 filename可使此程式具有root的权限 <br>
<br>
<br>
指令名称 : chown <br>
使用权限 : root <br>
<br>
使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... <br>
<br>
说明 : Linux/Unix 是多人多工作业系统，所有的档案皆有拥有者。利用 chown
可以将档案的拥有者加以改变。一般来说，这个指令只有是由系统管理者(root)所使用，一般使用者没有权限可以改变别人的档案拥有者，也没有权限可以自
己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。 <br>
<br>
把计 : <br>
<br>
user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c :
若该档案拥有者确实已经更改，才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h :
只对于连结(link)进行变更，而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R :
对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本 <br>
<br>
范例 : <br>
将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : <br>
chown jessie:users file1.txt <br>
<br>
将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport : <br>
chmod -R lamport:users * <br>
<br>
<br>
名称：cp <br>
使用权限：所有使用者 <br>
<br>
使用方式： <br>
<br>
cp [options] source dest <br>
cp [options] source... directory <br>
<br>
说明：将一个档案拷贝至另一档案，或将数个档案拷贝至另一目录。 <br>
<br>
把计 <br>
<br>
-a 尽可能将档案状态、权限等资料都照原状予以复制。 <br>
-r 若 source 中含有目录名，则将目录下之档案亦皆依序拷贝至目的地。 <br>
-f 若目的地已经有相同档名的档案存在，则在复制前先予以删除再行复制。 <br>
范例： <br>
将档案 aaa 复制(已存在)，并命名为 bbb : <br>
cp aaa bbb <br>
<br>
将所有的C语言程式拷贝至 Finished 子目录中 : <br>
cp *.c Finished <br>
<br>
<br>
<br>
名称：cut <br>
<br>
使用权限：所有使用者 <br>
<br>
用法：cut -cnum1-num2 filename <br>
<br>
说明：显示每行从开头算起 num1 到 num2 的文字。 <br>
<br>
范例： <br>
<br>
shell&gt;&gt; cat example <br>
test2 <br>
this is test1 <br>
shell&gt;&gt; cut -c0-6 example ## print 开头算起前 6 个字元 <br>
test2 <br>
this i <br>
<br>
<br>
名称 : find <br>
用法 : find <br>
使用说明 : <br>
<br>
将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合，只有完全相符的才会被列出来。 <br>
<br>
find 根据下列规则判断 path 和 expression，在命令列上第一个 - ( ) , ! 之前的部份为 path，之后的是
expression。如果 path 是空字串则使用目前路径，如果 expression 是空字串则使用 -print 为预设
expression <br>
<br>
expression 中可使用的选项有二三十个之多，在此只介绍最常用的部份。 <br>
<br>
-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案，避免列出其它档案系统中的档案 <br>
-amin n : 在过去 n 分钟内被读取过 <br>
-anewer file : 比档案 file 更晚被读取过的档案 <br>
-atime n : 在过去 n 天过读取过的档案 <br>
-cmin n : 在过去 n 分钟内被修改过 <br>
-cnewer file :比档案 file 更新的档案 <br>
-ctime n : 在过去 n 天过修改过的档案 <br>
-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name <br>
-ipath p, -path p : 路径名称符合 p 的档案，ipath 会忽略大小写 <br>
-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写 <br>
-size n : 档案大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k 表示 kilo bytes，w 是二个位元组。-type c : 档案类型是 c 的档案。 <br>
d: 目录 <br>
c: 字型装置档案 <br>
b: 区块装置档案 <br>
p: 具名贮列 <br>
f: 一般档案 <br>
l: 符号连结 <br>
s: socket <br>
-pid n : process id 是 n 的档案 <br>
<br>
你可以使用 ( ) 将运算式分隔，并使用下列运算。 <br>
exp1 -and exp2 <br>
! expr <br>
-not expr <br>
exp1 -or exp2 <br>
exp1, exp2 <br>
范例: <br>
将目前目录及其子目录下所有延伸档名是 c 的档案列出来。 <br>
# find . -name "*.c" <br>
<br>
<br>
将目前目录其其下子目录中所有一般档案列出 <br>
# find . -ftype f <br>
<br>
<br>
将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出 <br>
# find . -ctime -20 <br>
<br>
<br>
<br>
名称：less <br>
<br>
使用权限：所有使用者 <br>
<br>
使用方式： <br>
<br>
less [Option] filename <br>
<br>
说明： <br>
less 的作用与 more 十分相似，都可以用来浏览文字档案的内容，不同的是 less 允许使用者往回卷动 <br>
以浏览已经看过的部份，同时因为 less 并未在一开始就读入整个档案，因此在遇上大型档案的开启时，会比一般的文书编辑器(如 vi)来的快速。 <br>
<br>
<br>
范例： <br>
<br>
<br>
指令名称 : ln <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : ln [options] source dist，其中 option 的格式为 : <br>
<br>
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] <br>
[--help] [--version] [--] <br>
说明 : Linux/Unix 档案系统中，有所谓的连结(link)，我们可以将其视为档案的别名，而连结又可分为两种 : 硬连结(hard
link)与软连结(symbolic
link)，硬连结的意思是一个档案可以有多个名称，而软连结的方式则是产生一个特殊的档案，该档案的内容是指向另一个档案的位置。硬连结是存在同一个档
案系统中，而软连结却可以跨越不同的档案系统。 <br>
ln source dist 是产生一个连结(dist)到 source，至于使用硬连结或软链结则由参数决定。 <br>
<br>
不论是硬连结或软链结都不会将原本的档案复制一份，只会占用非常少量的磁碟空间。 <br>
<br>
<br>
-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist
同档名的档案时先进行询问-n : 在进行软连结时，将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v :
在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V
METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本 <br>
范例 : <br>
将档案 yy 产生一个 symbolic link : zz <br>
ln -s yy zz <br>
<br>
将档案 yy 产生一个 hard link : zz <br>
ln yy xx <br>
<br>
<br>
<br>
名称：locate <br>
使用权限：所有使用者 <br>
使用方式： locate [-q] [-d ] [--database=] <br>
locate [-r ] [--regexp=] <br>
locate [-qv] [-o ] [--output=] <br>
locate [-e ] [-f ] &lt;[-l ] [-c] <br>
&lt;[-U ] [-u]&gt; <br>
locate [-Vh] [--version] [--help] <br>
说明： <br>
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库，之后当寻找时就只需查询这个资料库，而不必实际深入档案系统之中了。 <br>
<br>
在一般的 distribution 之中，资料库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用 <br>
<br>
# locate your_file_name <br>
<br>
的型式就可以了。 参数： <br>
-u <br>
-U <br>
<br>
建立资料库，-u 会由根目录开始，-U 则可以指定开始的位置。 <br>
<br>
-e <br>
<br>
将 <br>
排除在寻找的范围之外。 <br>
<br>
-l <br>
如果 是 1．则启动安全模式。在安全模式下，使用者不会看到权限无法看到的档案。这会始速度减慢，因为 locate 必须至实际的档案系统中取得档案的权限资料。 <br>
<br>
-f <br>
将特定的档案系统排除在外，例如我们没有到理要把 proc 档案系统中的档案放在资料库中。 <br>
<br>
-q <br>
安静模式，不会显示任何错误讯息。 <br>
<br>
-n <br>
至多显示 个输出。 <br>
<br>
-r <br>
使用正规运算式 做寻找的条件。 <br>
<br>
-o <br>
指定资料库存的名称。 <br>
<br>
-d <br>
<br>
指定资料库的路径 <br>
<br>
-h <br>
显示辅助讯息 <br>
<br>
-v <br>
显示更多的讯息 <br>
<br>
-V <br>
显示程式的版本讯息 范例： <br>
<br>
locate chdrv : 寻找所有叫 chdrv 的档案 <br>
locate -n 100 a.out : 寻找所有叫 a.out 的档案，但最多只显示 100 个 <br>
locate -u : 建立资料库 <br>
<br>
<br>
名称 : ls <br>
使用权限 : 所有使用者 <br>
<br>
使用方式 : ls [-alrtAFR] [name...] <br>
<br>
说明 : 显示指定工作目录下之内容（列出目前工作目录所含之档案及子目录)。 <br>
<br>
<br>
-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档，不会列出) <br>
-l 除档案名称外，亦将档案型态、权限、拥有者、档案大小等资讯详细列出 <br>
-r 将档案以相反次序显示(原定依英文字母次序) <br>
-t 将档案依建立时间之先后次序列出 <br>
-A 同 -a ，但不列出 "." (目前目录) 及 ".." (父目录) <br>
-F 在列出的档案名称后加一符号；例如可执行档则加 "*", 目录则加 "/" <br>
-R 若目录下有档案，则以下之档案亦皆依序列出 <br>
<br>
范例： <br>
列出目前工作目录下所有名称是 s 开头的档案，愈新的排愈后面 : <br>
ls -ltr s* <br>
<br>
将 /bin 目录以下所有目录及档案详细资料列出 : <br>
ls -lR /bin <br>
<br>
列出目前工作目录下所有档案及目录；目录于名称后加 "/", 可执行档于名称后加 "*" : <br>
ls -AF <br>
<br>
名称：more <br>
使用权限：所有使用者 <br>
使用方式：more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] <br>
说明：类似 cat ，不过会以一页一页的显示方便使用者逐页阅读，而最基本的指令就是按空白键（space）就往下一页显示，按 b 键就会往回（back）一页显示，而且还有搜寻字串的功能（与 vi 相似），使用中的说明文件，请按 h 。 <br>
参数：-num 一次显示的行数 <br>
-d 提示使用者，在画面下方显示 [Press space to continue, q to quit.] ，如果使用者按错键，则会显示 [Press h for instructions.] 而不是 哔 声 <br>
-l 取消遇见特殊字元 ^L（送纸字元）时会暂停的功能 <br>
-f 计算行数时，以实际上的行数，而非自动换行过后的行数（有些单行字数太长的会被扩展为两行或两行以上） <br>
-p 不以卷动的方式显示每一页，而是先清除萤幕后再显示内容 <br>
-c 跟 -p 相似，不同的是先显示内容再清除其他旧资料 <br>
-s 当遇到有连续两行以上的空白行，就代换为一行的空白行 <br>
-u 不显示下引号 （根据环境变数 TERM 指定的 terminal 而有所不同） <br>
+/ 在每个档案显示前搜寻该字串（pattern），然后从该字串之后开始显示 <br>
+num 从第 num 行开始显示 <br>
fileNames 欲显示内容的档案，可为复数个数 <br>
范例： <br>
more -s testfile 逐页显示 testfile 之档案内容，如有连续两行以上空白行则以一行空白行显示。 <br>
more +20 testfile 从第 20 行开始显示 testfile 之档案内容。 <br>
<br>
<br>
名称：mv <br>
使用权限：所有使用者 <br>
<br>
使用方式： <br>
<br>
mv [options] source dest <br>
mv [options] source... directory <br>
说明：将一个档案移至另一档案，或将数个档案移至另一目录。 <br>
参数：-i 若目的地已有同名档案，则先询问是否覆盖旧档。 <br>
<br>
范例： <br>
<br>
将档案 aaa 更名为 bbb : <br>
mv aaa bbb <br>
<br>
将所有的C语言程式移至 Finished 子目录中 : <br>
mv -i *.c <br>
<br>
<br>
<br>
名称：rm <br>
使用权限：所有使用者 <br>
<br>
使用方式：rm [options] name... <br>
<br>
说明：删除档案及目录。 <br>
<br>
把计 <br>
<br>
-i 删除前逐一询问确认。 <br>
-f 即使原档案属性设为唯读，亦直接删除，无需逐一确认。 <br>
-r 将目录及以下之档案亦逐一删除。 <br>
范例： <br>
删除所有C语言程式档；删除前逐一询问确认 : <br>
rm -i *.c <br>
<br>
将 Finished 子目录及子目录中所有档案删除 : <br>
rm -r Finished <br>
<br>
<br>
<br>
名称：rmdir <br>
使用权限：于目前目录有适当权限的所有使用者 <br>
<br>
使用方式： rmdir [-p] dirName <br>
<br>
说明： 删除空的目录。 <br>
<br>
参数： -p 是当子目录被删除后使它也成为空目录的话，则顺便一并删除。 <br>
<br>
范例： <br>
<br>
将工作目录下，名为 AAA 的子目录删除 : <br>
rmdir AAA <br>
<br>
在工作目录下的 BBB 目录中，删除名为 Test 的子目录。若 Test 删除后，BBB 目录成为空目录，则 BBB 亦予删除。 <br>
rmdir -p BBB/Test <br>
<br>
<br>
<br>
名称：split <br>
使用权限：所有使用者 <br>
<br>
使用方式：split [OPTION] [INPUT [PREFIX]] <br>
<br>
说明： <br>
<br>
将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案，其档名依序为 PREFIXaa, PREFIXab...；PREFIX 预设值为 `x。若没有 INPUT 档或为 `-，则从标准输入读进资料。 <br>
<br>
匡兜 <br>
<br>
-b, --bytes=SIZE <br>
<br>
SIZE 值为每一输出档案的大小，单位为 byte。 <br>
-C, --line-bytes=SIZE <br>
<br>
每一输出档中，单行的最大 byte 数。 <br>
-l, --lines=NUMBER <br>
<br>
NUMBER 值为每一输出档的列数大小。 <br>
-NUMBER <br>
<br>
与 -l NUMBER 相同。 <br>
--verbose <br>
<br>
于每个输出档被开启前，列印出侦错资讯到标准错误输出。 <br>
--help <br>
<br>
显示辅助资讯然后离开。 <br>
--version <br>
<br>
列出版本资讯然后离开。 <br>
SIZE 可加入单位: b 代表 512， k 代表 1K， m 代表 1 Meg。 <br>
<br>
范例： <br>
<br>
PostgresSQL 大型资料库备份与回存： <br>
<br>
因 Postgres 允许表格大过你系统档案的最大容量，所以要将表格 dump 到单一的档案可能会有问题，使用 split进行档案分割。 <br>
<br>
<br>
% pg_dump dbname | split -b 1m - filename.dump. <br>
<br>
<br>
<br>
重新载入 <br>
<br>
<br>
% createdb dbname <br>
% cat filename.dump.* | pgsql dbname <br>
<br>
<br>
<br>
名称：touch <br>
使用权限：所有使用者 <br>
<br>
使用方式： <br>
touch [-acfm] <br>
[-r reference-file] [--file=reference-file] <br>
[-t MMDDhhmm[[CC]YY][.ss]] <br>
[-d time] [--date=time] [--time={atime,access,use,mtime,modify}] <br>
[--no-create] [--help] [--version] <br>
file1 [file2 ...] <br>
<br>
<br>
说明： <br>
touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。 <br>
<br>
<br>
参数： <br>
a 改变档案的读取时间记录。 <br>
m 改变档案的修改时间记录。 <br>
c 假如目的档案不存在，不会建立新的档案。与 --no-create 的效果一样。 <br>
f 不使用，是为了与其他 unix 系统的相容性而保留。 <br>
r 使用参考档的时间记录，与 --file 的效果一样。 <br>
d 设定时间与日期，可以使用各种不同的格式。 <br>
t 设定档案的时间记录，格式与 date 指令相同。 <br>
--no-create 不会建立新档案。 <br>
--help 列出指令格式。 <br>
--version 列出版本讯息。 <br>
<br>
<br>
范例： <br>
<br>
<br>
最简单的使用方式，将档案的时候记录改为现在的时间。若档案不存在，系统会建立一个新的档案。 <br>
<br>
touch file <br>
touch file1 file2 <br>
<br>
将 file 的时间记录改为 5 月 6 日 18 点 3 分，公元两千年。时间的格式可以参考 date 指令，至少需输入 MMDDHHmm ，就是月日时与分。 <br>
<br>
touch -c -t 05061803 file <br>
touch -c -t 050618032000 file <br>
<br>
将 file 的时间记录改变成与 referencefile 一样。 <br>
<br>
touch -r referencefile file <br>
<br>
将 file 的时间记录改成 5 月 6 日 18 点 3 分，公元两千年。时间可以使用 am, pm 或是 24 小时的格式，日期可以使用其他格式如 6 May 2000 。 <br>
<br>
touch -d "6:03pm" file <br>
touch -d "05/06/2000" file <br>
touch -d "6:03pm 05/06/2000" file <br>
</div>

		<!-- / message -->
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:14 <a href="http://www.cnitblog.com/ygb/articles/5499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件和目录操作相关命令详解[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5497.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:11:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5497.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5497.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5497.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5497.html</trackback:ping><description><![CDATA[<div>文件和目录操作相关命令[来自光盘]<br>
<br>
显示文件内容命令<br>
<br>
用户需要查看一个文件的内容时，可以根据显示要求的不同选用以下的命令。<br>
<br>
cat命令<br>
<br>
功能1：在标准输出上显示文件。<br>
<br>
语法：cat ［ - 选项 ］ 文件<br>
<br>
说明：该命令功能之一是用来显示文件。它依次读取其后所指文件的内容并将其输出到标准输出。<br>
<br>
cat命令中各个选项的含义为：<br>
<br>
- v 用一种特殊形式显示控制字符，LFD与TAB除外。<br>
<br>
加了- v选项后，- T和- E选项将起作用。其中：<br>
<br>
- T 将TAB显示为“Ù I”。该选项需要与- v选项一起使用。即如果没有使用- v选项，则这个选项将被忽略。<br>
<br>
- E 在每行的末尾显示一个＄符。该选项需要与- v选项一起使用。<br>
<br>
- u 输出不经过缓冲区。<br>
<br>
- A 等于- vET。<br>
<br>
- t 等于- vT。<br>
<br>
- e 等于- vE。<br>
<br>
例1：$ cat example.txt<br>
<br>
则在屏幕上显示出example.txt 文件的内容。<br>
<br>
本想今天去香山看红叶，无奈天公不作美没去成，真遗憾，但愿明天艳阳高照，使我们梦想成真。<br>
<br>
　<br>
<br>
<br>
例2：$ cat - A exam2.txt<br>
<br>
则在屏幕上显示出exam2.txt 文件的内容，而且如果文件中含有特殊字符的话，一并显示。<br>
<br>
<br>
I am a boy ! ùI You are a cute boy$<br>
<br>
功能2：连接两个或多个文件<br>
<br>
说明：该命令功能之二是用来将两个或多个文件连接起来。<br>
<br>
例3：$ cat file1 file2 &gt; file3<br>
<br>
这样就把文件filel和文件file2的内容合并起来，放入文件file3中。（此时在屏幕上并不能直接看到该命令执行后的结果。若想看到连接后的文件内容，可以再使用“cat file3”。）<br>
<br>
需要说明的是，当文件内容过多时，就带来一个问题，因为文本在屏幕上迅速地闪过，用户来不及看清其内容。因此，当文件内容较大时，一般可用more等命令分屏显示，以免因屏幕滚动太快而无法看清。<br>
<br>
more命令<br>
<br>
功能：在终端屏幕按屏显示文本文件。<br>
<br>
语法： more ［ - 选项 ］ 文件<br>
<br>
说明： 该命令一次显示一屏文本，显示满之后，停下来，并在终端底部打印出- - More- - ，系统还将同时显示出已显示文本占全部文本的百分比，若要继续显示，按回车或空格键即可。<br>
<br>
more命令中各个选项的含义为：<br>
<br>
- p 显示下一屏之前先清屏。<br>
<br>
- c 作用同- p基本一样。<br>
<br>
- d 在每屏的底部显示更友好的提示信息：<br>
<br>
- - More- - （XX%）［Press space to contiune , ‘q’ to quit . ］<br>
<br>
而且若用户输入了－个错误命令则显示出错信息，而不是简单地鸣响终端。<br>
<br>
- l 不处理&lt; Ctrl+l &gt;（换页符）。如果没有给出这个选项，则more命令在显示了一个包含有&lt; Ctrl+l &gt;字符的行后将暂停显示，并等待接收命令。<br>
<br>
- s 文件中连续的空白行压缩成一个空白行显示。<br>
<br>
执行中的命令<br>
<br>
在more命令的执行过程中，用户可以使用more自己的一系列命令动态地根据需要来选择显示的部分。more在显示完一屏内容之后，将停下来等待用户输
入某个命令。下表列出了more指令在执行中用到的一些常用命令，而有关这些命令的完整内容，可以在more执行时按h查看。这些命令的执行方法是先输入
i（行数）的值，再打所要的命令，不然它会以预设值来执行命令。<br>
<br>
i空格 若指定i，显示下面的i行；否则，显示下一整屏。<br>
<br>
i回车 若指定i，显示下面的i行；否则，显示下一行。<br>
<br>
iÙ D 按，若指定i，显示下面的i行；否则，往下显示半屏（一般为11行）。<br>
<br>
id 同iÙ D 。<br>
<br>
iz 同“i空格”类似，只是i将成为以下每个满屏的缺省行数。<br>
<br>
is 跳过下面的i行再显示一个整屏。预设值为1。<br>
<br>
if 跳过下面的i屏再显示一个整屏。预设值为1。<br>
<br>
iÙ B 按，往回跳过（即向文件首回跳）i屏，再显示一个满屏。预设值为1。<br>
<br>
b 与iÙ B相同。<br>
<br>
’ 回到上次搜索的地方　<br>
<br>
q或Q 退出more。<br>
<br>
＝ 显示当前行号。<br>
<br>
v 在当前行启动/usr/bin/vi对之进行编辑修改。<br>
<br>
h 显示各命令的帮助信息。<br>
<br>
i/pattern 查找匹配该模式的第i行。预设值为1。<br>
<br>
in 查找符合表达式的倒数i行。预设值为1。<br>
<br>
! 或 ：! 在子shell中执行命令。<br>
<br>
i：n 在命令行中指定了多个文件名的情况下，可用此命令使之显示第i个文件，若i过大（出界），则显示文件名列表中的最后一个文件。<br>
<br>
i：p 在命令行中指定了多个文件名的情况下，可用此命令使之显示倒数第i个文件。若i过大（出界），则显示第一个文件。<br>
<br>
i：f 显示当前文件的文件名和行数。<br>
<br>
· 重复上次键人的命令。<br>
<br>
例1：用分页的方式显示一个文件的内容。<br>
<br>
$ more example1.c<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* example1.c */<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* author f <a href="mailto:opus.BBS@BBS.cs.nthu.edu.tw">opus.BBS@BBS.cs.nthu.edu.tw</a> */<br>
<br>
/* target f BBS main/login/top-menu routines */<br>
<br>
/* create f 99/10/23 */<br>
<br>
/* update f 99/12/15 */<br>
<br>
/*-------------------------------------------*/<br>
<br>
#define _MAIN_C_<br>
<br>
#inc1ude &lt; BBS. h &gt;<br>
<br>
jmp_buf byebye;<br>
<br>
int talkrequest=NA;<br>
<br>
static uschar Enter_uflag i<br>
<br>
#ifdef SHOW_IDLE_TIME<br>
<br>
--More- （3%）<br>
<br>
　<br>
<br>
例2：显示一个文件的内容，但显示之前先清屏，并且在显示器的最下方显示完整的百分比。<br>
<br>
$ more - dc example1.c<br>
<br>
执行该命令后，先清屏，然后显示文件example.c的内容。<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* example1.c */<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* author f <a href="mailto:opus.BBS@BBS.cs.nthu.edu.tw">opus.BBS@BBS.cs.nthu.edu.tw</a> */<br>
<br>
/* target f BBS main/login/top-menu routines */<br>
<br>
/* create f 99/10/23 */<br>
<br>
/* update f 99/12/15 */<br>
<br>
/*-------------------------------------------*/<br>
<br>
#define _MAIN_C_<br>
<br>
#inc1ude &lt; BBS. h &gt;<br>
<br>
jmp_buf byebye;<br>
<br>
int talkrequest=NA;<br>
<br>
static uschar Enter_uflag i<br>
<br>
#ifdef SHOW_IDLE_TIME<br>
<br>
char fromhost（ ）;<br>
<br>
--More- （3%）［Press space to continue , ‘q’ to quit .］<br>
<br>
　<br>
<br>
例3：显示一个文件的内容，要求每十行显示一次，且显示之前先清屏。<br>
<br>
$ more - c - 10 example1.c<br>
<br>
执行该命令后，先清屏，然后将以每十行每十行的方式显示文件example.c的内容。<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* example1.c */<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* author f <a href="mailto:opus.BBS@BBS.cs.nthu.edu.tw">opus.BBS@BBS.cs.nthu.edu.tw</a> */<br>
<br>
/* target f BBS main/login/top-menu routines */<br>
<br>
/* create f 99/10/23 */<br>
<br>
/* update f 99/12/15 */<br>
<br>
/*-------------------------------------------*/<br>
<br>
#define _MAIN_C_<br>
<br>
inc1ude &lt; BBS. h &gt;<br>
<br>
--More- （3%）<br>
<br>
less命令<br>
<br>
less命令的功能几乎和more命令一样，也是用来按页显示文件，不同之处在于less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。<br>
<br>
less命令的使用与more命令类似，在此就不赘述了，用户如有不清楚的地方可直接查看联机帮助。<br>
<br>
用less命令显示文件时，若需要在文件中往前移动，按&lt; b &gt;键；要移动到用文件的百分比表示的某位置，则指定一个0到100之间的数，并按&lt; p &gt;即可。<br>
<br>
例如，需要按页显示test文件<br>
<br>
$ less test<br>
<br>
　<br>
<br>
head命令<br>
<br>
如果用户希望查看一个文件究竟保存的是什么内容，可以只查看文件的头几行，而不必浏览整个文件。用head命令只显示文件或标准输入的头几行。<br>
<br>
语法：head ［- n ］ 文件<br>
<br>
功能：显示指定文件的前若干行。<br>
<br>
说明：该命令显示每个指定文件的前面n行。如果没有给出n值，缺省设置为10。如果没有指定文件，head就从标准输入读取。例如显示文件example.c的前3行。<br>
<br>
$ head - 3 example.c<br>
<br>
/*-------------------------------------------*/<br>
<br>
/* example1.c */<br>
<br>
/*-------------------------------------------*/<br>
<br>
　<br>
<br>
tail命令<br>
<br>
同样，如果用户想查看文件的尾部，可以使用tail命令。<br>
<br>
语法：tail ［+ / - num ］ ［参数］ 文件<br>
<br>
说明：该命令显示一个文件的指定内容。它把指定文件的指定显示范围内的内容显示在标准输出上。如果没有给定文件名，则使用标准输入文件。<br>
<br>
tail命令中各个选项的含义为：<br>
<br>
＋num 从第num行以后开始显示。<br>
<br>
- num 从距文件尾num行处开始显示。如果省略num参数，系统默认值为10。<br>
<br>
l 以文本行为num的计数单位。与参数选项＋num或- num选项同时使用时，num表示要显示的文本行行数。<br>
<br>
c 以字节为num的计数单位。与参数选项＋num或- num选项同时使用时，num表示要显示的字符数。<br>
<br>
（l、c选项可以省略，系统默认值为l，即按行计数）。<br>
<br>
例如：<br>
<br>
$ tail -4 example<br>
<br>
将显示文件example的最后4行。<br>
　<br>
<br>
od命令<br>
<br>
用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。<br>
<br>
语法：od ［选项］ 文件…<br>
<br>
命令中各选项的含义：<br>
<br>
- A 指定地址基数，包括：<br>
<br>
d 十进制<br>
<br>
o 八进制（系统默认值）<br>
<br>
x 十六进制<br>
<br>
n 不打印位移值<br>
<br>
- t 指定数据的显示格式，主要的参数有：<br>
<br>
c ASCII字符或反斜杠序列<br>
<br>
d 有符号十进制数<br>
<br>
f 浮点数<br>
<br>
o 八进制（系统默认值为02）<br>
<br>
u 无符号十进制数<br>
<br>
x 十六进制数<br>
<br>
除了选项c以外的其他选项后面都可以跟一个十进制数n，指定每个显示值所包含的字节数。<br>
<br>
说明：od命令系统默认的显示方式是八进制，这也是该命令的名称由来（Octal Dump）。但这不是最有用的显示方式，用ASCII码和十六进制组合的方式能提供更有价值的信息输出。<br>
<br>
例如：<br>
<br>
$ od - Ax - tcx1 wh5<br>
<br>
000000 F i l e s y s t e m<br>
<br>
46 69 6c 65 73 79 73 74 65 6d 20 20 20 20 20 20<br>
<br>
000010 1 k - b l o c k s<br>
<br>
20 20 20 20 20 31 6b 2d 62 6c 6f 63 6b 73 20 20<br>
<br>
000020 U s e d A v a i l a b<br>
<br>
20 20 20 20 55 73 65 64 20 41 76 61 69 6c 61 62<br>
<br>
000030 l e U s e % M o u n t e d<br>
<br>
6c 65 20 55 73 65 25 20 4d 6f 75 6e 74 65 64 20<br>
<br>
000040 o n \n / d e v / h d a 8<br>
<br>
6f 6e 0a 2f 64 65 76 2f 68 64 61 38 20 20 20 20<br>
<br>
000050 3 0 4 4 4<br>
<br>
20 20 20 20 20 20 20 20 20 20 20 33 30 34 34 34<br>
<br>
000060 0 5 0 6 8 9 2<br>
<br>
30 20 20 20 20 20 35 30 36 38 39 20 20 20 20 32<br>
<br>
000070 3 8 0 2 8 1 8 % / \n / d e<br>
<br>
33 38 30 32 38 20 20 31 38 25 20 2f 0a 2f 64 65<br>
<br>
000080 v / h d a 9<br>
<br>
76 2f 68 64 61 39 20 20 20 20 20 20 20 20 20 20<br>
<br>
000090 5 4 6 3 6 9<br>
<br>
20 20 20 20 20 35 34 36 33 36 39 20 20 20 20 20<br>
<br>
0000a0 8 7 7 6 5 0 9 3 7 1<br>
<br>
20 38 37 37 36 20 20 20 20 35 30 39 33 37 31 20<br>
<br>
0000b0 2 % / h o m e \n \n \n<br>
<br>
20 20 32 25 20 2f 68 6f 6d 65 0a 0a 0a<br>
<br>
0000bd</div>

		<!-- / message --><!-- message, attachments, sig -->
	
				
		
		
	
		
	
	
	
	
	
		
		<br>
<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:11 <a href="http://www.cnitblog.com/ygb/articles/5497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件内容查询命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5496.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:10:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5496.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5496.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5496.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5496.html</trackback:ping><description><![CDATA[来自一盗版光盘，出处未知　<br>

<br>

　　grep、fgrep和egrep命令<br>

<br>

　　这组命令以指定模式搜索文件，并通知用户在什么文件中搜索到与指定的模式匹配的字符串，并打印出所有包含该字符串的文本行，在该文本行的最前面是该行
所在的文件名。grep命令一次只能搜索一个指定的模式；egrep命令检索扩展的正则表达式（包括表达式组和可选项）；fgrep命令检索固定字符串，
它不识别正则表达式，是快速搜索命令。<br>

<br>

　　这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词，您可以用它们来搜索文件中包含的这些关键词。编写程序时，
可以用它来寻找某一个函数，或是相关的词组。grep命令的搜索功能比fgrep强大，因为grep命令的搜索模式可以是正则表达式，而fgrep却不
能。有关正则表达式请参见shell一章。<br>

<br>

　　该组命令中的每一个命令都有一组选项，利用这些选项可以改变其输出方式。例如，可以在搜索到的文本行上加入行号，或者只输出文本行的行号，或者输出所有与搜索模式不匹配的文本行，或只简单地输出已搜索到指定模式的文件名，并且可以指定在查找模式时忽略大小写。<br>

<br>

　　这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件，则从标准输入中读取。正常情况下，每个匹配的行被显示到标准输出。如果要查找的文件是多个，则在每一行输出之前加上文件名。<br>

<br>

　　语法：<br>

<br>

　　grep ［选项］ ［查找模式］ ［文件名1，文件名2，……］<br>

<br>

　　egrep ［选项］ ［查找模式］ ［文件名1，文件名2，……］<br>

<br>

　　fgrep ［选项］ ［查找模式］ ［文件名1，文件名2，……］<br>

<br>

　　这组命令各选项的含义为：<br>

<br>

　　- E 每个模式作为一个扩展的正则表达式对待。<br>

<br>

　　- F 每个模式作为一组固定字符串对待（以新行分隔），而不作为正则表达式。<br>

<br>

　　- b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。<br>

<br>

　　- c 只显示匹配行的数量。<br>

<br>

　　- i 比较时不区分大小写。<br>

<br>

　　- h 在查找多个文件时，指示grep不要将文件名加入到输出之前。<br>

<br>

　　- l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时，不重复显示此文件名。<br>

<br>

　　- n 在输出前加上匹配串所在行的行号（文件首行行号为1）。<br>

<br>

　　- v 只显示不包含匹配串的行。<br>

<br>

　　- x 只显示整行严格匹配的行。<br>

<br>

　　- e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。<br>

<br>

　　- f expfile 从expfile文件中获取要搜索的模式，一个模式占一行。<br>

<br>

　　对该组命令的使用还需注意以下方面：<br>

<br>

　　在命令后键入搜索的模式，再键入要搜索的文件。其中，文件名列表中也可以使用特殊字符，如“*”等，用来生成文件名列表。如果想在搜索的模式中包含有
空格的字符串，可以用单引号把要搜索的模式括起来，用来表明搜索的模式是由包含空格的字符串组成。否则，Shell将把空格认为是命令行参数的定界符，而
grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中，grep命令在文件example中搜索模式“text file”。<br>

<br>

　　$ grep ’text file’ example<br>

<br>

　　　用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中，特殊字符“*”用来生成一个文件名列表，该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。<br>

<br>

　　$ grep data *<br>

<br>

　　　特殊字符在搜索一组指定的文件时非常有用。例如，如果想搜索所有的C程序源文件中特定的模式，您可以用“*.c”来指定文件名列表。假设用户的
C程序中包含一些不必要的转向语句（goto语句），想要找到这些语句，可以用如下的命令来搜索并显示所有包含goto语句的代码行：<br>

<br>

　　$ grep goto *.c<br>

<br>

　　用户可以在命令行上键入搜索模式，也可以使用-f选项从指定文件中读取要搜索的模式。在文件中，每个搜索模式占一行。如果经常要搜索一组常见字符串
时，这个功能非常有用。在下面的例子中，用户要在文件exam中搜索字符串“editor”和“create”，就把要搜索的模式放置在文件mypats
中，然后，grep命令从文件mypats中读取要搜索的模式。<br>

<br>

　　$ cat mypats<br>

<br>

　　editor<br>

<br>

　　create<br>

<br>

　　$ grep -f mypats exam<br>

<br>

　　文件查找命令<br>

<br>

　　find命令<br>

<br>

　　功能：在目录结构中搜索文件，并执行指定的操作。此命令提供了相当多的查找条件，功能很强大。<br>

<br>

　　语法：find 起始目录 寻找条件 操作<br>

<br>

　　说明：find命令从指定的起始目录开始，递归地搜索其各个子目录，查找满足寻找条件的文件并对之采取相关的操作。<br>

<br>

　　该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。逻辑运算符and、or、not的含义为：<br>

<br>

　　（1）and：逻辑与，在命令中用“-a”表示，是系统缺省的选项，表示只有当所给的条件都满足时，寻找条件才算满足。例如：<br>

<br>

　　$ find –name ’tmp’ –xtype c -user ’inin’<br>

<br>

　　该命令寻找三个给定条件都满足的所有文件。<br>

<br>

　　（2）or：逻辑或，在命令中用“-o”表示。该运算符表示只要所给的条件中有一个满足时，寻找条件就算满足。例如：<br>

<br>

　　$ find –name ’tmp’ –o –name ’mina*’<br>

　<br>

　　该命令查询文件名为’tmp’或是匹配’mina*’的所有文件。<br>

<br>

　　（3）not：逻辑非，在命令中用“！”表示。该运算符表示查找不满足所给条件的文件。例如：<br>

<br>

　　$ find ! –name ’tmp’<br>

<br>

　　该命令查询文件名不是’tmp’的所有文件。<br>

<br>

　　需要说明的是：当使用很多的逻辑选项时，可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解，在话号前需要加转义字符“”来去除括号的意义。<br>

<br>

　　例：$ find （–name ’tmp’ –xtype c -user ’inin’ ）<br>

<br>

　　寻找条件有以下选项：<br>

<br>

　　首先，下列各个选项中的n值可以有三种输入方式，假设n为20，则：<br>

<br>

　　+20 表示20以后（21，22，23等）<br>

<br>

　　-20 表示20以前（19，18，17等）<br>

<br>

　　20 表示正好是20<br>

<br>

　　1. 以名称和文件属性查找。<br>

<br>

　　- name ’字串’ 查找文件名匹配所给字串的所有文件，字串内可用通配符*、?、［ ］。<br>

<br>

　　- lname ’字串’ 查找文件名匹配所给字串的所有符号链接文件，字串内可用通配符*、?、［ ］。<br>

<br>

　　-gid n 查找属于ID号为n的用户组的所有文件。<br>

<br>

　　-uid n 查找属于ID号为n的用户的所有文件。<br>

<br>

　　-group ’字串’ 查找属于用户组名为所给字串的所有的文件。<br>

<br>

　　-user ’字串’ 查找属于用户名为所给字串的所有的文件。<br>

<br>

　　-empty 查找大小为0的目录或文件。<br>

<br>

　　-path ’字串’ 查找路径名匹配所给字串的所有文件，字串内可用通配符*、?、［ ］。<br>

<br>

　　-perm 权限 查找具有指定权限的文件和目录，权限的表示可以如711，644。<br>

<br>

　　-size n［bckw］ 查找指定文件大小的文件，n后面的字符表示单位，缺省为b，代表512字节的块。<br>

<br>

　　-type x 查找类型为x的文件，x为下列字符之一：<br>

<br>

　　b 块设备文件<br>

<br>

　　c 字符设备文件<br>

<br>

　　d 目录文件<br>

<br>

　　p 命名管道（FIFO）<br>

<br>

　　f 普通文件<br>

<br>

　　l 符号链接文件（symbolic links）<br>

<br>

　　s socket文件<br>

<br>

　　-xtype x 与-type基本相同，但只查找符号链接文件。<br>

<br>

　　2. 以时间为条件查找<br>

<br>

　　- amin n 查找n分钟以前被访问过的所有文件。<br>

<br>

　　- atime n 查找n天以前被访问过的所有文件。<br>

<br>

　　- cmin n 查找n分钟以前文件状态被修改过的所有文件。<br>

<br>

　　- ctime n 查找n天以前文件状态被修改过的所有文件。<br>

<br>

　　- mmin n 查找n分钟以前文件内容被修改过的所有文件。<br>

<br>

　　- mtime n 查找n天以前文件内容被修改过的所有文件。<br>

<br>

　　3. 可执行的操作<br>

<br>

　　- exec 命令名称 {} 对符合条件的文件执行所给的Linux 命令，而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件；命令的末尾必须以“ ；”结束。<br>

<br>

　　- ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令，与exec不同的是，它会询问用户是否需要执行该命令。<br>

<br>

　　- ls 详细列出所找到的所有文件。<br>

<br>

　　- fprintf 文件名 将找到的文件名写入指定文件。<br>

<br>

　　- print 在标准输出设备上显示查找出的文件名。<br>

<br>

　　- printf 格式 格式的写法请参考有关C语言的书。<br>

<br>

　　例1：查找当前目录中所有以main开头的文件，并显示这些文件的内容。<br>

<br>

　　$ find . - name ‘main*’ - exec more {} ;<br>

<br>

　　例2：删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。<br>

<br>

　　$ find . （- name a.out - o - name ‘*.o’）<br>

<br>

　　&gt; - atime +7 - exec rm {} ;<br>

<br>

　　说明如下：<br>

<br>

　　命令中的“.”表示当前目录，此时find将从当前目录开始，逐个在其子目录中查找满足后面指定条件的文件。（和）表示括号（），其中的“”称为转义
符。之所以这样写是由于对Shell而言，（和）另有不同的含义，而不是这里的用于组合条件的用途。“- name
a.out”是指要查找名为a.out的文件；“- name ‘*.o’”是指要查找所有名字以 .o结尾的文件。这两个- name之间的-
o表示逻辑或（or），即查找名字为a.out或名字以
.o结尾的文件，find在当前目录及其子目录下找到这佯的文件之后，再进行判断，看其最后访问时间是否在7天以前（条件－atime
+7），若是，则对该文件执行命令rm（- exec rm{ };）。其中{
}代表当前查到的符合条件的文件名，；则是语法所要求的。上述命令中第一行的最后一个是续行符。当命令太长而在一行写不下时，可输入一个，之后系统将显示
一个&gt;，指示用户继续输入命令。<br>

<br>

　　locate命令<br>

<br>

　　locate命令用于查找文件，它比find命令的搜索速度快，它需要一个数据库，这个数据库由每天的例行工作（crontab）程序来建立。当我们建立好这个数据库后，就可以方便地来搜寻所需文件了。<br>

<br>

　　该命令的一般形式为：<br>

<br>

　　locate 相关字<br>

<br>

　　例如：查找相关字issue<br>

<br>

　　$ locate issue<br>

<br>

　　/etc/issue<br>

<br>

　　/etc/issue.net<br>

<br>

　　/usr/man/man5/issue.5<br>

<br>

　　/usr/man/man5/issue.net.5<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:10 <a href="http://www.cnitblog.com/ygb/articles/5496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件内容统计命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5495.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:09:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5495.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5495.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5495.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5495.html</trackback:ping><description><![CDATA[文件内容统计命令[来自盗版光盘，出处未知]<br>

<br>

　　wc命令<br>

<br>

　　wc命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。<br>

<br>

　　语法：wc ［选项］ 文件…<br>

<br>

　　说明：该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名，则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。<br>

<br>

　　该命令各选项含义如下：<br>

<br>

　　- c 统计字节数。<br>

<br>

　　- l 统计行数。<br>

<br>

　　- w 统计字数。<br>

<br>

　　这些选项可以组合使用。<br>

<br>

　　输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。<br>

<br>

　　行数、字数、字节数、文件名<br>

<br>

　　如果命令行中没有文件名，则输出中不出现文件名。<br>

<br>

　　例如：<br>

<br>

　　$ wc - lcw file1 file2<br>

<br>

　　4 33 file1<br>

<br>

　　7 52 file2<br>

<br>

　　11 11 85 total<br>

<br>

　　省略任选项-lcw，wc命令的执行结果与上面一样。<br>

<br>

<br>

　　第十课(五)　文件比较命令　<br>

<br>

<br>

　　这组命令可以用来比较两个文件内容的差别。<br>

<br>

　　Comm命令<br>

<br>

　　如果想对两个有序的文件进行比较，可以使用comm命令。<br>

<br>

　　语法：comm ［- 123 ］ file1 file2<br>

<br>

　　说明：该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件，然后生成三列输出：仅在file1中出现的行；仅在file2中出现的行；在两个文件中都存在的行。如果文件名用“- ”，则表示从标准输入读取。<br>

<br>

　　选项1、2或3抑制相应的列显示。例如comm - 12就只显示在两个文件中都存在的行；comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行；comm - 123则什么也不显示。<br>

<br>

　　例如：假设要对文件myfile1和myfile2进行比较<br>

<br>

　　$ cat myfile1<br>

<br>

　　main（ ）<br>

　<br>

　　{<br>

<br>

　　float a,b, i, j ,z ;<br>

<br>

　　a=i=10 ; b=j=5 ;<br>

<br>

　　z= i + j ;<br>

<br>

　　printf（“z=%d\n”,z） ;<br>

<br>

　　}<br>

<br>

　　$ cat myfile2<br>

<br>

　　#include<br>

<br>

　　main（ ）<br>

<br>

　　{<br>

<br>

　　float i, j ,z ;<br>

<br>

　　i=10 ; j=5 ;<br>

<br>

　　z= i + j ;<br>

<br>

　　printf（“z=%f\n”,z） ;<br>

<br>

　　}<br>

<br>

　　$ comm - 12 myfile1 myfile2<br>

<br>

　　main（ ）<br>

<br>

　　{<br>

<br>

　　z= i + j ;<br>

<br>

　　}<br>

<br>

　　就只显示文件myfile1和myfile2中共有的行。<br>

<br>

　　Diff命令<br>

<br>

　　该命令的功能为逐行比较两个文本文件，列出其不同之处。它比comm命令完成更复杂的检查。它对给出的文件进行系统的检查，并显示出两个文件中所有不同的行，不要求事先对文件进行排序。<br>

<br>

　　语法：diff ［选项］ file1 file2<br>

<br>

　　说明：该命令告诉用户，为了使两个文件file1和file2一致，需要修改它们的哪些行。如果用“- ”表示file1或fiie2，则表示标准输入。如果file1或file2是目录，那么diff将使用该目录中的同名文件进行比较。例如：<br>

<br>

　　diff /usr/xu mine<br>

<br>

　　把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。<br>

<br>

　　通常输出由下述形式的行组成：<br>

<br>

　　n1 a n3，n4<br>

<br>

　　n1，n2 d n3<br>

<br>

　　n1，n2 c n3，n4<br>

<br>

　　这些行类似ed命令把filel转换成file2。字母（a、d和c）之前的行号（n1，n2）是针对file1的，其后面的行号（n3，n4）是针对file2的。字母a、d和c分别表示附加、删除和修改操作。<br>

<br>

　　在上述形式的每一行的后面跟随受到影响的若干行，以“＜”打头的行属于第一个文件，以“＞”打头的行属于第二个文件。<br>

<br>

　　diff能区别块和字符设备文件以及FIFO（管道文件），不会把它们与普通文件进行比较。<br>

<br>

　　如果file1和file2都是目录，则diff会产生很多信息。如果一个目录中只有一个文件，则产生一条信息，指出该目录路径名和其中的文件名。<br>

<br>

　　diff各选项的含义如下：<br>

<br>

　　- b 忽略行尾的空格，而字符串中的一个或多个空格符都视为相等。如How are you与How are you被视为相同的字符串。<br>

<br>

　　- c 采用上下文输出格式（提供三行上下文）。<br>

<br>

　　- C n 采用上下文输出格式（提供n行上下文）。<br>

<br>

　　- e 产生一个合法的ed脚本作为输出。<br>

<br>

　　- r 当file1和file2是目录时，递归作用到各文件和目录上。<br>

<br>

　　例如，文件ml.c的内容为（左边行号是有意加上的，以便前后对照）：<br>

<br>

　　1 main（ ）<br>

<br>

<br>

　　{<br>

<br>

<br>

　　printf（“Hello！＼n”）；<br>

<br>

<br>

　　}<br>

<br>

　　5<br>

<br>

　　文件m2.c的内容为：<br>

<br>

　　1 main（）<br>

<br>

　　2 {<br>

<br>

　　3 int n , m ;<br>

<br>

　　4 n＝ 10 ;<br>

<br>

　　5 printf （ “ % d \ n ” , m = n * 10）;<br>

<br>

　　6 }<br>

<br>

　　输入命令：<br>

<br>

　　$ diff m1.c m2.c<br>

<br>

　　屏幕上显示：<br>

<br>

　　3，5 c 3，6<br>

<br>

<br>

　　printf（“Hello！＼n”）；<br>

<br>

<br>

　　}<br>

<br>

　　＜5<br>

<br>

　　＞3 int n，m；<br>

<br>

　　＞4 n＝10 ;<br>

<br>

　　＞5 printf （ “ % d \ n ” , m = n * 10）;<br>

<br>

　　＞6 }<br>

<br>

　<br>

<br>

　　表示把文件m1.c的3至5行改成m2.c的3至6行后，两个文件相同。<img src ="http://www.cnitblog.com/ygb/aggbug/5495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:09 <a href="http://www.cnitblog.com/ygb/articles/5495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件的复制、删除和移动命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5494.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:08:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5494.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5494.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5494.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5494.html</trackback:ping><description><![CDATA[文件的复制、删除和移动命令<br>

<br>

　　cp命令<br>

<br>

　　该命令的功能是将给出的文件或目录拷贝到另一文件或目录中，就如同DOS下的copy命令一样，功能非常强大。<br>

<br>

　　语法： cp ［选项］ 源文件或目录 目标文件或目录<br>

<br>

　　说明：该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。<br>

<br>

　　该命令的各选项含义如下：<br>

<br>

　　- a 该选项通常在拷贝目录时使用。它保留链接、文件属性，并递归地拷贝目录，其作用等于dpR选项的组合。<br>

<br>

　　- d 拷贝时保留链接。<br>

<br>

　　- f 删除已经存在的目标文件而不提示。<br>

<br>

　　- i 和f选项相反，在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖，是交互式拷贝。<br>

<br>

　　- p 此时cp除复制源文件的内容外，还将把其修改时间和访问权限也复制到新文件中。<br>

<br>

　　- r 若给出的源文件是一目录文件，此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。<br>

<br>

　　- l 不作拷贝，只是链接文件。<br>

<br>

　　需要说明的是，为防止用户在不经意的情况下用cp命令破坏另一个文件，如用户指定的目标文件名是一个已存在的文件名，用cp命令拷贝文件后，这个文件就会被新拷贝的源文件覆盖，因此，建议用户在使用cp命令拷贝文件时，最好使用i选项。<br>

<br>

　　$ cp - i exam1.c /usr/wang/shiyan1.c<br>

<br>

　　该命令将文件exam1.c拷贝到/usr/wang 这个目录下，并改名为 shiyan1.c。若不希望重新命名，可以使用下面的命令：<br>

<br>

　　$ cp exam1.c /usr/ wang/<br>

<br>

　　$ cp - r /usr/xu/ /usr/liu/<br>

<br>

　　将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中。<br>

<br>

<br>

　　mv命令<br>

<br>

　　用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。<br>

<br>

　　语法：mv ［选项］ 源文件或目录 目标文件或目录<br>

<br>

　　说明：视mv命令中第二个参数类型的不同（是目标文件还是目标目录），mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时，
mv命令完成文件重命名，此时，源文件只能有一个（也可以是源目录名），它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名
称时，源文件或目录参数可以有多个，mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时，mv先拷贝，再将原有文件删除，而链至该文
件的链接也将丢失。<br>

<br>

　　命令中各选项的含义为：<br>

<br>

　　- I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖，此时系统询问是否重写，要求用户回答y或n，这样可以避免误覆盖文件。<br>

<br>

　　- f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示，指定此选项后，i选项将不再起作用。<br>

<br>

　　如果所给目标文件（不是目录）已存在，此时该文件的内容将被新文件覆盖。为防止用户在不经意的情况下用mv命令破坏另一个文件，建议用户在使用mv命令移动文件时，最好使用i选项。<br>

<br>

　　需要注意的是，mv与cp的结果不同。mv好象文件“搬家”，文件个数并末增加，而cp对文件进行复制，文件个数增加了。<br>

<br>

　　例1：将/usr/xu中的所有文件移到当前目录（用“.”表示）中：<br>

<br>

　　$ mv /usr/xu/ * .<br>

<br>

　　例2：将文件wch.txt重命名为wjz.doc<br>

<br>

　　$ mv wch.txt wjz.doc<br>

<br>

　　rm命令<br>

<br>

　　在linux中创建文件很容易，系统中随时会有文件变得过时且毫无用处。用户可以用rm命令将其删除。该命令的功能为删除一个目录中的一个或多个文件或目录，它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件，只是删除了链接，原有文件均保持不变。<br>

<br>

　　rm命令的一般形式为：<br>

<br>

　　rm ［选项］ 文件…<br>

<br>

　　如果没有使用- r选项，则rm不会删除目录。<br>

<br>

　　该命令的各选项含义如下：<br>

<br>

　　- f 忽略不存在的文件，从不给出提示。<br>

<br>

　　- r 指示rm将参数中列出的全部目录和子目录均递归地删除。<br>

<br>

　　- i 进行交互式删除。<br>

<br>

　　使用rm命令要格外小心。因为一旦一个文件被删除，它是不能被恢复的。例如，用户在输入cp，mv或其他命令时，不小心误输入了rm命令，当用户按了
回车键并认识到自己的错误时，已经太晚了，文件已经没有了。为了防止此种情况的发生，可以使用rm命令中的
i选项来确认要删除的每个文件。如果用户输入y，文件将被删除。如果输入任何其他东西，文件将被保留。在下一个例子中，用户要删除文件test和
example。然后会被要求对每个文件进行确认。用户最终决定删除example文件，保留test文件。<br>

<br>

　　$ rm - ii test example<br>

<br>

　　Remove test ?n<br>

<br>

　　Remove example ?y<img src ="http://www.cnitblog.com/ygb/aggbug/5494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:08 <a href="http://www.cnitblog.com/ygb/articles/5494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>目录的创建与删除命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5493.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:07:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5493.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5493.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5493.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5493.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5493.html</trackback:ping><description><![CDATA[<div>目录的创建与删除命令　<br>
<br>
mkdir命令<br>
<br>
功能：创建一个目录（类似DOS下的md命令）。<br>
<br>
语法：mkdir ［选项］ dirname<br>
<br>
说明：该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中（dirname的父目录中）具有写权限，并且dirname不能是当前目录中已有的目录或文件名称。<br>
<br>
命令中各选项的含义为：<br>
<br>
- m 对新建目录设置存取权限。也可以用chmod命令设置。<br>
<br>
- p 可以是一个路径名称。此时若路径中的某些目录尚不存在， 加上此选项后，系统将自动建立好那些尚不存在的目录，即一次可以建立多个目录。<br>
<br>
例如：在当前目录中建立inin 和inin下的/mail目录，也就是连续建两个目录。<br>
<br>
$ mkdir - p - m 700 ./inin/mail/<br>
<br>
该命令的执行结果是在当前目录中创建嵌套的目录层次inin /mail，权限设置为只有文件主有读、写和执行权限。<br>
<br>
rmdir 命令<br>
<br>
功能：删除空目录。<br>
<br>
语法：rmdir ［选项］ dirname<br>
<br>
说明：dirname表示目录名。该命令从一个目录中删除一个或多个子目录项。需要特别注意的是，一个目录被删除之前必须是空的。（注意，rm - r dir命令可代替rmdir，但是有很大危险性。）删除某目录时也必须具有对父目录的写权限。<br>
<br>
命令中各选项的含义为：<br>
<br>
- p 递归删除目录dirname，当子目录删除后其父目录为空时，也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径，则系统在标准输出上显示相应的信息。<br>
<br>
例如：<br>
<br>
$ rmdir - p /usr/xu/txt<br>
<br>
将/usr/xu/txt目录删除。<br>
<br>
改变工作目录、显示目录内容命令<br>
<br>
cd 命令<br>
<br>
功能：改变工作目录。<br>
<br>
语法：cd ［directory］<br>
<br>
说明：该命令将当前目录改变至directory所指定的目录。若没有指定directory，则回到用户的主目录。为了改变到指定目录，用户必须拥有对指定目录的执行和读权限。<br>
<br>
该命令可以使用通配符（通配符含义请参见第十章）。<br>
<br>
例如：假设用户当前目录是：/home/xu，现需要更换到/home/xu/pro目录中，<br>
<br>
$ cd pro<br>
<br>
此时，用户可以执行pwd命令来显示工作目录。<br>
<br>
$ pwd<br>
<br>
/home/xu/pro<br>
<br>
pwd 命令<br>
<br>
在Linux层次目录结构中，用户可以在被授权的任意目录下利用mkdir命令创建新目录，也可以利用cd命令从一个目录转换到另一个目录。然而，没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录，可以使用pwd命令，该命令显示整个路径名。<br>
<br>
语法：pwd<br>
<br>
说明：此命令显示出当前工作目录的绝对路径。<br>
<br>
例：$ pwd<br>
<br>
/home/xu<br>
<br>
显示的路径名为/home/xu，每个目录名都用“/”隔开，根目录以开头的“/”表示。<br>
<br>
ls 命令<br>
<br>
ls是英文单词list的简写，其功能为列出目录的内容。这是用户最常用的一个命令之一，因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。<br>
<br>
语法：ls ［选项］ ［目录或是文件］<br>
<br>
对于每个目录，该命令将列出其中的所有子目录与文件。对于每个文件，ls将输出其文件名以及所要求的其他信息。默认情况下，输出条目按字母顺序排序。当未给出目录名或是文件名时，就显示当前目录的信息。<br>
<br>
命令中各选项的含义如下：<br>
<br>
- a 显示指定目录下所有子目录与文件，包括隐藏文件。<br>
<br>
- A 显示指定目录下所有子目录与文件，包括隐藏文件。但不列出“.”和“..”。<br>
<br>
- b 对文件名中的不可显示字符用八进制逃逸字符显示。<br>
<br>
- c 按文件的修改时间排序。<br>
<br>
- C 分成多列显示各项。<br>
<br>
- d 如果参数是目录，只显示其名称而不显示其下的各文件。往往与l选项一起使用，以得到目录的详细信息。<br>
<br>
- f 不排序。该选项将使lts选项失效，并使aU选项有效。<br>
<br>
- F 在目录名后面标记“/”，可执行文件后面标记“*”，符号链接后面标记“@”，管道（或FIFO）后面标记“|”，socket文件后面标记“=”。<br>
<br>
- i 在输出的第一列显示文件的i节点号。<br>
<br>
- l 以长格式来显示文件的详细信息。这个选项最常用。每行列出的信息依次是：<br>
<br>
文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间 名字<br>
<br>
对于符号链接文件，显示的文件名之后有“—〉”和引用文件路径名。<br>
<br>
对于设备文件，其“文件大小”字段显示主、次设备号，而不是文件大小。目录中的总块数显示在长格式列表的开头，其中包含间接块。<br>
<br>
- L 若指定的名称为一个符号链接文件，则显示链接所指向的文件。<br>
<br>
- m 输出按字符流格式，文件跨页显示，以逗号分开。<br>
<br>
- n 输出格式与l选项相同，只不过在输出中文件属主和属组是用相应的UID号和GID号来表示，而不是实际的名称。<br>
<br>
- o 与l选项相同，只是不显示拥有者信息。<br>
<br>
- p 在目录后面加一个“/”。<br>
<br>
- q 将文件名中的不可显示字符用“?”代替。<br>
<br>
- r 按字母逆序或最早优先的顺序显示输出结果。<br>
<br>
- R 递归式地显示指定目录的各个子目录中的文件。<br>
<br>
- s 给出每个目录项所用的块数，包括间接块。<br>
<br>
- t 显示时按修改时间（最近优先）而不是按名字排序。若文件修改时间相同，则按字典顺序。修改时间取决于是否使用了c或u选顶。缺省的时间标记是最后一次修改时间。<br>
<br>
- u 显示时按文件上次存取的时间（最近优先）而不是按名字排序。即将-t的时间标记修改为最后一次访问的时间。<br>
<br>
- x 按行显示出各排序项的信息。<br>
<br>
用ls - l命令显示的信息中，开头是由10个字符构成的字符串，其中第一个字符表示文件类型，它可以是下述类型之一：<br>
<br>
- 普通文件<br>
<br>
d 目录<br>
<br>
l 符号链接<br>
<br>
b 块设备文件<br>
<br>
c 字符设备文件<br>
<br>
后面的9个字符表示文件的访问权限，分为3组，每组3位。第一组表示文件属主的权限，第二组表示同组用户的权限，第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。<br>
<br>
各权限如下所示：<br>
<br>
r 读<br>
<br>
w 写<br>
<br>
x 执行。对于目录，表示进入权限。<br>
<br>
s 当文件被执行时，把该文件的UID或GID赋予执行进程的UID（用户ID）或GID（组ID）。<br>
<br>
t 设置标志位（留在内存，不被换出）。如果该文件是目录，在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件，在该文件执行后，指向其正文段的指针仍留在内存。这样再次执行它时，系统就能更快地装入该文件。<br>
<br>
- 没有设置权限。<br>
<br>
例1：列出当前目录的内容。<br>
<br>
$ ls -F<br>
<br>
bin/ lib/ var/<br>
<br>
etc/ tmp/ index. html<br>
<br>
例2：列出某个目录的内容。<br>
<br>
$ ls –F /home/xu<br>
<br>
Mai1/ map1e/ mm/ ptr/ telnetd*<br>
<br>
fd/ mbox mount sobsrc. tgz tmp/<br>
<br>
例3：列出某个目录下所有的文件（包括隐藏文件）。<br>
<br>
$ 1s -aF /home/xu<br>
<br>
./ . .e1m/ .netscape/ map1e ptr/<br>
<br>
../ .fvwin2rc95 .term/ mbox sobsrc. tgz<br>
<br>
.Xauthority .kermrc Mai1/ mm/ te1netd*<br>
<br>
.bash-history .ncftp/ fd/ mount tmp/<br>
<br>
　<br>
<br>
例4：用长格式列出某个目录下所有的文件（包括隐藏文件）。<br>
<br>
$ 1s -laF /home/xu<br>
<br>
total 584<br>
<br>
drwxr-xr-x l2 root root 1024 Nov 02 22:07 ./<br>
<br>
drwxr-xr-x 15 bbs bbs 1024 Jul 29 07:08 ../<br>
<br>
-rw-r--r-- 1 yu users 4343 Ju1 29 22:20 .bash-history<br>
<br>
drwx------ 2 yu users 1024 May 17 06:36 .e1m/<br>
<br>
--rw------ 1 root root 4628 Jun 2 1l:34 mbox<br>
<br>
lrwxrwxrwx 1 root root l4 Ju1 29 03:08 mount-&gt;/mnt<br>
<br>
drwxrwxr-x 4 root root 1024 Ju1 23 03:43 ptr/<br>
<br>
-rw--r--r- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz<br>
<br>
-rwxr-xr-x l root users 60177 Jun 8 01:29 telnetd*<br>
<br>
drwxr-xr-x 2 root root 1024 Mar 6 22:32 tmp/<br>
<br>
　<br>
<br>
例5：用长格式列出某个目录下所有的文件包括隐藏文件和它们的i节点号。并把文件属主和属组以UID号和GID号的形式显示。<br>
<br>
$ 1s -1ainF /home/xu<br>
<br>
tota1 584<br>
<br>
399672 drwxr-xr-x l2 0 0 l024 Nov 30 22:07 ./<br>
<br>
333907 drwxr-xr-x 15 9999 99 l024 　Ju1 29 07:08 ../<br>
<br>
39980l -rw------- l 0 0 0 Jun 2 2:09 .Xauthority<br>
<br>
399679 -rw-r--r-- 1 505 l00 4343 Jul 29 22:20 .bash-hist0ry<br>
<br>
30l763 drwxr----- 2 505 100 l024 　May 17 06:36 .e1m/<br>
<br>
<br>
<br>
</div>

		<!-- / message -->
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:07 <a href="http://www.cnitblog.com/ygb/articles/5493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>改变文件或目录的访问权限命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5491.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:06:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5491.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5491.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5491.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5491.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5491.html</trackback:ping><description><![CDATA[<div>Linux系统中的每个文件和目录都有访问许可权限，用它来确定谁可以通过何种方式对文件和目录进行访问和操作。<br>
文件或目录的访问权限分为只读，只写和可执行三种。以文件为例，只读权限表示只允许读其内容，而禁止对其做任何的更改操作。可执行权限表示允许将该文件作
为一个程序执行。文件被创建时，文件所有者自动拥有对该文件的读、写和可执行权限，以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任
何组合。<br>
<br>
有三种不同类型的用户可对文件或目录进行访问：文件所有者，同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件，还可以将文件的访问权限赋予系统中的其他用户。在这种情况下，系统中每一位用户都能访问该用户拥有的文件或目录。<br>
<br>
每一文件或目录的访问权限都有三组，每组用三位表示，分别为文件属主的读、写和执行权限；与属主同组的用户的读、写和执行权限；系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时，最左边的一列为文件的访问权限。例如：<br>
<br>
$ ls -l sobsrc. tgz<br>
<br>
-rw-r--r-- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz<br>
<br>
横线代表空许可。r代表只读，w代表写，x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型。在通常意义上，一个目录也是一个文件。如果第一个字符是横线，表示是一个非目录的文件。如果是d，表示是一个目录。<br>
<br>
例如：<br>
<br>
- rw- r-- r--<br>
<br>
普通文件 文件主 组用户 其他用户<br>
<br>
是文件sobsrc.tgz 的访问权限，表示sobsrc.tgz是一个普通文件；sobsrc.tgz的属主有读写权限；与sobsrc.tgz属主同组的用户只有读权限；其他用户也只有读权限。<br>
<br>
确定了一个文件的访问权限后，用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。<br>
<br>
下面分别对这些命令加以介绍。<br>
<br>
　<br>
<br>
chmod 命令<br>
<br>
chmod命令是非常重要的，用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。<br>
<br>
该命令有两种用法。一种是包含字母和操作符表达式的文字设定法；另一种是包含数字的数字设定法。<br>
<br>
1. 文字设定法<br>
<br>
chmod ［who］ ［+ | - | =］ ［mode］ 文件名¼<br>
<br>
命令中各选项的含义为：<br>
<br>
操作对象who可是下述字母中的任一个或者它们的组合：<br>
<br>
u 表示“用户（user）”，即文件或目录的所有者。<br>
<br>
g 表示“同组（group）用户”，即与文件属主有相同组ID的所有用户。<br>
<br>
o 表示“其他（others）用户”。<br>
<br>
a 表示“所有（all）用户”。它是系统默认值。<br>
<br>
操作符号可以是：<br>
<br>
+ 添加某个权限。<br>
<br>
- 取消某个权限。<br>
<br>
= 赋予给定权限并取消其他所有权限（如果有的话）。<br>
<br>
设置mode所表示的权限可用下述字母的任意组合：<br>
<br>
r 可读。<br>
<br>
w 可写。<br>
<br>
x 可执行。<br>
<br>
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。<br>
<br>
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u＋s”设置文件的用户ID位，“g＋s”设置组ID位。<br>
<br>
t 保存程序的文本到交换设备上。<br>
<br>
u 与文件属主拥有一样的权限。<br>
<br>
g 与和文件属主同组的用户拥有一样的权限。<br>
<br>
o 与其他用户拥有一样的权限。<br>
<br>
文件名：以空格分开的要改变权限的文件列表，支持通配符。<br>
<br>
在一个命令行中可给出多个权限方式，其间用逗号隔开。例如：chmod g+r，o+r example<br>
<br>
使同组和其他用户对文件example 有读权限。<br>
<br>
2. 数字设定法<br>
<br>
我们必须首先了解用数字表示的属性的含义：0表示没有权限，1表示可执行权限，2表示可写权限，4表示可读权限，然后将其相加。所以数字属性的格式应为3个从0到7的八进制数，其顺序是（u）（g）（o）。<br>
<br>
例如，如果想让某个文件的属主有“读/写”二种权限，需要把4（可读）+2（可写）＝6（读/写）。<br>
<br>
数字设定法的一般形式为：<br>
<br>
chmod ［mode］ 文件名¼<br>
<br>
例子：<br>
<br>
（1）文字设定法：<br>
<br>
例1：$ chmod a+x sort<br>
<br>
即设定文件sort的属性为：<br>
<br>
文件属主（u） 增加执行权限<br>
<br>
与文件属主同组用户（g） 增加执行权限<br>
<br>
其他用户（o） 增加执行权限<br>
　<br>
<br>
例2：$ chmod ug+w，o-x text<br>
<br>
即设定文件text的属性为：<br>
<br>
文件属主（u） 增加写权限<br>
<br>
与文件属主同组用户（g） 增加写权限<br>
<br>
其他用户（o） 删除执行权限<br>
　<br>
<br>
例3：$ chmod u+s a.out<br>
<br>
假设执行chmod后a.out的权限为（可以用ls – l a.out命令来看）：<br>
<br>
–rws--x--x 1 inin users 7192 Nov 4 14:22 a.out<br>
<br>
并且这个执行文件要用到一个文本文件shiyan1.c，其文件存取权限为“–rw-------”，即该文件只有其属主具有读写权限。<br>
<br>
当其他用户执行a.out这个程序时，他的身份因这个程序暂时变成inin（由于chmod命令中使用了s选项），所以他就能够读取shiyan1.c这个文件（虽然这个文件被设定为其他人不具备任何权限），这就是s的功能。<br>
<br>
因此，在整个系统中特别是root本身，最好不要过多的设置这种类型的文件（除非必要）这样可以保障系统的安全，避免因为某些程序的bug而使系统遭到入侵。<br>
<br>
例4：$ chmod a–x mm.txt<br>
<br>
$ chmod –x mm.txt<br>
<br>
$ chmod ugo–x mm.txt<br>
<br>
　<br>
<br>
以上这三个命令都是将文件mm.txt的执行权限删除，它设定的对象为所有使用者。<br>
<br>
（2）数字设定法：<br>
<br>
例1： $ chmod 644 mm.txt<br>
<br>
$ ls –l<br>
<br>
即设定文件mm.txt的属性为：<br>
<br>
-rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt<br>
<br>
文件属主（u）inin 拥有读、写权限<br>
<br>
与文件属主同组人用户（g） 拥有读权限<br>
<br>
其他人（o） 拥有读权限<br>
<br>
　<br>
<br>
例2： $ chmod 750 wch.txt<br>
<br>
$ ls –l<br>
<br>
-rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt<br>
<br>
即设定wchtxt这个文件的属性为：<br>
<br>
文件主本人（u）inin 可读/可写/可执行权<br>
<br>
与文件主同组人（g） 可读/可执行权<br>
<br>
其他人（o） 没有任何权限<br>
<br>
chgrp命令<br>
<br>
功能：改变文件或目录所属的组。<br>
<br>
语法：chgrp ［选项］ group filename¼<br>
<br>
该命令改变指定指定文件所属的用户组。其中group可以是用户组ID，也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表，支持通配符。如果用户不是该文件的属主或超级用户，则不能改变该文件的组。<br>
<br>
该命令的各选项含义为：<br>
<br>
- R 递归式地改变指定目录及其下的所有子目录和文件的属组。<br>
<br>
例1：$ chgrp - R book /opt/local /book<br>
<br>
改变/opt/local /book/及其子目录下的所有文件的属组为book。<br>
<br>
chown 命令<br>
<br>
功能：更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu，为了让用户xu能够存取这个文件，root用户应该把这个文件的属主设为xu，否则，用户xu无法存取这个文件。<br>
<br>
语法：chown ［选项］ 用户或组 文件<br>
<br>
说明：chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表，支持通配符。<br>
<br>
该命令的各选项含义如下：<br>
<br>
- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。<br>
<br>
- v 显示chown命令所做的工作。<br>
<br>
例1：把文件shiyan.c的所有者改为wang。<br>
<br>
$ chown wang shiyan.c<br>
<br>
例2：把目录/his及其下的所有文件和子目录的属主改成wang，属组改成users。<br>
<br>
$ chown - R wang.users /his</div>

		<!-- / message -->
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:06 <a href="http://www.cnitblog.com/ygb/articles/5491.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本处理sort命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5492.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:06:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5492.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5492.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5492.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5492.html</trackback:ping><description><![CDATA[<div>sort命令<br>
<br>
　　sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项，这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上，sort命令可以被认为是一个非常强大的数据管理工具，用来管理内容类似数据库记录的文件。<br>
<br>
　　Sort命令将逐行对文件中的内容进行排序，如果两行的首字符相同，该命令将继续比较这两行的下一字符，如果还相同，将继续进行比较。<br>
<br>
　　语法：<br>
<br>
　　sort ［选项］ 文件<br>
<br>
　　说明：sort命令对指定文件中所有的行进行排序，并将结果显示在标准输出上。如不指定输入文件或使用“- ”，则表示排序内容来自标准输入。<br>
<br>
　　sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。<br>
<br>
　　改变缺省设置的选项主要有：<br>
<br>
　　- m 若给定文件已排好序，合并文件。<br>
<br>
　　- c 检查给定文件是否已排好序，如果它们没有都排好序，则打印一个出错信息，并以状态值1退出。<br>
<br>
　　- u 对排序后认为相同的行只留其中一行。<br>
<br>
　　- o 输出文件 将排序输出写到输出文件中而不是标准输出，如果输出文件是输入文件之一，sort先将该文件的内容写入一个临时文件，然后再排序和写输出结果。<br>
<br>
　　改变缺省排序规则的选项主要有：<br>
<br>
　　- d 按字典顺序排序，比较时仅字母、数字、空格和制表符有意义。<br>
<br>
　　- f 将小写字母与大写字母同等对待。<br>
<br>
　　- I 忽略非打印字符。<br>
<br>
　　- M 作为月份比较：“JAN”&lt;“FEB”&lt;¼ &lt;“DEC”。<br>
<br>
　　- r 按逆序输出排序结果。<br>
<br>
　　＋posl - pos2 指定一个或几个字段作为排序关键字，字段位置从posl开始，到pos2为止（包括posl，不包括pos2）。如不指定pos2，则关键字为从posl到行尾。字段和字符的位置从0开始。<br>
<br>
　　- b 在每行中寻找排序关键字时忽略前导的空白（空格和制表符）。<br>
<br>
　　- t separator 指定字符separator作为字段分隔符。<br>
<br>
　　下面通过几个例子来讲述sort的使用。<br>
<br>
<br>
　　用sort命令对text文件中各行排序后输出其结果。请注意，在原文件的第二、三行上的第一个单词完全相同，该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。<br>
<br>
　　$ cat text<br>
<br>
　　vegetable soup<br>
<br>
　　fresh vegetables<br>
<br>
　　fresh fruit<br>
<br>
　　lowfat milk<br>
<br>
　　$ sort text<br>
<br>
　　fresh fruit<br>
　<br>
　　fresh vegetables<br>
<br>
　　lowfat milk<br>
<br>
　　vegetable soup<br>
<br>
　　用户可以保存排序后的文件内容，或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。<br>
<br>
　　$ sort text&gt;result<br>
<br>
<br>
　　以第2个字段作为排序关键字对文件example的内容进行排序。<br>
<br>
　　$ sort +1-2 example<br>
<br>
<br>
　　对于file1和file2文件内容反向排序，结果放在outfile中，利用第2个字段的第一个字符作为排序关键字。<br>
<br>
　　$ sort -r -o outfile +1.0 -1.1 example<br>
<br>
<br>
　　sort排序常用于在管道中与其他命令连用，组合完成比较复杂的功能，如利用管道将当前工作目录中的文件送给sort进行排序，排序关键字是第6个至第8个字段。<br>
<br>
　　$ ls - l | sort +5 - 7<br>
<br>
　　sort命令也可以对标准输入进行操作。例如，如果您想把几个文件文本行合并，并对合并后的文本行进行排序，您可以首先用命令cat把多个文件合并，
然后用管道操作把合并后的文本行输入给命令sort，sort命令将输出这些合并及排序后的文本行。在下面的例子中，文件veglist与文件
fruitlist的文本行经过合并与排序后被保存到文件clist中。<br>
<br>
　　$ cat veglist fruitlist | sort &gt; clist<br>
<br>
<br>
　　uniq命令<br>
<br>
　　文件经过处理后在它的输出文件中可能会出现重复的行。例如，使用cat命令将两个文件合并后，再使用sort命令进行排序，就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除，只留下每条记录的唯一样本。<br>
<br>
　　语法：uniq ［选项］ 文件<br>
<br>
　　说明：这个命令读取输入文件，并比较相邻的行。在正常情况下，第二个及以后更多个重复行将被删去，行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“- ”表示，则从标准输入读取。<br>
<br>
　　该命令各选项含义如下：、<br>
<br>
　　- c 显示输出中，在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。<br>
<br>
　　- d 只显示重复行。<br>
<br>
　　- u 只显示文件中不重复的各行。<br>
<br>
　　- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串，彼此由制表符和空格隔开（字段从0开始编号）。<br>
<br>
　　+n 前n个字符被忽略，之前的字符被跳过（字符从0开始编号）。<br>
<br>
　　- f n 与- n相同，这里n是字段数。<br>
<br>
　　- s n 与＋n相同，这里n是字符数。<br>
<br>
　　例如：<br>
<br>
　　1. 显示文件example中不重复的行。<br>
<br>
　　uniq - u example<br>
<br>
　　2. 显示文件example中不重复的行，从第2个字段的第2个字符开始做比较。<br>
<br>
　　uniq - u - 1 +1 example</div>

		<!-- / message -->
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:06 <a href="http://www.cnitblog.com/ygb/articles/5492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件链接命令ln[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5490.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:05:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5490.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5490.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5490.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5490.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5490.html</trackback:ping><description><![CDATA[文件链接命令<br>

<br>

<br>

ln命令<br>

<br>

　　该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名，我们可以为之指定不同的访问权限，以控制对信息的共享和安全性的问题。<br>

<br>

　　如果链接指向目录，用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且，即使我们删除这个链接，也不会破坏原来的目录。<br>

<br>

　　语法：ln ［选项］ 目标 ［链接名］<br>

<br>

　　　　　ln ［选项］ 目标 目录<br>

<br>

　　链接有两种，一种被称为硬链接（Hard Link），另一种被称为符号链接（Symbolic
Link）。建立硬链接时，链接文件和被链接文件必须位于同一个文件系统中，并且不能建立指向目录的硬链接。而对符号链接，则不存在这个问题。默认情况
下，ln产生硬链接。<br>

<br>

　　在硬链接的情况下，参数中的“目标”被链接至［链接名］。如果［链接名］是一个目录名，系统将在该目录之下建立一个或多个与“目标”同名的链接文件，
链接文件和被链接文件的内容完全相同。如果［链接名］为一个文件，用户将被告知该文件已存在且不进行链接。如果指定了多个“目标”参数，那么最后一个参数
必须为目录。<br>

<br>

　　如果给ln命令加上-
s选项，则建立符号链接。如果［链接名］已经存在但不是目录，将不做链接。［链接名］可以是任何一个文件名（可包含路径），也可以是一个目录，并且允许它
与“目标”不在同一个文件系统中。如果［链接名］是一个已经存在的目录，系统将在该目录下建立一个或多个与“目标”同名的文件，此新建的文件实际上是指向
原“目标”的符号链接文件。<br>

<br>

　　例：$ ln - s lunch /home/xu<br>

<br>

　　用户为当前目录下的文件lunch创建了一个符号链接/home/xu。<img src ="http://www.cnitblog.com/ygb/aggbug/5490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:05 <a href="http://www.cnitblog.com/ygb/articles/5490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Linux环境下运行DOS命令[转帖] </title><link>http://www.cnitblog.com/ygb/articles/5488.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:04:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5488.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5488.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5488.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5488.html</trackback:ping><description><![CDATA[Linux系统提供了一组称为mtools的可移植工具，可以让用户轻松地从标准的DOS软盘上读、写文件和目录。它们对DOS和Linux环境之间交换
文件非常有用。它们是不具备共同的文件系统格式的系统之间交换文件的有力手段。对于一个MS-DOS的软盘，只要把软盘放在软驱中，就可以利用
mtools提供的命令来访问软盘上的文件。<br>

<br>

　　mtools的主要命令如下：<br>

<br>

　　mcd 目录名 改变MSDOS目录；<br>

<br>

　　mcopy 源文件 目标文件 在MSDOS和Unix之间复制文件；<br>

<br>

　　mdel 文件名 删除MSDOS文件；<br>

<br>

　　mdir 目录名 显示MSDOS目录；<br>

<br>

　　mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统；<br>

<br>

　　rnlabel 驱动器号 产生MSDOS卷标；<br>

<br>

　　mmd 目录名 建立MSDOS目录；<br>

<br>

　　mrd 目录名 删除MSDOS目录；<br>

<br>

　　mren 源文件 目标文件 重新命名已存在的MSDOS文件；<br>

<br>

　　mtype 文件名 显示MSDOS文件的内容。<br>

<br>

　　这些命令和对应的不加 m的 MSDOS命令非常相似。<br>

<br>

　　例1：在Linux环境下看DOS盘最上层的目录的内容：<br>

<br>

　　$ mdir a:<br>

<br>

　　Volume in drive A has no label<br>

<br>

　　Volume Serial Number is 15F6-3362<br>

<br>

　　Directory of A:<br>

<br>

　　SS6 CPP 331 09-24-99 7:41 ss6.cpp<br>

<br>

　　CH9 ＜DIR＞ 11-20-99 16:22 ch9<br>

<br>

　　XXQ 0 11-20-99 16:24 xxq<br>

<br>

　　95CZXTA DOC 36,864 06-15-98 22:51 95czxta.doc<br>

<br>

　　95CZXTB DOC 39,936 06-16-98 7:18 95czxtb.doc<br>

<br>

　　HTCA DOC 27,136 01-08-99 0:13 htca.doc<br>

<br>

　　HTCB DOC 27,136 01-08-99 0:12 htcb.doc<br>

<br>

　　6 file（s） 131,403 bytes<br>

<br>

　　1 dir（s） 1,295,872 bytes free<br>

<br>

　　例2：将DOS盘上的文件xxq复制到当前目录下，并用ls命令进行验证。<br>

<br>

　　$ mcopy a:htca.doc<br>

<br>

　　$ ls –l htca.doc<br>

<br>

　　-rw-r— -r- - 1 xxq xxq 27136 Jan 1 01:80 htca.doc<br>

<br>

　　思　考　题<br>

<br>

　　1. 如何找到用户主目录的绝对路径名？在自己的系统上，用户主目录的绝对路径名是什么？<br>

<br>

　　2. 将当前工作目录从/home/xxq转到/home/wang需要使用什么命令？<br>

<br>

　　3. 如何显示当前目录？<br>

<br>

　　4. 如何在当前目录下建立子目录text？<br>

<br>

　　5. 如何删除子目录text？<br>

<br>

　　6. 如何查看当前目录下的内容？<br>

<br>

　　7. 如何将文件text的权限设定为：text属主可读、可写、可执行，同组用户可读、可执行，其他用户可执行？<br>

<br>

　　8. 如何将当前目录包括所有子目录全部做备份文件，备份文件名为first.tar？<br>

<br>

　　9. 如何将目录/home下每一个文件压缩成.gz文件？<br>

<br>

　　10. 如何把上例中每个压缩的文件解压，并列出详细的信息？<br>

<br>

　　11. 如何将当前目录下的text文件拷贝到DOS软盘上，并用什么命令可以进行验证？<br>

<br>

　　12. 如何将DOS盘上的example文件复制到当前目录下，并用什么命令可以进行验证？<br>

<br>

　　13. 假设你以普通用户身份访问系统，显示文件系统中所有文件名为core的文件清单。<br>

<br>

　　14. TurboLiunx系统提供了哪些有关文件显示的命令，它们从功能上来说有何区别？<br>

<br>

　　15. 如何将目录/home/xxq下的文件text复制到目录/home/wang下，并将文件名重新命名为example，最后将目录/home/xxq下的文件text删除。<img src ="http://www.cnitblog.com/ygb/aggbug/5488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:04 <a href="http://www.cnitblog.com/ygb/articles/5488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备份与压缩命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5489.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:04:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5489.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5489.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5489.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5489.html</trackback:ping><description><![CDATA[　用户经常需要备份计算机系统中的数据，为了节省存储空间，常常将备份文件进行压缩。下面分别介绍备份与压缩的命令。<br>

<br>

　　tar命令<br>

<br>

　　tar可以为文件和目录创建档案。利用tar，用户可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。
tar最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案，如软盘。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于
备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。<br>

<br>

　　语法：tar ［主选项+辅选项］ 文件或者目录<br>

<br>

　　使用该命令时，主选项是必须要有的，它告诉tar要做什么事情，辅选项是辅助使用的，可以选用。<br>

<br>

　　主选项：<br>

<br>

　　c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。<br>

<br>

　　r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件，又发现还有一个目录或是一些文件忘记备份了，这时可以使用该选项，将忘记的目录或文件追加到备份文件中。<br>

<br>

　　t 列出档案文件的内容，查看已经备份了哪些文件。<br>

<br>

　　u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中找不到要更新的文件，则把它追加到备份文件的最后。<br>

<br>

　　x 从档案文件中释放文件。<br>

<br>

　　辅助选项：<br>

<br>

　　b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。<br>

<br>

　　f 使用档案文件或设备，这个选项通常是必选的。<br>

<br>

　　k 保存已经存在的文件。例如我们把某个文件还原，在还原的过程中，遇到相同的文件，不会进行覆盖。<br>

<br>

　　m 在还原文件时，把所有文件的修改时间设定为现在。<br>

<br>

　　M 创建多卷的档案文件，以便在几个磁盘中存放。<br>

<br>

　　v 详细报告tar处理的文件信息。如无此选项，tar不报告文件信息。<br>

<br>

　　w 每一步都要求确认。<br>

<br>

　　z 用gzip来压缩/解压缩文件，加上该选项后可以将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。<br>

<br>

　　例1：把/home目录下包括它的子目录全部做备份文件，备份文件名为usr.tar。<br>

<br>

　　$ tar cvf usr.tar /home<br>

<br>

　　例2：把/home目录下包括它的子目录全部做备份文件，并进行压缩，备份文件名为usr.tar.gz 。<br>

<br>

　　$ tar czvf usr.tar.gz /home<br>

<br>

　　例3：把usr.tar.gz这个备份文件还原并解压缩。<br>

<br>

　　$ tar xzvf usr.tar.gz<br>

<br>

　　例4：查看usr.tar备份文件的内容，并以分屏方式显示在显示器上。<br>

<br>

　　$ tar tvf usr.tar | more<br>

<br>

　　要将文件备份到一个特定的设备，只需把设备名作为备份文件名。<br>

<br>

　　例5：用户在/dev/fd0设备的软盘中创建一个备份文件，并将/home 目录中所有的文件都拷贝到备份文件中。<br>

<br>

　　$ tar cf /dev/fd0 /home<br>

<br>

　　要恢复设备磁盘中的文件，可使用xf选项：<br>

<br>

　　$ tar xf /dev/fd0<br>

<br>

　　如果用户备份的文件大小超过设备可用的存贮空间，如软盘，您可以创建一个多卷的tar备份文件。M选项指示tar命令提示您使用一个新的存贮设备，当
使用M选项向一个软驱进行存档时，tar命令在一张软盘已满的时候会提醒您再放入一张新的软盘。这样您就可以把tar档案存入几张磁盘中。<br>

<br>

　　$ tar cMf /dev/fd0 /home<br>

<br>

　　要恢复几张盘中的档案，只要将第一张放入软驱，然后输入有x和M选项的tar命令。在必要时您会被提醒放入另外一张软盘。<br>

<br>

　　$ tar xMf /dev/fd0<br>

<br>

　　gzip命令<br>

<br>

　　减少文件大小有两个明显的好处，一是可以减少存储空间，二是通过网络传输文件时，可以减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令，既方便又好用。<br>

<br>

　　语法：gzip ［选项］ 压缩（解压缩）的文件名<br>

<br>

　　各选项的含义：<br>

<br>

　　-c 将输出写到标准输出上，并保留原有文件。<br>

<br>

　　-d 将压缩文件解压。<br>

<br>

　　-l 对每个压缩文件，显示下列字段：<br>

<br>

　　压缩文件的大小<br>

<br>

　　未压缩文件的大小<br>

<br>

　　压缩比<br>

<br>

　　未压缩文件的名字<br>

<br>

　　-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。<br>

<br>

　　-t 测试，检查压缩文件是否完整。<br>

<br>

　　-v 对每一个压缩和解压的文件，显示文件名和压缩比。<br>

<br>

　　-num 用指定的数字num调整压缩的速度，-1或--fast表示最快压缩方法（低压缩比），-9或--best表示最慢压缩方法（高压缩比）。系统缺省值为6。<br>

<br>

　　假设一个目录/home下有文件mm.txt、sort.txt、xx.com。<br>

<br>

　　例1：把/home目录下的每个文件压缩成.gz文件。<br>

<br>

　　$ cd /home<br>

<br>

　　$ gzip *<br>

<br>

　　$ ls<br>

<br>

　　m.txt.gz sort.txt.gz xx.com.gz<br>

<br>

　　例2：把例1中每个压缩的文件解压，并列出详细的信息。<br>

<br>

　　$ gzip -dv *<br>

<br>

　　mm.txt.gz 43.1%-----replaced with mm.txt<br>

<br>

　　sort.txt.gz 43.1%-----replaced with sort.txt<br>

<br>

　　xx.com.gz 43.1%-----replaced with xx.com<br>

<br>

　　$ ls<br>

<br>

　　mm.txt sort.txt xx.com<br>

<br>

<br>

　　例3：详细显示例1中每个压缩的文件的信息，并不解压。<br>

<br>

　　$ gzip -l *<br>

<br>

　　compressed uncompr. ratio uncompressed_name<br>

<br>

　　277 445 43.1% mm.txt<br>

<br>

　　278 445 43.1% sort.txt<br>

<br>

　　277 445 43.1% xx.com<br>

<br>

　　$ ls<br>

<br>

　　mm.txt.gz sort.txt.gz xx.com.gz<br>

<br>

　　例4：压缩一个tar备份文件，如usr.tar，此时压缩文件的扩展名为.tar.gz<br>

<br>

　　$ gzip usr.tar<br>

<br>

　　$ ls<br>

<br>

　　usr.tar.gz<br>

<br>

　　unzip命令<br>

<br>

　　用MS Windows下的压缩软件winzip压缩的文件如何在Linux系统下展开呢？可以用unzip命令，该命令用于解扩展名为.zip的压缩文件。<br>

<br>

　　语法：unzip ［选项］ 压缩文件名.zip<br>

<br>

　　各选项的含义分别为：<br>

<br>

　　-x 文件列表 解压缩文件，但不包括指定的file文件。<br>

<br>

　　-v 查看压缩文件目录，但不解压。<br>

<br>

　　-t 测试文件有无损坏，但不解压。<br>

<br>

　　-d 目录 把压缩文件解到指定目录下。<br>

<br>

　　-z 只显示压缩文件的注解。<br>

<br>

　　-n 不覆盖已经存在的文件。<br>

<br>

　　-o 覆盖已存在的文件且不要求用户确认。<br>

<br>

　　-j 不重建文档的目录结构，把所有文件解压到同一目录下。<br>

<br>

　　例1：将压缩文件text.zip在当前目录下解压缩。<br>

<br>

　　$ unzip text.zip<br>

<br>

　　例2：将压缩文件text.zip在指定目录/tmp下解压缩，如果已有相同的文件存在，要求unzip命令不覆盖原先的文件。<br>

<br>

　　$ unzip -n text.zip -d /tmp<br>

<br>

　　例3：查看压缩文件目录，但不解压。<br>

<br>

　　$ unzip -v text.zip<br>

<br>

　　zgrep命令<br>

<br>

　　这个命令的功能是在压缩文件中寻找匹配的正则表达式，用法和grep命令一样，只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话，便可用zgrep命令。<img src ="http://www.cnitblog.com/ygb/aggbug/5489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:04 <a href="http://www.cnitblog.com/ygb/articles/5489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程管理及作业控制[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5487.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:03:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5487.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5487.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5487.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5487.html</trackback:ping><description><![CDATA[<div>进程管理及作业控制　<br>
<br>
Linux是一个多任务的操作系统，系统上同时运行着多个进程，正在执行的一个或多个相关进程称为一个作业。使用作业控制，用户可以同时运行多个作业，并在需要时在作业之间进行切换。本章详细介绍进程管理及作业控制的命令，包括启动进程、查看进程、调度作业的命令。<br>
<br>
进程及作业的概念<br>
<br>
Linux是一个多用户多任务的操作系统。多用户是指多个用户可以在同一时间使用计算机系统；多任务是指Linux可以同时执行几个任务，它可以在还未执行完一个任务时又执行另一项任务。<br>
<br>
操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主存，但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这
些资源并在多个用户间共享资源，当您提出一个请求时，给您造成一种假象，好象系统只被您独自占用。而实际上操作系统监控着一个等待执行的任务队列，这些任
务包括用户作业、操作系统任务、邮件和打印作业等。操作系统根据每个任务的优先级为每个任务分配合适的时间片，每个时间片大约都有零点几秒，虽然看起来很
短，但实际上已经足够计算机完成成千上万的指令集。每个任务都会被系统运行一段时间，然后挂起，系统转而处理其他任务；过一段时间以后再回来处理这个任
务，直到某个任务完成，从任务队列中去除。<br>
<br>
Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程，都可以称之为进程。Linux用分时管理方法使所有的任务共
同分享系统资源。我们讨论进程的时候，不会去关心这些进程究竟是如何分配的，或者是内核如何管理分配时间片的，我们所关心的是如何去控制这些进程，让它们
能够很好地为用户服务。<br>
<br>
进程的一个比较正式的定义是：在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的，进程不是程序，虽然它由程序产生。程序只是一个静态的指
令集合，不占系统的运行资源；而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。<br>
<br>
Linux操作系统包括三种不同类型的进程，每种进程都有自己的特点和属性。<br>
<br>
　<br>
<br>
    *<br>
<br>
      交互进程——由一个shell启动的进程。交互进程既可以在前台运行，也可以在后台运行。<br>
    *<br>
<br>
      批处理进程——这种进程和终端没有联系，是一个进程序列。<br>
    *<br>
<br>
监控进程（也称守护进程）——Linux系统启动时启动的进程，并在后台运行。<br>
<br>
上述三种进程各有各的作用，使用场合也有所不同。<br>
<br>
进程和作业的概念也有区别。一个正在执行的进程称为一个作业，而且作业可以包含一个或多个进程，尤其是当使用了管道和重定向命令。例如“nroff -man ps.1|grep kill|more”这个作业就同时启动了三个进程。<br>
<br>
作业控制指的是控制正在运行的进程的行为。比如，用户可以挂起一个进程，等一会儿再继续执行该进程。shell将记录所有启动的进程情况，在每个进程过程
中，用户可以任意地挂起进程或重新启动进程。作业控制是许多shell（包括bash和tcsh）的一个特性，使用户能在多个独立作业间进行切换。<br>
<br>
一般而言，进程与作业控制相关联时，才被称为作业。<br>
<br>
在大多数情况下，用户在同一时间只运行一个作业，即它们最后向shell键入的命令。但是使用作业控制，用户可以同时运行多个作业，并在需要时在这些作业
间进行切换。这会有什么用途呢？例如，当用户编辑一个文本文件，并需要中止编辑做其他事情时，利用作业控制，用户可以让编辑器暂时挂起，返回shell提
示符开始做其他的事情。其他事情做完以后，用户可以重新启动挂起的编辑器，返回到刚才中止的地方，就象用户从来没有离开编辑器一样。这只是一个例子，作业
控制还有许多其他实际的用途。<br>
<br>
启动进程<br>
<br>
键入需要运行的程序的程序名，执行一个程序，其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号，用于系统识别和调度进程。启动一个进程有两个主要途径：手工启动和调度启动，后者是事先进行设置，根据用户要求自行启动。<br>
<br>
手工启动<br>
<br>
由用户输入命令，直接启动一个进程便是手工启动进程。但手工启动进程又可以分为很多种，根据启动的进程类型不同、性质不同，实际结果也不一样，下面分别介绍。<br>
<br>
1. 前台启动<br>
<br>
这或许是手工启动一个进程的最常用的方式。一般地，用户键入一个命令“ls
–l”，这就已经启动了一个进程，而且是一个前台的进程。这时候系统其实已经处于一个多进程状态。或许有些用户会疑惑：我只启动了一个进程而已。但实际上
有许多运行在后台的、系统启动时就已经自动启动的进程正在悄悄运行着。还有的用户在键入“ls –l”命令以后赶紧使用“ps
–x”查看，却没有看到ls进程，也觉得很奇怪。其实这是因为ls这个进程结束太快，使用ps查看时该进程已经执行结束了。如果启动一个比较耗时的进程:<br>
<br>
find / -name fox.jpg<br>
<br>
然后再把该进程挂起，使用ps查看，就会看到一个find进程在里面。<br>
<br>
　<br>
<br>
　<br>
<br>
2. 后台启动<br>
<br>
直接从后台手工启动一个进程用得比较少一些，除非是该进程甚为耗时，且用户也不急着需要结果的时候。假设用户要启动一个需要长时间运行的格式化文本文件的进程。为了不使整个shell在格式化过程中都处于“瘫痪”状态，从后台启动这个进程是明智的选择。<br>
<br>
［例1］<br>
<br>
$ troff –me notes &gt; note_form &amp;<br>
<br>
［1］ 4513<br>
<br>
$<br>
<br>
由上例可见，从后台启动进程其实就是在命令结尾加上一个&amp;号。键入命令以后，出现一个数字，这个数字就是该进程的编号，也称为PID，然后就出现了提示符。用户可以继续其他工作。<br>
<br>
上面介绍了前、后台启动的两种情况。实际上这两种启动方式有个共同的特点，就是新进程都是由当前shell这个进程产生的。也就是说，是shell创建了
新进程，于是就称这种关系为进程间的父子关系。这里shell是父进程，而新进程是子进程。一个父进程可以有多个子进程，一般地，子进程结束后才能继续父
进程；当然如果是从后台启动，那就不用等待子进程结束了。<br>
<br>
一种比较特殊的情况是在使用管道符的时候。例如：<br>
<br>
nroff -man ps.1|grep kill|more<br>
<br>
这时候实际上是同时启动了三个进程。请注意是同时启动的，所有放在管道两边的进程都将被同时启动，它们都是当前shell的子程序，互相之间可以称为兄弟进程。<br>
<br>
以上介绍的是手工启动进程的一些内容，作为一名系统管理员，很多时候都需要把事情安排好以后让其自动运行。因为管理员不是机器，也有离开的时候，所以有些必须要做的工作而恰好管理员不能亲自操作，这时候就需要使用调度启动进程了。<br>
<br>
调度启动<br>
<br>
有时候需要对系统进行一些比较费时而且占用资源的维护工作，这些工作适合在深夜进行，这时候用户就可以事先进行调度安排，指定任务运行的时间或者场合，到时候系统会自动完成这一切工作。<br>
<br>
要使用自动启动进程的功能，就需要掌握以下几个启动命令。<br>
<br>
at命令<br>
<br>
用户使用at命令在指定时刻执行指定的命令序列。也就是说，该命令至少需要指定一个命令、一个执行时间才可以正常运行。at命令可以只指定时间，也可以时
间和日期一起指定。需要注意的是，指定时间有个系统判别问题。比如说：用户现在指定了一个执行时间：凌晨3:20，而发出at命令的时间是头天晚上的
20:00，那么究竟是在哪一天执行该命令呢？如果用户在3:20以前仍然在工作，那么该命令将在这个时候完成；如果用户3:20以前就退出了工作状态，
那么该命令将在第二天凌晨才得到执行。下面是at命令的语法格式：<br>
<br>
at ［-V］ ［-q 队列］ ［-f 文件名］ ［-mldbv］ 时间<br>
<br>
at -c 作业 ［作业...］<br>
<br>
at允许使用一套相当复杂的指定时间的方法，实际上是将POSIX.2标准扩展了。它可以接受在当天的hh:mm（小时:分钟）式的时间指定。如果该时间
已经过去，那么就放在第二天执行。当然也可以使用midnight（深夜），noon（中午），teatime（饮茶时间，一般是下午4点）等比较模糊的
词语来指定时间。用户还可以采用12小时计时制，即在时间后面加上AM（上午）或者PM（下午）来说明是上午还是下午。<br>
<br>
也可以指定命令执行的具体日期，指定格式为month day（月 日）或者mm/dd/yy（月/日/年）或者dd.mm.yy（日.月.年）。指定的日期必须跟在指定时间的后面。<br>
<br>
上面介绍的都是绝对计时法，其实还可以使用相对计时法，这对于安排不久就要执行的命令是很有好处的。指定格式为：now + count
time-units ，now就是当前时间，time-units是时间单位，这里可以是
minutes（分钟）、hours（小时）、days（天）、weeks（星期）。count是时间的数量，究竟是几天，还是几小时，等等。<br>
<br>
还有一种计时方法就是直接使用today（今天）、tomorrow（明天）来指定完成命令的时间。下面通过一些例子来说明具体用法。<br>
<br>
［例2］ 指定在今天下午5:30执行某命令。假设现在时间是中午12:30，1999年2月24日，其命令格式如下：<br>
<br>
at 5:30pm<br>
<br>
at 17:30<br>
<br>
at 17:30 today<br>
<br>
at now + 5 hours<br>
<br>
at now + 300 minutes<br>
<br>
at 17:30 24.2.99<br>
<br>
at 17:30 2/24/99<br>
<br>
at 17:30 Feb 24<br>
<br>
　<br>
<br>
以上这些命令表达的意义是完全一样的，所以在安排时间的时候完全可以根据个人喜好和具体情况自由选择。一般采用绝对时间的24小时计时法可以避免由于用户自己的疏忽造成计时错误的情况发生，例如上例可以写成：<br>
<br>
at 17:30 2/24/99<br>
<br>
这样非常清楚，而且别人也看得懂。<br>
<br>
对于at命令来说，需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。如果at命令是从一个使用su命令切换到用户shell中
执行的，那么当前用户被认为是执行用户，所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话，收到邮件的将是原来的用户，也就是登录时
shell的所有者。<br>
<br>
［例3］<br>
<br>
$ at -f work 4pm + 3 days<br>
<br>
在三天后下午4点执行文件work中的作业。<br>
<br>
$ at -f work 10am Jul 31<br>
<br>
在7月31日上午10点执行文件work中的作业。<br>
<br>
在任何情况下，超级用户都可以使用这个命令。对于其他用户来说，是否可以使用就取决于两个文件：/etc/at.allow和/etc/at.deny。
如果/etc/at.allow文件存在的话，那么只有在其中列出的用户才可以使用at命令；如果该文件不存在，那么将检查/etc/at.deny文件
是否存在，在这个文件中列出的用户均不能使用该命令。如果两个文件都不存在，那么只有超级用户可以使用该命令；空的/etc/at.deny文件意味着所
有的用户都可以使用该命令，这也是默认状态。<br>
<br>
下面对命令中的参数进行说明。<br>
<br>
-V 将标准版本号打印到标准错误中。<br>
<br>
-q queue 使用指定的队列。队列名称是由单个字母组成，合法的队列名可以由a-z或者A-Z。a队列是at命令的默认队列。<br>
<br>
-m 作业结束后发送邮件给执行at命令的用户。<br>
<br>
-f file 使用该选项将使命令从指定的file读取，而不是从标准输入读取。<br>
<br>
-l atq命令的一个别名。该命令用于查看安排的作业序列，它将列出用户排在队列中的作业，如果是超级用户，则列出队列中的所有工作。<br>
<br>
命令的语法格式如下:<br>
<br>
atq ［-V］ ［-q 队列］ ［-v］<br>
<br>
-d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列，语法格式如下：<br>
<br>
atrm ［-V］ 作业 ［作业...］<br>
<br>
-c 将命令行上所列的作业送到标准输出。<br>
<br>
［例4］ 找出系统中所有以txt为后缀名的文件，并且进行打印。打印结束后给用户foxy发出邮件通知取件。指定时间为十二月二十五日凌晨两点。<br>
<br>
首先键入：<br>
<br>
$ at 2:00 12/25/99<br>
<br>
然后系统出现at&gt;提示符，等待用户输入进一步的信息，也就是需要执行的命令序列：<br>
<br>
at&gt; find / -name “*.txt”|lpr<br>
<br>
at&gt; echo “foxy：All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy<br>
<br>
输入完每一行指令然后回车，所有指令序列输入完毕后，使用&lt;Ctrl+d&gt;组合键结束at命令的输入。这时候屏幕将出现如下信息：<br>
<br>
warning:command will be executed using /bin/sh.<br>
<br>
job 1 at 1999-12-25 02:00<br>
<br>
提醒用户将使用哪个shell来执行该命令序列。<br>
<br>
实际上如果命令序列较长或者经常被执行的时候，一般都采用将该序列写到一个文件中，然后将文件作为at命令的输入来处理。这样不容易出错。<br>
<br>
　<br>
<br>
［例5］ 上面的例子可以修改如下：<br>
<br>
将命令序列写入到文件/tmp/printjob，语句为：<br>
<br>
$ at -f /tmp/printjob 2:00 12/25/99<br>
<br>
这样一来，at命令将使用文件中的命令序列，屏幕显示如下：<br>
<br>
Warning:command will be executed using /bin/sh.<br>
<br>
job 2 at 1999-12-25 02:00<br>
<br>
当然也可以采用以下命令：<br>
<br>
$ at&lt; /tmp/printjob 2:00 12/25/99<br>
<br>
来完成同样的任务。也就是使用输入重定向的办法将文件定向为命令输入。<br>
<br>
batch命令<br>
<br>
batch 用低优先级运行作业，该命令几乎和at命令的功能完全相同，唯一的区别在于，at命令是在指定时间，很精确的时刻执行指定命令；而batch却是在系统负载较低，资源比较空闲的时候执行命令。该命令适合于执行占用资源较多的命令。<br>
<br>
batch命令的语法格式也和at命令十分相似，即<br>
<br>
batch ［-V］ ［-q 队列］ ［-f 文件名］ ［-mv］ ［时间］<br>
<br>
具体的参数解释请参考at命令。一般地说，不用为batch命令指定时间参数，因为batch本身的特点就是由系统决定执行任务的时间，如果用户再指定一个时间，就失去了本来的意义。<br>
<br>
［例6］ 使用例4，键入：<br>
<br>
$ batch<br>
<br>
at&gt; find / -name *.txt|lpr<br>
<br>
at&gt; echo “foxy：All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy<br>
<br>
现在这个命令就会在合适的时间进行了，进行完后会发回一个信息。<br>
<br>
仍然使用&lt;Ctrl+d&gt;组合键来结束命令输入。而且batch和at命令都将自动转入后台，所以启动的时候也不需要加上&amp;符号。<br>
<br>
cron命令<br>
<br>
前面介绍的两条命令都会在一定时间内完成一定任务，但是要注意它们都只能执行一次。也就是说，当指定了运行命令后，系统在指定时间完成任务，一切就结束
了。但是在很多时候需要不断重复一些命令，比如：某公司每周一自动向员工报告头一周公司的活动情况，这时候就需要使用cron命令来完成任务了。<br>
<br>
实际上，cron命令是不应该手工启动的。cron命令在系统启动时就由一个shell脚本自动启动，进入后台（所以不需要使用&amp;符号）。一般的用户没有运行该命令的权限，虽然超级用户可以手工启动cron，不过还是建议将其放到shell脚本中由系统自行启动。<br>
<br>
首先cron命令会搜索/var/spool/cron目录，寻找以/etc/passwd文件中的用户名命名的crontab文件，被找到的这种文件将
载入内存。例如一个用户名为foxy的用户，它所对应的crontab文件就应该是/var/spool/cron/foxy。也就是说，以该用户命名的
crontab文件存放在/var/spool/cron目录下面。cron命令还将搜索/etc/crontab文件，这个文件是用不同的格式写成的。<br>
<br>
cron启动以后，它将首先检查是否有用户设置了crontab文件，如果没有就转入“休眠”状态，释放系统资源。所以该后台进程占用资源极少。它每分钟
“醒”过来一次，查看当前是否有需要运行的命令。命令执行结束后，任何输出都将作为邮件发送给crontab的所有者，或者是/etc/crontab文
件中MAILTO环境变量中指定的用户。<br>
<br>
上面简单介绍了一些cron的工作原理，但是cron命令的执行不需要用户干涉；需要用户修改的是crontab中要执行的命令序列，所以下面介绍crontab命令。<br>
<br>
crontab命令<br>
<br>
crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。也就是说，用户把需要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件。下面就来看看如何创建一个crontab文件。<br>
<br>
在/var/spool/cron下的crontab文件不可以直接创建或者直接修改。crontab文件是通过crontab命令得到的。现在假设有个
用户名为foxy，需要创建自己的一个crontab文件。首先可以使用任何文本编辑器建立一个新文件，然后向其中写入需要运行的命令和要定期执行的时
间。<br>
<br>
然后存盘退出。假设该文件为/tmp/test.cron。再后就是使用crontab命令来安装这个文件，使之成为该用户的crontab文件。键入：<br>
<br>
crontab test.cron<br>
<br>
这样一个crontab 文件就建立好了。可以转到/var/spool/cron目录下面查看，发现多了一个foxy文件。这个文件就是所需的crontab 文件。用more命令查看该文件的内容可以发现文件头有三行信息：<br>
<br>
#DO NOT EDIT THIS FILE -edit the master and reinstall.<br>
<br>
#（test.cron installed on Mon Feb 22 14:20:20 1999）<br>
<br>
#（cron version --$Id:crontab.c，v 2.13 1994/01/17 03:20:37 vivie Exp $）<br>
<br>
大概意思是：<br>
<br>
#切勿编辑此文件——如果需要改变请编辑源文件然后重新安装。<br>
<br>
#test.cron文件安装时间：14:20:20 02/22/1999<br>
<br>
如果需要改变其中的命令内容时，还是需要重新编辑原来的文件，然后再使用crontab命令安装。<br>
<br>
可以使用crontab命令的用户是有限制的。如果/etc/cron.allow文件存在，那么只有其中列出的用户才能使用该命令；如果该文件不存在但
cron.deny文件存在，那么只有未列在该文件中的用户才能使用crontab命令；如果两个文件都不存在，那就取决于一些参数的设置，可能是只允许
超级用户使用该命令，也可能是所有用户都可以使用该命令。<br>
<br>
crontab命令的语法格式如下：<br>
<br>
crontab ［-u user］ file<br>
<br>
crontab ［-u user］{-l|-r|-e}<br>
<br>
　<br>
<br>
第一种格式用于安装一个新的crontab 文件，安装来源就是file所指的文件，如果使用“-”符号作为文件名，那就意味着使用标准输入作为安装来源。<br>
<br>
-u 如果使用该选项，也就是指定了是哪个具体用户的crontab 文件将被修改。如果不指定该选项，crontab
将默认是操作者本人的crontab ，也就是执行该crontab 命令的用户的crontab
文件将被修改。但是请注意，如果使用了su命令再使用crontab
命令很可能就会出现混乱的情况。所以如果是使用了su命令，最好使用-u选项来指定究竟是哪个用户的crontab文件。<br>
<br>
-l 在标准输出上显示当前的crontab。<br>
<br>
-r 删除当前的crontab文件。<br>
<br>
-e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时，编辑后的文件将自动安装。<br>
<br>
［例7］<br>
<br>
# crontab -l #列出用户目前的crontab。<br>
<br>
10 6 * * * date<br>
<br>
0 */2 * * * date<br>
<br>
0 23-7/2，8 * * * date<br>
<br>
#<br>
<br>
在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域，其中前五个域是指定命令被执行的时间，最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下：<br>
<br>
minute hour day-of-month month-of-year day-of-week commands<br>
<br>
第一项是分钟，第二项是小时，第三项是一个月的第几天，第四项是一年的第几个月，第五项是一周的星期几，第六项是要执行的命令。这些项都不能为空，必须填
入。如果用户不需要指定其中的几项，那么可以使用*代替。因为*是统配符，可以代替任何字符，所以就可以认为是任何时间，也就是该项被忽略了。在表4-1
中给出了每项的合法范围。<br>
<br>
　<br>
<br>
表4-1　指定时间的合法范围<br>
<br>
时间<br>
<br>
合法值<br>
<br>
minute<br>
<br>
00-59<br>
<br>
hour<br>
<br>
00-23，其中00点就是晚上12点<br>
<br>
day-of-month<br>
<br>
01-31<br>
<br>
month-of-year<br>
<br>
01-12<br>
<br>
day-of-week<br>
<br>
0-6，其中周日是0<br>
<br>
　<br>
<br>
这样用户就可以往crontab 文件中写入无限多的行以完成无限多的命令。命令域中可以写入所有可以在命令行写入的命令和符号，其他所有时间域都支持列举，也就是域中可以写入很多的时间值，只要满足这些时间值中的任何一个都执行命令，每两个时间值中间使用逗号分隔。<br>
<br>
［例8］<br>
<br>
5，15，25，35，45，55 16，17，18 * * * command<br>
<br>
这就是表示任意天任意月，其实就是每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。<br>
<br>
［例9］ 在每周一，三，五的下午3：00系统进入维护状态，重新启动系统。那么在crontab 文件中就应该写入如下字段：<br>
<br>
00 15 * * 1，3，5 shutdown -r +5<br>
<br>
然后将该文件存盘为foxy.cron，再键入crontab foxy.cron安装该文件。<br>
<br>
［例10］ 每小时的10分，40分执行用户目录下的innd/bbslin这个指令：<br>
<br>
10，40 * * * * innd/bbslink<br>
<br>
［例11］ 每小时的1分执行用户目录下的bin/account这个指令：<br>
<br>
1 * * * * bin/account<br>
<br>
［例12］ 每天早晨三点二十分执行用户目录下如下所示的两个指令（每个指令以;分隔）：<br>
<br>
20 3 * * * （/bin/rm -f expire.ls logins.bad;bin/expire&gt;expire.1st）<br>
<br>
［例13］ 每年的一月和四月，4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令，并把结果添加在mm.txt这个文件之后（mm.txt文件位于用户自己的目录位置）。<br>
<br>
12,55 3 4-9 1,4 * /bin/rm -f expire.1st&gt;&gt;mm.txt<br>
<br>
［例14］ 我们来看一个超级用户的crontab文件：<br>
<br>
#Run the ‘atrun’ program every minutes<br>
<br>
#This runs anything that’s due to run from ‘at’.See man ‘at’ or ‘atrun’.<br>
<br>
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun<br>
<br>
40 7 * * * updatedb<br>
<br>
8,10,22,30,39,46,54,58 * * * * /bin/sync<br>
<br>
进程的挂起及恢复命令bg、fg<br>
<br>
作业控制允许将进程挂起并可以在需要时恢复进程的运行，被挂起的作业恢复后将从中止处开始继续运行。只要在键盘上按&lt;ctrl+z&gt;，即可挂起当前的前台作业。<br>
<br>
［例15］<br>
<br>
$ cat &gt; text.file<br>
<br>
&lt;ctrl+z&gt;<br>
<br>
［1］ + stopped cat &gt; text.file<br>
<br>
$ jobs<br>
<br>
［1］+ stopped cat &gt; text.file<br>
<br>
在键盘上按&lt;ctrl+z&gt;后，将挂起当前执行的命令cat。使用jobs命令可以显示shell的作业清单，包括具体的作业、作业号以及作业当前所处的状态。<br>
<br>
恢复进程执行时，有两种选择：用fg命令将挂起的作业放回到前台执行；用bg命令将挂起的作业放到后台执行。<br>
<br>
［例16］
用户正在使用Emacs，突然需要查看系统进程情况。就首先使用&lt;Ctrl+z&gt;组合键将Emacs进程挂起，然后使用bg命令将其在后台启
动，这样就得到了前台的操作控制权，接着键入“ps –x”查看进程情况。查看完毕后，使用fg命令将Emacs带回前台运行即可。其命令格式为：<br>
<br>
&lt;Ctrl+z&gt;<br>
<br>
$ bg emacs<br>
<br>
$ ps –x<br>
<br>
$ fg emacs<br>
<br>
默认情况下，fg和bg命令对最近停止的作业进行操作。如果希望恢复其他作业的运行，可以在命令中指定要恢复作业的作业号来恢复该作业。例如：<br>
<br>
$ fg 1<br>
<br>
cat &gt; text.file<br>
<br>
灵活使用上述命令，将给自己带来很大的方便。</div>

		<!-- / message -->
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:03 <a href="http://www.cnitblog.com/ygb/articles/5487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程查看[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5486.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:01:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5486.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5486.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5486.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5486.html</trackback:ping><description><![CDATA[本节中要介绍的不只是进程查看方面的内容，由于Linux是个多用户系统，有时候也要了解其他用户现在在干什么，所以在本节中还将接触多用户方面的内容。
同时Linux是一个多进程系统，经常需要对这些进程进行一些调配和管理；而要进行管理，首先就要知道现在的进程情况：究竟有哪些进程？进程情况如何？等
等。所以需要进程查看方面的工作。<br>

<br>

who命令<br>

<br>

该命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即时通讯，比如使用talk命令，那么首先要确定的就是该用户确实
在线上，不然talk进程就无法建立起来。又如，系统管理员希望监视每个登录的用户此时此刻的所作所为，也要使用who命令。<br>

<br>

who命令的常用语法格式如下：<br>

<br>

who ［imqsuwHT］ ［--count］ ［--idle］ ［--heading］ ［--help］ ［--message］ ［--mesg］ ［--version］ ［--writable］ ［file］ ［am i］<br>

<br>

所有的选项都是可选的，也就是说可以单独使用who命令。不使用任何选项时，who命令将显示以下三项内容：<br>

<br>

login name：登录用户名；<br>

<br>

terminal line：使用终端设备；<br>

<br>

login time：登录到系统的时间。<br>

<br>

如果给出的是两个非选项参数，那么who命令将只显示运行who程序的用户名、登录终端和登录时间。通常这两个参数是“am i”，即该命令格式为：“who am i”。<br>

<br>

下面对who命令的常用参数进行说明。<br>

<br>

-m 和“who am i”的作用一样，显示运行该程序的用户名。<br>

<br>

-q，--count 只显示用户的登录帐号和登录用户的数量，该选项优先级高于其他任何选项。<br>

<br>

-s 忽略。主要是用于和其他版本的who命令兼容。<br>

<br>

-i，-u，--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间，也就是常说的“发呆”时间。其中“.”符号代表该用户在前1秒仍然处于活动状态；“old”则表示该用户空闲已经超过了24小时。<br>

<br>

-H，--heading 显示一行列标题。常用的标题如表4-2所示。<br>

<br>

表4-2　who命令输出常用标题<br>

<br>

标 题<br>

<br>

说 明<br>

<br>

USER<br>

<br>

用户登录帐号<br>

<br>

LINE<br>

<br>

用户登录使用终端<br>

<br>

LOGIN-TIME<br>

<br>

用户登录时间<br>

<br>

IDLE<br>

<br>

用户空闲时间，即未进行操作的时间<br>

<br>

PID<br>

<br>

用户登录shell的进程ID<br>

<br>

FROM<br>

<br>

用户网络地址<br>

<br>

　<br>

<br>

-w，-T--mesg，--message，--writable 和-s选项一样，在登录帐号后面显示一个字符来表示用户的信息状态：<br>

<br>

+：允许写信息；<br>

<br>

-：不允许写信息；<br>

<br>

?：不能找到终端设备。<br>

<br>

--help 在标准输出上显示帮助信息。<br>

<br>

--version 在标准输出上显示版本信息。<br>

<br>

下面介绍who命令的一些基本用法。<br>

<br>

如果需要查看在系统上究竟有哪些用户，可以直接使用who命令。<br>

<br>

［例17］ 查看登录到系统的用户情况<br>

<br>

$ who<br>

<br>

root tty1 Mar 17 13:49<br>

<br>

foxy tty2 Mar 17 13:49<br>

<br>

root tty3 Mar 17 13:49<br>

<br>

bbs ttyp0 Mar 17 13:49 （river.net）<br>

<br>

可以看到，现在系统一共有四个用户。第一列是登录用户的帐号；第二列是登录所使用的终端；第三列是登录时间；第四列是用户从什么地方登录的网络地址，这里是域名。<br>

<br>

一般来说，这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观，因为没有标题说明，不容易看懂，这时就需要使用-H选项了。<br>

<br>

［例18］ 查看登录用户的详细情况，键入：<br>

<br>

$ who -uH<br>

<br>

显示如下：<br>

<br>

USER LINE LOGIN-TIME IDLE FROM<br>

<br>

root tty1 Mar 17 13:49 .<br>

<br>

foxy tty2 Mar 17 13:49 00:01<br>

<br>

root tty3 Mar 17 13:49 00:01<br>

<br>

bbs ttyp0 Mar 17 13:49 00:01 （river.net）<br>

<br>

这样一目了然。其中-u选项指定显示用户空闲时间，所以可以看到多了一项IDLE。第一个root用户的IDLE项是一个“.”，这就说明该用户在前1秒仍然是活动的，而其他用户后面都有一个时间，称为空闲时间。<br>

<br>

最后来看看使用“who am i”格式命令的结果：<br>

<br>

233.river.net!root tty1 Mar 17 13:49<br>

<br>

可见只显示出了运行该who命令的用户情况，当然这时候不存在空闲时间。<br>

<br>

who命令应用起来非常简单，可以比较准确地掌握用户的情况，所以使用非常广泛。<br>

<br>

w命令<br>

<br>

该命令也用于显示登录到系统的用户情况，但是与who不同的是，w命令功能更加强大，它不但可以显示有谁登录到系统，还可以显示出这些用户当前正在进行的工作，并且统计数据相对who命令来说更加详细和科学，可以认为w命令就是who命令的一个增强版。<br>

<br>

w命令的显示项目按以下顺序排列：当前时间，系统启动到现在的时间，登录用户的数目，系统在最近1秒、5秒和15秒的平均负载。然后是每个用户的各项数
据，项目显示顺序如下：登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。<br>

<br>

其中JCPU时间指的是和该终端（tty）连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间，但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程（即在WHAT项中显示的进程）所占用的时间。下面介绍该命令的具体用法和参数。<br>

<br>

语法格式如下：<br>

<br>

w -［husfV］ ［user］<br>

<br>

下面对参数进行说明：<br>

<br>

-h 不显示标题。<br>

<br>

-u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。<br>

<br>

-s 使用短模式。不显示登录时间、JCPU和PCPU时间。<br>

<br>

-f 切换显示FROM项，也就是远程主机名项。默认值是不显示远程主机名，当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。<br>

<br>

-V 显示版本信息。<br>

<br>

User 只显示指定用户的相关情况。<br>

<br>

［例19］ 显示当前登录到系统的用户的详细情况<br>

<br>

$ w<br>

<br>

2:50pm up 2 min， 4 users， load average:0.22，0.16，0.06<br>

<br>

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT<br>

<br>

root tty1 2:49pm 0:00s 0.56s 0.10s w<br>

<br>

foxy tty2 2:49pm 1:09 0.42s 0.42s bash<br>

<br>

root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3<br>

<br>

bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net<br>

<br>

ps命令<br>

<br>

1. ps简介<br>

<br>

前面介绍的两个命令都是用于查看当前系统用户的情况，下面就来看看进程的情况，这也是本章的主题。要对进程进行监测和控制，首先必须要了解当前进程的情
况，也就是需要查看当前进程，而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、
进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。<br>

<br>

2. ps命令及其参数<br>

<br>

ps命令最常用的还是用于监控后台进程的工作情况，因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的，所以如果需要检测其情况，便可以使用ps命令了。<br>

<br>

该命令语法格式如下：<br>

<br>

ps ［选项］<br>

<br>

下面对命令选项进行说明：<br>

<br>

-e 显示所有进程。<br>

<br>

-f 全格式。<br>

<br>

-h 不显示标题。<br>

<br>

-l 长格式。<br>

<br>

-w 宽输出。<br>

<br>

a 显示终端上的所有进程，包括其他用户的进程。<br>

<br>

r 只显示正在运行的进程。<br>

<br>

x 显示没有控制终端的进程。<br>

<br>

O［+|-］ k1 ［，［+|-］ k2 ［，…］］ 根据SHORT
KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中
“+”字符是可选的，“-”字符是倒转指定键的方向。<br>

<br>

pids 只列出指定进程的情况。各进程ID之间使用逗号分隔。该进程列表必须在命令行参数的最后一个选项后面紧接着给出，中间不能插入空格。比如：ps -f1,4,5。<br>

<br>

以下介绍长命令行选项，这些选项都使用“--”开头：<br>

<br>

--sort X［+|-］ key ［，［+|-］ key ［，…］］ 从SORT KEYS段中选一个多字母键。“+”字符是可选的，因为默认的方向就是按数字升序或者词典顺序。比如： ps -jax -sort=uid，-ppid，+pid。<br>

<br>

--help 显示帮助信息。<br>

<br>

--version 显示该命令的版本信息。<br>

<br>

在前面的选项说明中提到了排序键，接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值，并非仅用于某些输出格式的伪值。排序键列表见表4-3。<br>

<br>

表4-3　排序键列表<br>

<br>

短格式<br>

<br>

长格式<br>

<br>

说 明<br>

<br>

c<br>

<br>

cmd<br>

<br>

可执行的简单名称<br>

<br>

C<br>

<br>

cmdline<br>

<br>

完整命令行<br>

<br>

f<br>

<br>

flags<br>

<br>

长模式标志<br>

<br>

g<br>

<br>

pgrp<br>

<br>

进程的组ID<br>

<br>

G<br>

<br>

tpgid<br>

<br>

控制tty进程组ID<br>

<br>

j<br>

<br>

cutime<br>

<br>

累计用户时间<br>

<br>

J<br>

<br>

cstime<br>

<br>

累计系统时间<br>

<br>

k<br>

<br>

utime<br>

<br>

用户时间<br>

<br>

K<br>

<br>

stime<br>

<br>

系统时间<br>

<br>

m<br>

<br>

min_flt<br>

<br>

次要页错误的数量<br>

<br>

M<br>

<br>

maj_flt<br>

<br>

主要页错误的数量<br>

<br>

n<br>

<br>

cmin_flt<br>

<br>

累计次要页错误<br>

<br>

N<br>

<br>

cmaj_flt<br>

<br>

累计主要页错误<br>

<br>

o<br>

<br>

session<br>

<br>

对话ID<br>

<br>

p<br>

<br>

pid<br>

<br>

进程ID<br>

<br>

P<br>

<br>

ppid<br>

<br>

父进程ID<br>

<br>

r<br>

<br>

rss<br>

<br>

驻留大小<br>

<br>

R<br>

<br>

resident<br>

<br>

驻留页<br>

<br>

s<br>

<br>

size<br>

<br>

内存大小（千字节）<br>

<br>

S<br>

<br>

share<br>

<br>

共享页的数量<br>

<br>

t<br>

<br>

tty<br>

<br>

tty次要设备号<br>

<br>

T<br>

<br>

start_time<br>

<br>

进程启动的时间<br>

<br>

U<br>

<br>

uid<br>

<br>

UID<br>

<br>

u<br>

<br>

user<br>

<br>

用户名<br>

<br>

v<br>

<br>

vsize<br>

<br>

总的虚拟内存数量（字节）<br>

<br>

y<br>

<br>

priority<br>

<br>

内核调度优先级<br>

<br>

3. 常用ps命令参数<br>

<br>

前面两节介绍的参数可能让读者觉得有些可怕，实际上这是一个非常容易使用的命令，一般的用户只需掌握一些最常用的命令参数就可以了。<br>

<br>

最常用的三个参数是u、a、x，下面将通过例子来说明其具体用法。<br>

<br>

［例20］ 以root身份登录系统，查看当前进程状况<br>

<br>

$ ps<br>

<br>

PID TTY TIME COMMAND<br>

<br>

5800 ttyp0 00:00:00 bash<br>

<br>

5835 ttyp0 00:00:00 ps<br>

<br>

可以看到，显示的项目共分为四项，依次为PID（进程ID）、TTY（终端名称）、TIME（进程执行时间）、COMMAND（该进程的命令行输入）。<br>

<br>

可以使用u选项来查看进程所有者及其他一些详细信息，如下所示：<br>

<br>

$ ps u<br>

<br>

USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND<br>

<br>

test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash<br>

<br>

test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u<br>

<br>

在bash进程前面有条横线，意味着该进程便是用户的登录shell，所以对于一个登录用户来说带短横线的进程只有一个。还可以看到%CPU、%MEM两个选项，前者指该进程占用的CPU时间和总时间的百分比；后者指该进程占用的内存和总内存的百分比。<br>

<br>

在这种情况下看到了所有控制终端的进程；但是对于其他那些没有控制终端的进程还是没有观察到，所以这时就需要使用x选项。使用x选项可以观察到所有的进程情况。<br>

<br>

［例21］ 下面是使用x选项的例子：<br>

<br>

$ ps x<br>

<br>

PID TTY STAT TIME COMMAND<br>

<br>

5800 ttyp0 S 0:00 -bash<br>

<br>

5813 ttyp1 S 0:00 -bash<br>

<br>

5921 ttyp0 S 0:00 man ps<br>

<br>

5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz | /<br>

<br>

5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz<br>

<br>

5924 ttyp0 S 0:00 /usr/bin/less -is<br>

<br>

5941 ttyp1 R 0:00 ps x<br>

<br>

可以发现突然一下子就多出了那么多的进程。这些多出来的进程就是没有控制终端的进程。<br>

<br>

前面看到的所有进程都是test用户自己的。其实还有许多其他用户在使用着系统，自然也就对应着其他的很多进程。如果想对这些进程有所了解，可以使用a选项来查看当前系统所有用户的所有进程。经常使用的是aux组合选项，这可以显示最详细的进程情况。<br>

<br>

　<br>

<br>

［例22］<br>

<br>

$ ps aux<br>

<br>

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND<br>

<br>

root 1 0.0 0.0 1136 64 ? S Nov25 0:02 init ［3］<br>

<br>

root 2 0.0 0.0 0 0 ? SW Nov25 0:00 ［kflushd］<br>

<br>

root 3 0.0 0.0 0 0 ? SW Nov25 0:03 ［kupdate］<br>

<br>

root 4 0.0 0.0 0 0 ? SW Nov25 0:00 ［kpiod］<br>

<br>

root 5 0.0 0.0 0 0 ? SW Nov25 0:00 ［kswapd］<br>

<br>

root 163 0.0 0.1 1628 332 ? S Nov25 0:02 sshd<br>

<br>

root 173 0.0 0.0 1324 200 ? S Nov25 0:00 syslogd<br>

<br>

root 181 0.0 0.0 1420 0 ? SW Nov25 0:00 ［klogd］<br>

<br>

daemon 191 0.0 0.1 1160 312 ? S Nov25 0:00 /usr/sbin/atd<br>

<br>

root 201 0.0 0.1 1348 492 ? S Nov25 0:00 crond<br>

<br>

root 212 0.0 0.0 1292 68 ? S Nov25 0:00 inetd<br>

<br>

……<br>

<br>

在显示的最前面是其他用户的进程情况，可以看到有root、daemon等用户以及他们所启动的进程。<br>

<br>

在上面的例子中，介绍了ps命令最常见的一些选项和选项组合，用户可以根据自己的需要选用。<br>

<br>

top命令<br>

<br>

top命令和ps命令的基本作用是相同的，显示系统当前的进程和其他状况；但是top是一个动态显示过程，即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令，它将独占前台，直到用户终止该程序为止。<br>

<br>

比较准确的说，top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间
对任务进行排序；而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。<br>

<br>

下面是该命令的语法格式：<br>

<br>

top ［-］ ［d delay］ ［q］ ［c］ ［s］ ［S］ ［i］<br>

<br>

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。<br>

<br>

q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限，那么top将以尽可能高的优先级运行。<br>

<br>

S 指定累计模式。<br>

<br>

s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。<br>

<br>

i 使top不显示任何闲置或者僵死进程。<br>

<br>

c 显示整个命令行而不只是显示命令名<br>

<br>

top命令显示的项目很多，默认值是每5秒更新一次，当然这是可以设置的。显示的各项目为：<br>

<br>

uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值（最近1秒，5秒，15秒的负载值）。<br>

<br>

processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的，休眠的，停止的等很多种类。进程和状态显示可以通过交互命令t来实现。<br>

<br>

CPU states 显示用户模式，系统模式，优先级进程（只有优先级为负的列入考虑）和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中，所以总的百分比将大于100%。<br>

<br>

Mem 内存使用情况统计，其中包括总的可用内存，空闲内存，已用内存，共享内存和缓存所占内存的情况。<br>

<br>

Swap 交换空间统计，其中包括总的交换空间，可用交换空间，已用交换空间。<br>

<br>

PID 每个进程的ID。<br>

<br>

PPID 每个进程的父进程ID。<br>

<br>

UID 每个进程所有者的UID 。<br>

<br>

USER 每个进程所有者的用户名。<br>

<br>

PRI 每个进程的优先级别。<br>

<br>

NI 该进程的优先级值。<br>

<br>

SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。<br>

<br>

TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。<br>

<br>

DSIZE 数据和堆栈的大小。<br>

<br>

TRS 文本驻留大小。<br>

<br>

D 被标记为“不干净”的页项目。<br>

<br>

LIB 使用的库页的大小。对于ELF进程没有作用。<br>

<br>

RSS 该进程占用的物理内存的总数量，单位是KB。<br>

<br>

SHARE 该进程使用共享内存的数量。<br>

<br>

STAT 该进程的状态。其中S代表休眠状态；D代表不可中断的休眠状态；R代表运行状态；Z代表僵死状态；T代表停止或跟踪状态。<br>

<br>

TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式，那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。<br>

<br>

%CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。<br>

<br>

%MEM 该进程占用的物理内存占总内存的百分比。<br>

<br>

COMMAND 该进程的命令名称，如果一行显示不下，则会进行截取。内存中的进程会有一个完整的命令行。<br>

<br>

下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看，熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的，如果在命令行选项中使用了s选项，则可能其中一些命令会被屏蔽掉。<br>

<br>

&lt;空格&gt; 立即刷新显示。<br>

<br>

Ctrl+L 擦除并且重写屏幕。<br>

<br>

h或者? 显示帮助画面，给出一些简短的命令总结说明。<br>

<br>

k 终止一个进程。系统将提示用户输入需要终止的进程PID，以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号；如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。<br>

<br>

i 忽略闲置和僵死进程。这是一个开关式命令。<br>

<br>

q 退出程序。<br>

<br>

r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低，反之则可以使该进程拥有更高的优先权。默认值是10。<br>

<br>

S 切换到累计模式。<br>

<br>

s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间，单位为s。如果有小数，就换算成m s。输入0值则系统将不断刷新，默认值是5 s。需要注意的是如果设置太小的时间，很可能会引起不断刷新，从而根本来不及看清显示的情况，而且系统负载也会大大增加。<br>

<br>

f或者F 从当前显示中添加或者删除项目。<br>

<br>

o或者O 改变显示项目的顺序。<br>

<br>

l 切换显示平均负载和启动时间信息。<br>

<br>

m 切换显示内存信息。<br>

<br>

t 切换显示进程和CPU状态信息。<br>

<br>

c 切换显示命令名称和完整命令行。<br>

<br>

M 根据驻留内存大小进行排序。<br>

<br>

P 根据CPU使用百分比大小进行排序。<br>

<br>

T 根据时间/累计时间进行排序。<br>

<br>

W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。<br>

<br>

从上面的介绍中可以看到，top命令是一个功能十分强大的监控系统的工具，尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了，但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。<br>

<br>

　<br>

<br>

［例23］ 键入top命令查看系统状况<br>

<br>

$ top<br>

<br>

1：55pm up 7 min， 4 user， load average:0.07，0.09，0.06<br>

<br>

29 processes:28 sleeping， 1 running， 0 zombie， 0 stopped<br>

<br>

CPU states: 4.5% user， 3.6% system， 0.0% nice， 91.9% idle<br>

<br>

Mem: 38916K av， 18564K used， 20352K free， 11660K shrd， 1220K buff<br>

<br>

Swap: 33228K av， 0K used， 33228K free， 11820K cached<br>

<br>

PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND<br>

<br>

363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top<br>

<br>

1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init<br>

<br>

2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd<br>

<br>

3 root -12 -12 0 0 0 SW&lt; 0 0.0 0.0 0:00 kswapd<br>

<br>

4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread<br>

<br>

5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread<br>

<br>

312 root 1 0 636 636 488 S 0 0.0 1.6 0:00 telnet<br>

<br>

285 root 6 0 1140 1140 804 S 0 0.0 2.9 0.00 bash<br>

<br>

286 root 0 0 1048 1048 792 S 0 0.0 2.6 0.00 bash<br>

<br>

25 root 0 0 364 364 312 S 0 0.0 0.9 0.00 kerneld<br>

<br>

153 root 0 0 456 456 372 S 0 0.0 1.1 0.00 syslogd<br>

<br>

160 root 0 0 552 552 344 S 0 0.0 1.4 0.00 klogd<br>

<br>

169 daemon 0 0 416 416 340 S 0 0.0 1.0 0.00 atd<br>

<br>

178 root 2 0 496 496 412 S 0 0.0 1.2 0.00 crond<br>

<br>

187 bin 0 0 352 352 284 S 0 0.0 0.9 0.00 portmap<br>

<br>

232 root 0 0 500 500 412 S 0 0.0 1.2 0.00 rpc.mountd<br>

<br>

206 root 0 0 412 412 344 S 0 0.0 1.0 0.00 inetd<br>

<br>

215 root 0 0 436 436 360 S 0 0.0 1.1 0.00 icmplog<br>

<br>

第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行为进程情况，依次为进程总数、休眠进程数、运行进程数、僵死进程数、
终止进程数。第三行为CPU状态，依次为用户占用、系统占用、优先进程占用、闲置进程占用。第四行为内存状态，依次为平均可用内存、已用内存、空闲内存、
共享内存、缓存使用内存。第五行为交换状态，依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。然后下面就是和ps相仿的各进程情况列表了。<br>

<br>

总的来说，top命令的功能强于ps，但需要长久占用前台，所以用户应该根据自己的情况来使用这个命令。<br>

<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:01 <a href="http://www.cnitblog.com/ygb/articles/5486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>磁盘操作与管理[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5484.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:00:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5484.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5484.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5484.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5484.html</trackback:ping><description><![CDATA[在Linux系统中，如何有效地对存储空间加以使用和管理，是一项非常重要的技术。本章讲述如何查看系统中存储空间的使用情况、如何进行文件的转储、以及如何进行软盘的格式化。<br>

<br>

   磁盘空间管理<br>

<br>

　　系统软件和应用软件，都要以文件的形式存储在计算机的磁盘空间中。因此，应该随时监视磁盘空间的使用情况。Linux系统提供了一组有关磁盘空间管理的命令。<br>

<br>

　　df命令<br>

<br>

　　功能：检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间，目前还剩下多少空间等信息。<br>

<br>

　　语法：df ［选项］<br>

<br>

　　说明：df命令可显示所有文件系统对i节点和磁盘块的使用情况。<br>

<br>

　　该命令各个选项的含义如下：<br>

<br>

　　-a 显示所有文件系统的磁盘使用情况，包括0块（block）的文件系统，如/proc文件系统。<br>

<br>

　　-k 以k字节为单位显示。<br>

<br>

　　-i 显示i节点信息，而不是磁盘块。<br>

<br>

　　-t 显示各指定类型的文件系统的磁盘空间使用情况。<br>

<br>

　　-x 列出不是某一指定类型文件系统的磁盘空间使用情况（与t选项相反）。<br>

<br>

　　-T 显示文件系统类型。<br>

<br>

　　例1：列出各文件系统的磁盘空间使用情况。<br>

<br>

　　$ df<br>

<br>

　　Filesystem 1 K－blocks Used Available Use% Mounted on<br>

<br>

　　/dev/hda2 1361587 1246406 44823 97％ /<br>

<br>

　　df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名（一般是硬盘上的分区）；第2列给出分区包含的数据块（1024字节）的数目；第
3，4列分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是，第3，4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供
系统管理员使用。即使遇到普通用户空间已满的情况，管理员仍能登录和留有解决问题所需的工作空间。清单中Use%
列表示普通用户空间使用的百分比，即使这一数字达到100％，分区仍然留有系统管理员使用的空间。最后，Mounted on列表示文件系统的安装点。<br>

<br>

　　例2：列出各文件系统的i节点使用情况。<br>

<br>

　　$ df -ia<br>

<br>

　　Filesystem Inodes IUsed IFree Iused% Mounted on<br>

<br>

　　/dev/ hda2 352256 75043 277213 21％ /<br>

<br>

　　none 0 0 0 0％ /proc<br>

<br>

　　localhost:（pid221） 0 0 0 0％ /net<br>

<br>

　　例3：列出文件系统的类型。<br>

<br>

　　$ df -T<br>

<br>

　　Filesystem Type 1K－blocks Used Available use% Mounted on<br>

<br>

　　/dev/hda2 ext2 1361587 1246405 44824 97% /<br>

<br>

　　本例中的文件系统是ext2类型的。<br>

<br>

　　du命令<br>

<br>

　　du的英文原义为“disk usage”，含义为显示磁盘空间的使用情况。<br>

<br>

　　功能：统计目录（或文件）所占磁盘空间的大小。<br>

<br>

　　语法：du ［选项］ ［Names…］<br>

<br>

　　说明：该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块（1024字节）的情况。若没有给出Names，则对当前目录进行统计。<br>

<br>

　　该命令的各个选项含义如下：<br>

<br>

　　-s 对每个Names参数只给出占用的数据块总数。<br>

<br>

　　-a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s，也不指定-a，则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。<br>

<br>

　　-b 以字节为单位列出磁盘空间使用情况（系统缺省以k字节为单位）。<br>

<br>

　　-k 以1024字节为单位列出磁盘空间使用情况。<br>

<br>

　　-c 最后再加上一个总计（系统缺省设置）。<br>

<br>

　　-l 计算所有的文件大小，对硬链接文件，则计算多次。<br>

<br>

　　-x 跳过在不同文件系统上的目录不予统计。<br>

<br>

　　下面举例说明du命令的使用：<br>

<br>

<br>

　　例1：查看/mnt目录占用磁盘空间的情况。 $ cd /mnt $ ls -lFR total 10 -rwxrwxrwx 2 root root ll0 Ju1 3l 00:33 aa*<br>

<br>

　　drwxr-xr-x 2 root root l024 Ju1 20 14:16 dev/<br>

<br>

　　-rw-r--r-- 1 root root 6229 Aug 2 0l:39 s1ack<br>

<br>

　　drwxrwxrwx 2 root root 1024 Aug 2 02:09 var/<br>

<br>

　　1rwxrwxrwx 1 root root l0 Aug 2 0l:51 wei-&gt;/home/wei/<br>

<br>

　　dev:<br>

<br>

　　tota1 0<br>

<br>

　　lrwxrwxrwx 1 root root 8 Ju1 20 l4:l6 cdrom-&gt;/dev/hdb<br>

<br>

　　var:<br>

<br>

　　tata1 37<br>

<br>

　　-r-xr-xr-x l root root 36064 Aug 2 02:09 rawrite. exe*<br>

　<br>

<br>

　　例2：列出各目录所占的磁盘空间，但不详细列出每个文件所占的空间。<br>

<br>

　　$ du<br>

<br>

　　l ./dev<br>

<br>

　　38 ./var<br>

<br>

　　48 .<br>

<br>

　　输出清单中的第一列是以块为单位计的磁盘空间容量，第二列列出目录中使用这些空间的目录名称。<br>

<br>

　　注意不带选项的du命令将从当前目录开始沿着目录结构向下工作直到列出所有目录的容量为止。这可能是一个很长的清单，有时只需要一个总数。这时可在du命令中加-s选项来取得总数：<br>

<br>

　　$ du –s /mnt<br>

<br>

　　/mnt<br>

<br>

　　例3：列出所有文件和目录所占的空间（使用a选项），而且以字节为单位（使用b选项）来计算大小。<br>

<br>

　　$ du -ab<br>

<br>

　　8 ./dev/cdrom<br>

<br>

　　l032 ./dev<br>

<br>

　　36064 ./var/rawrite. exe<br>

<br>

　　37088 ./var<br>

<br>

　　6229 ./s1ack<br>

<br>

　　1l0 ./aa<br>

<br>

　　l0 ./wei<br>

<br>

　　45493 .<br>

<br>

　　磁 盘 操 作<br>

<br>

　　dd命令<br>

<br>

　　功能：把指定的输入文件拷贝到指定的输出文件中，并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用
dd命令把软盘上的数据写成硬盘的一个寄存文件，再把这个寄存文件写入第二张软盘上，完成diskcopy的功能。需要注意的是，应该将硬盘上的寄存文件
用rm命令删除掉。系统默认使用标准输入文件和标准输出文件。<br>

<br>

　　语法：dd ［选项］<br>

<br>

　　if =输入文件（或设备名称）。<br>

<br>

　　of =输出文件（或设备名称）。<br>

<br>

　　ibs = bytes 一次读取bytes字节，即读入缓冲区的字节数。<br>

<br>

　　skip = blocks 跳过读入缓冲区开头的ibs*blocks块。<br>

<br>

　　obs = bytes 一次写入bytes字节，即写入缓冲区的字节数。<br>

<br>

　　bs = bytes 同时设置读/写缓冲区的字节数（等于设置ibs和obs）。<br>

<br>

　　cbs = byte 一次转换bytes字节。<br>

<br>

　　count=blocks 只拷贝输入的blocks块。<br>

<br>

　　conv = ASCII 把EBCDIC码转换为ASCIl码。<br>

<br>

　　conv = ebcdic 把ASCIl码转换为EBCDIC码。<br>

<br>

　　conv = ibm 把ASCIl码转换为alternate EBCDIC码。<br>

<br>

　　conv = block 把变动位转换成固定字符。<br>

<br>

　　conv = ublock 把固定位转换成变动位。<br>

<br>

　　conv = ucase 把字母由小写转换为大写。<br>

<br>

　　conv = lcase 把字母由大写转换为小写。<br>

<br>

　　conv = notrunc 不截短输出文件。<br>

<br>

　　conv = swab 交换每一对输入字节。<br>

<br>

　　conv = noerror 出错时不停止处理。<br>

<br>

　　conv = sync 把每个输入记录的大小都调到ibs的大小（用NUL填充）。<br>

<br>

　　例1：要把一张软盘的内容拷贝到另一张软盘上，利用/tmp作为临时存储区。把源盘插入驱动器中，输入下述命令：<br>

<br>

　　$ dd if =/dev/fd0 of = /tmp/tmpfile<br>

<br>

　　拷贝完成后，将源盘从驱动器中取出，把目标盘插入，输入命令：<br>

<br>

　　$ dd if = /tmp/tmpfile of =/dev/fd0<br>

<br>

　　软盘拷贝完成后，应该将临时文件删除：<br>

<br>

　　$ rm /tmp/tmpfile<br>

<br>

　　例2：把net.i这个文件写入软盘中，并设定读/写缓冲区的数目。<br>

<br>

　　（注意：软盘中的内容会被完全覆盖掉）<br>

<br>

　　$ dd if = net.i of = /dev/fd0 bs = 16384<br>

<br>

　　例3：将文件sfile拷贝到文件 dfile中。<br>

<br>

　　$ dd if=sfile of=dfile<br>

<br>

　　fdformat 命令<br>

<br>

　　软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作，然后可以用tar、dd、cpio等命令存储数据，也可以在软盘上建立可安装的文件系统。<br>

<br>

　　功能：低级格式化软盘<br>

<br>

　　语法：format ［-n］ device<br>

<br>

　　说明：该命令的作用是对软盘进行格式化。<br>

<br>

　　-n 软盘格式化后不作检验。<br>

<br>

　　device 指定要进行格式化的设备，通常是下述设备之一：<br>

<br>

　　/dev/fd0d360<br>

<br>

　　/dev/fd0h1200<br>

<br>

　　/dev/fd0D360<br>

<br>

　　/dev/fd0H360<br>

<br>

　　/dev/fd0D720<br>

<br>

　　/dev/fd0H720<br>

<br>

　　/dev/fd0h360<br>

<br>

　　/dev/fd0h720<br>

<br>

　　/dev/fd0H1440<img src ="http://www.cnitblog.com/ygb/aggbug/5484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:00 <a href="http://www.cnitblog.com/ygb/articles/5484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程调度[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5485.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 03:00:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5485.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5485.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5485.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5485.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5485.html</trackback:ping><description><![CDATA[进程调度<br>

<br>

　　kill命令<br>

<br>

　　当需要中断一个前台进程的时候，通常是使用组合键；但是对于一个后台进程恐怕就不是一个组合键所能解决的了，这时就必须求助于kill命令。该命令可
以终止后台进程。至于终止后台进程的原因很多，或许是该进程占用的CPU时间过多；或许是该进程已经挂死。总之这种情况是经常发生的。<br>

<br>

　　kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号，那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用kill（9）信号了，该信号是不能被捕捉的。<br>

<br>

　　kill命令的语法格式很简单，大致有以下两种方式：<br>

<br>

　　kill ［-s 信号 | -p ］ ［ -a ］ 进程号 ...<br>

<br>

　　kill -l ［信号］<br>

<br>

　　-s 指定需要送出的信号。既可以是信号名也可以对应数字。<br>

<br>

　　-p 指定kill命令只是显示进程的pid，并不真正送出结束信号。<br>

<br>

　　-l 显示信号名称列表，这也可以在/usr/include/linux/signal.h文件中找到。<br>

<br>

　　kill命令的使用<br>

<br>

　　下面看看该命令的使用。<br>

<br>

　　［例24］ 在执行一条find指令时由于时间过长，决定终止该进程。<br>

<br>

　　首先应该使用ps命令来查看该进程对应的PID，键入ps，显示如下：<br>

<br>

　　PID TTY TIME COMMAND<br>

<br>

　　285 1 00:00:00 -bash<br>

<br>

　　287 3 00:00:00 -bash<br>

<br>

　　289 5 00:00:00 /sbin/mingetty tty5<br>

<br>

　　290 6 00:00:00 /sbin/mingetty tty6<br>

<br>

　　312 3 00:00:00 telnet bbs3<br>

<br>

　　341 4 00:00:00 /sbin/mingetty tty4<br>

<br>

　　345 1 00:00:00 find / -name foxy.jpg<br>

<br>

　　348 1 00:00:00 ps<br>

<br>

　　可以看到该进程对应的PID是345，现在使用kill命令来终止该进程。键入：<br>

<br>

　　# kill 345<br>

<br>

　　再用ps命令查看，就可以看到，find进程已经被杀掉了。<br>

　<br>

　　［例25］ 杀掉进程11721<br>

<br>

　　# ps<br>

<br>

　　PID TTY TIME COMMAND<br>

<br>

　　11668 p1 00:00:00 -tcsh<br>

<br>

　　11721 p1 00:00:00 cat<br>

<br>

　　11737 p1 00:00:00 ps<br>

<br>

　　# kill 11721<br>

<br>

　　［1］ Terminated cat<br>

<br>

　　#<br>

<br>

　　有时候可能会遇到这样的情况，某个进程已经挂死或闲置，使用kill命令却杀不掉。这时候就必须发送信号9，强行关闭此进程。当然这种“野蛮”的方法
很可能会导致打开的文件出现错误或者数据丢失之类的错误。所以不到万不得已不要使用强制结束的办法。如果连信号9都不响应，那恐怕就只有重新启动计算机
了。<br>

<br>

　　控制多个进程命令<br>

<br>

　　Linux可使用户同时运行多个进程，还允许用户或系统管理员能控制正在运行的进程。<br>

<br>

　　nohup命令<br>

<br>

　　理论上，我们一般退出Linux系统时，会把所有的程序全部结束掉，包括那些后台程序。但有时候，例如您正在编辑一个很长的程序，但是您下班或是有事
需要先退出系统，这时您又不希望系统把您编辑那么久的程序结束掉，希望退出系统时，程序还能继续执行。这时，我们就可以使用nohup命令使进程在用户退
出后仍继续执行。<br>

<br>

　　一般这些进程我们都是让它在后台执行，结果则会写到用户自己的目录下的nohup.out这个文件里（也可以使用输出重定向，让它输出到一个特定的文件）。［例26］<br>

<br>

　　$ nohup sort sales.dat &amp;<br>

<br>

　　这条命令告诉sort命令忽略用户已退出系统，它应该一直运行，直到进程完成。利用这种方法，可以启动一个要运行几天甚至几周的进程，而且在它运行时，用户不需要去登录。<br>

<br>

　　nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出重定向，则只有错误信息放在nohup.out文件中。<br>

<br>

　　renice命令<br>

<br>

　　renice命令允许用户修改一个正在运行进程的优先权。<br>

<br>

　　利用renice命令可以在命令执行时调整其优先权。其格式如下：<br>

<br>

　　$ renice -number PID<br>

<br>

　　其中，参数number与nice命令的number意义相同。<br>

<br>

　　注：<br>

<br>

　　（1） 用户只能对自己所有的进程使用renice命令。<br>

<br>

　　（2） root用户可以在任何进程上使用renice命令。<br>

<br>

　　（3） 只有root用户才能提高进程的优先权。<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5485.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 11:00 <a href="http://www.cnitblog.com/ygb/articles/5485.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>与系统管理有关的命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5483.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 02:59:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5483.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5483.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5483.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5483.html</trackback:ping><description><![CDATA[<div>与系统管理有关的命令<br>
<br>
wall命令<br>
<br>
这个命令的功能是对全部已登录的用户发送信息，用户可以先把要发送的信息写好存入一个文件中，然后输入：<br>
<br>
# wall &lt; 文件名<br>
<br>
这样就能对所有的用户发送信息了。<br>
<br>
在上面的例子中符号“&lt;”表示输入重定向，有关它的含义和用法请参阅第十章的有关内容。<br>
<br>
例如：<br>
<br>
# wall ‘Thank you!’<br>
<br>
Broadcast message from root （tty1） Fri Nov 26 14：15：07 1999…<br>
<br>
Thank you!<br>
<br>
#<br>
<br>
执行以上命令后，用户的屏幕上显示出“Thank you!”信息后，并不出现系统提示符$（#），再次按回车键后，屏幕出现系统提示符。<br>
<br>
write命令<br>
<br>
write命令的功能是向系统中某一个用户发送信息。<br>
<br>
该命令的一般格式为：<br>
<br>
write 用户帐号 ［终端名称］<br>
<br>
例如：<br>
<br>
$ write xxq<br>
<br>
hello<br>
<br>
此时系统进入发送信息状态，用户可以输入要发送的信息，输入完毕，希望退出发送状态时，按组合键即可。<br>
<br>
上述命令执行的结果是，用户xxq的屏幕上会显示：<br>
<br>
message from test@test.tlc.com.cn tty1 at 15:51…<br>
<br>
hello<br>
<br>
EOF<br>
<br>
mesg指令<br>
<br>
mesg命令设定是否允许其他用户用write命令给自己发送信息。如果允许别人给自己发送信息，输入命令：<br>
<br>
# mesg y<br>
<br>
否则，输入：<br>
<br>
# mesg n<br>
<br>
对于超级用户，系统的默认值为 n；而对于一般用户系统的默认值为y。<br>
<br>
如果mesg后不带任何参数，则显示当前的状态是y还是n，如：<br>
<br>
$ mesg<br>
<br>
is y<br>
<br>
或：<br>
<br>
# mesg<br>
<br>
is n<br>
<br>
sync命令<br>
<br>
sync命令是在关闭Linux系统时使用的。<br>
<br>
用户需要注意的是，不能用简单的关闭电源的方法关闭系统，因为Linux象其他Unix系统一样，在内存中缓存了许多数据，在关闭系统时需要进行内存数据
与硬盘数据的同步校验，保证硬盘数据在关闭系统时是最新的，只有这样才能确保数据不会丢失。一般正常的关闭系统的过程是自动进行这些工作的，在系统运行过
程中也会定时做这些工作，不需要用户干预。<br>
<br>
sync命令是强制把内存中的数据写回硬盘，以免数据的丢失。用户可以在需要的时候使用此命令。该命令的一般格式为：<br>
<br>
sync<br>
<br>
shutdown命令<br>
<br>
shutdown
命令可以安全地关闭或重启Linux系统，它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数，可以是一个精确
的时间，也可以是从现在开始的一个时间段。精确时间的格式是hh:mm，表示小时和分钟；时间段由“+”和分钟数表示。系统执行该命令后，会自动进行数据
同步的工作。该命令的一般格式为：<br>
<br>
shutdown ［选项］ ［时间］ ［警告信息］<br>
<br>
命令中各选项的含义为：<br>
<br>
- k 并不真正关机，而只是发出警告信息给所有用户。<br>
<br>
- r 关机后立即重新启动。<br>
<br>
- h 关机后不重新启动。<br>
<br>
- f 快速关机，重启动时跳过fsck。<br>
<br>
- n 快速关机，不经过init程序。<br>
<br>
- c 取消一个已经运行的shutdown。<br>
<br>
需要特别说明的是，该命令只能由超级用户使用。<br>
<br>
例1：系统在十分钟后关机，并且马上重新启动。<br>
<br>
# shutdown – r +10<br>
　<br>
<br>
例2：系统马上关机，并且不重新启动。<br>
<br>
# shutdown – h now<br>
<br>
<br>
free命令<br>
<br>
free命令的功能是查看当前系统内存的使用情况，它显示系统中剩余及已用的物理内存和交换内存，以及共享内存和被核心使用的缓冲区。该命令的一般格式为：<br>
<br>
free ［-b | -k | -m］<br>
<br>
命令中各选项的含义如下：<br>
<br>
-b 以字节为单位显示。<br>
<br>
-k 以K字节为单位显示。<br>
<br>
-m 以兆字节为单位显示。<br>
<br>
例：<br>
<br>
$ free<br>
<br>
total used free shared buffers cached<br>
<br>
Mem: 63076 32020 31056 8204 16360 6048<br>
<br>
-/+ buffers/cache: 9612 53464<br>
<br>
Swap: 64476 2240 62236<br>
<br>
uptime命令<br>
<br>
uptime命令显示系统已经运行了多长时间，它依次显示下列信息：现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。该命令的一般格式为：<br>
<br>
uptime<br>
<br>
例：<br>
<br>
# uptime<br>
<br>
4:43pm up 1 day, 5:51, 2 user, load average: 0.01, 0.01, 0.00<br>
<br>
与用户有关的命令<br>
<br>
passwd命令<br>
<br>
出于系统安全考虑，Linux系统中的每一个用户除了有其用户名外，还有其对应的用户口令。因此使用useradd命令增加时，还需使用passwd命令为每一位新增加的用户设置口令；用户以后还可以随时用passwd命令改变自己的口令。该命令的一般格式为：<br>
<br>
passwd ［用户名］<br>
<br>
其中用户名为需要修改口令的用户名。只有超级用户可以使用“passwd 用户名”修改其他用户的口令，普通用户只能用不带参数的passwd命令修改自己的口令。该命令的使用方法如下：<br>
<br>
输入passwd&lt; Enter&gt;；<br>
<br>
在（current） UNIX passwd:下输入当前的口令<br>
<br>
在new password:提示下输入新的口令（在屏幕上看不到这个口令）：<br>
<br>
系统提示再次输入这个新口令。<br>
<br>
输入正确后，这个新口令被加密并放入/etc/shdow文件。选取一个不易被破译的口令是很重要的。选取口令应遵守如下规则：<br>
<br>
口令应该至少有六位（最好是八位）字符；<br>
<br>
口令应该是大小写字母、标点符号和数字混杂的。<br>
<br>
超级用户修改其他用户（xxq）的口令的过程如下，<br>
<br>
# passwd xxq<br>
<br>
New UNIX password:<br>
<br>
Retype new UNIX password:<br>
<br>
passwd: all authentication tokens updated successfully<br>
<br>
#<br>
<br>
su命令<br>
<br>
这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限，也可以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。如要离开当前用户的身份，可以打exit。<br>
<br>
该命令的一般形式为：<br>
<br>
su ［选项］ ［? ］ ［使用者帐号］<br>
<br>
说明：若没有指定使用者帐号，则系统预设值为超级用户root。<br>
<br>
该命令中各选项的含义分别为：<br>
<br>
? c 执行一个命令后就结束。<br>
<br>
? 加了这个减号的目的是使环境变量和欲转换的用户相同。<br>
<br>
? m 保留环境变量不变。<br>
<br>
例1： 变成root用户<br>
<br>
$ su ?<br>
<br>
password: 【输入超级用户的密码】<br>
<br>
例2： 变成xu使用者，并执行一个命令就结束。<br>
<br>
$ su -xu ? c “rmdir cat1”<br>
<br>
其他命令<br>
<br>
echo命令<br>
<br>
echo命令的功能是在显示器上显示一段文字，一般起到一个提示的作用。该命令的一般格式为：<br>
<br>
echo ［ -n ］ 字符串<br>
<br>
其中选项n表示输出文字后不换行；字符串可以加引号，也可以不加引号。用echo命令输出加引号的字符串时，将字符串原样输出；用echo命令输出不加引号的字符串时，将字符串中的各个单词作为字符串输出，各字符串之间用一个空格分割。<br>
<br>
例1：<br>
<br>
$ echo ‘Thank you !’<br>
<br>
Thank you !<br>
<br>
例2：<br>
<br>
$ echo Thank you !<br>
<br>
Thank you !<br>
<br>
cal命令<br>
<br>
cal命令的功能是显示某年某月的日历。该命令的一般格式为：<br>
<br>
cal ［选项］ ［月 ［年］］<br>
<br>
命令中各选项的含义为：<br>
<br>
- j 显示出给定月中的每一天是一年中的第几天（从1月1日算起）。<br>
<br>
- y 显示出整年的日历。<br>
<br>
　<br>
<br>
例1 显示1999年11月的日历。<br>
<br>
$ cal 11 1999<br>
<br>
November 1999<br>
<br>
Su Mo Tu We Th Fr Sa<br>
<br>
1 2 3 4 5 6<br>
<br>
7 8 9 10 11 12 13<br>
<br>
14 15 16 17 18 19 20<br>
<br>
21 22 23 24 25 26 27<br>
<br>
28 29 30<br>
<br>
例2 显示1999年11月的每一天是一年中的第几天。<br>
<br>
$ cal – j 11 1999<br>
<br>
November 1999<br>
<br>
Sun Mon Tue Wed Thu Fri Sat<br>
<br>
305 306 307 308 309 310<br>
<br>
311 312 313 314 315 316 317<br>
<br>
318 319 320 321 322 323 324<br>
<br>
325 326 327 328 329 330 331<br>
<br>
332 333 334<br>
<br>
date命令<br>
<br>
date命令的功能是显示和设置系统日期和时间。该命令的一般格式为：<br>
<br>
date ［选项］ 显示时间格式（以+开头，后面接格式）<br>
<br>
date 设置时间格式<br>
<br>
命令中各选项的含义分别为：<br>
<br>
-d datestr, --date datestr 显示由datestr描述的日期<br>
<br>
-s datestr, --set datestr 设置datestr 描述的日期<br>
<br>
-u, --universal 显示或设置通用时间<br>
<br>
时间域<br>
<br>
% H 小时（00..23）<br>
<br>
% I 小时（01..12）<br>
<br>
% k 小时（0..23）<br>
<br>
% l 小时（1..12）<br>
<br>
% M 分（00..59）<br>
<br>
% p 显示出AM或PM<br>
<br>
% r 时间（hh：mm：ss AM或PM），12小时<br>
<br>
% s 从1970年1月1日00：00：00到目前经历的秒数<br>
<br>
% S 秒（00..59）<br>
<br>
% T 时间（24小时制）（hh:mm:ss）<br>
<br>
% X 显示时间的格式（％H:％M:％S）<br>
<br>
% Z 时区<br>
<br>
日期域<br>
<br>
% a 星期几的简称（ Sun..Sat）<br>
<br>
% A 星期几的全称（ Sunday..Saturday）<br>
<br>
% b 月的简称（Jan..Dec）<br>
<br>
% B 月的全称（January..December）<br>
<br>
% c 日期和时间（ Mon Nov 8 14：12：46 CST 1999）<br>
<br>
% d 一个月的第几天（01..31）<br>
<br>
% D 日期（mm／dd／yy）<br>
<br>
% h 和%b选项相同<br>
<br>
% j 一年的第几天（001..366）<br>
<br>
% m 月（01..12）<br>
<br>
% w 一个星期的第几天（0代表星期天）<br>
<br>
% W 一年的第几个星期（00..53，星期一为第一天）<br>
<br>
% x 显示日期的格式（mm/dd/yy）<br>
<br>
% y 年的最后两个数字（ 1999则是99）<br>
<br>
% Y 年（例如：1970，1996等）<br>
<br>
需要特别说明的是，只有超级用户才能用date命令设置时间，一般用户只能用date命令显示时间。<br>
<br>
例1：用指定的格式显示时间。<br>
<br>
$ date ‘+This date now is =&gt;%x ，time is now =&gt;%X ，thank you !’<br>
<br>
This date now is =&gt;11/12/99 ，time is now =&gt;17:53:01 ，thank you !<br>
<br>
例2：用预定的格式显示当前的时间。<br>
<br>
# date<br>
<br>
Fri Nov 26 15：20：18 CST 1999<br>
<br>
例3：设置时间为下午14点36分。<br>
<br>
# date -s 14:36:00<br>
<br>
Fri Nov 26 14：15：00 CST 1999<br>
<br>
例4：设置时间为1999年11月28号。<br>
<br>
# date -s 991128<br>
<br>
Sun Nov 28 00：00：00 CST 1999<br>
<br>
clear命令<br>
<br>
clear命令的功能是清除屏幕上的信息，它类似于DOS中的 cls命令。清屏后，提示符移动到屏幕左上角。<br>
<br>
例如：$ clear</div>

		<!-- / message -->
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 10:59 <a href="http://www.cnitblog.com/ygb/articles/5483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下的打印工作命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5482.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 02:58:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5482.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5482.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5482.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5482.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5482.html</trackback:ping><description><![CDATA[在Linux下采用假脱机（spooling）打印方法，当用户需要打印一个文件时，该文件并不直接送到打印机，而是送到spool目录下，然后由一个负责打印的后台进程把这些数据送入打印机。<br>

<br>

Linux对每台打印机都定义了一个打印缓冲区，打印机守护程序经常扫描打印缓冲区以查看有无要打印的新文件。如果存在，就按先进先出的顺序打印缓冲区中的文件。<br>

<br>

Linux系统除了可以在本地打印机上打印外，还可以通过网络打印机远程打印。<br>

<br>

用于打印的命令<br>

<br>

Linux系统提供了一组有关打印的命令。一般情况下，打印命令使用默认打印机；如果用户定义了PRINTER环境变量，打印命令就使用这个变量定义的打印机；另外，用户还可以在命令行上指定要使用的打印机。<br>

<br>

lpr命令<br>

<br>

lpr命令是脱机打印命令，该命令将打印作业放到打印缓冲队列中。为Linux系统指定的每台打印机都有自己的打印缓冲目录，每个目录中的minfree文件指定保存打印文件的磁盘块的数量。<br>

<br>

lpr同lpd守护进程通讯，lpd扫描/etc/printcap文件，查询打印机对应的缓存目录，然后由lpd控制打印，将需要打印的数据送到实际打印机上。如果没有指定文件，lpr就使用标准输入。<br>

<br>

lpr命令的格式为：<br>

<br>

lpr ［-P printer］ ［#num］ ［其他选项］ ［name…］<br>

<br>

命令中各选项的含义如下：<br>

<br>

-P 指定打印机。如果不用此选项，则使用缺省打印机或环境变量PRINTER指定的打印机。<br>

<br>

-m 打印完毕后发送email。<br>

<br>

-#num 打印num份。<br>

<br>

lpq命令<br>

<br>

lpq是缓冲队列检查命令，它通过lpd在缓冲区中检查打印文件，报告指定作业的状态或指定用户的所有作业。不带任何参数的lpq命令显示现在队列中的任
何作业。lpq命令的显示结果中一个重要的信息就是作业标识号（作业ID），它标识一个特定的作业。如果用户想取消一个挂起的作业，就必须在命令中指定这
个标识号。<br>

<br>

lpq命令的格式为：<br>

<br>

lpq ［-l］ ［-P printer］ ［job #］ ［user…］<br>

<br>

命令中各选项的含义如下：<br>

<br>

-P 指定一个打印机，否则使用缺省打印机或环境变量PRINTER指定的打印机。<br>

<br>

-l 打印组成作业的所有文件的信息。<br>

<br>

对提交的每一个作业，lpq报告用户名、在队列中的级别、组成作业的文件、作业标识以及总的大小等信息。<br>

<br>

lprm命令<br>

<br>

lprm命令用于从缓冲队列中删除打印作业，用户可以使用该命令从缓冲队列中删除属于自己的一个或多个打印作业。<br>

<br>

lprm命令的格式为：<br>

<br>

lprm ［-P printer］ ［-］ ［job #］ ［user…］<br>

<br>

命令中各选项的含义如下：<br>

<br>

-P 指定一个打印机，否则使用缺省打印机或环境变量PRINTER指定的打印机。<br>

<br>

- 删除用户所有的打印作业。<br>

<br>

user 删除队列中属于用户user的作业（只有超级用户可以这样做）。<br>

<br>

job # 通过指定作业号#删除某个打印作业，作业号可以通过lpq命令得到，如：<br>

<br>

$ lpq –l<br>

<br>

lst:ken ［job #013ucbarpa］<br>

<br>

（standard input） 100 bytes<br>

<br>

$ lprm 13<br>

<br>

打印缓冲区目录<br>

<br>

对打印而言，有一个非常重要的目录，就是打印缓冲区目录，要打印的数据在被打印之前都集中到这里。通常一台打印机对应一个打印缓冲区目录，这样比较容易管
理打印机。例如，系统使用/var/spool/lpd作为主打印缓冲区，每个单独的打印机都在主打印缓冲区下有一个与这台打印机同名的目录。因此，名为
ps_nff的打印机把/var/spool/lpd/ps_nff作为它的打印缓冲区目录。<img src ="http://www.cnitblog.com/ygb/aggbug/5482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 10:58 <a href="http://www.cnitblog.com/ygb/articles/5482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络相关ping finger nslookup netstat[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5481.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 02:57:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5481.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5481.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5481.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5481.html</trackback:ping><description><![CDATA[netstat命令　<br>

<br>

netstat命令的功能是显示网络连接、路由表和网络接口信息，可以让用户得知目前都有哪些网络连接正在运作。<br>

<br>

该命令的一般格式为：<br>

<br>

netstat ［选项］<br>

<br>

命令中各选项的含义如下：<br>

<br>

-a 显示所有socket，包括正在监听的。<br>

<br>

-c 每隔1秒就重新显示一遍，直到用户中断它。<br>

<br>

-i 显示所有网络接口的信息，格式同“ifconfig -e”。<br>

<br>

-n 以网络IP地址代替名称，显示出网络连接情形。<br>

<br>

-r 显示核心路由表，格式同“route -e”。<br>

<br>

-t 显示TCP协议的连接情况。<br>

<br>

-u 显示UDP协议的连接情况。<br>

<br>

-v 显示正在进行的工作。<br>

<br>

［例］在本地机上使用netstat命令。<br>

<br>

$ netstat<br>

<br>

Active Internet connections （w/o servers）<br>

<br>

Proto Recv-Q Send-Q Local Address Foreign Address State<br>

<br>

Active UNIX domain sockets （w/o servers）<br>

<br>

Proto RefCnt Flags Type State I-Node Path<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 270 @00000008<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 150 @00000002<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 104 @00000001<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 222 @00000004<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 171 @00000003<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 271 /dev/log<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 225 /dev/log<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 223 /dev/log<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 203 /dev/log<br>

<br>

unix 1 ［ ］ STREAM CONNECTED 105 /dev/log<br>

<br>

……<br>

<br>

nslookup命令<br>

<br>

nslookup命令的功能是查询一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器，就可以用这个命令查看不同主机的IP地址对应的域名。<br>

<br>

该命令的一般格式为：<br>

<br>

nslookup ［IP地址/域名］<br>

<br>

［例］在本地机上使用nslookup命令。<br>

<br>

$ nslookup<br>

<br>

Default Server: name.tlc.com.cn<br>

<br>

Address: 192.168.1.99<br>

<br>

&gt;<br>

<br>

在符号“&gt;”后面输入要查询的IP地址或域名并回车即可。如果要退出该命令，输入exit并回车即可。<br>

<br>

finger命令<br>

<br>

finger命令的功能是查询用户的信息，通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。如果要查询远程机上的
用户信息，需要在用户名后面接“@主机名”，采用［用户名@主机名］的格式，不过要查询的网络主机需要运行finger守护进程。<br>

<br>

该命令的一般格式为：<br>

<br>

finger ［选项］ ［使用者］ ［用户@主机］<br>

<br>

命令中各选项的含义如下：<br>

<br>

-s 显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。<br>

<br>

-l 除了用-s选项显示的信息外，还显示用户主目录、登录shell、邮件状态等信息，以及用户主目录下的.plan、.project和.forward文件的内容。<br>

<br>

-p 除了不显示.plan文件和.project文件以外，与-l选项相同。<br>

<br>

　<br>

<br>

［例］在本地机上使用finger命令。<br>

<br>

$ finger xxq<br>

<br>

Login: xxq Name:<br>

<br>

Directory: /home/xxq Shell: /bin/bash<br>

<br>

Last login Thu Jan 1 21:43 （CST） on tty1<br>

<br>

No mail.<br>

<br>

No Plan.<br>

<br>

　<br>

<br>

$ finger<br>

<br>

Login Name Tty Idle Login Time Office Office Phone<br>

<br>

root root *1 28 Nov 25 09:17<br>

<br>

……<br>

<br>

ping命令<br>

<br>

ping命令用于查看网络上的主机是否在工作，它向该主机发送ICMP ECHO_REQUEST包。有时我们想从网络上的某台主机上下载文件，可是又不知道那台主机是否开着，就需要使用ping命令查看。<br>

<br>

该命令的一般格式为：<br>

<br>

ping ［选项］ 主机名/IP地址<br>

<br>

命令中各选项的含义如下：<br>

<br>

-c 数目 在发送指定数目的包后停止。<br>

<br>

-d 设定SO_DEBUG的选项。<br>

<br>

-f 大量且快速地送网络封包给一台机器，看它的回应。<br>

<br>

-I 秒数 设定间隔几秒送一个网络封包给一台机器，预设值是一秒送一次。<br>

<br>

-l 次数 在指定次数内，以最快的方式送封包数据到指定机器（只有超级用户可以使用此选项）。<br>

<br>

-q 不显示任何传送封包的信息，只显示最后的结果。<br>

<br>

-r 不经由网关而直接送封包到一台机器，通常是查看本机的网络接口是否有问题。<br>

<br>

-s 字节数 指定发送的数据字节数，预设值是56，加上8字节的ICMP头，一共是64ICMP数据字节。<img src ="http://www.cnitblog.com/ygb/aggbug/5481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 10:57 <a href="http://www.cnitblog.com/ygb/articles/5481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell命令[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5480.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 02:55:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5480.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5480.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5480.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5480.html</trackback:ping><description><![CDATA[shell是用户和Linux操作系统之间的接口。Linux中有多种shell，其中缺省使用的是Bash。本章讲述了shell的工作原理，shell的种类，shell的一般操作及Bash的特性。<br>

<br>

  　什么是shell<br>

<br>

Linux系统的shell作为操作系统的外壳，为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。<br>

<br>

shell是用户和Linux内核之间的接口程序，如果把Linux内核想象成一个球体的中心，shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时，内核会做出相应的反应。<br>

<br>

shell是一个命令语言解释器，它拥有自己内建的shell命令集，shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。<br>

<br>

有一些命令，比如改变工作目录命令cd，是包含在shell内部的。还有一些命令，例如拷贝命令cp和移动命令rm，是存在于文件系统中某个目录下的单独的程序。对用户而言，不必关心一个命令是建立在shell内部还是一个单独的程序。<br>

<br>

shell首先检查命令是否是内部命令，若不是再检查是否是一个应用程序（这里的应用程序可以是Linux本身的实用程序，如ls和rm，也可以是购买的
商业程序，如xv，或者是自由软件，如emacs）。然后shell在搜索路径里寻找这些应用程序（搜索路径就是一个能找到可执行程序的目录列表）。如果
键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件，将会显示一条错误信息。如果能够成功找到命令，该内部命令或应用程序将被分解为系统调用
并传给Linux内核。<br>

　<br>

shell的另一个重要特性是它自身就是一个解释型的程序设计语言，shell程序设计语言支持绝大多数在高级语言中能见到的程序元素，如函数、变量、数组和程序控制结构。shell编程语言简单易学，任何在提示符中能键入的命令都能放到一个可执行的shell程序中。<br>

<br>

当普通用户成功登录，系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值（TurboLinux系统默认的shell是BASH），对普通用户用“$”作提示符，对超级用户（root）用“#”作提示符。<br>

<br>

一旦出现了shell提示符，就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行，或者在屏幕上产生了大量的输出，可以从键盘上按ctrl+c发出中断信号来中断它（在正常结束之前，中止它的执行）。<br>

<br>

当用户准备结束登录对话进程时，可以键入logout命令、exit命令或文件结束符（EOF）（按ctrl+d实现），结束登录。<br>

<br>

我们来实习一下shell是如何工作的。<br>

<br>

$ make work<br>

<br>

make:***No rule to make target ‘work’. Stop.<br>

<br>

$<br>

<br>

注释：make是系统中一个命令的名字，后面跟着命令参数。在接收到这个命令后，shell便执行它。本例中，由于输入的命令参数不正确，系统返回信息后停止该命令的执行。<br>

<br>

在例子中，shell会寻找名为make的程序，并以work为参数执行它。make是一个经常被用来编译大程序的程序，它以参数作为目标来进行编译。在
“make
work”中，make编译的目标是work。因为make找不到以work为名字的目标，它便给出错误信息表示运行失败，用户又回到系统提示符下。<br>

<br>

另外，用户键入有关命令行后，如果shell找不到以其中的命令名为名字的程序，就会给出错误信息。例如，如果用户键入：<br>

<br>

$ myprog<br>

<br>

bash:myprog:command not found<br>

<br>

$<br>

<br>

可以看到，用户得到了一个没有找到该命令的错误信息。用户敲错命令后，系统一般会给出这样的错误信息。<br>

<br>

shell的种类<br>

<br>

Linux中的shell有多种类型，其中最常用的几种是Bourne shell（sh）、C shell（csh）和Korn
shell（ksh）。三种shell各有优缺点。Bourne
shell是UNIX最初使用的shell，并且在每种UNIX上都可以使用。Bourne
shell在shell编程方面相当优秀，但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne
Again shell，它是Bourne shell的扩展，简称Bash，与Bourne shell完全向后兼容，并且在Bourne
shell的基础上增加、增强了很多特性。Bash放在/bin/bash中，它有许多特色，可以提供如命令补全、命令编辑和命令历史表等功能，它还包含
了很多C shell和Korn shell中的优点，有灵活和强大的编程接口，同时又有很友好的用户界面。<br>

<br>

C shell是一种比Bourne shell更适于编程的shell，它的语法与C语言很相似。 Linux为喜欢使用C
shell的人提供了Tcsh。Tcsh是C
shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法，它不仅和Bash
shell是提示符兼容，而且还提供比Bash shell更多的提示符参数。<br>

<br>

Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh（ksh的扩展），它支持任务控制，可以在命令行上挂起、后台执行、唤醒或终止程序。<br>

<br>

Linux并没有冷落其他shell用户，还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途，有些shell是有专利的，有
些能从Internet网上或其他来源获得。要决定使用哪个shell，只需读一下各种shell的联机帮助，并试用一下。<br>

<br>

用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如：<br>

<br>

# fgrep lisa /etc/passwd<br>

<br>

lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash<br>

<br>

shell被列每行的末尾（/bin/bash）。<br>

<br>

由于Bash是Linux上缺省的shell，本章主要介绍Bash及其相关知识。<br>

<br>

shell命令<br>

<br>

命令行c<br>

<br>

用户登录到Linux系统时，可以看到一个shell提示符，标识了命令行的开始。用户可以在提示符后面输入任何命令及参数。例如：<br>

<br>

$ date<br>

<br>

二 11 23 01:34:58 CST 1999<br>

<br>

$<br>

<br>

用户登录时，实际进入了shell，它遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个字必须是一个命令的名字，第二个字是命令的选项或参数，命令行中的每个字必须由空格或TAB隔开，格式如下：<br>

<br>

$ Command Option Arguments<br>

<br>

   1. 选项和参数<br>

<br>

      选项是包括一个或多个字母的代码，它前面有一个减号（减号是必要的，Linux用它来区别选项和参数），选项可用于改变命令执行的动作的类型。例如：<br>

<br>

      $ ls<br>

<br>

      motd passwd<br>

<br>

      $<br>

<br>

      这是没有选项的ls命令，可列出当前目录中所有文件，只列出各个文件的名字，而不显示其他更多的信息。<br>

<br>

      $ ls -l<br>

<br>

      total 2<br>

<br>

      -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd<br>

<br>

      -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd<br>

<br>

      $<br>

<br>

      加入-l选项，将会为每个文件列出一行信息，诸如数据大小和数据最后被修改的时间。<br>

<br>

      大多数命令都被设计为可以接纳参数。参数是在命令行中的选项之后键入的一个或多个单词，例如：<br>

<br>

      $ ls -l text<br>

<br>

      -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd<br>

<br>

      -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd<br>

<br>

      $<br>

<br>

      将显示text目录下的所有文件及其信息。<br>

<br>

      有些命令，如ls可以带参数，而有一些命令可能需要一些最小数目的参数。例如，cp命令至少需要两个参数，如果参数的数目与命令要求不符，shell将会给出出错信息。例如：<br>

<br>

      $ cp -i mydata newdata<br>

<br>

      注意：命令行中选项先于参数输入。<br>

   2. 命令行特征 <br>

<br>

命令行实际上是可以编辑的一个文本缓冲区，在按回车之前，可以对输入的文本进行编辑。比如利用BACKSPACE键可以删除刚键入的字符，可以进行整行删
除，还可以插入字符，使得用户在输入命令，尤其是复杂命令时，若出现键入错误，无须重新输入整个命令，只要利用编辑操作，即可改正错误。<br>

<br>

利用上箭头可以重新显示刚执行的命令，利用这一功能可以重复执行以前执行过的命令，而无须重新键入该命令。<br>

<br>

bash保存着以前键入过的命令的列表，这一列表被称为命令历史表。按动上箭头，便可以在命令行上逐次显示各条命令。同样，按动下箭头可以在命令列表中向
下移动，这样可以将以前的各条命令显示在命令行上，用户可以修改并执行这些命令。这一特征将在10.4节中进行详细的论述。<br>

<br>

在一个命令行中还可以置入多个命令，用分号将各个命令隔开。例如：<br>

<br>

$ ls -F;cp -i mydata newdata<br>

<br>

也可以在几个命令行中输入一个命令，用反斜杠将一个命令行持续到下一行。<br>

<br>

$ cp –i<br>

<br>

mydata<br>

<br>

newdata<br>

<br>

　<br>

<br>

上面的cp命令是在三行中输入的，开始的两行以反斜杠结束，把三行作为一个命令行。<br>

<br>

shell中的特殊字符<br>

<br>

shell中除使用普通字符外，还可以使用一些具有特殊含义和功能的特殊字符。在使用它们时应注意其特殊的含义和作用范围。下面分别对这些特殊字符加以介绍。<br>

<br>

   1. 通配符<br>

<br>

      通配符用于模式匹配，如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号［ ］中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符，构成一个所谓的“模式串”，在执行过程中进行模式匹配。<br>

<br>

      * 代表任何字符串（长度可以不等），例如：“f*”匹配以f打头的任意字符串。但应注意，文件名前的圆点（.）和路经名中的斜线（/）必须显式匹配。例如“*”不能匹配.file，而“.*”才可以匹配.file。<br>

<br>

      ? 代表任何单个字符。<br>

<br>
 ［］ 代表指定的一个字符范围，只要文件名中［ ］位置处的字符在［
］中指定的范围之内，那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成，也可以由表示限定范围的起始字符、终止字符及中间
的连字符（-）组成。例如，f ［a- d］ 与f
［abcd］的作用相同。Shell将把与命令行中指定的模式串相匹配的所有文件名都作为命令的参数，形成最终的命令，然后再执行这个命令。<br>

<br>

      下面我们给出表10-1说明这些通配符的具体含义。<br>

<br>

      表10-1　通配符含义举例<br>

<br>

      模式串<br>

<br>

      意 义<br>

<br>

      *<br>

<br>

      当前目录下所有文件的名称。<br>

<br>

      *Text*<br>

<br>

      当前目录下所有文件名中包含有Text的文件的名称。<br>

<br>

      ［ab-dm］*<br>

<br>

      当前目录下所有以a、b、c、d、m开头的文件的名称。<br>

<br>

      ［ab-dm］?<br>

<br>

      当前目录下所有以a、b、c、d、m开头且后面只跟有一个字符的文件的名称。<br>

<br>

      /usr/bin/??<br>

<br>

      目录/usr/bin下所有名称为两个字符的文件的名称。<br>

<br>

      　<br>

<br>

特别需要注意的是，连字符“-”仅在方括号内有效，表示字符范围，如在方括号外面就成为普通字符了。而*和?只在方括号外面是通配符，若出现在方括号之
内，它们也失去通配符的能力，成为普通字符了。例如，模式“-
a［*?］abc”中只有一对方括号是通配符，*和?均为普通字符，因此，它匹配的字符串只能是- a*abc和- a?abc。<br>

<br>
 最后说明一下使用通配符时需要注意的一些问题。由于*、?和［
］对于shell来说具有比较特殊的意义，因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们，否则Shell匹配起来可能会无穷的递
归下去。另外要注意的一点是：如果目录中没有与指定的模式串相匹配的文件名，那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出
现特殊字符的原因所在。<br>

   2. 引号 <br>

<br>

在shell中引号分为三种：单引号，双引号和反引号。<br>

<br>

* 单引号 ‘<br>

<br>

由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后，也会失去原有意义，而只作为普通字符解释。例如：<br>

<br>

$ string=’$PATH’<br>

<br>

$ echo $string<br>

<br>

$PATH<br>

<br>

$<br>

<br>

可见$保持了其本身的含义，作为普通字符出现。<br>

<br>

* 双引号 “<br>

<br>

由双引号括起来的字符，除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外，其余字符仍作为普通字符对待。对于$来说，就是用其后指定的变量的值
来代替这个变量和$；对于而言，是转义字符，它告诉shell不要对其后面的那个字符进行特殊处理，只当作普通字符即可。可以想见，在双引号中需要在前面
加上的只有四个字符$，，’和”本身。而对”号，若其前面没有加，则Shell会将它同前一个”号匹配。<br>

<br>

例如，我们假定PATH的值为.:/usr/bin:/bin，输入如下命令：<br>

<br>

$ TestString＝”$PATH\”$PATH”<br>

<br>

$ echo $TestString<br>

<br>

.:/usr/bin:/ bin”$PATH<br>

<br>

$<br>

<br>

读者可以自己试一下在第二个双引号之前不加会产生什么结果。<br>

<br>

　<br>

<br>

* 反引号 `<br>

<br>

反引号（`）这个字符所对应的键一般位于键盘的左上角，不要将其同单引号（’）混淆。反引号括起来的字符串被shell解释为命令行，在执行时，shell首先执行该命令行，并以它的标准输出结果取代整个反引号（包括两个反引号）部分。例如：<br>

<br>

$ pwd<br>

<br>

/home/xyz<br>

<br>

$ string=”current directory is `pwd`”<br>

<br>

$ echo $string<br>

<br>

current directour is /home/xyz<br>

<br>

$<br>

<br>

shell执行echo命令时，首先执行`pwd`中的命令pwd，并将输出结果/home/xyz取代`pwd`这部分，最后输出替换后的整个结果。<br>

<br>

利用反引号的这种功能可以进行命令置换，即把反引号括起来的执行结果赋值给指定变量。例如：<br>

<br>

$ today=`date`<br>

<br>

$ echo Today is $today<br>

<br>

Today is Mon Apr 15 16:20:13 CST 1999<br>

<br>

$<br>

<br>

反引号还可以嵌套使用。但需注意，嵌套使用时内层的反引号必须用反斜线（）将其转义。例如：<br>

<br>

$ abc=`echo The number of users is `who| wc-l``<br>

<br>

$ echo $abc<br>

<br>

The number of users is 5<br>

<br>

$<br>

<br>

在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果，它实际上要去执行``中指定的命令。执行时，命令中的特殊字符，如$，”，?等又将具有特殊含义，并且``所包含的可以是任何一个合法的Shell命令，如：<br>

<br>

$ ls<br>

<br>

note readme.txt Notice Unix.dir<br>

<br>

$ TestString＝”`echo $HOME ` ` ls ［nN］*`”<br>

<br>

$ echo $TestString<br>

<br>

/home/yxz note Notice<br>

<br>

$<br>

<br>

其他情况，读者可自行试之。<br>

<br>

   1. 注释符 <br>

<br>

在shell编程中经常要对某些正文行进行注释，以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。<br>

<br>

此外还有一些特殊字符如：用于输入/输出重定向与管道的&lt;、&gt;、&lt;&lt;、&gt;&gt;和|；执行后台命令的&amp;；命令执行操作符&amp;&amp;和||及表示命令组的{}将在下面各小节中加以介绍。<br>
标准输入/输出和重定向<br>

<br>

1. 标准输入与输出<br>

<br>

我们知道，执行一个shell命令行时通常会自动打开三个标准文件，即标准输入文件（stdin），通常对应终端的键盘；标准输出文件（stdout）和
标准错误输出文件（stderr），这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据，将正常输出数据输出到标准输出文件，而将错误信息
送到标准错误文件中。<br>

<br>

我们以cat命令为例，cat命令的功能是从命令行给出的文件中读取数据，并将这些数据直接送到标准输出。若使用如下命令：<br>

<br>

$ cat config<br>

<br>

将会把文件config的内容依次显示到屏幕上。但是，如果cat的命令行中没有参数，它就会从标准输入中读取数据，并将其送到标准输出。例如：<br>

<br>

$ cat<br>

<br>

Hello world<br>

<br>

Hello world<br>

<br>

Bye<br>

<br>

Bye<br>

<br>

&lt;ctrl+d&gt;<br>

<br>

$<br>

<br>

用户输入的每一行都立刻被cat命令输出到屏幕上。<br>

<br>

另一个例子，命令sort按行读入文件正文（当命令行中没有给出文件名时，表示从标准输入读入），将其排序，并将结果送到标准输出。下面的例子是从标准输入读入一个采购单，并将其排序。<br>

<br>

$ sort<br>

<br>

bananas<br>

<br>

carrots<br>

<br>

apples<br>

<br>

&lt;ctrl+d&gt;<br>

<br>

apples<br>

<br>

bananas<br>

<br>

carrots<br>

<br>

$<br>

<br>

这时我们在屏幕上得到了已排序的采购单。<br>

<br>

直接使用标准输入/输出文件存在以下问题：<br>

<br>

输入数据从终端输入时，用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时，若输入有误修改起来不是很方便。<br>

<br>

输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理，如将输出作为另一命令的输入进行进一步的处理等。<br>

<br>

为了解决上述问题，Linux系统为输入、输出的传送引入了另外两种机制，即输入/输出重定向和管道。<br>

<br>

   2. 输入重定向<br>

<br>

输入重定向是指把命令（或可执行程序）的标准输入重定向到指定的文件中。也就是说，输入可以不来自键盘，而来自一个指定的文件。所以说，输入重定向主要用于改变一个命令的输入源，特别是改变那些需要大量输入的输入源。<br>

<br>

例如，命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入：<br>

<br>

$ wc<br>

<br>

wc将等待用户告诉它统计什么，这时shell就好象死了一样，从键盘键入的所有文本都出现在屏幕上，但并没有什么结果，直至按下＜ctrl+d＞，wc才将命令结果写在屏幕上。<br>

<br>

如果给出一个文件名作为wc命令的参数，如下例所示，wc将返回该文件所包含的行数、单词数和字符数。<br>

<br>

$ wc /etc/passwd<br>

<br>

20 23 726 /etc/passwd<br>

<br>

$<br>

<br>

另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为：命令&lt;文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件：<br>

<br>

$ wc &lt; /etc/passwd<br>

<br>

20 23 726<br>

<br>

$<br>

<br>

另一种输入重定向称为here文档，它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用&lt;&lt;。它将一对分隔符
（本例中用delim表示）之间的正文重定向输入给命令。下例将一对分隔符delim之间的正文作为wc命令的输入，统计出正文的行数、单词数和字符数。<br>

<br>

$ wc&lt;&lt;delim<br>

<br>

&gt;this text forms the content<br>

<br>

&gt;of the here document,which<br>

<br>

&gt;continues until the end of<br>

<br>

&gt;text delimter<br>

<br>

&gt;delim<br>

<br>

4 17 98<br>

<br>

在&lt;&lt;操作符后面,任何字符都可以作为正文开始前的分隔符，本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符
为止。第二个分隔符应出现在新行的开头。这时here文档的正文（不包括开始和结束的分隔符）将重新定向送给命令wc作为它的标准输入。<br>

<br>

由于大多数命令都以参数的形式在命令行上指定输入文件的文件名，所以输入重定向并不经常使用。尽管如此，当要使用一个不接受文件名作为输入参数的命令，而需要的输入内容又存在一个文件里时，就能用输入重定向解决问题。<br>

<br>

   1. 输出重定向<br>

<br>

输出重定向是指把命令（或可执行程序）的标准输出或标准错误输出重新定向到指定文件中。这样，该命令的输出就不显示在屏幕上，而是写入到指定文件中。<br>

<br>

输出重定向比输入重定向更常用，很多情况下都可以使用这种功能。例如，如果某个命令的输出很多，在屏幕上不能完全显示，那么将输出重定向到一个文件中，然
后再用文本编辑器打开这个文件，就可以查看输出信息；如果想保存一个命令的输出，也可以使用这种方法。还有，输出重定向可以用于把一个命令的输出当作另一
个命令的输入（还有一种更简单的方法，就是使用管道，将在下面介绍）。<br>

<br>

输出重定向的一般形式为：命令&gt;文件名。例如：<br>

<br>

$ ls &gt; directory.out<br>

<br>

$ cat directory.out<br>

<br>

ch1.doc ch2.doc ch3.doc chimp config mail/ test/<br>

<br>

$<br>

<br>

将ls命令的输出保存为一个名为directory.out的文件。<br>

<br>

注：如果&gt;符号后边的文件已存在，那么这个文件将被重写。<br>

<br>

为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容，shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相
似，区别仅在于输出追加重定向的功能是把命令（或可执行程序）的输出结果追加到指定文件的最后，而该文件原有内容不被破坏。<br>

<br>

如果要将一条命令的输出结果追加到指定文件的后面，可以使用追加重定向操作符&gt;&gt;。形式为：命令&gt;&gt;文件名。例如：<br>

<br>

$ ls *.doc&gt;&gt;directory.out<br>

<br>

$ cat directory.out<br>

<br>

ch1.doc ch2.doc ch3.doc chimp config mail/ test/<br>

<br>

ch1.doc ch2.doc ch3.doc<br>

<br>

$<br>

<br>

和程序的标准输出重定向一样，程序的错误输出也可以重新定向。使用符号2&gt;（或追加符号2&gt;&gt;）表示对错误输出设备重定向。例如下面的命令：<br>

<br>

$ ls /usr/tmp 2&gt; err.file<br>

<br>

可在屏幕上看到程序的正常输出结果，但又将程序的任何错误信息送到文件err.file中，以备将来检查用。<br>

<br>

还可以使用另一个输出重定向操作符（&amp;&gt;）将标准输出和错误输出同时送到同一文件中。例如：<br>

<br>

$ ls /usr/tmp &amp;&gt; output.file<br>

<br>

利用重定向将命令组合在一起，可实现系统单个命令不能提供的新功能。例如使用下面的命令序列：<br>

<br>

$ ls /usr/bin &gt; /tmp/dir<br>

<br>

$ wc –w &lt; /tmp/dir<br>

<br>

459<br>

<br>

统计了/usr/bin目录下的文件个数。<br>

<br>

管 道<br>

<br>

将一个程序或命令的输出作为另一个程序或命令的输入，有两种方法，一种是通过一个临时文件将两个命令或程序结合在一起，例如上个例子中的/tmp/dir文件将ls和wc命令联在一起；另一种是Linux所提供的管道功能。这种方法比前一种方法更好。<br>

<br>

管道可以把一系列命令连接起来，这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令，第二个命令的输出又会作为第三个命令的输入，以此类推。显示在屏幕上的是管道行中最后一个命令的输出（如果命令行中未使用输出重定向）。<br>

<br>

通过使用管道符“|”来建立一个管道行。用管道重写上面的例子：<br>

<br>

$ ls /usr/bin|wc -w<br>

<br>

1789<br>

<br>

再如：<br>

<br>

$ cat sample.txt|grep "High"|wc -l<br>

<br>

管道将cat命令（列出一个文件的内容）的输出送给grep命令。grep命令在输入里查找单词High，grep命令的输出则是所有包含单词High的行，这个输出又被送给wc命令，wc命令统计出输入中的行数。假设sample.txt文件的内容如下：<br>

<br>

Things to do today:<br>

<br>

Low:Go grocery shopping<br>

<br>

High:Return movie<br>

<br>

High:Clear level 3 in Alien vs. Predator<br>

<br>

Medium:Pick up clothes from dry cleaner<br>

<br>

那么该管道行的结果是2。<br>

<br>

命令替换<br>

<br>

命令替换和重定向有些相似，但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为：<br>

<br>

command1 `command2`<br>

<br>

其中，command2的输出将作为command1的参数。需要注意的是这里的`符号，被它括起来的内容将作为命令执行，执行后的结果作为command1的参数。例如：<br>

<br>

$ cd `pwd`<br>

<br>

该命令将pwd命令列出的目录作为cd命令的参数，结果仍然是停留在当前目录下。<br>

<br>

第二十二课　在Bash中的操作　　　　　　2000年/5月/29日<br>

<br>

命令和文件名扩展特性<br>

<br>

Bash命令行具有命令和文件名扩展特性。当输入一个还没完成的命令或文件名时，只需键入Tab键就能激活命令和文件名扩展特性，从而完成该命令的剩余输
入。如果有多个命令或文件的前缀相同，Bash将响铃并等待用户输入足够的字符，以便选择唯一的命令或文件名，如果找到，系统将自动补齐搜索到的命令或文
件名，用户按回车键后，系统将执行这条指令。例如：<br>

<br>

$ cat pre &lt;Tab&gt;<br>

<br>

$ cat preface<br>

<br>

Bash也能列出当前目录下部分匹配的文件名来完成文件名扩展。如果键入Esc，然后键入?，shell将列出所有与输入的字符串相匹配的文件名。例如下
例，在没有完成的输入后键入Esc
?，shell将列出所有与输入的字符串相匹配的字符串，然后shell回显命令行，根据列出的文件名，可以键入要输入的文件名或按下Tab键来完成文件
名扩展。例如：<br>

<br>

$ ls<br>

<br>

document docudrama<br>

<br>

$ cat doc &lt;ESC ?&gt;<br>

<br>

document<br>

<br>

docudrama<br>

<br>

$ cat docudrama<br>

<br>

［例】下面是一个目录包含的文件列表：<br>

<br>

Firebird2.7.tgz Firebird.README Firebird2.60.tgz<br>

<br>

FireBird Firebird2.60.tgz.README<br>

<br>

现在要删除Firebird2.60.tgz.README文件，键入：<br>

<br>

$ rm –f Fi&lt;Tab&gt;<br>

<br>

系统会发出警报声，并且自动将命令行补全为：<br>

<br>

$ rm –f Fire<br>

<br>

并等待用户进一步输入文件名的后面部分。现在再键入：<br>

<br>

b&lt;Tab&gt;<br>

<br>

系统再次发出警报声，并且自动将命令行补全为：<br>

<br>

$ rm –f Firebird<br>

<br>

并等待用户进一步输入文件名的后面部分。现在再键入：<br>

<br>

2.6&lt;Tab&gt;<br>

<br>

系统再次发出警报声，并且自动将命令行补全为：<br>

<br>

$ rm –f Firebird2.60.tgz<br>

<br>

并等待用户进一步输入文件名的后面部分。现在再键入：<br>

<br>

.&lt;Tab&gt;<br>

<br>

此时命令将被补全为：<br>

<br>

$ rm –f Firebird2.60.tgz..README<br>

<br>

从上例可以看到，bash总是尽力根据用户输入的信息来补全命令。当无法根据现有信息补全命令时，则提示用户再给出更多的信息，然后再根据用户的提示来进
一步补全命令。作为用户最好是能够一次性给出足够的信息以便于bash进行命令补全；否则多按几次&lt;Tab&gt;，时间也就消耗掉了。<br>

<br>

命令行编辑<br>

<br>

在Bash中可以对命令行进行编辑，以便用户在执行所键入的命令之前能够修改所键入的命令。如果在键入命令时出现拼写错误，只需在运行所键入的命令之前，使用编辑命令来纠正编辑错误，然后执行它，而不用重新输入整行命令。这个功能对以长路径文件名作参数的命令特别有用。<br>

<br>

表10-2是对命令行编辑操作的一个总结。<br>

<br>

表10-2　命令行编辑操作<br>

<br>

　<br>

<br>

命令行编辑操作<br>

<br>

功能<br>

<br>

Ctrl+b或左箭头键<br>

<br>

左移一个字符（移至前一个字符）<br>

<br>

Ctrl+f或右箭头键<br>

<br>

右移一个字符（移至后一个字符）<br>

<br>

Ctrl+a<br>

<br>

移至行首<br>

<br>

Ctrl+e<br>

<br>

移至行尾<br>

<br>

Esc b<br>

<br>

左移一个单词<br>

<br>

Esc f<br>

<br>

右移一个单词<br>

<br>

Del<br>

<br>

删除光标所在处的字符<br>

<br>

Ctrl+d<br>

<br>

删除光标所在处的字符<br>

<br>

BACKSPACE或Ctrl+h<br>

<br>

删除光标左边的字符<br>

<br>

Ctrl+k<br>

<br>

删除至行尾<br>

<br>

　<br>

<br>

命令历史<br>

<br>

在Bash中，history命令能够保存最近所执行的命令。这些命令的历史记录号从1开始，只有有限个命令可以被保存起来，最多500个，即
history命令的历史记录号缺省值为500。要查看最近执行的命令，只要键入history命令，然后键入回车键，最近执行过的命令即按先后顺序被显
示出来（各条命令前的数字为历史记录号）。<br>

<br>

［例】<br>

<br>

$ history<br>

<br>

1 cp mydata today<br>

<br>

2 vi mydata<br>

<br>

3 mv mydata reports<br>

<br>

4 cd reports<br>

<br>

5 ls<br>

<br>

…<br>

<br>

所有这些命令都被称为事件（event），一个事件表示一个操作已经发生，即一个命令已被执行。这些事件根据它们被执行的先后顺序用数字标识，这一标识称为历史事件号。最后执行的历史事件的事件号最大。每个事件都可由它的历史事件号或命令的初始字符或字符串等确定。<br>

<br>

利用history命令能够查询以前的事件，并可把它们显示到命令行上执行这一事件。最简便的方法就是利用上下箭头键，把先前的事件逐次显示到命令行。这
个操作不需要运行history命令就可以执行。按动一下上箭头键，那么上一次执行的一个事件就将出现在命令行上，再按一下，上一次的前一事件又会出现在
命令行上；按动一下下箭头键，将会使当前事件的下一事件出现在命令行上。<br>

<br>

Bash也可以通过键入Esc、Tab键来完成对历史事件的字符扩展。和标准命令行扩展特性一样，键入历史事件的部分字符串，然后键入Esc，再键入
Tab键，与刚才键入的字符串相匹配的历史事件将自动扩展并回显到命令行处。如果不止一个事件与输入的字符串相匹配，就会听到一声响铃，继续键入字符或字
符串，shell将会唯一确定用户所要键入的历史事件。<br>

<br>

还有一个查询和执行历史事件的命令——!命令。在!命令后键入与历史事件相关联的字符，这个关联字符可以是历史事件的历史事件号，也可以是该事件的前几个字符。在下面的例子中，查询到历史事件号为3的事件，然后又用其开头的几个字符去匹配，也查询到该命令。<br>

<br>

［例】<br>

<br>

$ !3<br>

<br>

mv mydata reports<br>

<br>

$ !mv<br>

<br>

mv mydata reports<br>

<br>

也可以用一个偏移量（相对于历史事件列表中最后一个事件）来查询历史事件。负的偏移量将从历史事件列表表尾向前偏移。在下面的例子中，历史事件号为2的事
件“vi
mydata”就是用一个负的偏移量查询到的。必须注意的是，这个偏移量是相对于历史事件列表中的最后一个事件的。在本例中，历史事件列表中最后一个事件
是事件5，历史事件列表中第一个事件为1。从历史事件号为5的事件，往前偏移4，即是历史事件号为2的事件。<br>

<br>

［例】<br>

<br>

$ !-4<br>

<br>

vi mydata<br>

<br>

如果键入!!，则系统默认为上一事件。下面的例子中，用户在命令行上键入!!命令，系统将执行上一事件：“ls”命令。<br>

<br>

［例】<br>

<br>

$ !!<br>

<br>

ls<br>

<br>

mydata today reports<br>

<br>

也可以用“模式”来搜索一个历史事件。搜索的“模式”必须用符号“?”括起来。下例是用“模式”“?myd?”来搜索历史事件号为3的历史事件“vi mydata”。<br>

<br>

［例】<br>

<br>

$ !?myd?<br>

<br>

vi mydata<br>

<br>

   1. 查询历史事件<br>

<br>

      可以在命令行上编辑历史事件列表中的事件。表10-3列出了查询历史事件列表的各种操作。<br>

<br>

      表10-3　查询历史事件操作<br>

<br>

      查询历史事件操作<br>

<br>

      功能<br>

<br>

      Ctrl+n或向下光标键<br>

<br>

      移至历史事件列表中当前事件的下一历史事件<br>

<br>

      Ctrl+p或向上光标键<br>

<br>

      移至历史事件列表中当前事件的前一历史事件<br>

<br>

      Esc &lt;<br>

<br>

      移至历史事件列表表首<br>

<br>

      Esc &gt;<br>

<br>

      移至历史事件列表表尾<br>

<br>

      !event_num<br>

<br>

      用历史事件号来定位一个历史事件<br>

<br>

      !characters<br>

<br>

      用历史事件的字符前缀来查询一个历史事件<br>

<br>

      !?pattern<br>

<br>

      用“模式”来查询历史事件列表中的事件<br>

<br>

      !-event_num<br>

<br>

      通过偏移量来定位历史事件<br>

   2. 配置history：HISTFILE及HISTSIZE<br>

<br>

系统保存的历史事件数被保存在一个特定的系统变量中，这个变量就是HISTSIZE。这个变量的缺省值通常被设置为500。这个值可以被修改。例如：<br>

<br>

$ HISTSIZE=10<br>

<br>

将HISTSIZE的值重新设置为10。<br>

<br>

历史事件被保存在一个文件中，文件名由变量HISTFILE指定。通常这个文件的缺省名是.bash_history。通过给变量HISTFILE赋值，可以指定新的文件名。<br>

<br>

［例】<br>

<br>

$ echo $HISTFILE<br>

<br>

/home/lisa/.bash_history<br>

<br>

$ HISTFILE=”/home/lisa/newhist”<br>

<br>

$ echo $HISTFILE<br>

<br>

/home/lisa/newhist<br>

<br>

以上操作先显示变量HISTFILE的值，然后赋予它新的值“/home/lisa/newhist”，以后所有的历史事件将被保存在newhist文件中。<br>

<br>
别名<br>

<br>

   还有一个使工作变得轻松的方法是使用命令别名。命令别名通常是其他命令的缩写，用来减少键盘输入。<br>

<br>

命令格式为:<br>

<br>

alias ［alias-name=’original-command’］<br>

<br>

其中，alias-name是用户给命令取的别名，original-command是原来的命令和参数。需要注意的是，由于Bash是以空格或者回车来
识别原来的命令的，所以如果不使用引号就可能导致Bash只截取第一个字，从而出现错误。如果alias命令后面不使用任何参数，则显示当前正在使用的被
别名化的命令及其别名。为命令取的别名在该次登录期间始终有效。如果用户需要别名在每次登录时都有效，那么就将alias命令写到初始化脚本文件中。<br>

<br>

［例］如果经常要键入如下的命令，最好为它建立一个别名来减少工作量。<br>

<br>

$ cd /usr/X11/lib/X11<br>

<br>

假如为这个长命令建立一个名为goconfig的别名，在Bash提示符下键入如下命令：<br>

<br>

$ alias goconfig=’cd /usr/X11/lib/X11’<br>

<br>

现在，除非您退出Bash，键入goconfig将和原来的长命令有同样的作用。如果想取消别名，可以使用下面的命令：<br>

<br>

$ unalias goconfig<br>

<br>

这是一些很多人认为有用的别名，可以把它们写入初始化脚本文件中来提高工作效率：<br>

<br>

alias ll=’ls –l’<br>

<br>

alias log=’logout’<br>

<br>

alias ls=’ls –F’<br>

<br>

如果您是一名DOS用户并且习惯了DOS命令，可以用下面的别名定义使Linux表现得象DOS一样：<br>

<br>

alias dir=’ls’<br>

<br>

alias copy=’cp’<br>

<br>

alias rename=’mv’<br>

<br>

alias md=’mkdir’<br>

<br>

alias rd=’rmdir’<br>

<br>

注意：在定义别名时，等号两边不能有空格，否则shell不能决定您需要做什么。仅在命令中包含空格或特殊字符时才需要引号。<br>

<br>

如果键入不带任何参数的alias命令，将显示所有已定义的别名。<br>

<br>

提示符<br>

<br>

Bash有两级提示符。第一级提示符是经常见到的Bash在等待命令输入时的情况。第一级提示符的默认值是$符号。如果用户不喜欢这个符号，或者愿意自己定义提示符，只需修改PS1变量的值。例如将其改为：<br>

<br>

PS1=”Enter a command:”<br>

<br>

第二级提示符是当Bash为执行某条命令需要用户输入更多信息时显示的。第二级提示符默认为&gt;。如果需要自己定义该提示符，只需改变PS2变量的值。例如将其改为：<br>

<br>

PS2=”More information:”<br>

<br>

上面的两个例子都是设定提示符为静态字符串的情况。其实用户也可以使用一些事先已经定义好的特殊字符。这些特殊字符将使提示符中包含当前时间之类的信息。表10-4列出了最常用的一些特殊字符及其含义。<br>

<br>

表10-4　bash提示符常用特殊字符<br>

<br>

　<br>

<br>

特殊字符<br>

<br>

说 明<br>

<br>

!<br>

<br>

显示该命令的历史编号<br>

<br>

#<br>

<br>

显示shell激活后，当前命令的历史编号<br>

<br>

$<br>

<br>

显示一个$符号，如果当前用户是root则显示#符号<br>

<br>

\<br>

<br>

显示一个反斜杠<br>

<br>

d<br>

<br>

显示当前日期<br>

<br>

h<br>

<br>

显示运行该shell的计算机主机名<br>

<br>

n<br>

<br>

打印一个换行符，这将导致提示符跨行<br>

<br>

s<br>

<br>

显示正在运行的Shell的名称<br>

<br>

t<br>

<br>

显示当前时间<br>

<br>

u<br>

<br>

显示当前用户的用户名<br>

<br>

W<br>

<br>

显示当前工作目录基准名<br>

<br>

w<br>

<br>

显示当前工作目录<br>

<br>

　<br>

<br>

这些特殊字符可以组合起来，为用户提供一些提示符，提供很有用的信息。下面来看几个实际例子：<br>

<br>

PS1=”t”<br>

<br>

将使提示符变成如下所示：<br>

<br>

02:16:15<br>

<br>

而 PS1=t<br>

<br>

将使提示符变成如下所示：<br>

<br>

t<br>

<br>

若PS1=”t\”<br>

<br>

将使提示符变成如下所示：<br>

<br>

02:16:30<br>

<br>

该例就是使用两个特殊字符的组合得到的。<br>

<br>

控制shell的运行方式<br>

<br>

Bash有一些特殊变量，能控制shell以不同的方式工作。例如，变量noclobber能防止在重定向输出时意外地覆盖一个文件。通过set命令可以
设置noclobber变量的有效或无效。set命令有两个参数：一个是指定变量开（on）或关（off）的选项，一个是特殊变量的变量名。要使某一特殊
变量开（有效），用-o选项，要使其关（无效），用+o选项。例如：<br>

<br>

$ set –o noclobber // 使noclobber变量开<br>

<br>

$ set +o noclobber // 使noclobber变量关<br>

<br>

三个最常用的shell特殊变量有：ignoreeof、noclobber及noglob。<br>

<br>

ignoreeof<br>

<br>

ignoreeof变量用来禁止使用ctrl+d来退出shell（ctrl+d不仅用来退出shell，而且可以终止用户直接输往标准输出上的输入。该
操作经常在一些shell实用命令中使用，例如实用命令cat。在这些实用程序操作中，非常容易误操作而意外地退出shell。ignoreeof特殊变
量正是用来防止这种意外的退出。例如：<br>

<br>

$ set –o ignoreeof<br>

<br>

之后，用户只能用logout或exit命令退出shell。<br>

<br>

noclobber<br>

<br>

noclobber变量可以在重定向输出时保护已存在的文件，防止被意外地覆盖。在下例中，用户设置noclobber为有效，在重定向时，用户试图去覆盖已经存在的文件myfile，此时系统将返回一个错误信息。<br>

<br>

［例］<br>

<br>

$ set –o noclobber<br>

<br>

$ cat preface&gt;myfile<br>

<br>

bash: myfile: cannot overwrite existing file<br>

<br>

$<br>

<br>

noglob<br>

<br>

设置noglob变量后，shell将不扩展文件名中一些特殊的字符或字符串。如字符*、?、［
］等将不再作为通配符。如果用户希望列出结尾为?的文件名answer?，可通过如下步骤：首先，用户使noglob变量为无效，然后再列出文件名。可以
看到，目前命令行上的问号?被认为是文件名中的一个字符，而不再被看作通配符。<br>

<br>

$ set –o noglob<br>

<br>

$ ls answer?<br>

<br>

answer?<br>

<br>

子shell与export命令<br>

<br>

用户登录到Linux系统后，系统将启动一个用户shell。在这个shell中，可以使用shell命令或声明变量，也可以创建并运行shell脚本程
序。运行shell脚本程序时，系统将创建一个子shell。此时，系统中将有两个shell，一个是登录时系统启动的shell，另一个是系统为运行脚
本程序创建的shell。当一个脚本程序运行完毕，它的脚本shell将终止，可以返回到执行该脚本之前的shell。从这种意义上来说，用户可以有许多
shell，每个shell都是由某个shell（称为父shell）派生的。<br>

<br>

在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量，当该脚本程序运行时，这个定义的变量只是该脚本程
序内的一个局部变量，其他的shell不能引用它，要使某个变量的值可以在其他shell中被改变，可以使用export命令对已定义的变量进行输出。
export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。<br>

<br>

［例］在本例中，变量myfile是在dispfile脚本程序中定义的。然后用export命令将变量myfile输出至任何子shell，例如当执行printfile脚本程序时产生的子shell。<br>

<br>

dispfile脚本程序清单：<br>

<br>

/**************begin dispfile**************/<br>

<br>

myfile=”List”<br>

<br>

export myfile<br>

<br>

echo “Displaying $myfile”<br>

<br>

pr –t –n $myfile<br>

<br>

printfile<br>

<br>

/**************end dispfile***************/<br>

<br>

　<br>

<br>

printfile脚本程序清单：<br>

<br>

/**************begin printfile**************/<br>

<br>

echo “Printing $myfile”<br>

<br>

lpr $myfile&amp;<br>

<br>

/**************end printfile**************/<br>

<br>

$dispfile<br>

<br>

Displaying List<br>

<br>

1 screen<br>

<br>

2 modem<br>

<br>

3 paper<br>

<br>

Printing List<br>

<br>

$<br>

<br>

定制Bash<br>

<br>

在本节中已经介绍了很多定制Bash的方法，但是迄今为止，这些方法都只是对当前Bash对话有用。只要用户退出登录，所做的一切改变都会丢失。所以应该在Bash的初始化文件中做永久性的修改。<br>

<br>

用户可以将每次启动Bash所需要执行的命令放入初始化文件中，最常见的命令就是alias命令和变量定义两种。系统中的每个用户在其主目录中都有一个.bash_profile文件，Bash每次启动时都将读取该文件，其中包含的所有命令都将被执行。<br>

<br>

下面便是默认.bash_profile文件的代码：<br>

<br>

#.bash_profile<br>

<br>

#Get the aliases and functions<br>

<br>

if ［-f ~/.bashrc ］;then<br>

<br>

.~/.bashrc<br>

<br>

fi<br>

<br>

#User specific environment and startup programs<br>

<br>

PATH=$PATH:$HOME/bin<br>

<br>

ENV=$HOME/.bashrc<br>

<br>

USERNAME=””<br>

<br>

Export USERNAME ENV PATH<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 10:55 <a href="http://www.cnitblog.com/ygb/articles/5480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>屏幕文本编辑器Vi[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5479.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 02:53:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5479.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5479.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5479.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5479.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5479.html</trackback:ping><description><![CDATA[屏幕文本编辑器Vi<br>

<br>

本章介绍Linux上最常用的文本编辑器Vi。文本编辑器是所有计算机系统中最常使用的一种工具。用户在使用计算机的时候，往往需要建立自己的文件，无论是一般的文本文件、数据文件，还是编写的源程序文件，这些工作都离不开编辑器。<br>

<br>

Linux系统提供了一个完整的编辑器家族系列，如Ed、Ex、Vi和Emacs等，按功能它们可以分为两大类：行编辑器（Ed、Ex）和全屏幕编辑器
（Vi、Emacs）。行编辑器每次只能对一行进行操作，使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑，用户编辑的文件直接显示在屏幕上，修
改的结果可以立即看出来，克服了行编辑的那种不直观的操作方式，便于用户学习和使用，具有强大的功能。<br>

<br>

Vi是Linux系统的第一个全屏幕交互式编辑程序，它从诞生至今一直得到广大用户的青睐，历经数十年仍然是人们主要使用的文本编辑工具，足见其生命力之强，而强大的生命力是其强大的功能带来的。<br>

<br>

本章中，我们将循序渐进地介绍如何使用Vi来建立、编辑、显示以及处理文件。（注：文中的大写字母为［shift］键+相应的小写字母的组合）<br>

<br>

　Vi简介<br>

<br>

Vi是“Visual interface”的简称，它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作，而且用户可以根据自己的需要对其进行定制，这是其他编辑程序所没有的。<br>

<br>

Vi不是一个排版程序，它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排，它只是一个文本编辑程序。<br>

<br>

Vi没有菜单，只有命令，且命令繁多。Vi有三种基本工作模式：命令行模式、文本输入模式和末行模式。<br>

<br>

命令行模式<br>

<br>

任何时候，不管用户处于何种模式，只要按一下键，即可使Vi进入命令行模式；我们在shell环境（提示符为$）下输入启动Vi命令，进入编辑器时，也是处于该模式下。<br>

<br>

在该模式下，用户可以输入各种合法的Vi命令，用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释，若输入的字符是合法的Vi命令，
则Vi在接受用户命令之后完成相应的动作。但需注意的是，所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令，Vi会响铃报警。<br>

<br>

文本输入模式<br>

<br>

在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下，用户输入的任何字符都被Vi当做文件内容保存起来，并将其显示在屏幕上。在文本输入过程中，若想回到命令模式下，按键即可。<br>

<br>

末行模式<br>

<br>

末行模式也称ex转义模式。<br>

<br>

Vi和Ex编辑器的功能是相同的，二者主要区别是用户界面。在Vi中，命令通常是单个键，例如i、a、o等；而在Ex中，命令是以按回车键结束的正文行。
Vi有一个专门的“转义”命令，可访问很多面向行的Ex命令。在命令模式下，用户按“:”键即可进入末行模式下，此时Vi会在显示窗口的最后一行（通常也
是屏幕的最后一行）显示一个“:”作为末行模式的提示符，等待用户输入命令。多数文件管理命令都是在此模式下执行的（如把编辑缓冲区的内容写到文件中
等）。末行命令执行完后，Vi自动回到命令模式。例如：<br>

<br>

:1，$s / A / a / g<br>

<br>

则从文件第一行至文件尾将大写A全部替换成小写a。<br>

<br>

若在末行模式下输入命令过程中改变了主意，可按键，或用退格键将输入的命令全部删除之后，再按一下退格键，即可使Vi回到命令模式下。<br>

<br>

Vi编辑器的三种工作模式之间的转换如图11-1所示。<br>

<br>

<br>

　<br>

<br>

如果要从命令模式转换到编辑模式，可以键入命令a或者i；如果需要从文本模式返回，则按Esc键即可。在命令模式下输入“:”即可切换到末行模式，然后输入命令。<br>

<br>

第二十五课 Vi的进入与退出　　　　　　2000年/6月/13日<br>

<br>

<br>

Vi 的进入<br>

<br>

用户登录到系统中之后，系统给出提示符“$”。在提示符后键入Vi和想要编辑（或建立）的文件名，便可进入Vi。<br>

<br>

［例1］ 键入命令：<br>

<br>

$ vi example.c<br>

<br>

屏幕显示如下：<br>

<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” ［New File］<br>

<br>

如果只键入Vi，而不带文件名，也可以进入Vi。之后在光标处键入文件内容，退出Vi时，只需在退出命令后输入文件名即可。<br>

<br>

进入Vi之后，首先进入的就是命令模式，也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命令来解释。光标停在屏幕第一行首位上（用表示），
其余各行行首均有一个“~”符号，表示该行为空行。最后一行也称状态行，显示出当前正在编辑的文件名以及其状态。如本例是［New
File］，表示example.c是一个新建的文件。如果example.c文件已在系统中存在，那么输入上述命令后，则在屏幕上显示出该文件的内容，
并且光标停在第一行的首位，在状态行显示出该文件的文件名、行数和字符数。<br>

<br>

［例2］ 键入命令：<br>

<br>

$ vi example.c<br>

<br>

然后键入：<br>

<br>

#include<br>

<br>

main （ ）<br>

<br>

{ int k ;<br>

<br>

for （ k=0 ; k&lt;3 ; k++） add（ ）;<br>

<br>

}<br>

<br>

add（ ）<br>

<br>

{ static int x=0;<br>

<br>

x++ ;<br>

<br>

printf（“x = %d\n”, x）;<br>

<br>

}<br>

<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” ［ New File］<br>

<br>

注意，在这里我们为了节省篇幅起见，屏幕只显示15行。事实上，初始的显示行数与用户所用终端有关，一般的CRT终端可显示25行。在窗口系统中，显示行
数与运行Vi的那个窗口有关。然而我们可以对显示行数进行设置。例如，在能显示25行的CRT终端上，让Vi只显示15行。设置的方法将在本节后面介绍。<br>

<br>

当用Vi建立一个新文件时，在进入Vi的命令中也可以不给出文件名，当编辑完文件需要保存数据时，再由用户指定文件名。<br>

<br>

进入Vi时，用户不仅可以指定一个待编辑的文件名，而且还有许多附加操作。<br>

<br>

<br>

如果希望在进入Vi之后，光标处于文件中特定的某行上，可在Vi后加上任选项+n，其中n为指定的行数。<br>

<br>

［例3］ 键入命令：<br>

<br>

$ vi +5 example1.c<br>

<br>

后，屏幕显示如下：<br>

<br>

#include<br>

<br>

main （ ）<br>

<br>

{ int k ;<br>

<br>

for （ k=0 ; k&lt;3 ; k++） add（ ）;<br>

<br>

}<br>

<br>

add（ ）<br>

<br>

{ static int x=0;<br>

<br>

x++ ;<br>

<br>

printf（“x = %d\n”, x）;<br>

<br>

}<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” 12 lines, 125 characters<br>

<br>

光标将位于文件example1.c中的第5行上。<br>

<br>

如果希望在进入Vi之后光标处于文件最末行，则只需把命令中附加项“+”后面的数字n省略掉即可。<br>

<br>

<br>

在进入Vi时，除了可以指定一个光标起始行号之外，还可以在命令中指定一个模式串，此时在进入Vi后，光标就处于文件中第一个与指定模式串相匹配的那行上。<br>

<br>

［例4］ 键入命令：<br>

<br>

$ vi +/int example1.c<br>

<br>

屏幕显示如下：<br>

<br>

#include<br>

<br>

main （ ）<br>

<br>

{ int k ;<br>

<br>

for （ k=0 ; k&lt;3 ; k++） add（ ）;<br>

<br>

}<br>

<br>

add（ ）<br>

<br>

{ static int x=0;<br>

<br>

x++ ;<br>

<br>

printf（“x = %d\n”, x）;<br>

<br>

}<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” 12 lines, 125 characters<br>

<br>

光标将位于文件example1.c中的第3行上。<br>

<br>

<br>

使用Vi可以同时编辑多个文件，只要在进入Vi的命令中写入所要操作的文件即可，还可以使用通配符。<br>

<br>

［例5］ 键入命令：<br>

<br>

$ vi *.cat<br>

<br>

就可以编辑所有后缀为cat的文件了。当然，您还可以使用shell中内置的模式匹配来装载文件，这样会更富技巧性。一旦您在命令行中包含了所有的待编辑文件名，就可以在Vi中方便地移来移去。<br>

<br>

退出Vi<br>

<br>

当编辑完文件，准备退出Vi返回到shell时，可以使用以下几种方法之一。<br>

<br>

<br>

在命令模式中，连按两次大写字母Z，若当前编辑的文件曾被修改过，则Vi保存该文件后退出，返回到shell；若当前编辑的文件没被修改过，则Vi直接退出, 返回到shell。<br>

<br>

<br>

在末行模式下，输入命令<br>

<br>

:w<br>

<br>

Vi保存当前编辑文件，但并不退出，而是继续等待用户输入命令。在使用w命令时，可以再给编辑文件起一个新的文件名。<br>

<br>

<br>

［例6］<br>

<br>

:w newfile<br>

<br>

此时Vi将把当前文件的内容保存到指定的newfile中，而原有文件保持不变。若newfile是一个已存在的文件，则Vi在显示窗口的状态行给出提示信息：<br>

<br>

File exists （use ! to override）<br>

<br>

此时，若用户真的希望用文件的当前内容替换newfile中原有内容，可使用命令<br>

<br>

:w! newfile<br>

<br>

否则可选择另外的文件名来保存当前文件。<br>

<br>

<br>

在末行模式下，输入命令<br>

<br>

:q<br>

<br>

系统退出Vi返回到shell。若在用此命令退出Vi时，编辑文件没有被保存，则Vi在显示窗口的最末行显示如下信息：<br>

<br>

No write since last change （use ! to overrides）<br>

<br>

提示用户该文件被修改后没有保存，然后Vi并不退出，继续等待用户命令。若用户就是不想保存被修改后的文件而要强行退出Vi时，可使用命令<br>

<br>

:q!<br>

<br>

Vi放弃所作修改而直接退到shell下。<br>

<br>

<br>

在末行模式下，输入命令<br>

<br>

:wq<br>

<br>

Vi将先保存文件，然后退出Vi返回到shell。<br>

<br>

<br>

在末行模式下，输入命令<br>

<br>

:x<br>

<br>

该命令的功能同命令模式下的ZZ命令功能相同。<br>
Vi中的行号<br>

<br>

Vi中的许多命令都要用到行号及行数等数值。若编辑的文件较大时，自己去数是非常不方便的。为此Vi提供了给文本加行号的功能。这些行号显示在屏幕的左边，而相应行的内容则显示在行号之后。<br>

<br>

使用的命令为：在末行方式下输入命令：<br>

<br>

:set number<br>

<br>

需要说明的是，这里加的行号只是显示给用户看的，它们并不是文件内容的一部分。<br>

<br>

在一个较大的文件中，用户可能需要了解光标当前行是哪一行，在文件中处于什么位置，可在命令模式下用组合键&lt;Ctrl+g&gt;，此时Vi会在显示窗口的最后一行显示出相应信息。该命令可以在任何时候使用。<br>

<br>

［例7］<br>

<br>

#include &lt;stdio.h&gt;<br>

<br>

main （ ）<br>

<br>

{ int k ;<br>

<br>

for （ k=0 ; k&lt;3 ; k++） add（ ）;<br>

<br>

}<br>

<br>

add（ ）<br>

<br>

{ static int x=0;<br>

<br>

x++ ;<br>

<br>

printf（“x = %d\n”, x）;<br>

<br>

}<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” ［Modified］ lines 4 of 10 --40%-- col 11<br>

<br>

在末行方式下，我们可以输入命令nu（单词number的缩写）来获得光标当前行的行号与该行内容。<br>

<br>

光标移动操作<br>

<br>

全屏幕文本编辑器中，光标的移动操作无疑是最经常使用的操作了。用户只有熟练地使用移动光标的这些命令，才能迅速准确地到达所期望的位置处进行编辑。<br>

<br>

Vi中的光标移动既可以在命令模式下，也可以在文本输入模式下，但操作的方法不尽相同。<br>

<br>

在文本输入模式下，可直接使用键盘上的四个方向键移动光标。<br>

<br>

在命令模式下，有很多移动光标的方法。不但可以使用四个方向键来移动光标，还可以用h、j、k、l这四个键代替四个方向键来移动光标，这样可以避免由于不
同机器上的不同键盘定义所带来的矛盾，而且使用熟练后可以手不离开字母键盘位置就能完成所有操作，从而提高工作效率。另外还可以用&lt;
Spacebar&gt;、&lt;Backspace&gt;、&lt;Ctrl+n&gt;和&lt;ctrl+p&gt;四个键或组合键移动光标。
且以上这三种键在实现功能上是等价的。除此之外，还有一些移动光标的命令。下面对它们的工作方式介绍如下：<br>

<br>

&lt;Spacebar&gt;、® （均称为右向键）<br>

<br>

右向键的作用是将光标向右移动一个位置。若在向右键前先输入一个数字n，那么光标就向右移动n个位置。例如5l表示光标向右移动5个位置。需要注意的是，
光标移动不能超过当前行的末尾。若给定的n超过光标当前位置至行尾的字符个数，如果用右向键，光标只能移到行尾；如果用&lt;
Spacebar&gt;，光标移到下面一行或几行的适当位置。<br>

<br>

h、&lt;Backspace&gt;、¬ （向左键）<br>

<br>

执行一次向左键，光标向左移动一个位置。同向右键一样，也可以在向左键的前面输入一个数字n，那么光标就向左移动n个位置。需要注意的是，如果用左向键，光标左移不能超出该行的开头；如果用&lt;Backspace&gt;，光标移到上面一行或几行的适当位置。<br>

<br>

j、&lt;Ctrl+n&gt;、¯ （向下键）<br>

<br>

执行一次向下键光标向下移动一个位置（即一行），但光标所在的列不变。当这些命令前面加上数字n，则光标下移n行。<br>

<br>

Vi除了可以用向下键将光标下移外，还可以用&lt;Enter&gt;键和“+”键将光标下移一行或n行（不包括本行在内），但此时光标下移之后将位于该行的第一个字符处。例如：<br>

<br>

3j 光标下移3行，且光标所在列的位置不变。<br>

<br>

3+或3&lt;Enter&gt; 光标下移3行，且光标位于该行的行首。<br>

<br>

k、&lt;Ctrl+p&gt;、­ （向上键）<br>

<br>

执行一次向上键光标向上移动一个位置（即一行），但光标所在的列不变。同样在这些命令前面加上数字n，则光标上移n行。<br>

<br>

若希望光标上移之后，光标位于该行的行首，则可以使用命令“- ”。<br>

<br>

L （移至行首）<br>

<br>

L 命令是将光标移到当前行的开头，即将光标移至当前行的第一个非空白处（非制表符或非空格符）。<br>

<br>

$（移至行尾）<br>

<br>

该命令将光标移到当前行的行尾，停在最后一个字符上。若在$命令之前加上一个数字n，则光标下移n-1行并到达行尾。<br>

<br>

［行号］ G（移至指定行）<br>

<br>

该命令将光标移至指定行号所指定的行的行首。这种移动称为绝对定位移动。<br>

<br>

［例8］<br>

<br>

#include &lt;stdio.h&gt;<br>

<br>

main （ ）<br>

<br>

{ int k ;<br>

<br>

for （ k=0 ; k&lt;3 ; k++） add（ ）;<br>

<br>

}<br>

<br>

add（ ）<br>

<br>

{ static int x=0;<br>

<br>

x++ ;<br>

<br>

printf（“x = %d\n”, x）;<br>

<br>

}<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” 12 lines, 125 characters<br>

<br>

键入命令:6G后，屏幕显示如下：<br>

<br>

#include &lt;stdio.h&gt;<br>

<br>

main （ ）<br>

<br>

{ int k ;<br>

<br>

for （ k=0 ; k&lt;3 ; k++） add（ ）;<br>

<br>

}<br>

<br>

add（ ）<br>

<br>

{ static int x=0;<br>

<br>

x++ ;<br>

<br>

printf（“x = %d\n”, x）;<br>

<br>

}<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

~<br>

<br>

“ example.c” 12 lines, 125 characters<br>

<br>

光标移到了第6行的行首。<br>

<br>

若省略行号，则光标移至该文件的最后一行的行首，即无论该文件有多少屏，都跳至最后一行。<br>

<br>

第二十七课 vi命令　　　2000年/6月/26日<br>

<br>

　<br>

<br>

在屏幕上移动<br>

<br>

Vi提供了三个关于光标在全屏幕上移动并且文件本身不发生滚动的命令。它们分别是H、M和L命令。<br>

<br>

   1. H命令<br>

<br>

      该命令将光标移至屏幕首行的行首（即左上角），也就是当前屏幕的第一行，而不是整个文件的第一行。利用此命令可以快速将光标移至屏幕顶部。若在H命令之前加上数字n，则将光标移至第n行的行首。<br>

<br>

      ［例9］ 屏幕显示如下内容：<br>

<br>

      #include &lt;stdio.h&gt;<br>

<br>

      main （ ）<br>

<br>

      { int k ;<br>

<br>

      for （ k=0 ; k&lt;3 ; k++） add（ ）; }<br>

<br>

      add（ ）<br>

<br>

      { static int x=0;<br>

<br>

      x++ ;<br>

<br>

      printf（“x=%d\n”, x）;<br>

<br>

      }<br>

<br>

      ~<br>

<br>

      ~<br>

<br>

      ~<br>

<br>

      ~<br>

<br>

      ~<br>

<br>

      “ example.c” ［ New File］<br>

<br>

      在命令模式下输入4H命令后，光标移到以for开头的这一行的字母f上。<br>

<br>

      值得一提的是，使用命令dH将会删除从光标当前所在行至所显示屏幕首行的全部内容。<br>

   2. M命令<br>

<br>

该命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行；如果并未充满，则移动到文本的那些行的中间行。利用此
命令可以快速地将光标从屏幕的任意位置移至屏幕显示文件的中间行的行首。例如，在上面屏幕显示的情况下（不论光标在屏幕的何处），在命令模式下，输入命令
M之后，光标都将移到add这一行的字母a上。<br>

<br>

      同样值得一提的是，使用命令dM将会删除从光标当前所在行至屏幕显示文件的中间行的全部内容。<br>

   3. L命令<br>

<br>

当文件显示内容超过一屏时，该命令将光标移至屏幕上的最底行的行首；当文件显示内容不足一屏时，该命令将光标移至文件的最后一行的行首。可见，利用此命令
可以快速准确地将光标移至屏幕底部或文件的最后一行。若在L命令之前加上数字n，则将光标移至从屏幕底部算起第n行的行首。例如，在上面屏幕显示的情况下
（不论光标在屏幕的何处），在命令模式下，输入命令3L之后，光标都将移到x++这一行的字母x上。<br>

<br>

同样值得一提的是，使用命令dL将会删除从光标当前行至屏幕底行的全部内容。<br>

<br>

按字移动光标<br>

<br>

首先介绍一下Vi中“字”的概念。在Vi中“字”有两种含义。一种是广义的字，它可以是两个空格之间的任何内容。<br>

<br>

［例10］ 在文件example.c 中的第4行：<br>

<br>

{int k；<br>

<br>

它只有2个字，一个是{int ，另一个是k;<br>

<br>

Vi中另一种字是狭义上的字，在此种意义之下，英文单词、标点符号和非字母字符（如!、@、#、$、%、^、&amp;、*、（、）、-、+、{、}、
［、］、~、|、\、&lt;、&gt;、/等）均被当成是一个字。因此，上面那一行中就包括{、int、k、；这4个字。<br>

<br>

Vi中使用大写命令一般就是指将字作为广义来对待，使用小写命令就是作为狭义对待。<br>

<br>

搞清楚Vi中字的含义后，我们就可以介绍按字移动光标的命令了。<br>

<br>

Vi 一共提供了三组关于按字移动光标的命令，分别是：<br>

<br>

   1. w和W命令<br>

<br>

      将光标右移至下一个字的字首；<br>

<br>

      ［例11］ 屏幕上显示如下：<br>

<br>

      printf（“Hello Mr.Huang!\n”）;<br>

<br>

      现在使用w命令，把光标移到下一个字（狭义）的字首“（”上：<br>

<br>

      printf（“Hello Mr.Huang!\n”）;<br>

<br>

      下面使用W命令，将把光标移到下一个字（广义）的字首“M”上：<br>

<br>

      printf（“Hello Mr.Huang!\n”）;<br>

   2. e和E命令<br>

<br>

      如果光标起始位置处于字内（即非字尾处），则该命令将把光标移到本字字尾；如果光标起始位置处于字尾，则该命令将把光标移动到下一个字的字尾。<br>

   3. b和B<br>

<br>

如果光标处于所在字内（即非字首），则该命令将把光标移至本字字首；如果光标处于所在字字首，则该命令将把光标移到上一个字的字首。<br>

<br>

［例12］ 屏幕显示如下：<br>

<br>

printf（“Hello Mr.Huang!\n”）;<br>

<br>

现在使用b命令，由于光标处于该字中间，所以光标移动到本字字首“H”处：<br>

<br>

printf（“Hello Mr.Huang!\n”）;<br>

<br>

如果使用B命令，则如下所示：<br>

<br>

printf（“Hello Mr.Huang!\n”）;<br>

<br>

按句移动光标<br>

<br>

在Vi中，一个句子被定义为是以逗号（,）、句号（.）、问号（?）和感叹号（!）结尾，且其后面跟着至少两个以上（含两个）空格或一个换行符的字符序列。<br>

<br>

Vi提供了关于按句移动光标的两个命令，分别为：<br>

<br>

1. （ 命令<br>

<br>

将光标移至上一个句子的开头。<br>

<br>

2. ） 命令<br>

<br>

该命令将光标移至下一个句子的开头。<br>

<br>

按段移动光标<br>

<br>

在Vi中，一个段被定义为是以一个空白行开始和结束的片段。Vi提供了关于按段移动光标的两个命令，分别为：<br>

<br>

1. { 命令<br>

<br>

该命令将光标向前移至上一个段的开头；<br>

<br>

2. } 命令<br>

<br>

该命令将光标向后移至下一个段的开头。<br>

<br>

屏幕滚动<br>

<br>

屏幕命令是以屏幕为单位移动光标的，常用于文件的滚屏和分页。需要注意的是，屏幕命令不是光标移动命令，不能作为文本限定符用于删除命令中。<br>

<br>

在命令模式下和文本输入模式下均可以使用屏幕滚动命令。<br>

<br>

　<br>

<br>

1. 滚屏命令<br>

<br>

关于滚屏命令有两个：<br>

<br>

· &lt; Ctrl+u &gt; 将屏幕向前（文件头方向）翻滚半屏；<br>

<br>

· &lt; Ctrl+d &gt; 将屏幕向后（文件尾方向）翻滚半屏。<br>

<br>

可以在这两个命令之前加上一个数字n，则屏幕向前或向后翻滚n行。并且这个值被系统记住，以后再用&lt; Ctrl+u &gt;和&lt; Ctrl+d &gt;命令滚屏时，还滚相应的行数。<br>

<br>

2. 分页命令<br>

<br>

关于分页命令也有两个：<br>

<br>

· &lt; Ctrl+f &gt; 将屏幕向文件尾方向翻滚一整屏（即一页）；<br>

<br>

· &lt; Ctrl+b &gt; 将屏幕向文件首方向翻滚一整屏（即一页）。<br>

<br>

同样也可以在这两个命令之前加上一个数字n，则屏幕向前或向后移动n页。<br>

<br>

3. 状态命令&lt; Ctrl+G &gt;<br>

<br>

命令显示在vi状态行上的vi状态信息，包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。<br>

<br>

4. 屏幕调零命令<br>

<br>

Vi 提供了三个有关屏幕调零的命令。它们的格式分别为：<br>

<br>

· ［行号］ z ［行数］ &lt;回车&gt;<br>

<br>

· ［行号］ z ［行数］ .<br>

<br>

· ［行号］ z ［行数］ _<br>

<br>

若省略了行号和行数，这三个命令分别为将光标所在的当前行作为屏幕的首行、中间行和最末行重新显示；若给出行号，那么该行号所对应的行就作为当前行显示在屏幕的首行、中间行和最末行；若给出行数，则它规定了在屏幕上显示的行数。<br>

<br>

［例13］<br>

<br>

8z16&lt;回车&gt; ：将文件中的第8行作为屏幕显示的首行，并一共显示16行。<br>

<br>

15z . ：将文件中的第15行作为屏幕显示的中间行，显示行数为整屏。<br>

<br>

15z 5_ ：将文件中的第15行作为屏幕显示的最末行，显示行数为5行。<br>

<br>

文本插入操作<br>

<br>

在命令模式下用户输入的任何字符都被Vi当作命令加以解释执行，如果用户要将输入的字符当作是文本内容时，则首先应将Vi的工作模式从命令模式切换到文本输入模式。切换的方式是使用下面的命令。<br>

<br>

　<br>

<br>

插入（Insert）命令<br>

<br>

Vi提供了两个插入命令：i和 I。<br>

<br>

　<br>

<br>

　<br>

<br>

   1. i命令<br>

<br>

      插入文本从光标所在位置前开始,并且插入过程中可以使用&lt;Backspace&gt;键删除错误的输入。此时Vi处于插入状态，屏幕最下行显示“--INSERT--”（插入）字样。<br>

<br>

      ［例14］ 有一正在编辑的文件，如下所示：<br>

<br>

      Welcome to vi world!Come on!<br>

<br>

      ~<br>

<br>

      ~<br>

<br>

      光标位于第一个“!”上，需在其前面插入：<br>

<br>

      This is an example!<br>

<br>

      使用i命令，并输入相应文本后，屏幕显示如下：<br>

<br>

      Welcome to vi world This is an example!!Come on!<br>

<br>

      ~<br>

<br>

      ~<br>

<br>

      由此例可以看到，光标本来是在第一个“!”处，但是由于是从光标所在位置前开始插入，所以这个“!”就被挤到了新插入的文本之后。<br>

   2. I命令<br>

<br>

该命令是将光标移到当前行的行首，然后在其前插入文本。<br>
<div>vi命令<br>
<br>
在屏幕上移动<br>
<br>
Vi提供了三个关于光标在全屏幕上移动并且文件本身不发生滚动的命令。它们分别是H、M和L命令。<br>
<br>
   1. H命令<br>
<br>
      该命令将光标移至屏幕首行的行首（即左上角），也就是当前屏幕的第一行，而不是整个文件的第一行。利用此命令可以快速将光标移至屏幕顶部。若在H命令之前加上数字n，则将光标移至第n行的行首。<br>
<br>
      ［例9］ 屏幕显示如下内容：<br>
<br>
      #include &lt;stdio.h&gt;<br>
<br>
      main （ ）<br>
<br>
      { int k ;<br>
<br>
      for （ k=0 ; k&lt;3 ; k++） add（ ）; }<br>
<br>
      add（ ）<br>
<br>
      { static int x=0;<br>
<br>
      x++ ;<br>
<br>
      printf（“x=%d\n”, x）;<br>
<br>
      }<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      “ example.c” ［ New File］<br>
<br>
      在命令模式下输入4H命令后，光标移到以for开头的这一行的字母f上。<br>
<br>
      值得一提的是，使用命令dH将会删除从光标当前所在行至所显示屏幕首行的全部内容。<br>
   2. M命令<br>
<br>
该命令将光标移至屏幕显示文件的中间行的行首。即如果当前屏幕已经充满,则移动到整个屏幕的中间行；如果并未充满，则移动到文本的那些行的中间行。利用此
命令可以快速地将光标从屏幕的任意位置移至屏幕显示文件的中间行的行首。例如，在上面屏幕显示的情况下（不论光标在屏幕的何处），在命令模式下，输入命令
M之后，光标都将移到add这一行的字母a上。<br>
<br>
      同样值得一提的是，使用命令dM将会删除从光标当前所在行至屏幕显示文件的中间行的全部内容。<br>
   3. L命令<br>
<br>
当文件显示内容超过一屏时，该命令将光标移至屏幕上的最底行的行首；当文件显示内容不足一屏时，该命令将光标移至文件的最后一行的行首。可见，利用此命令
可以快速准确地将光标移至屏幕底部或文件的最后一行。若在L命令之前加上数字n，则将光标移至从屏幕底部算起第n行的行首。例如，在上面屏幕显示的情况下
（不论光标在屏幕的何处），在命令模式下，输入命令3L之后，光标都将移到x++这一行的字母x上。<br>
<br>
同样值得一提的是，使用命令dL将会删除从光标当前行至屏幕底行的全部内容。<br>
<br>
按字移动光标<br>
<br>
首先介绍一下Vi中“字”的概念。在Vi中“字”有两种含义。一种是广义的字，它可以是两个空格之间的任何内容。<br>
<br>
［例10］ 在文件example.c 中的第4行：<br>
<br>
{int k；<br>
<br>
它只有2个字，一个是{int ，另一个是k;<br>
<br>
Vi中另一种字是狭义上的字，在此种意义之下，英文单词、标点符号和非字母字符（如!、@、#、$、%、^、&amp;、*、（、）、-、+、{、}、
［、］、~、|、\、&lt;、&gt;、/等）均被当成是一个字。因此，上面那一行中就包括{、int、k、；这4个字。<br>
<br>
Vi中使用大写命令一般就是指将字作为广义来对待，使用小写命令就是作为狭义对待。<br>
<br>
搞清楚Vi中字的含义后，我们就可以介绍按字移动光标的命令了。<br>
<br>
Vi 一共提供了三组关于按字移动光标的命令，分别是：<br>
<br>
   1. w和W命令<br>
<br>
      将光标右移至下一个字的字首；<br>
<br>
      ［例11］ 屏幕上显示如下：<br>
<br>
      printf（“Hello Mr.Huang!\n”）;<br>
<br>
      现在使用w命令，把光标移到下一个字（狭义）的字首“（”上：<br>
<br>
      printf（“Hello Mr.Huang!\n”）;<br>
<br>
      下面使用W命令，将把光标移到下一个字（广义）的字首“M”上：<br>
<br>
      printf（“Hello Mr.Huang!\n”）;<br>
   2. e和E命令<br>
<br>
      如果光标起始位置处于字内（即非字尾处），则该命令将把光标移到本字字尾；如果光标起始位置处于字尾，则该命令将把光标移动到下一个字的字尾。<br>
   3. b和B<br>
<br>
如果光标处于所在字内（即非字首），则该命令将把光标移至本字字首；如果光标处于所在字字首，则该命令将把光标移到上一个字的字首。<br>
<br>
［例12］ 屏幕显示如下：<br>
<br>
printf（“Hello Mr.Huang!\n”）;<br>
<br>
现在使用b命令，由于光标处于该字中间，所以光标移动到本字字首“H”处：<br>
<br>
printf（“Hello Mr.Huang!\n”）;<br>
<br>
如果使用B命令，则如下所示：<br>
<br>
printf（“Hello Mr.Huang!\n”）;<br>
<br>
按句移动光标<br>
<br>
在Vi中，一个句子被定义为是以逗号（,）、句号（.）、问号（?）和感叹号（!）结尾，且其后面跟着至少两个以上（含两个）空格或一个换行符的字符序列。<br>
<br>
Vi提供了关于按句移动光标的两个命令，分别为：<br>
<br>
1. （ 命令<br>
<br>
将光标移至上一个句子的开头。<br>
<br>
2. ） 命令<br>
<br>
该命令将光标移至下一个句子的开头。<br>
<br>
按段移动光标<br>
<br>
在Vi中，一个段被定义为是以一个空白行开始和结束的片段。Vi提供了关于按段移动光标的两个命令，分别为：<br>
<br>
1. { 命令<br>
<br>
该命令将光标向前移至上一个段的开头；<br>
<br>
2. } 命令<br>
<br>
该命令将光标向后移至下一个段的开头。<br>
<br>
屏幕滚动<br>
<br>
屏幕命令是以屏幕为单位移动光标的，常用于文件的滚屏和分页。需要注意的是，屏幕命令不是光标移动命令，不能作为文本限定符用于删除命令中。<br>
<br>
在命令模式下和文本输入模式下均可以使用屏幕滚动命令。<br>
<br>
　<br>
<br>
1. 滚屏命令<br>
<br>
关于滚屏命令有两个：<br>
<br>
· &lt; Ctrl+u &gt; 将屏幕向前（文件头方向）翻滚半屏；<br>
<br>
· &lt; Ctrl+d &gt; 将屏幕向后（文件尾方向）翻滚半屏。<br>
<br>
可以在这两个命令之前加上一个数字n，则屏幕向前或向后翻滚n行。并且这个值被系统记住，以后再用&lt; Ctrl+u &gt;和&lt; Ctrl+d &gt;命令滚屏时，还滚相应的行数。<br>
<br>
2. 分页命令<br>
<br>
关于分页命令也有两个：<br>
<br>
· &lt; Ctrl+f &gt; 将屏幕向文件尾方向翻滚一整屏（即一页）；<br>
<br>
· &lt; Ctrl+b &gt; 将屏幕向文件首方向翻滚一整屏（即一页）。<br>
<br>
同样也可以在这两个命令之前加上一个数字n，则屏幕向前或向后移动n页。<br>
<br>
3. 状态命令&lt; Ctrl+G &gt;<br>
<br>
命令显示在vi状态行上的vi状态信息，包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。<br>
<br>
4. 屏幕调零命令<br>
<br>
Vi 提供了三个有关屏幕调零的命令。它们的格式分别为：<br>
<br>
· ［行号］ z ［行数］ &lt;回车&gt;<br>
<br>
· ［行号］ z ［行数］ .<br>
<br>
· ［行号］ z ［行数］ _<br>
<br>
若省略了行号和行数，这三个命令分别为将光标所在的当前行作为屏幕的首行、中间行和最末行重新显示；若给出行号，那么该行号所对应的行就作为当前行显示在屏幕的首行、中间行和最末行；若给出行数，则它规定了在屏幕上显示的行数。<br>
<br>
［例13］<br>
<br>
8z16&lt;回车&gt; ：将文件中的第8行作为屏幕显示的首行，并一共显示16行。<br>
<br>
15z . ：将文件中的第15行作为屏幕显示的中间行，显示行数为整屏。<br>
<br>
15z 5_ ：将文件中的第15行作为屏幕显示的最末行，显示行数为5行。<br>
<br>
文本插入操作<br>
<br>
在命令模式下用户输入的任何字符都被Vi当作命令加以解释执行，如果用户要将输入的字符当作是文本内容时，则首先应将Vi的工作模式从命令模式切换到文本输入模式。切换的方式是使用下面的命令。<br>
<br>
　<br>
<br>
插入（Insert）命令<br>
<br>
Vi提供了两个插入命令：i和 I。<br>
<br>
　<br>
<br>
　<br>
<br>
   1. i命令<br>
<br>
      插入文本从光标所在位置前开始,并且插入过程中可以使用&lt;Backspace&gt;键删除错误的输入。此时Vi处于插入状态，屏幕最下行显示“--INSERT--”（插入）字样。<br>
<br>
      ［例14］ 有一正在编辑的文件，如下所示：<br>
<br>
      Welcome to vi world!Come on!<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      光标位于第一个“!”上，需在其前面插入：<br>
<br>
      This is an example!<br>
<br>
      使用i命令，并输入相应文本后，屏幕显示如下：<br>
<br>
      Welcome to vi world This is an example!!Come on!<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      由此例可以看到，光标本来是在第一个“!”处，但是由于是从光标所在位置前开始插入，所以这个“!”就被挤到了新插入的文本之后。<br>
   2. I命令<br>
<br>
该命令是将光标移到当前行的行首，然后在其前插入文本。<br>
<br>
 <br>
<br>
}<br>
<br>
第二十九课 vi命令　　　2000年/7月/10日<br>
<br>
　<br>
<br>
　<br>
<br>
附加（append）命令<br>
<br>
Vi提供了两个附加插入命令：a和A。<br>
<br>
   1. a命令<br>
<br>
      该命令用于在光标当前所在位置之后追加新文本。新输入的文本放在光标之后，在光标后的原文本将相应地向后移动。光标可在一行的任何位置。<br>
<br>
      ［例15］ 以例14原始情况为例，使用a命令，并输入相应文本，屏幕显示如下：<br>
<br>
      Welcome to vi world!This is an example!Come on!<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      本例中光标后的文本“Come on!”被新输入的文本挤到了后面。<br>
   2. A命令<br>
<br>
该命令与a命令不同的是，A命令将把光标挪到所在行的行尾，从那里开始插入新文本。当输入A命令后，光标自动移到该行的行尾。<br>
<br>
a和A命令是把文本插入到行尾的唯一方法。<br>
<br>
　<br>
<br>
打开（open）命令<br>
<br>
不论是Insert命令也好，还是append命令也好，所插入的内容都是从当前行中的某个位置开始的。若我们希望在某行之前或某行之后插入一些新行，则应使用open命令。<br>
<br>
Vi提供了两个打开命令：o和O。<br>
<br>
   1. o命令<br>
<br>
该命令将在光标所在行的下面新开一行，并将光标置于该行的行首，等待输入文本。要注意，当使用&lt;Backspace&gt;删除字符时只能删除从插
入模式开始的位置以后的字符，对于以前的字符不起作用。而且还可以在文本输入方式下输入一些控制字符，例如，Ctrl+l即是插入分页符，显示为^L。<br>
<br>
      ［例16］ 以例14的原始情况为例，只是这次要在当前行下面一行输入文本。使用o命令，并输入相应文本，屏幕显示如下：<br>
<br>
      Welcome to vi world!Come on!<br>
<br>
      This is an example!<br>
<br>
      ~<br>
<br>
      ~<br>
<br>
      新输入的文本出现在原来文本所在行的下一行。<br>
   2. O命令<br>
<br>
和o命令相反，O命令是在光标所在行的上面插入一行，并将光标置于该行的行首，等待输入文本。<br>
<br>
［例17］ 与例14的原始情况相同，要在当前行的上面一行输入文本。使用O命令并输入文本后，屏幕显示如下：<br>
<br>
This is an example!<br>
<br>
Welcome to vi world!Come on!<br>
<br>
~<br>
<br>
~<br>
<br>
文本插入到了当前行之上。<br>
<br>
11.3.4　文本修改<br>
<br>
在命令模式下可以使用Vi提供的各种有关命令对文本进行修改，包括对文本内容的删除、复制、取代和替换等。<br>
<br>
　<br>
<br>
　<br>
<br>
文本删除<br>
<br>
在编辑文本时，经常需要删除一些不需要的文本，我们可以用&lt;Backspace&gt;键将输错或不需要的文本删除，但此时有一个限制就是当删到行头之后，再想删上面那行的内容是不可能的。<br>
<br>
在命令模式下，Vi提供了许多删除命令。这些命令大多是以d开头的。常用的有：<br>
<br>
1. 删除单个字符<br>
<br>
x： 删除光标处的字符。若在x之前加上一个数字n，则删除从光标所在位置开始向右的n个字符。<br>
<br>
X：删除光标前面的那个字符。若在X之前加上一个数字n，则删除从光标前面那个字符开始向左的n个字符。<br>
<br>
显然这两个命令是删除少量字符的快捷方法。<br>
<br>
2. 删除多个字符<br>
<br>
dd：删除光标所在的整行。在dd前可加上一个数字n，表示删除当前行及其后n-1行的内容。<br>
<br>
D或d$：两命令功能一样，都是删除从光标所在处开始到行尾的内容。<br>
<br>
d0：删除从光标前一个字符开始到行首的内容。<br>
<br>
dw：删除一个单词。若光标处在某个词的中间，则从光标所在位置开始删至词尾。同dd命令一样，可在dw之前加一个数字n，表示删除n个指定的单词。<br>
<br>
如果用户不小心进行了误删除操作，也不要紧，Vi提供了恢复误操作的命令，并且可以将恢复的内容移动，放在文本的任何地方。恢复命令用²
np，其中n为寄存器号。这是因为Vi内部有9个用于维护删除操作的寄存器，分别用数字1，2，¼
，9表示，它们分别保存以往用dd命令删除的内容。这些寄存器组成一个队列，例如最近一次使用dd命令删除的内容被放到寄存器1中；当下次再使用dd命令
删除文本内容时，Vi将把寄存器1的内容转存到寄存器2中，而寄存器1中又将是最近一次dd命令删除的内容。以此类推，Vi可以保存有最近九次用dd命令
删除的内容，而前面的用dd命令删除的内容则被抛弃。<br>
<br>
［例18］ 假设当前编辑文件为xu.c<br>
<br>
/* this is a example */<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
void main（ ）<br>
<br>
{<br>
<br>
int i , j ;<br>
<br>
printf（ “ please input a number : / n ” ）;<br>
<br>
scanf （ “ % d ” , &amp;i ） ;<br>
<br>
j = i + 100 ;<br>
<br>
printf （ “ /n j = % d /n ” , j ） ;<br>
<br>
return ;<br>
<br>
}<br>
<br>
我们对其进行如下操作：<br>
<br>
   1. 将光标移至文件第一行，按dd命令，此时文件第一行的内容被删除，且被删除的内容保存在寄存器1中；<br>
   2. 按5j使光标下移至第一个printf语句行；<br>
   3. 按dd命令将该行删除，此时寄存器1中将保存刚刚被删除的内容：<br>
<br>
printf （“ please input a number :\ n ” ）;<br>
<br>
而寄存器1原有的内容：<br>
<br>
/* this is a example */<br>
<br>
则被保存到寄存器2中；<br>
<br>
在最末行模式下，也可以对文件内容进行删除，但它只能删除整行，一次可将某个指定范围内（起始行号，终止行号）的所有行全部删除。需要注意的是，用此种方
法进行删除时，Vi并不把所删内容放入寄存器中，因而当发生误删除操作时，不能用² np命令恢复，只能用u命令进行有限的恢复。<br>
<br>
最后提一下，如何在文本输入方式时将所输入文本删除。用户使用&lt;Ctrl+u&gt;组合键即可，此时光标将返回插入开始的位置，并且Vi仍处于文本输入方式。<br>
<br>
　<br>
<br>
取消上一命令（Undo）<br>
<br>
取消上一命令（Undo），也称复原命令，是非常有用的命令，它可以取消前一次的误操作或不合适的操作对文件造成的影响，使之回复到这种误操作或不合适操作被执行之前的状态。<br>
<br>
取消上一命令有两种形式，在命令模式下键入字符u和U。它们的功能都是取消刚才输入的命令，恢复到原来的情况。小写u和大写U在具体细节上有所不同，二者
的区别在于，大写U命令的功能是恢复到误操作命令前的情况，即如果插入命令后使用U命令，就删除刚刚插入的内容；如果删除命令后使用U命令，就相当于在光
标处又插入刚刚删除的内容。这里把所有修改文本的命令都视为插入命令。也就是说，U命令只能取消前一步操作，如果用U命令撤消了前一步操作，当再按U键
时，并不是撤消再前一步的操作，而是撤消了刚才U命令执行的操作，也就是又恢复到第一次使用U命令之前的状态，结果是什么都没做。而小写u命令的功能是把
当前行恢复成被编辑前的状态，而不管此行被编辑了多少次。<br>
<br>
　<br>
<br>
［例19］ 原来屏幕显示内容为：<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
main （ ）<br>
<br>
{<br>
<br>
}<br>
<br>
在命令模式下输入命令o，插入一新行，输入需要插入的内容后再按&lt;Esc&gt;回到命令模式，屏幕显示内容为：<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
main （ ）<br>
<br>
{<br>
<br>
printf （ “ How do you do ! ” ） ;<br>
<br>
}<br>
<br>
若想取消这一插入操作，请按命令U后，屏幕恢复到原来显示的情况。<br>
<br>
注意：对于取消命令仍可以再使用取消命令。这时会产生一种“负负得正”的效果，文件状态将恢复到第一次执行取消命令之前的状态，如同没做任何操作一般。例如在上例中，再使用一次命令U，屏幕将显示的内容仍为插入后的内容。<br>
<br>
　<br>
<br>
重复命令（Redo）<br>
<br>
重复命令也是一个非常常用的命令。在文本编辑中经常会碰到需要机械地重复一些操作，这时就需要用到重复命令。它可以让用户方便地再执行一次前面刚完成的某个复杂的命令。<br>
<br>
重复命令只能在命令模式下工作，在该模式下按“.”键既可。执行一个重复命令时，其结果是依赖于光标当前位置的。<br>
<br>
［例20］ 屏幕显示内容为：<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
main （ ）<br>
<br>
{<br>
<br>
}<br>
<br>
输入命令o，并输入一行内容后，再&lt; Esc &gt;返回到命令模式下，屏幕显示内容为：<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
main （ ）<br>
<br>
{<br>
<br>
printf （ “ How do you do ! ” ） ;<br>
<br>
}<br>
<br>
此时输入命令“.”，屏幕显示内容为：<br>
<br>
#include &lt;stdio.h&gt;<br>
<br>
main （ ）<br>
<br>
{<br>
<br>
printf （ “ How do you do ! ” ） ;<br>
<br>
printf （ “ How do you do ! ” ） ;</div>

		<!-- / message --><!-- message, attachments, sig -->
	
				
		
		
	
		
	
	
	
	
	
		
		<br>
<img src ="http://www.cnitblog.com/ygb/aggbug/5479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 10:53 <a href="http://www.cnitblog.com/ygb/articles/5479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进入与退出系统[转帖]</title><link>http://www.cnitblog.com/ygb/articles/5478.html</link><dc:creator>YGB.Grushy</dc:creator><author>YGB.Grushy</author><pubDate>Sat, 17 Dec 2005 02:51:00 GMT</pubDate><guid>http://www.cnitblog.com/ygb/articles/5478.html</guid><wfw:comment>http://www.cnitblog.com/ygb/comments/5478.html</wfw:comment><comments>http://www.cnitblog.com/ygb/articles/5478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ygb/comments/commentRss/5478.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ygb/services/trackbacks/5478.html</trackback:ping><description><![CDATA[
　　TurboLinux是一个多用户的操作系统，用户要使用该系统，首先必须登录系统，使用完系统后，必须退出系统。本章主要讨论登录和退出系统的方法。<br>

<br>

　　用户登录系统时，为了使系统能够识别自己，必须输入用户名和密码，经系统验证无误后方能进入系统。在系统安装过程中可以创建两种帐号：<br>

<br>

　　1）root--超级用户帐号，使用这个帐号可以在系统中做任何事情。<br>

<br>

　　2）普通用户--这个帐号供普通用户使用，可以进行有限的操作。<br>

<br>

　　一般的Linux使用者均为普通用户，而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一些由普通帐号就能完成的任务，建议不要使用超级用户帐号，以免无意中破坏系统。<br>

<br>

　　用户登录分两步进行：第一步，输入用户的登录名，系统根据该登录名来识别用户；第二步，输入用户的口令，该口令是用户自己选择的一个字符串，对其他用户是保密的，是在登录时系统用来辨别真假用户的关键字。<br>

<br>

　　在Linux系统中，系统管理员在为用户建立新帐号时赋给用户一个用户名和一个初始的口令。另外，Linux系统给计算机赋予一个主机名。主机名用于
在网络上识别独立的计算机（即使用户的计算机没有联网，也应该有一个主机名）。TurboLinux系统给出的缺省主机名为：localhost。在下面
的例子中，我们假设用户名为"xxq"，系统的主机名为"localhost"。<br>

<br>

　　进入系统（登录）<br>

<br>

　　超级用户登录<br>

<br>

　　超级用户的用户名为root，密码在安装系统时已设定。系统启动成功后，屏幕显示下面的提示：<br>

<br>

　　localhost login:<br>

<br>

　　这时输入超级用户名"root"，然后键入回车键。此时，用户会在屏幕上看到输入口令的提示：<br>

<br>

　　localhost login:root<br>

<br>

　　Password:<br>

<br>

　　这时，需要输入口令。输入口令时，口令不会在屏幕上显示出来。如果用户输入了错误的口令，就会在屏幕上看到下列信息：<br>

<br>

　　login incorrect.<br>

<br>

　　这时需要重新输入。当用户正确地输入用户名和口令后，就能合法地进入系统。屏幕显示：<br>

<br>

　　［root@loclhost /root］ #<br>

<br>

　　此时说明该用户已经登录到系统中，可以进行操作了。这里"#"是超级用户的系统提示符。普通用户登录建立了普通用户帐号以后，就可以进行登录了。<br>

　　<br>

<br>

　　在登录时，用户会在屏幕上看到类似下面的提示：<br>

<br>

　　localhost login:<br>

<br>

　　这时输入用户名"xxq"，然后键入回车键。此时，用户会在屏幕上看到输入口令的提示：<br>

<br>

　　localhost login:xxq<br>

<br>

　　Password:<br>

<br>

　　这时，需要输入口令。输入口令时，口令不会在屏幕上显示出来。如果用户输入了错误的口令，就会在屏幕上看到下列信息：<br>

<br>

　　login incorrect.<br>

<br>

　　这时需要重新输入。当用户正确地输入用户名和口令后，就能合法地进入系统。屏幕显示：<br>

<br>

　　［xxq@loclhost xxq］ $<br>

<br>

　　此时说明该用户已经登录到系统中，可以进行操作了。<br>

<br>

　　修改口令<br>

<br>

　　为了更好的保护用户帐号的安全，Linux允许用户随时修改自己的口令，修改口令的命令是passwd，它将提示用户输入旧口令和新口令，之后还要求用户再次确认新口令，以避免用户无意中按错键。如果用户忘记了口令，可以请系统管理员为自己重新设置一个。<br>

<br>

　　虚拟控制台<br>

<br>

　　Linux是一个真正的多用户操作系统，这表示它可以同时接受多个用户登录。Linux还允许一个用户进行多次登录，这是因为Linux和许多版本的
UNIX一样，提供了虚拟控制台的访问方式，允许用户在同一时间从控制台（系统的控制台是与系统直接相连的监视器和键盘）进行多次登录。<br>

<br>

　　虚拟控制台的选择可以通过按下Alt键和一个功能键来实现，通常使用F1-F6。<br>

<br>

　　例如，用户登录后，按一下Alt-F2键，用户又可以看到"login:"提示符，说明用户看到了第二个虚拟控制台。然后只需按Alt-F1键，就可
以回到第一个虚拟控制台。一个新安装的Linux系统允许用户使用Alt-F1到Alt-F6键来访问前六个虚拟控制台。<br>

<br>

　　虚拟控制台可使用户同时在多个控制台上工作，真正感受到Linux系统多用户的特性。用户可以在某一虚拟控制台上进行的工作尚未结束时，切换到另一虚
拟控制台开始另一项工作。例如，开发软件时，可以在一个控制台上进行编辑，在另一个控制台上进行编译，在第三个控制台上查阅信息。<br>

<br>

　　退出系统<br>

<br>

　　不论是超级用户，还是普通用户，需要退出系统时，在shell提示符下，键入下列命令即可。<br>

<br>

　　下面以普通用户的退出为例，说明退出系统的过程：<br>

<br>

　　［xxq@loclhost xxq］ $ exit<br>

<br>
<!-- / message -->
　　还有其他退出系统的方法，但上面一种是最安全的。
		
	
				
		
		
	
		
	<!-- message, attachments, sig -->
	
	
	
	
		
		<img src ="http://www.cnitblog.com/ygb/aggbug/5478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ygb/" target="_blank">YGB.Grushy</a> 2005-12-17 10:51 <a href="http://www.cnitblog.com/ygb/articles/5478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>