﻿<?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>BlogJava-琢思磋文轩-随笔分类-开发技术</title><link>http://www.blogjava.net/dev2dev/category/3722.html</link><description>学问之道贵能下人求告为善，赡才之径假人所长补已之短</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 17:15:32 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 17:15:32 GMT</pubDate><ttl>60</ttl><item><title>Unix的轻巧“约取而实得”（下篇）</title><link>http://www.blogjava.net/dev2dev/archive/2005/06/15/6180.html</link><dc:creator>朱春雷</dc:creator><author>朱春雷</author><pubDate>Wed, 15 Jun 2005 15:14:00 GMT</pubDate><guid>http://www.blogjava.net/dev2dev/archive/2005/06/15/6180.html</guid><wfw:comment>http://www.blogjava.net/dev2dev/comments/6180.html</wfw:comment><comments>http://www.blogjava.net/dev2dev/archive/2005/06/15/6180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dev2dev/comments/commentRss/6180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dev2dev/services/trackbacks/6180.html</trackback:ping><description><![CDATA[<DIV><FONT size=3>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;Unix的轻巧“约取而实得”（下篇）</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT size=3>六、网络通信相关命令</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　“功能性文盲”的概念是1965年联合国教科文组织在伊朗德黑兰召开的各国教育部长会议上首次提出的，它最初的含义是指未能获得读、写及计算能力的人。时至今日，此概念的内涵已经发生了很大的变化。读——不仅要读印刷的文本，而如何快捷、有效地读取互联网上丰富的信息资源已成了现代人必备的才能；写——不仅是以往习惯的“爬格子”，而且会借用计算机的“神手”，更要将自己的所思所想写在网上，与全世界的人进行交流和互助；算——不仅需要核算物质成本和产出，而且要节约时间与精力，把握生命的张弛节律，将积极有效的精力投到最有意义的活动中去。</FONT></DIV>
<DIV><FONT size=2>对于现代人来说，若离开了网络，那就真要返回到“功能性文盲”状态了。当然，Unix系统也离不开网络，它的缺省网络协议即为当今网络架构基础的TCP/IP协议。TCP/IP协议由一系列协议组成，统称TCP/IP协议族。TCP/IP协议是TCP/IP协议族中的基本协议，协议族常用协议有：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; （1）传输控制协议/互联网络协议（TCP/IP - Transmission Control Protocol/Internet Protocol）是协议族的基本协议。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; （2）用户数据报协议(UDP - User Datagram Protocol)提供无连接的传输层协议，不保证传输的可靠性。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; （3）远程登录协议（telnet）定义了远程登录的标准。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; （4）文件传输协议（FTP - File Transfer Protocol)定义了不同系统间进行文件拷贝的标准。</FONT></DIV>
<DIV><FONT size=2>　　下面再介绍基于TCP/IP协议族的Unix系统的相关命令。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT size=2>　　1、Telnet命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　前文中我们曾经使用过telnet命令，该命令的主要功能是在用户使用的本地计算机上通过网络登陆远程Unix主机，把本地计算机当成远程主机的一个仿真终端，而此处的网络可以是任何采用了TCP/IP协议的网络，如LAN、WAN、Internet等。在本地计算机上运行的telnet或下文将要介绍的ftp程序，实际上都是telnet/ftp的客户端程序，它通过TCP/IP协议与远程主机中的服务端程序相连。当用户利用telnet完成与远程Unix主机的连接后，就能像是在Unix主机终端上操作一样了，不过此时用户所能使用的功能和资源将取决于该系统所赋予用户的使用权限。</FONT></DIV>
<DIV><FONT size=2>　　telnet的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>　　　　telnet<B> </B>IP地址或域名 [端口号]</FONT></DIV>
<DIV><FONT size=2>此处的IP地址或域名是指远程Unix主机的IP地址或域名。当建立连接之后，将会出现信息提示用户输入登陆的用户名及口令，正确输入后就可以进入Unix系统了。 </FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、FTP命令</FONT></DIV>
<DIV><FONT size=2>　　FTP的主要功能是实现本地计算机与远程主机之间的文件传输，它可以将远程Unix系统上的一个或多个文件下载到本地计算机，也可以将本地计算机上的一个或多个文件上传到远程Unix系统上。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　FTP的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　ftp<B> </B>IP地址或域名</FONT></DIV>
<DIV><FONT size=2>此处的IP地址或域名是指远程Unix主机的IP地址或域名。当建立连接之后，将会出现信息提示用户输入登陆的用户名及口令，正确输入后就会出现ftp提示符“ftp&gt;”，我们就可以在此提示符后输入ftp命令进行相关的操作了。</FONT></DIV>
<DIV><FONT size=2>　　FTP的常用命令及解释列表如下：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>ftp命令</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV align=center><FONT size=2>解释</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>bin</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>设定以二进制模式传输文件</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>asc</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>设定以ASCII模式传输文件（缺省值）</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>pwd</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>列出当前所处的远程主机目录</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>cd [directory]</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>改变所处的远程目录</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>ls</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>显示所处的远程目录的内容</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>lcd [directory]</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>设定本地欲上传或下载文件的目录</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>put file</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>将本地计算机中的文件上传到远程主机上</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>get file</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>将远程主机中的文件下载到本地计算机上</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>mput files</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>将本地计算机中的多个文件上传到远程主机上</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>mget files</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>将远程主机中的多个文件下载到本地计算机上</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=168>
<DIV align=center><FONT size=2>bye</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>退出ftp</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　下面是一次模拟的FTP登陆实例。假设远程主机的IP地址为198.4.30.25，现在要求将本地计算机系统/home/zcl中的文件Calculator.java上传到远程主机/newusers/zcl目录中，同时将/newusers/zcl目录中所有的文件下载到本地计算机目录/home/zcl/down中。</FONT></DIV>
<DIV><FONT size=2>　解：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp 198.4.30.25</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name: <BR>　　 Password:<BR>　　　(输入Unix用户名及口令)</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; asc</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; lcd /home/zcl</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; cd /newusers/zcl</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; put Calculator.java</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;ftp&gt; bin</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; lcd /home/zcl/down</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; mget *</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp&gt; bye</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　说明： </FONT></DIV>
<DIV><FONT size=2>　　当我们使用ftp时，可简单地把文件分为两种基本类型：文本文件和二进制文件。文本文件也称为ASCII文件，其文件内容遵循ASCII的定义，其主要特征是文件内容由若干行组成，可以使用操作系统的显示、编辑命令来显示和编辑ASCII文件的内容，它使用的传输模式是“asc”。二进制文件（Binary File）是指除ASCII文件以外的所有文件格式，它使用的传输模式是“bin”。需要注意的是，可以将ASCII文件按二进制模式传输，但决不能将二进制文件按ASCII模式传输，否则二进制文件的内容会遭到破坏而无法使用。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　3、用户间通讯命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 对于QQ、MSN这类聊天工具，大家应该是再熟悉不过了，那么在Unix系统中能否进行此类的聊天操作呢？答案当然是肯定的。Unix提供了多种方式让用户相互通信，它允许以文本的方式给某个用户或所有用户传递信息，而信息来源可以是文本文件或直接由键盘输入的内容。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT size=2>　　（1）使用write发送消息</FONT></DIV>
<DIV><FONT size=2>&nbsp; &nbsp;&nbsp;　使用write命令可以向任何已登录同一系统的另一位用户发送消息，这时在对方用户终端上就会自动显示出信息，而对方也同样可以使用write 命令来回复消息，这样双方之间就能互相通信了。</FONT></DIV>
<DIV><FONT size=2>　　write命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>　　　　write user-name</FONT></DIV>
<DIV><FONT size=2>此处user-name是将要与之通信的用户名，可以使用who 命令来查看系统中已登陆的用户名。输入write命令后，即可进入发送消息状态，这时就可以通过键盘输入消息，回车即可向对方发送此条消息了。要想退出发送消息状态，可以使用“Ctrl + d”退出write 命令回到shell。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（2）使用talk进行双方对话</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　talk命令允许双方实现类似于MSN、QQ这样的实时对话，其命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　talk user-name </FONT></DIV>
<DIV><FONT size=2>当用户向另一用户发送对话请求，只有在对方同意接受对话请求，即对方也使用talk命令后，双方的对话才会建立。这时双方终端上都会显示“[connect established]”，这样双方就可以从键盘输入文字，talk会把这些输入显示在对方的屏幕上，若任意一方按&lt;Delete&gt;键就会退出对话状态。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　（3）使用wall进行广播式消息传送</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 使用wall命令可以向所有用户广播通知信息，而所有登录系统的用户都可收到该消息。wall命令有以下几种格式：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　wall</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 wall filename</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　wall “send a message to all the people！”</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　（4）使用mesg允许或拒绝接收消息</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　当一位用户正在全身心的投入某项工作的时候，可能会不想被另外一位用户用上述方式突然发送来的消息打断思路，那么就可使用mesg命令来设置是否允许接收由其它用户发来的信息。mesg命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　mesg –n</FONT></DIV>
<DIV><FONT size=2>　　　　或</FONT></DIV>
<DIV><FONT size=2>　　　　 mesg -y</FONT></DIV>
<DIV><FONT size=2>其中，y表示允许接收信息，n 表示拒绝接收信息。如果mesg后面没有跟参数，则报告当前的许可状态。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV>　　<A name=_Toc426430784><FONT size=2>4</FONT></A><FONT size=2>、其它命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT size=2>　　（1）查看网上用户信息</FONT></DIV>
<DIV><FONT size=2>　　使用finger命令可以显示当前正在使用Unix系统的所有用户信息，它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　　finger [用户名][@主机域名或ip地址]</FONT></DIV>
<DIV><FONT size=2>　　如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　finger&nbsp;&nbsp;&nbsp; //显示当前正在使用Unix系统的所有用户信息</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 finger anray@198.4.30.25 &nbsp;//查看主机198.4.30.26上用户anray的信息</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　此外，常用的显示当前系统登陆用户信息的命令还有：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　who&nbsp;&nbsp;&nbsp;&nbsp; //可查看每个登陆用户的IP地址</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　w&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //可查看每个登陆用户的当前行为</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　who am i&nbsp; //查看使用者自己的信息</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（2）查看网络的相关信息</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　　hostname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示主机名</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　　　 cat /etc/hostname.hme0&nbsp;&nbsp;&nbsp; //显示主机名</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　　　 cat /etc/hosts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看同一网段中存在的所有主机</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp; &nbsp;　　　cat /etc/services&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//查看当前系统所运行的所有程序的端口</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　　ping&nbsp; 主机IP地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //检测是否可以访问某个主机</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　　netstat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //列出系统中所有的网络连接</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　　/usr/sbin/traceroute&nbsp; 主机IP地址&nbsp; //显示从本地到目标IP所经过的所有路由器</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　　　　</FONT><FONT size=3>七、文本编辑器 vi 的使用简介</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　古希腊克里特岛迷宫里有一个牛头人身的怪物米诺陶洛斯，如果不是美女公主阿里阿德涅赠送给英雄忒修斯一把魔剑，英勇的忒修斯还真奈何不了这牛头人身的怪物。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　vi编辑器就是Unix系统赋予我们的魔剑，它是一款强有力的文本文件编辑工具。对初学者而言，常因其特殊的使用方法，而不得径门而入；对已经在使用 vi 的操作者来说，也常因对 vi 的不够熟悉与了解，而无法发挥出 vi 强大的编辑能力。以下将介绍vi 的基本使用方法。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　vi 提供了两种操作模式：文本输入模式和命令模式，前者用于文本输入，后者用于输入控制指令。要启动vi进行文本操作，用户可在Shell提示符后输入如下命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　vi 文件名</FONT></DIV>
<DIV><FONT size=2>如果该名称的文件不存在，则系统会自动创建该文件。用户进入vi编辑器后，便自动处于命令模式，此时键入的任何字符皆被视为指令。此模式下可对文本进行删除、替换、拷贝、移动等操作，而对文本进行操作的前提是输入文本，那就先让我们进入输入模式吧。文本输入模式的进入，有以下的指令可供使用：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top width=120>
<DIV><FONT size=2>a</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将在光标所在位置之后插入文本</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=120>
<DIV><FONT size=2>A</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将在光标所在行末插入文本</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=120>
<DIV><FONT size=2>i</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将在光标所在位置之前插入文本</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=120>
<DIV><FONT size=2>I</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将在光标所在行的第一个非空字符前插入文本</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=120>
<DIV><FONT size=2>o</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将在光标所在行的下一行开始插入文本</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=120>
<DIV><FONT size=2>O</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将在光标所在行的上一行开始插入文本</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　俗话说：“仙人打鼓时有差，脚步踏错谁人无。”在输入文本过程中，出现差错在所难免，但在vi编辑器中可不像在Word中那样能使用backspace或delete键来删除差错之处，而是首先应该按“ESC”键进入命令模式，然后可利用下面的指令移动光标位置进行准确定位：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>k</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>上移一个字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>j</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>下移一个字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>h</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>左移一个字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>l</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>右移一个字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>行号G</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>光标移到该指点行(如1G表示光标移到第一行)</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>G</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>光标移到文件结尾</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　接着就可以使用下述指令进行删除或替换操作了：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>x</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除光标所在字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>X</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除光标所在的前一字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>s</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除光标所在的字符，并进入输入模式</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>dd</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除光标所在行</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>nd</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除编辑器第n行的所有字符（n代表具体数字，下同）</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>ndd</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除从光标所在行开始往下的n行</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>:n,md</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除从指定的n到m行之间的所有字符（如：:5,10d 将会删除编辑器中从第5行开始至第10行的内容）</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>D</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除光标所在处到行尾的字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>r</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>用跟在此指令之后的字符替换光标所在的字符（如：ra 是以 a 替换光标所在的字符）</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>C</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>替换从光标到行尾的内容</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>cc</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>替换整行的内容</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　“Ctrl + C”、“Ctrl + X”、“Ctrl + V”这几个组合键对于Windows用户来说是再熟悉不过了，在vi编辑器当然也具备了一般编辑的拷贝、移动、粘贴功能，下面就让我们来试试吧！</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>yw</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>拷贝当前光标所在处的词</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>yy</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>拷贝当前光标所在行的所有字符</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>P</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>在光标所在行的下一行粘贴</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>:i,jcok</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将第i行至第j行之间的文本拷贝到第k行之后（此处i、j、k分别代表不同的数字）</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=60>
<DIV><FONT size=2>:i,jmok</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将第i行至第j行之间的文本移动到第k行之后（此处i、j、k分别代表不同的数字）</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　上列表中第4、5项如：:10,20co30 将第10行至第20行的文本复制到第30行之后；:10,20mo30&nbsp; 将第10行至第20行的文本移动到第30行之后。</FONT></DIV>
<DIV><FONT size=2>　　在完成所有的编辑工作之后，大家可要记得存盘退出vi 编辑器。在命令模式下使用下述指令： </FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:w</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>存盘</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:w newfile</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>存盘成新的文件</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:wq</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>存盘并退出vi</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:q</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>退出vi，若文件被修改过，则会被要求确认是否放弃修改的内容。</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:q!</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV><FONT size=2>不存盘并强行退出vi </FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　下面再介绍一些较常使用的指令：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>~</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>改变大小写</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>u</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>取消上次操作，即复原执行上一指令前的内容</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>/字符串</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>从当前行往下查找指定的字符串</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>n</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>往下继续查找下一个指定的字符串</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>?字符串</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>从当前行往上查找指定的字符串</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>N</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>往上继续查找下一个指定的字符串</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:r file</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>将某文件的内容插入到光标位置</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>J</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>将光标所在行与其下一行连接起来，即下一行文本移动至光标所在行的末尾</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:set nu</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>让编辑器自动显示出每一行的行号</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>:set nonu</FONT></DIV></TD>
<TD vAlign=top width=405>
<DIV><FONT size=2>取消显示每行前的行号</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　对以上所列指令用户只有稔熟在心，才能熟练自如地使用vi编辑器。在此基础之上，大家可以参考其它相关资料来掌握vi编辑器的一些更高级的指令。在后续关于Unix平台上程序开发的介绍中，大家将更能感受到vi编辑器的重要性。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　　　　　</FONT><FONT size=3>八、环境变量及其它设置</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在中医理论中，纵向叫‘脉’，横向叫‘络’，任督二脉正好是在人体的前后中心，前面是任脉，后面是督脉，是人体的子午线，因此在金庸的武侠小说里，想要练成上乘的功夫，首先就是要打通任督二脉。环境变量就是Unix系统中的任督二脉，那就让我们来打通它吧！</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在介绍环境变量之前，我们先来了解一下变量这个概念。变量顾名思义就是值会变化的量，在使用变量之前必须先进行定义，变量名可以是任何符合命令规则的字母、下划线和数字的组合。对于为变量赋值，在csh与bash中的操作方式会略有不同。在csh中为变量赋值的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　setenv variable value</FONT></DIV>
<DIV><FONT size=2>　　在bash中可以使用赋值操作符“=”来为一个变量进行赋值，格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　variable=value</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　export variable</FONT></DIV>
<DIV><FONT size=2>注意在“=”的周围不应该有任何的空格，使用export命令是为了使此变量在所有嵌套的Shell中都有效。一旦为一个变量赋值之后，就可以通过在变量名之前放置“$”来引用该变量的值了。如果想要查看某个变量的值，则可以使用echo命令，命令格式为：</FONT></DIV>
<DIV><FONT size=2>　　　　 echo $variable</FONT></DIV>
<DIV><FONT size=2>　　如在csh中键入如下命令，将当前系统的主机名赋值给变量WTO，并输出变量WTO的值：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　setenv WTO `uname –n`</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　echo $WTO</FONT></DIV>
<DIV><FONT size=2>　　在bash中的操作方式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　WTO=` uname –n`</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 export WTO</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　echo $WTO</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　变量的使用用途较广，经常的用法是将其作为某个命令的参数。如将某一经常用到的目录路径名赋值给一个变量，这样就可以避免一遍又一遍地反复敲入同样的内容了。看下面一个例子，要将当前目录中的文件myfile1、myfile2拷贝到目录/home/anray/mydocument中，就可以使用如下的命令（以bash为例）：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 mydir=/home/anray/mydocument</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 cp myfile1 $mydir</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cp myfile2 $mydir</FONT></DIV>
<DIV><FONT size=2>如果想了解所有已定义的变量情况，则可以使用set命令。当用户不再需要某一个变量时，可以用unset命令来删除此变量，格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　unset variable</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　值得注意的是，当前所定义变量的作用域范围是当前正在使用的Shell环境，即一旦退出Shell后再次登录，则此前所设置的所有变量都将失效。如果需要再次使用这些变量的话，都必须重新进行定义。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　要想使定义的变量在每次登入系统时都有效，则需将其定义成为环境变量。环境变量可以用于定制用户的工作环境，即使用环境变量可以保存用户对系统进行设置的信息。环境变量被定义在“初始化文件”中，csh的初始化文件是.cshrc文件，bash的初始化文件是.bashrc（或.bash_profile，两者等效）。在每次系统启动时，系统会自动读取初始化文件中的内容来配置相应的工作环境，常见的环境变量有HOME、PATH、SHELL等。HOME变量的值是用户主目录的路径名。PATH变量的值包含了各种命令所在目录的路径名，路径名之间用冒号隔开，当用户执行某一命令时，系统就将会自动在这些目录下查询此命令并执行，若未查询到则会提示命令没有找到。SHELL变量的值代表了用户登陆系统时默认的Shell环境。当然用户也可以定义自己所需的环境变量，定义方法与普通变量定义相同，两者的不同之处在于环境变量被定义在初始化文件中。通常在定义环境变量之后，需要重新进入系统才会生效。如果想在不重启系统的情况下立即使当前的配置生效，csh中可以使用如下的命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　source .cshrc</FONT></DIV>
<DIV><FONT size=2>　　bash中可以使用如下的命令：</FONT></DIV>
<DIV><FONT size=2>　　　　　. .bashrc</FONT></DIV>
<DIV><FONT size=2>　　关于使用Java、Oracle、CVS、Tomcat等时应该定义的环境变量，计划在后续的系列文章中陆续介绍，此处就先行略过。要想查看系统已定义的所有环境变量的情况，可以使用setenv命令。 </FONT></DIV>
<DIV><FONT size=2>　　下面我们再来介绍一下Unix系统中的一些其它设置。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT size=2>　　1、计划任务的设置</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 Unix系统允许在指定的时刻执行指定的任务，这一功能是靠cron进程来实现的。cron进程会检查系统的计划任务文件，并在指定的时间执行这些指定的操作。计划任务文件内容格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　min&nbsp;&nbsp;&nbsp;&nbsp; hour&nbsp;&nbsp;&nbsp; day&nbsp;&nbsp;&nbsp;&nbsp; month&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; day_of_week&nbsp;&nbsp;&nbsp; command</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　0-59&nbsp;&nbsp;&nbsp; 0-23&nbsp;&nbsp;&nbsp; 1-31&nbsp;&nbsp;&nbsp; 1-12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0-6(Sunday=0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT size=2>计划任务文件由若干行组成，每行表示一个任务。每行由若干字段组成，字段间用空格分开。每行中字段分别代表：分、时、日、月、星期、要执行的命令。每个字段取值举例：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>各字段取值举例</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV><FONT size=2>说明</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>*</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV><FONT size=2>表示任何时间</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>1,3,4</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV><FONT size=2>表示离散数字，即一系列点值</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>1-5</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV><FONT size=2>表示从1到5，即一范围</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　例如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　30&nbsp; 0&nbsp; *&nbsp; *&nbsp; *&nbsp; /usr/tmp/a.txt</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　0&nbsp;&nbsp; 7&nbsp; *&nbsp; 1,3,6,8&nbsp; 1-5&nbsp;&nbsp; /usr/tmp/makefile</FONT></DIV>
<DIV><FONT size=2>第一行表示在每天的午夜0:30启动/usr/tmp/a.txt文件运行，第二行表示每当1、3、6和8月的周1到周五，启动/usr/tmp/makefile文件运行。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　计划任务文件是不能直接通过vi等编辑工具进行修改的，要对计划任务文件进行操作可使用crontab命令。crontab命令的常用格式如下：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>crontab命令举例</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV align=center><FONT size=2>说明</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>crontab -l</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>显示计划任务文件的内容</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>crontab –e</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>编辑计划任务文件的内容</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>crontab myfile</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>用myfile文件内容覆盖原计划任务文件内容</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=132>
<DIV><FONT size=2>crontab -r</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>删除现有的计划任务文件</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　需要补充的是，crontab –e命令在默认情况下会使用编辑器ed来编辑计划任务文件。此编辑器的操作非常烦琐，因此最好是通过设置环境变量EDITOR来指定编辑器，方法如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 setenv EDITOR vi</FONT></DIV>
<DIV><FONT size=2>此外，也可通过先将计划任务文件的内容读入某一临时文件，编辑完成后再覆盖原计划任务文件的方式来修改计划任务。</FONT></DIV>
<DIV><FONT size=2>　　[例] 在原计划任务文件基础上增加如下任务：每月1日凌晨3时运行/usr/tmp/run程序。</FONT></DIV>
<DIV><FONT size=2>　　解：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　　 (1) 运行 crontab -l &gt; temp</FONT></DIV>
<DIV><FONT size=2>　　&nbsp;&nbsp;&nbsp; (2) 对temp文件进行编辑，追加下面一行：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　　　0&nbsp; 3&nbsp; 1&nbsp; *&nbsp; *&nbsp; /usr/tmp/run</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　(3) 运行 crontab temp</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、别名的设置</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　可以使用alias命令来为一个命令创建一个别名，它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　alias alias-name value</FONT></DIV>
<DIV><FONT size=2>比如，熟悉的DOS的用户可能会一下子不习惯ls这个命令，那么就可以使用如下的方法来为ls命令取个别名：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　alias dir ls</FONT></DIV>
<DIV><FONT size=2>此外，还可以用一个别名来代替一个命令及它的参数，这样就可以简化常用的操作命令以便使用。不过这时需要用单引号将命令及其参数括起来，如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　alias dir ‘ls –l’</FONT></DIV>
<DIV><FONT size=2>若想查看已定义的所有别名的别名表，则直接使用alias命令即可。当想删除某个别名时，则可使用unalias命令，格式如下：</FONT></DIV>
<DIV><FONT size=2>　　　　unalias alias-name</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　3、命令历史设置</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在Unix系统中，history程序会自动保留用户最近所使用过的命令。历史表中的命令从1开始编号，上限为所设置的保留个数，默认值是500。我们可以重设此保留个数，如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　set history=30</FONT></DIV>
<DIV><FONT size=2>上述操作设定命令历史表长度为 30，即可记载已执行过的30个命令，可通过使用history命令查看此30个命令记录。使用“!n”命令可以执行历史表中所记录的第n个命令，“!!”则是重复执行前一个命令。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　　　　　　　　 </FONT><FONT size=3>九、Shell脚本编程</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在执行某个具体任务的时候，有时可能需要把几个Unix命令结合起来一起使用。如果这样的操作较为频繁，则可以考虑将这些命令放入一个文件中。那么每次使用时只需执行此文件即可，这样的文件就被称为脚本文件。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　我们先来看一个简单的例子。首先使用vi创建一个名为lsjava的文件，在文件中输入如下内容：</FONT></DIV>
<DIV><FONT size=2>　　　　　pwd</FONT></DIV>
<DIV><FONT size=2>　　　　　cal</FONT></DIV>
<DIV><FONT size=2>　　　　　date</FONT></DIV>
<DIV><FONT size=2>　　　　　ls *.java</FONT></DIV>
<DIV><FONT size=2>保存退出。由于默认情况下vi编辑器创建的文件仅有读和写权限，因此需要使用chmod命令来使脚本文件具备可执行权限，使用命令如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　chmod u+x lsjava</FONT></DIV>
<DIV><FONT size=2>在shell提示符后输入脚本文件名并回车，将可执行此脚本文件中的命令了，即先显示当前所处的工作目录，再显示出日历和日期，最后列表显示出当前目录下所有以“.java”为后缀名的文件。这样，脚本文件名就变成了一个新的shell命令。使用此种方法，我们就可以设计并创建自己的命令了。要补充说明的是，如果是在bash中，我们就无需更改脚本文件的权限，使用如下的命令格式即可执行此脚本文件：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　　&nbsp;　. lsjava&nbsp;&nbsp;&nbsp; //此处的点号“.”表示执行</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　像其它的Unix命令一样，在命令行中调用一个脚本时，也可以在此脚本名后输入参数。这样在脚本文件中就可以接收来自命令行中的参数信息，并将此作为脚本文件中某命令的参数。命令行中的参数通过使用“$”操作符和参数序号来引用，参数以“1”开始顺续引用，第一个参数用$1来引用，第二个参数用$2来引用，以此类推。每次还可以引用多个参数，使用操作符“$*”即可表示引用所有的参数。此外，在脚本文件中，除了可以使用一系列的Unix系统命令外，还可以使用变量、算术表达式、条件选择、循环控制等来共同完成相应的任务。脚本文件功能强大，在处理较大的任务或需要循环执行某一个命令时可节省大量的时间。由于此部分涉及到编码，且内容较多，足可另写一本书，且又是非Unix初级使用者所必须掌握的知识，故在此不再赘述，请感兴趣的读者查阅相关的书籍与资料。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　关于对Unix操作系统使用的基本介绍将就此告一段落。有智者曰：“人之知识，若登梯然，进一级则所见愈广。”本系列拙文仅作引玉之砖、铺路之石，若有关注与兴趣者籍此登梯而上，所见愈广，后能返得指教与辅导，则实为笔者遂愿之幸事！</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>上一篇《<A href="http://www.donews.net/dev2dev/archive/2005/05/29/404122.aspx"><FONT color=#000080>Unix的轻巧“约取而实得”（中篇）</FONT></A>》</FONT></DIV><img src ="http://www.blogjava.net/dev2dev/aggbug/6180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dev2dev/" target="_blank">朱春雷</a> 2005-06-15 23:14 <a href="http://www.blogjava.net/dev2dev/archive/2005/06/15/6180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix的轻巧“约取而实得”（中篇）</title><link>http://www.blogjava.net/dev2dev/archive/2005/06/09/5836.html</link><dc:creator>朱春雷</dc:creator><author>朱春雷</author><pubDate>Thu, 09 Jun 2005 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/dev2dev/archive/2005/06/09/5836.html</guid><wfw:comment>http://www.blogjava.net/dev2dev/comments/5836.html</wfw:comment><comments>http://www.blogjava.net/dev2dev/archive/2005/06/09/5836.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dev2dev/comments/commentRss/5836.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dev2dev/services/trackbacks/5836.html</trackback:ping><description><![CDATA[<DIV><FONT size=3>　　　　　　　　　　　　&nbsp;&nbsp; Unix的轻巧“约取而实得”（中篇）</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　　　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</FONT><FONT size=3>三、与查找比较相关的命令</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　使用Windows系统的用户可能都有这样的经历，在网上看到可悠长品赏的电影，down；看到匠心独运的电子书，down；看到妙织锦绣的文章，down；看到衔华佩实的资料，down。但时间一长，想再回顾一下《星战前传3：西斯的反击》中奥比旺和阿纳金在熔岩横流的穆斯塔法星上展开光剑对决的精彩片段，或者是重温一下李开复先生给中国学生第四封信中所提出在大学校园应当掌握的“七项学习”，可能自己都记不清当时是放在哪个目录里了。幸好，Windows为我们提供了“搜索”功能，再加上现今Google、百度相继推出的Google 桌面搜索、百度硬盘搜索，才使得这些文件幸免于藏身深宫大院之中，茕茕孑立、形影相吊的命运。那么在Unix系统中的文件又是怎样的命运呢？且看以下的命令功能：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　（一）利用find命令查找文件</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 find命令的功能是在指定目录及其子目录下查找符合条件的文件，命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　find path expression</FONT></DIV>
<DIV><FONT size=2>参数path指欲开始查找的起始目录，find会遍寻此目录以及其子目录，并且此参数可以有多个目录名称，只要在目录与目录之间用空格分开即可。参数expression指明了诸如基于文件名、文件类型、文件所有者、最后一次修改时间等的查找规则，find命令将遵循此查找规则来查询指定目录以及子目录中的文件。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 常用的查找规则如下：</FONT></DIV>
<DIV><FONT size=2>
<TABLE cellSpacing=1 cellPadding=1 width=200 border=1>
<TBODY></TBODY></TABLE>
<TABLE cellSpacing=1 cellPadding=1 width=200 border=1>
<TBODY></TBODY></TABLE></FONT></DIV>
<P>
<TABLE cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-name filename</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>指定要寻找的文件或目录名称</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-print</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>将搜索到的符合条件结果以包含路径名的方式输出</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-type x</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>以文件类型作为寻找条件，常用的文件类型<I>x</I>如下：</FONT></DIV>
<DIV><FONT size=2>d --- 目录文件,&nbsp; f --- 普通文件, &nbsp;b --- 块设备文件, c --- 字符设备文件,&nbsp; l --- 链接文件</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-user user</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>寻找用户user所拥有的文件，user可为用户名或uid号</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-atime n</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>寻找<I>n</I>天之前曾被访问过的文件</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-mtime n</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>寻找<I>n</I>天之前曾被修改过的文件</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=156>
<DIV><FONT size=2>-exec command {}\;</FONT></DIV></TD>
<TD vAlign=top width=348>
<DIV><FONT size=2>用寻找到的文件作为执行command的对象，{}中保存执行command时所需的参数，注意必须以 \; 为结束</FONT></DIV></TD></TR></TBODY></TABLE></P>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　下面来看一些具体的查找实例：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　[例1] 在目录/home中查找名为javac的文件，并要显示出完整的路径名：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　find /home –name javac -print</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 [例2] 在当前目录下查找以doc开头，7天之前曾被修改过的文件：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　find . –name “doc*” -mtime 7</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 [例3] 在目录/home中查找名为anray的目录，并显示出完整的路径：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　find /home –name anray –type d -print</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 [例4] 在目录/home中查找用户zcl所拥有的普通文件，并将其删除：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　&nbsp; find /home –type f –user zcl -exec rm {} \;</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（二）使用grep命令查找字符串</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　使用grep命令在文本文件中查找指定的字符串，并将所有出现该字符串的行打印显示出来。grep命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　grep [-iv] 字符串 文件名</FONT></DIV>
<DIV><FONT size=2>参数i代表查找字符串时忽略字母大小写，参数v显示出所有不包含指定字符串的行。如果在欲查找的字符串中包含有空格，那么应该用单引号将此字符串引起来。此外，如果是想同时在多个文件中查找指定的字符串，那么只需列出所有欲搜索的文件即可，这样grep命令会在所列出的匹配行前加上文件名。grep常与通配符、管道符一起搭配使用，这样可以实现一些特殊的查找功能，大家应能结合上面所介绍的命令来综合应用。</FONT></DIV>
<DIV><FONT size=2>　　[例1] 在文件file1中查找字符串“Java Web”，并忽略大小写。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　　　grep –i ‘Java Web’ file1</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp; &nbsp;　　　或&nbsp;&nbsp; cat file1 | grep –i ‘Java Web’</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp; 　　　&nbsp;或&nbsp;&nbsp; grep –i ‘Java Web’ &lt; file1</FONT></DIV>
<DIV><FONT size=2>　　[例2] 在当前目录中查找5月1日创建或修改过的文件。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ls –la | grep –i ‘may 1’</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（三）比较两个文件的内容</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 在Windows系统中，不知你是否用过一款名为WinMerge的软件？此款软件一项非常强悍的功能，就是可以比较两个文件的内容有哪些不同之处，而且可谓是火眼金睛。记得笔者读研一的时候，听一位助教说他就是靠这款软件逮了不少抄袭作业的人：）而在Unix系统中，则无需借助第三方软件就可实现此项功能了。cmp命令可用于比较两个文件，这两个文件可以是文本文件也可以是非文本文件。在默认情况下，cmp命令会显示两个文件第一次数据不同的位置；若两个文件内容相同，则不显示任何信息。cmp命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　cmp&nbsp; [-l]&nbsp; 文件名1&nbsp; 文件名2</FONT></DIV>
<DIV><FONT size=2>参数l代表标示出每个不同之处内容的行号。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　另外，还可以使用diff命令来比较两个文本文件或目录的不同之处，它会详细的列出文件1比文件2增多的内容、减少的内容以及改变了的内容。diff命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　diff [-r] 文件1 文件2&nbsp;&nbsp;&nbsp;&nbsp; //如果比较两个目录的不同之处，加上参数r</FONT></DIV>
<DIV><FONT size=2>在得到的结果中，d表示文件1比文件2增多的内容，a表示文件1比文件2减少的内容，c表示文件1较文件2改变了的内容。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（四）使用wc命令进行统计</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　大家一看到wc这个词，不知道是否会产生方便的感觉，呵呵。在Unix系统中，wc可是个非常有用的命令。对于Word中的字数统计功能，大家应该非常熟悉，利用它可以统计出一篇文章中的页数、字数、字符数、行数等信息。而wc命令也同样实现了类似于Word的字数统计的功能，它把一个文件作为数据流读入，然后计算出此文件中的行数、单词数以及字符数，并输出这些统计数据。wc命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　wc [-lwc] filename(s)</FONT></DIV>
<DIV><FONT size=2>参数l代表统计行数，参数w代表统计字数，参数c代表统计字符数。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wc -l file1 file2 &nbsp;&nbsp;&nbsp;//统计文件file1和file2 的行数</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grep wang /etc/passwd | wc –l&nbsp;&nbsp; //统计目录/etc下的passwd文件中有多少个用户名为wang的用户</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</FONT><FONT size=3> 　　　　　　　四、文件归档及压缩命令</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp; &nbsp;&nbsp;　（一）文件归档命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　用户在处理文件过程中，有时需要对某些目录及文件进行打包备份的操作，或有时需要将几个文件组合成一个文件以便于网络传送，就像减肥瘦身了的五、六个美女挤坐一辆出租车一样，这时Unix系统提供的tar命令就能有用武之地了。使用tar 命令，可以将多个文件或目录合并成为一个tar包以便于存储及传输。tar命令的常用格式是：</FONT></DIV>
<DIV><FONT size=2>　　　　tar cvf filename.tar file1 file2 …directory1 directory2 …</FONT></DIV>
<DIV><FONT size=2>此处参数中c表示创建一个新的归档，v表示启动显示模式，tar会显示出所处理的每个文件名，f filename.tar表示使用指定的文件名作为归档文件。</FONT></DIV>
<DIV><FONT size=2>　　如：要将/home/zcl/down目录中的文件全部归档为down.tar，可以使用如下命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　tar cvf down..tar /home/zcl/down <BR>　　当用户想把已归档的文件复原，则可使用如下的命令格式：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 tar xvf filename.tar</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（二）文件压缩命令</FONT></DIV>
<DIV><FONT size=2>　　为了避免文件占用太多的磁盘空间，用户会选择将文件压缩存放。通常压缩会和归档组合使用，使用户能够对整个目录以及目录中的文件同时进行压缩。对许多Windows用户来说，使用Winzip、Winrar等工具软件来压缩或解压文件是很平常的事，那么如何在Unix系统中对文件进行压缩与解压呢？下面介绍Unix系统中常用的三种压缩类型以及解压缩命令。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　1、使用gzip/gunzip 命令解压缩文件</FONT></DIV>
<DIV><FONT size=2>　　使用gzip命令压缩后的文件名称为“原文件名.gz”，它对应的解压命令是gunzip。命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　gzip filename</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;　　gunzip filename.gz</FONT></DIV>
<DIV><FONT size=2>　　如：要largefile.tar文件压缩成为largefile.tar.gz，则可以使用如下命令</FONT></DIV>
<DIV><FONT size=2>　　　　　gzip largefile.tar </FONT></DIV>
<DIV><FONT size=2>　　如果要把largefile.tar.gz解压，则只需使用命令gunzip largefile.tar.gz即可。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、使用compress/ uncompress命令解压缩文件</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　凡是经过compress命令压缩处理的文件，会在文件名后附加上“.Z”，它对应的解压命令是uncompress。命令格式如下：</FONT></DIV>
<DIV><FONT size=2>　　　　　compress filename<BR>　　　　　uncompress filename.Z</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　3、使用pack/unpack命令解压缩文件</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　凡是经过pack命令压缩处理的文件，会在文件名后附加上“.z”，它对应的解压命令是unpack。命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　 pack –f filename<BR>　　　　　 unpack filename.z</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　　　　　　　</FONT><FONT size=3>五、进程管理与控制命令</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　“进程”顾名思义就是“正在进行着的程序”，在Unix系统中一个进程可视为一项正在执行的任务，这样一个命令也就是一个进程了。Unix系统具有检查和控制进程的相关命令，它们常被用于管理Unix系统。事实上，进程不仅包括用户所执行的命令，也包括了维持Unix系统正常运行的所有程序，且每一进程都有其唯一的代号，即进程标识符。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　要想查看系统当前正在运行的进程信息，可使用命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　 ps [-options]&nbsp;&nbsp;&nbsp; //无参数时只显示当前用户在当前窗口中所运行的进程</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　　 //如果系统提示ps为非法命令，则在csh中可使用/usr/bin/ps，</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;//bash中可使用/usr/ucb/ps来替代ps</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></DIV>
<P>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=108>
<DIV align=center><FONT size=2>参数</FONT></DIV></TD>
<TD vAlign=top width=312>
<DIV align=center><FONT size=2>解释</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=108>
<DIV><FONT size=2>-e</FONT></DIV></TD>
<TD vAlign=top width=312>
<DIV><FONT size=2>列出所有正在运行的进程</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=108>
<DIV><FONT size=2>-f</FONT></DIV></TD>
<TD vAlign=top width=312>
<DIV><FONT size=2>长列表显示进程的细节信息，一般与e一起使用</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=108>
<DIV><FONT size=2>-u 用户名</FONT></DIV></TD>
<TD vAlign=top width=312>
<DIV><FONT size=2>显示指定用户正在运行的进程</FONT></DIV></TD></TR></TBODY></TABLE></P>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　如：要求长列表显示所有与用户zcl相关的进程信息，命令如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　ps –ef | grep zcl</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　此外，如果想要查看进程占用系统资源的情况，可使用如下的两个命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 /usr/ucb/ps –auwx &nbsp;&nbsp;&nbsp;//查看进程占CPU、内存等系统资源的情况</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 prstat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //时时刷新当前系统的进程信息，并按所占系统资源大小排列</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在某种特殊情况下，用户可能会无法正常的结束某一进程，这时就需要使用命令kill来杀掉这一进程，不过要注意的是用户只能杀掉由其自身创建的进程。命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　kill [-signal] process-id</FONT></DIV>
<DIV><FONT size=2>　　或</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　pkill [-signal] process-name</FONT></DIV>
<DIV><FONT size=2>kill就像一名狙击手，实施的是精确的“点杀”，kill会精确的杀掉指定进程号的进程，如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　kill 12345&nbsp;&nbsp;&nbsp; //“点杀”进程号为12345的进程，进程号可利用ps命令查出</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　kill -9 12480&nbsp; //-9代表强制杀掉进程，但不会清理该进程所占的资源</FONT></DIV>
<DIV><FONT size=2>pkill就像一名机枪手，实施的是威力巨大的“群杀”，pkill会杀掉所有指定的进程名的进程。如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pkill sleep&nbsp; //杀掉系统中所有名为sleep的进程</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　这里，我们再引入一个新的概念——作业。作业这一概念只有在需要对进程区分为前后台时方被使用，它等同于进程的概念。前台进程是指可以和用户直接进行人机交互的进程，它可以接收键盘输入并将结果显示在显示器上。缺省状态下用户启动的Unix程序都运行在前台。后台进程是指不直接和用户进行交互的进程，用户一般是感觉不到后台进程的运行。要让某一程序在后台运行，只需在命令行的最后加上“&amp;”符号。在Unix系统中可以同时在前台和后台运行多个进程，通常情况下，一般把需要和用户交互的程序放在前台执行，而把不需要以交互方式执行的程序置于后台运行。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　使用jobs命令可以查看当前系统中正在执行的作业，如下图所示：</FONT></DIV>
<DIV><IMG alt="" src="http://www.donews.net/images/blog_csdn_net/dev2dev/jobs.jpg"></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>在图中，“[]”中的数字代表作业号，此作业号可以配合作业管理命令一起使用：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<P>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>fg %n</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将某一作业放入前台运行（n代表作业号，下同）</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>bg %n</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>将某一作业放入后台运行</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>stop %n</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>挂起后台某一作业</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>kill %n</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>终止某一指定的作业</FONT></DIV></TD></TR></TBODY></TABLE></P>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　此外，还应掌握三个常用的键盘指令：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<P>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>Ctrl + z</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>挂起前台正在运行的作业</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>Ctrl + d</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>正常的结束前台作业，即先执行完该进程后结束</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV><FONT size=2>Ctrl + c</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>终止前台作业（非正常方式）</FONT></DIV></TD></TR></TBODY></TABLE></P>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　如：</FONT></DIV>
<DIV><FONT size=2>　　[例1] 要求后台运行find命令，在当前目录及其子目录下查找文件名前缀为file的文件。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　解：通常当在后台运行命令时，最好将其运行结果输出重定向到一个文件中，以便日后检查或校对。因此，此题可以使用如下的命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　find . -name “file*” &gt;myfind &amp;</FONT></DIV>
<DIV><FONT size=2>这样，我们就可以通过查看myfind文件来查看查找结果了。在运行此命令的同时，我们还可以继续输入其它命令来进行其它操作。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　[例2] 要求前台运行find命令，在当前目录及其子目录下查找文件名前缀为file的文件，运行过程中挂起进程，并将其放入后台运行。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　解：此题可以使用如下的命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　find . -name “file*” &gt;myfind</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　^z&nbsp; （按Ctrl + z）</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　jobs&nbsp;&nbsp;&nbsp; //通过jobs命令来查看find进程的作业号，假设为1</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 bg %1</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　这里再补充与记取一个小知识点，即当在前台杀掉某一进程后，那么此进程的所有子进程都会同时被杀掉；而如果是在后台杀掉某一进程，那么此进程的所有子进程都将“过继”给“祖宗”进程（即进程号为1的进程）而继续运行。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>上一篇：《<A href="http://www.donews.net/dev2dev/archive/2005/05/29/404058.aspx"><FONT color=#000080>Unix的轻巧“约取而实得”（上篇）</FONT></A>》</FONT></DIV><img src ="http://www.blogjava.net/dev2dev/aggbug/5836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dev2dev/" target="_blank">朱春雷</a> 2005-06-09 22:15 <a href="http://www.blogjava.net/dev2dev/archive/2005/06/09/5836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix的轻巧“约取而实得”（上篇）</title><link>http://www.blogjava.net/dev2dev/archive/2005/06/09/5835.html</link><dc:creator>朱春雷</dc:creator><author>朱春雷</author><pubDate>Thu, 09 Jun 2005 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/dev2dev/archive/2005/06/09/5835.html</guid><wfw:comment>http://www.blogjava.net/dev2dev/comments/5835.html</wfw:comment><comments>http://www.blogjava.net/dev2dev/archive/2005/06/09/5835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dev2dev/comments/commentRss/5835.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dev2dev/services/trackbacks/5835.html</trackback:ping><description><![CDATA[<DIV><FONT size=2>　　　　　　　&nbsp;</FONT><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT><FONT size=3>Unix的轻巧“约取而实得”（上篇）</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在经过上机操作实践以及掌握Unix系统相关的基础知识之后，可以说已跨进了迈向成功的门槛。接着要登堂入室，继续专进，就必须更加深入的了解Unix基本命令的功能、使用并掌握一些必备的技巧。这一轮学习会有一定难度，需要强烈的求知欲和进取心作为源动力，因为只有“不满足才是向上的车轮”；同时也需要注重学习方法，善用前人总结的“约取而实得”的经验，巧学精进，迎难攻解，从而达到再上台阶之成效。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　　　　&nbsp;　</FONT><FONT size=3>一、文件系统的相关命令</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　佛教《百喻经》中有一则三重楼的喻里，说有一个财主，见到他的邻居盖房子，三层楼盖得很漂亮，他也要盖这样的三层楼房子。见工匠在做地基，他就说不要地基，要直接盖第三层楼，因为第三层最高最漂亮。我们都会觉得这个财主很可笑，但在学习知识的过程中，我们可别老想着第三层而忽视打好地基噢！</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　文件系统相关的命令是操作Unix系统的基础，在《</FONT><A href="http://www.donews.net/dev2dev/archive/2005/05/23/394618.aspx"><FONT size=2>Unix操作系统的入门与基础</FONT></A><FONT size=2>》一文中我们曾使用过其中的部分命令，下面就再来仔细学习这些命令的使用，继续打好今后盖“三层楼”的“地基”吧。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（一）目录管理</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　我们可以通过使用mkdir、rmdir与cd命令来创建、删除目录以及改变工作目录，并通过ls命令列表显示目录内容，以达到对目录的有效管理。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（1）mkdir命令的功能是创建目录，并且可同时创建多个目录，格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　&nbsp;mkdir [-p] directory-name(s)</FONT></DIV>
<DIV><FONT size=2>参数p代表在建立指定目录时，如果其父目录不存在，则一同创建。</FONT></DIV>
<DIV><FONT size=2>　　[例] </FONT></DIV>
<DIV><FONT size=2>　　　　mkdir dir1 dir2 dir3 &nbsp;&nbsp;//在当前目录下建立目录dir1、dir2、dir3 </FONT></DIV>
<DIV><FONT size=2>　　　　mkdir dir1/dir4&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//在当前目录下的dir1子目录中创建目录dir4</FONT></DIV>
<DIV><FONT size=2>　　　　mkdir –p dir6/dir7&nbsp;&nbsp;&nbsp; //在当前目录下，由于不存在dir6目录，则先自动创建目录dir6，</FONT></DIV>
<DIV><FONT size=2>　　　　　　　　　　　　　 //然后创建其子目录dir7</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（2）rmdir命令的功能是删除目录，但其只能删除空目录（即目录中不包含文件），故此命令一般较少使用，在后文中会介绍一个更为常用的删除目录命令。rmdir命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　rmdir directory-name(s)</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（3）在进行处理文件等的操作过程中难免需要在不同的目录下工作，这时cd命令就能派上用场了。cd命令的功能是改变当前的工作目录，它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　cd [directory-name]</FONT></DIV>
<DIV><FONT size=2>cd后面的目录可以是绝对路径，也可以是相对路径。如果cd后面不跟路径名，则是回到用户的主目录。如果大家对此处的一些概念不甚熟悉的话，请参见《</FONT><A href="http://www.donews.net/dev2dev/archive/2005/05/23/394618.aspx"><FONT size=2>Unix操作系统的入门与基础</FONT></A><FONT size=2>》文中的介绍，此处就不再赘述了。下面来看几个例子：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　cd dir1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入当前目录中的dir1子目录</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　cd ..&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入上级目录，即把工作目录改变成当前目录的父目录</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　cd ../zcl&nbsp;&nbsp;&nbsp;&nbsp; //回到父目录，同时再进入zcl子目录中</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　（注：上述三个命令的路径都为相对路径）</FONT></DIV>
<DIV><FONT size=2>&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　cd /home/anray&nbsp; //把工作目录改变成根目录中的home目录下的anray子目录</FONT></DIV>
<DIV><FONT size=2>　　　　（注：此处路径为绝对路径）</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　此外，使用pwd 命令可以查看当前的工作目录，它显示的是当前工作目录所处的绝对路径。</FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（4）ls命令的功能是列表显示指定目录中文件及子目录的信息（其实在Unix系统中目录本身也被视为一个文件，但是为了照顾习惯的思维，在叙述时仍然将其区分为文件与目录两类），缺省输出顺序为纵向按字符顺序排列。它常用的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　ls [-altFR] [directory-name]</FONT></DIV>
<DIV><FONT size=2>参数a代表显示所有类型的文件，包括文件名以“.”为第一个字符的隐藏文件。参数t代表按文件最后修改时间的顺序依次排列文件，参数R将会列出指定目录下以及其所有子目录中的文件，使用参数F将会在列表中的每一个目录后面加上“/”，在每个可执行文件后面加上“*”。参数l代表长列表显示目录内容，即列出文件的类型、访问权限、拥有者、文件大小、修改时间及名称等详细信息。下面将介绍一下长列表显示中的信息的含义，“ls –l”命令的使用如下图所示。</FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>&nbsp;<IMG height=96 alt="" src="http://www.donews.net/images/blog_csdn_net/dev2dev/lsl.jpg" width=557></FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>　　在上图长列表显示文件信息的每一行中，</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2></FONT>&nbsp;</DIV>
<DIV align=center><FONT size=2></FONT>&nbsp;</DIV>
<DIV align=center><FONT size=2>第一列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>第1个字符表示文件的类型；</FONT></DIV>
<DIV><FONT size=2>第2-4个字符表示文件所有者对此文件的访问权限；</FONT></DIV>
<DIV><FONT size=2>第5-7个字符表示用户组对此文件的访问权限；</FONT></DIV>
<DIV><FONT size=2>第8-10个字符表示其他用户对此文件的访问权限；</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2>第二列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>文件的链接数</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2>第三列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>文件的所有者</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2>第四列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>文件的用户组名</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2>第五列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>文件所占的字节数</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2>第六至八列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>文件上一次的修改时间</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=115>
<DIV align=center><FONT size=2>第九列</FONT></DIV></TD>
<TD vAlign=top width=453>
<DIV><FONT size=2>文件名</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=568 colSpan=2>
<DIV align=center><FONT size=2>注：此表格中的一些概念在下文会有详细介绍，这里只需先了解一下即可</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（二）文件管理</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 1、文件的创建、编辑与删除</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　Unix系统中可以使用touch命令来创建新文件，它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　touch filename(s)</FONT></DIV>
<DIV><FONT size=2>但要指出，touch命令最常用的功能并不是创建文件，而是改变指定文件（或目录）的最后访问时间和修改时间。它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>　　　　touch [-am] [mmddhhmm[yy]] filename(s)</FONT></DIV>
<DIV><FONT size=2>此命令中，若指定文件不存在，则创建之；若已存在，则将指定文件的访问时间和修改时间按参数的要求进行改变。参数a代表只改变访问时间，参数m代表只改变修改时间。参数mmddhhmm[yy]中每隔两位分别表示“月日时分[年]”，用户可利用此参数指定欲设置的时间，若不带此参数，则会自动使用系统当前的默认时间。</FONT></DIV>
<DIV><FONT size=2>　　[例] 在当前目录下创建新文件document：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　touch document</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　 将刚创建的文件document的访问与修改时间改为2005年10月1日0时0分：</FONT></DIV>
<DIV><FONT size=2>　　　　 touch -am 1001000005 document</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　大家可不要小视touch命令的此项作用，在软件的实际开发中，有时它还会与企业的客户关系管理策略或企业经济效益密切关联。倘若你所在企业的开发团队协作精神好，工作效率高，或者是改进了相关技术与流程，使原与客户合同中约定的项目完成日期大大提前，为了屏蔽用户知情，避免节外生枝，该命令就派上大用场了。这事我知你知即可，彼此只能心照不宣噢！</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　文件创建好之后就需要对此文件的内容进行相应的编辑了，在Unix系统中最常使用的编辑工具是vi，在后文中会有专门的章节进行详细介绍，此处先行略过。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在使用Unix系统一段时间之后，大家可能会发现文件数量正在快速增加，而其中的一部分文件可能已经变得过时，或是没有了使用价值，这时就应该及时利用rm命令将此类文件删除了。rm命令的功能是删除文件或目录，它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　rm [-i] filename(s)</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　或&nbsp; rm –r[i] directory-name(s)</FONT></DIV>
<DIV><FONT size=2>使用参数i的目的是给大家一次“买后悔药”的机会。由于Unix系统中的文件一旦删除将极难恢复，因此在删除文件之前一定要慎重。而参数i的作用是在删除文件之前进行逐一询问提醒，是否确实要删除此文件。如果输入y则删除文件，若输入其他字符，文件则会被保留。使用了带参数r的rm命令可用来删除一个目录以及其所有子目录，此时不必受删除目录必须为空目录的条件限制，因此也就更具危险性，大家在使用前应当慎之又慎。</FONT></DIV>
<DIV><FONT size=2>　　[例]</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　rm doc1 doc2 doc3&nbsp;&nbsp; // 直接删除文件doc1、doc2、doc3 </FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 rm –i doc1 doc2 doc3&nbsp; //在删除文件doc1、doc2、doc3时，每删除一个之前先作提示</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 rm -ri dir1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//删除目录dir1以及其中所含的所有文件与子目录，删除前先作提示</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、文件的查看</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　常用的查看文本文件的命令有cat、more、head、tail等，下面将逐一进行介绍。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（1）cat命令可以在屏幕上显示出文本文件的内容，它的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cat filename(s)</FONT></DIV>
<DIV><FONT size=2>不过cat最常见的用法是配合重定向符来清空文件以及将几个文件合并成为一个文件。重定向符的详细用法请参见本文第二章节的内容。</FONT></DIV>
<DIV><FONT size=2>　　[例] </FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cat /dev/null &gt; doc.txt &nbsp;//清空文件doc.txt，/dev/null代表空设备文件（记住使用即可）</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cat &lt; doc1.txt &gt;&gt; doc2.txt&nbsp; //将doc1.txt中的内容保存在doc2.txt的尾部</FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（2）使用cat命令查看文本文件时会有一个问题，就是它不会分屏显示文件，这样当文件的内容超出一屏时，除了最后一屏的内容之外，上面的内容都将是一闪而过。当然解决的办法Unix也替我们想好了，就是使用more命令来查看此类文件。more命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　more filename</FONT></DIV>
<DIV><FONT size=2>more命令将会以分页的方式显示文本文件内容。当每次将文件内容显示在屏幕上时，如果内容超出一屏，则会在屏幕的左下部显示“ －－more－－”，并且在其后面显示百分比表示已显示部分占总内容的比例。此后按回车键则会下滚一行，按空格键则会下翻一屏，按“b”字母键可以返回上一屏，按“h”字母键可以获得关于更多功能的帮助；使用“/”加上字符串可以查找指定字符串的内容信息，找到后可以按“n”字母键继续搜索下一个符合要求的内容信息，按“q”字母键则可退出并返回Shell命令提示符状态。</FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（3）head &amp; tail 命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 head与tail命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　head [-n] filename(s)</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　tail [-n] filename(s)</FONT></DIV>
<DIV><FONT size=2>head命令的功能是显示一个或多个文件开头n行的内容，tail命令的功能是显示一个或多个文件最后n行的内容。若没有指定参数n，则系统会默认显示10行内容。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（三）文件与目录的访问权限</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 1、文件访问权限简介</FONT></DIV>
<DIV><FONT size=2>　　在Unix系统中每个文件（或目录）都包含有一套权限，这些权限决定了谁能访问该文件以及如何访问该文件。通常文件有三种权限：</FONT><FONT size=2>&nbsp;</FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=48>
<DIV align=center><FONT size=2>权限</FONT></DIV></TD>
<TD vAlign=top width=156>
<DIV align=center><FONT size=2>普通文件的权限</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV align=center><FONT size=2>目录的权限</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=48>
<DIV align=center><FONT size=2>r</FONT></DIV></TD>
<TD vAlign=top width=156>
<DIV align=center><FONT size=2>读取文件内容</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV align=center><FONT size=2>读取文件名称</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=48>
<DIV align=center><FONT size=2>w</FONT></DIV></TD>
<TD vAlign=top width=156>
<DIV align=center><FONT size=2>向文件写入信息</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV align=center><FONT size=2>建立和删除文件，可以改变文件名等</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=48>
<DIV align=center><FONT size=2>x</FONT></DIV></TD>
<TD vAlign=top width=156>
<DIV align=center><FONT size=2>执行文件</FONT></DIV></TD>
<TD vAlign=top width=300>
<DIV align=center><FONT size=2>使用该目录中的文件</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在Unix系统中有三种不同的用户类型，分别是所有者（owner）、用户组成员（group）、其他用户（other）。所有者是指文件的创建者；用户组成员是指由若干个用户组成的组内成员；而除所有者、用户组成员之外的访问者，统称为其他用户。所有者除拥有相关的访问权限外，还有向另两类用户授权之权限。用户组中的成员在同组内可以共享信息，通常某一类或某一项目中的用户会被Unix系统管理员归为一个用户组，每个用户都被授予能访问同组成员文件的权限。其他用户在所有者的授权下可对文件有读、写或执行的权限。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　上文中我们曾提到使用“ls –l”命令来显示文件的访问权限。如图中所示：</FONT></DIV>
<DIV><FONT size=2>&nbsp;<IMG alt="" src="http://www.donews.net/images/blog_csdn_net/dev2dev/lsl.jpg"></FONT></DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　以文件myfile1为例：</FONT></DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=96>
<DIV align=center><FONT size=2></FONT>&nbsp;</DIV></TD>
<TD vAlign=top width=120>
<DIV align=center><FONT size=2>所有者</FONT></DIV></TD>
<TD vAlign=top width=120>
<DIV align=center><FONT size=2>用户组</FONT></DIV></TD>
<TD vAlign=top width=108>
<DIV align=center><FONT size=2>其他用户</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV align=center><FONT size=2>权限</FONT></DIV></TD>
<TD vAlign=top width=120>
<DIV align=center><FONT size=2>rw-</FONT></DIV></TD>
<TD vAlign=top width=120>
<DIV align=center><FONT size=2>r--</FONT></DIV></TD>
<TD vAlign=top width=108>
<DIV align=center><FONT size=2>r--</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=96>
<DIV align=center><FONT size=2>含义</FONT></DIV></TD>
<TD vAlign=top width=120>
<DIV align=center><FONT size=2>可读、可写、不可执行</FONT></DIV></TD>
<TD vAlign=top width=120>
<DIV align=center><FONT size=2>可读、不可写、不可执行</FONT></DIV></TD>
<TD vAlign=top width=108>
<DIV align=center><FONT size=2>可读、不可写、不可执行</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、文件访问权限的设置</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　使用chmod命令可以修改文件的访问权限，chmod命令的格式分为两种：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　格式1：chmod symbolic_mode file(s)</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　格式2：chmod absolute_mode file(s)</FONT></DIV>
<DIV><FONT size=2>　　（1）格式1：符号模式（symbolic_mode)的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　chmod who op permission(s) file(s)</FONT></DIV>
<DIV><FONT size=2>　　参数who表示用户类型，它的内容为以下一项或多项：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>u</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>文件所有者</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>g</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>用户组</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>o</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>其他用户</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>a</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>所有用户</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　参数op表示操作：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=72>
<DIV><B><FONT size=2>+</FONT></B></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>表示要增加permission指定的权限</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><B><FONT size=2>-</FONT></B></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>表示要取消permission指定的权限</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><B><FONT size=2>=</FONT></B></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>设置为permission指定的权限，并取消原设置权限</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　参数permission为权限类型，它的内容为以下一项或多项：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>r</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>表示可读</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>w</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>表示可写</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=72>
<DIV><FONT size=2>x</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>表示可执行</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　[例] 以上图为例，要为myfile1的所有者增加执行权限，用户组增加写权限与执行权限，取消其他用户的读权限，使用命令如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　chmod u+x,g+wx,o-r myfile1&nbsp;&nbsp; //为不同用户类型设置权限时用“,”分隔</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　（2）格式2:绝对模式（absolute_mode）的命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 chmod xyz file(s)</FONT></DIV>
<DIV><FONT size=2>参数x、y、z分别代表0-7的数字，用来表示所有者、用户组、其他用户对该文件的访问权限。x、y、z所代表的0-7数字的含义如下：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>Value</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>permission</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>7</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>r w x</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>6</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>r w -</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>5</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>r – x</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>4</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>r - -</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>3</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>- w x</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>2</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>- w -</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>1</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>- - x</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV align=center><FONT size=2>0</FONT></DIV></TD>
<TD vAlign=top width=216>
<DIV align=center><FONT size=2>- - -</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　[例] 用绝对模式来完成符号模式中的例子：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　chmod 770 myfile1</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　从对比中大家应该感受到，符号模式会更加直观一些，而绝对模式的数字含义较难记忆，因此设置文件权限时推荐使用符号模式。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（四）文件与目录的移动复制</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　在Window系统中，我们最熟悉的操作应该莫过于“Ctrl + C”、“Ctrl + V”、“Ctrl + X”了，因为它为我们节省了大量的时间，带来了极大的便利。而在Unix系统中同样为我们准备了cp、mv命令，利用它们可以实现剪刀加糨糊的操作了：）</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　1、移动或重命名文件（或目录）</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　利用mv命令可以将一个文件（或目录）从一个目录移到另一个目录中，也可以用于重命名一个文件（或目录）。mv命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　mv [-i] source-file target-file</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　或&nbsp; mv [-i] source-directory target-directory</FONT></DIV>
<DIV><FONT size=2>当target-file为文件名时，则相当于文件重命名，target-directory同理。参数i代表在将文件移动到指定目录中时，若已存在同名文件，则将询问是否覆盖已存在的文件，输入y则覆盖，输入其他字符则中止移动，保留原文件。</FONT></DIV>
<DIV><FONT size=2>　　[例] </FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　mv beans nuts&nbsp;&nbsp; //将文件beans重命名为nuts</FONT></DIV>
<DIV><FONT size=2>　　　　 mv file1 file2 /tmp &nbsp;&nbsp;//将文件 file1和file2移动到目录/tmp中</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;mv dir1 /export/home/anray&nbsp; // 将目录dir1包括其所有文件与子目录都移动到目<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 录</FONT><FONT size=2>/export/home/anray下</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、复制文件（或目录）</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　利用cp命令可以将一个文件（或目录）从一个目录复制到另一个目录中，命令格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cp [-i] source-file(s) destination-directory</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　　 或&nbsp; cp –r[i] source-directory(s) destination-directory</FONT></DIV>
<DIV><FONT size=2>参数i代表在将文件复制到指定目录中时，若已存在同名文件，则将询问是否覆盖已存在的文件，输入y则覆盖，输入其他字符则中止复制，保留原文件。当复制文件到指定目录，或许会期望赋予此复制的文件不同于源文件的文件名，则只需将新文件名放在目标目录名之后，用“/”隔开即可。当需要将一个目录连同它的所有子目录一起复制到目标目录中时，可使用参数r。</FONT></DIV>
<DIV><FONT size=2>　　[例] </FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　　 cp beans apple&nbsp; //将文件beans复制到同目录下并改文件名为apple</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　cp beans apple dir1 //同时复制两个文件beans与apple到当前目录下的子目录dir1中</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　cp apple dir2/orange&nbsp; //将文件apple复制到当前目录下的子目录dir2中，并改名为orange</FONT></DIV>
<DIV><FONT size=2>　　&nbsp;&nbsp;&nbsp; cp -r dir1 dir2 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将目录dir1中的所有文件以及其所有子目录复制到目录dir2中</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（五）其它常用命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　1、man命令</FONT></DIV>
<DIV><FONT size=2>　　man命令用于查看帮助信息，常用的命令格式有：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　　　　man name</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp; 　　或&nbsp;&nbsp; man –k keyword</FONT></DIV>
<DIV><FONT size=2>　　[例] </FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　man&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看man的使用方法</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　man ls&nbsp;&nbsp;&nbsp; //查看ls命令的帮助信息</FONT></DIV>
<DIV><FONT size=2>在查看帮助信息过程中，按回车键则会下滚一行，按空格键则会下翻一屏，按“b”字母键可以返回上一屏，使用“/”加上字符串可以查找指定字符串的内容信息，找到后可以按“n”字母键继续搜索下一个符合要求的内容信息，按“q”字母键则可退出并返回Shell命令提示符状态。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　2、clear命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　clear命令的功能是清理屏幕，每次操作Unix系统时间长了，屏幕上的信息难免显得有些凌乱，这时clear一下是不是觉得眼前一下子“清静”了许多：）</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　3、date命令</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　date命令的功能是显示系统时间，并可修改系统时间。date命令的格式如下：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　date [mmddhhmm[yy]]<BR>date命令后若无参数，则会显示系统当前的默认时间。若要修改系统时间，则输入参数的顺序依次为“月日时分年”。如要将当前系统时间修改为2005年10月1日0时0分，则可使用如下命令：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　 date 1001000005</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　4、cal命令</FONT></DIV>
<DIV><FONT size=2>　　cal命令的功能是显示日历。</FONT></DIV>
<DIV><FONT size=2>　　[例1] 要查看2005年的全年日历：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　　cal 2005</FONT></DIV>
<DIV><FONT size=2>　　[例2] 要查看2005年5月份的日历：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cal 5 2005</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　　　　　　　</FONT><FONT size=3>二、特殊字符的使用</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　先说一个事例：一次有位朋友问我有没有办法把某英语辅导软件中加密的数据搞到手，我想也没想，立刻翻箱倒柜去找出各种解密工具。大半个小时后，正在我毫无头绪之际，这位朋友跑来说自己已搞掂了这个软件的使用授权。问他，说只是给软件作者打了个电话。由此想到Unix中的一些特殊字符，往往平时操作中不曾想到去用它，而是墨守成规地进行自己所熟悉的步骤，实际上是在用那些老笨的方法。如能想到并熟知Unix中特殊字符的功能及使用技巧，就会像我这位聪明的朋友一样取得事半功倍的效果。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（一）通配符的使用</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　文件名是命令中最常见的参数，大家可能经常会碰到这样的情况，就是仅知道文件名的一部分，或者是想同时引用多个具有相同扩展名或以相同字符串开头的文件。Shell中提供了一套被称作通配符的符号，它们能搜索、匹配并产生一个文件名列表，通配符包括“*”、“？”、“[]”。用户执行以包含通配符的文件名为参数的命令之后，Shell会自动去搜索匹配文件并返回所发现的一个文件名列表，然后Shell就会用这些文件名作为命令的参数了。</FONT></DIV>
<DIV><FONT size=2>星号“*”用于指代以特定字符串开始或结束的文件名，问号“?”代表文件名称中的单一字符，即“*”可替代文件名中任意长度的字符串，而“？”只能替代一个字符。方括号“[]” 的作用是使用户确定所需搜索的有效字符集，任何在“[]”里的字符都将被匹配。此外，在“[]”中可使用“-”来指定一个字符集范围，这样就不必手动的一个个列出来了。</FONT></DIV>
<DIV><FONT size=2>请看下面的例子：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　假设当前目录下有8个文件doc1，doc2，doc3，docA，docB，docC，docD，document，分别对其进行如下操作：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　ls doc*&nbsp; //显示出doc1，doc2，doc3，docA，docB，docC，docD，document</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　ls doc?&nbsp; // 显示出doc1，doc2，doc3，docA，docB，docC，docD</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　ls doc[13AD]&nbsp; // 显示出doc1，doc3，docA，docD</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　 ls doc[A-C]&nbsp;&nbsp;&nbsp; // 显示出docA，docB，docC</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　 ls doc[1-8]&nbsp; // 显示出doc1，doc2，doc3</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（二）命令分隔符“；”的使用</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　有时某些用户可能想在一行中运行多个命令，那么可以在这一行中输入多个命令，命令间用“；”相隔，如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;　mkdir tmp; cp file1 tmp/file2; ls -l tmp</FONT></DIV>
<DIV><FONT size=2>Unix会顺序执行以上三条命令，要注意的是在命令间使用分隔符“；”，只代表命令执行的先后顺序。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（三）重定向符的使用</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　用户欲执行一个命令，当然是要先输入此命令，系统默认的标准输入设备是键盘，而执行命令后的结果通常显示在系统默认的标准输出设备显示器上。但是，Unix系统具有重定向功能，即将标准输出重定向则可将命令的处理结果存入指定的文件，而非显示在屏幕上；将标准输入重定向则可把指定的数据文件作为输入源，而非从键盘输入数据。</FONT></DIV>
<DIV><FONT size=2>重定向符如下：</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<TABLE cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>&lt;&nbsp;</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>从一个文件或设备重定向输入</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>&gt;&nbsp;</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>重定向输出到一个文件或设备，如文件不存在则创建该文件，如文件已存在则覆盖该文件</FONT></DIV></TD></TR>
<TR>
<TD vAlign=top width=84>
<DIV><FONT size=2>&gt;&gt;&nbsp;</FONT></DIV></TD>
<TD vAlign=top width=324>
<DIV><FONT size=2>重定向输出到一个文件或设备，并将输出信息追加到已存在文件的尾部</FONT></DIV></TD></TR></TBODY></TABLE>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>　　例如：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cal 5 2005 &gt; doc1.txt&nbsp;&nbsp; //将2005年5月份的日历保存在文件doc1.txt中</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　 cal 6 2005 &gt;&gt; doc1.txt&nbsp; //将2005年6月份的日历保存在文件doc1.txt尾部</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　　　　　　 //此时文件doc1.txt中保存了5、6两个月的日历</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 　　cat &lt; doc1.txt &gt; doc2.txt&nbsp; //将doc1.txt作为输入源，把其中的内容保存在doc2.txt中</FONT></DIV>
<DIV><B><FONT size=2></FONT></B>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（四）管道符“|”的使用</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　有时可能会需要将一个命令的标准输出发送给另一个命令使用，而非发送到一个目标文件，这时就需要使用Unix提供的管道符“|”在这两个命令间架起一条连接管道。管道符“|”的作用就是从“|”左边的命令接受输出数据并发送给“|”右边的命令作为输入数据。</FONT></DIV>
<DIV><FONT size=2>　　如：l</FONT><FONT size=2>s -l /etc | more </FONT></DIV>
<DIV><FONT size=2>管道符“|”的功能非常强大且很有用，利用它可以实现一些复杂的操作。在下一节关于信息查找命令部分，我们将会看到它的一些应用。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（五）其它特殊字符</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　美元符“$”是一个特殊操作符，当其置于变量名前面时，变量名会被变量值所代替。因此通常都是通过在变量名前加上“$”来引用该变量的值，“$”也常被称为变量取值符。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　Unix中可以使用三种引号符：</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（1）单引号（’ ’）：功能是让系统原样输出单引号中所含的内容。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（2）双引号（“ ”）：双引号中的字符串若含有通配符，则系统会先进行通配后再输出；若含有变量取值符“$”，则系统会先进行变量取值后再输出。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp; 　（3）反引号（` `）：反引号中所含的内容必须是一个命令，这样它会先执行此命令，然后把命令执行的结果返回输出。</FONT></DIV>
<DIV><FONT size=2>&nbsp;&nbsp;&nbsp;　 对于上述几个特殊字符，在下文关于Shell脚本编程部分大家会看到具体的应用例子。此外，常见的特殊字符还有“.”代表用户所在的当前目录，“..”代表用户所在的当前目录的父目录，“~”代表用户登陆系统的主目录。</FONT></DIV>
<DIV><FONT size=2></FONT>&nbsp;</DIV>
<DIV><FONT size=2></FONT></DIV>
<DIV><FONT size=2>上一篇：《<A href="http://www.donews.net/dev2dev/archive/2005/05/23/394618.aspx"><FONT color=#000080>Unix操作系统的入门与基础</FONT></A>》</FONT></DIV>
<DIV><FONT size=2>下一篇：《<A href="http://www.donews.net/dev2dev/archive/2005/05/29/404122.aspx"><FONT color=#000080>Unix的轻巧“约取而实得”（中篇）</FONT></A>》</FONT></DIV><img src ="http://www.blogjava.net/dev2dev/aggbug/5835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dev2dev/" target="_blank">朱春雷</a> 2005-06-09 22:08 <a href="http://www.blogjava.net/dev2dev/archive/2005/06/09/5835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix操作系统的入门与基础</title><link>http://www.blogjava.net/dev2dev/archive/2005/06/06/5601.html</link><dc:creator>朱春雷</dc:creator><author>朱春雷</author><pubDate>Mon, 06 Jun 2005 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/dev2dev/archive/2005/06/06/5601.html</guid><wfw:comment>http://www.blogjava.net/dev2dev/comments/5601.html</wfw:comment><comments>http://www.blogjava.net/dev2dev/archive/2005/06/06/5601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dev2dev/comments/commentRss/5601.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dev2dev/services/trackbacks/5601.html</trackback:ping><description><![CDATA[<p><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unix操作
系统的入门与基础 <br><br>　
　与大家熟悉的Windows用户界面和使用习惯不同，Unix是常使用命令运行、极具灵活性的操作系统，目前的产品主要有IBM-AIX、SUN-
Solaris、HP-UNIX等。初期接触Unix操作系统，下列的问题几乎是常遇的：由图形界面操作转到以命令行方式操作的不习惯性；在短期内掌握全
部命令的困难性；针对同一操作有几个命令的难选择性；不同shell命令格式的易混淆性，等等。一些初学者可能会因此而丧失继续学习的信心。根据上述的实
际情况，本文遵循“避繁就简、避滥就精，不求详尽、只求适用”的原则，以初学者上机的必经过程为思路，力求用层次分明的浚理和详略得当的阐释，解读该操作
系统使用的基本须知内容，以期达到便捷入门和较快精进的目的。 <br><br>　　　　　　　　　　　 &nbsp;&nbsp;&nbsp; （一）Unix操作系统概述 <br><br>　
　Unix操作系统是一种强大的多任务、多用户操作系统。早在上世纪六十年代未，AT&amp;T Bell实验室的Ken
Thompson、Dennis Ritchie及其他研究人员为了满足研究环境的需要，结合多路存取计算机系统（Multiplexed
Information and Computing
System）研究项目的诸多特点，开发出了Unix操作系统。至今，Unix本身固有的可移植性使它能够用于任何类型的计算机：微机、工作站、小型机、
多处理机和大型机等。 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Unix操作系统通常被分成三个主要部分：内核（Kernel）、Shell和文件系统。 <br><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/zjzcl/unix1.JPG" height="384" width="512"><br><br>　　内核是Unix操作系统的核心，直接控制着计算机的各种资源，能有效地管理硬件设备、内存空间和进程等，使得用户程序不受错综复杂的硬件事件细节的影响。 <br>　
　Shell是Unix内核与用户之间的接口，是Unix的命令解释器。目前常见的Shell有Bourne Shell（sh）、Korn
Shell（ksh）、C Shell（csh）、Bourne-again Shell（bash），本文主要以csh和bash为例。 <br>　
　文件系统是指对存储在存储设备（如硬盘）中的文件所进行的组织管理，通常是按照目录层次的方式进行组织。每个目录可以包括多个子目录以及文件，系统以
/ 为根目录。常见的目录有 /etc （常用于存放系统配置及管理文件）、/dev （常用于存放外围设备文件）、/usr
（常用于存放与用户相关的文件）等。 <br><br><br>　　　　　　&nbsp; 　　　　　&nbsp; （二）上机基本操作解说 <br><br>　　简介Unix操作系统是作必要的知识铺垫，为避免一开始就进行枯燥论理和罗列繁复的Unix命令、参数让人感到畏惧与厌烦，接下来就先让我们上机操作吧！ <br>　　初次使用Unix，最常见的操作不外乎创建新目录、创建新文件、进入指定的目录、显示目录内容、显示当前所处的路径、查看文件内容、拷贝文件、移动文件、删除文件、删除目录、查看系统帮助等，那我们就模拟这些必经过程来练习基本操作吧。 <br>　　（1）首先让我们在当前目录下创建两个目录dir1，dir2： <br>　　　　　　mkdir dir1 dir2　　&nbsp;&nbsp;&nbsp;&nbsp; //输入命令后记得敲一下回车键：） <br>　　（2）进入目录dir1中创建文件file1，file2： <br>　　　　　　cd dir1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入目录dir1 <br>　　　　　　touch file1 file2　　&nbsp;&nbsp;&nbsp; //创建文件file1，file2 <br>　　（3）再进入目录dir2中创建文件file3，file4： <br>　　　　　　cd .. 　　　　　　　&nbsp;&nbsp; //返回上一级目录 <br>　　　　　　cd dir2 　　　　　　&nbsp;&nbsp; //进入目录dir2 <br>　　　　　　touch file3 file4 　&nbsp;&nbsp; 　//创建文件file3，file4 <br>　　（4）查看目录dir2中所含的文件及子目录情况： <br>　　　　　　ls 　　　　　　　　&nbsp;&nbsp; //这时会看到屏幕显示出目录dir2中有2个文件file3和file4 <br>　　（5）往文件file3中写入信息，并将其拷贝到目录dir1中： <br>　　　　　　cal 5 2005 &gt; file3 　&nbsp;&nbsp; //该句命令后文会有详细讲解，此处照样输入即可 <br>　　　　　　cp file3 ../dir1 <br>　　（6）回到目录dir1中，查看所含的文件及子目录情况： <br>　　　　　　cd .. <br>　　　　　　cd dir1 <br>　　　　　　ls 　　　　　　　　&nbsp;&nbsp; //这时会看到屏幕显示出目录dir1中有3个文件file1、file2、file3 <br>　　（7）再查看一下文件file3中内容，并将该文件删除： <br>　　　　　　cat file3 　　　　　&nbsp;&nbsp; //这时会看到屏幕显示2005年5月份的日历 <br>　　　　　　rm file3 　　　　　&nbsp;&nbsp; //删除文件file3 <br>　　（8）将文件file1移动到目录dir2中，同时查看目录dir1、dir2所含文件及子目录情况： <br>　　　　　　mv file1 ../dir2 <br>　　　　　　ls 　　　　　　　　&nbsp; //这时会看到屏幕显示出目录dir1中有1个文件file2 <br>　　　　　　ls ../dir2　　　　　&nbsp;&nbsp; //这时会看到屏幕显示出目录dir2中有3个文件file1、file3、file4 <br>　　（9）显示当前所处的路径，并删除目录dir1： <br>　　　　　　pwd <br>　　　　　　cd .. <br>　　　　　　rm –r dir1 <br>　　（10）显示ls命令的系统帮助： <br>　　　　　　man ls <br>　　在进行第10步操作后，这时会觉得眼前一闪，除了有点类似“黑客帝国”的感觉之外，对于ls的解释是否啥也没看清楚啊？对了，因为我们还没有使用分屏显示信息，那使用如下的命令将会让你的眼前豁然明朗： <br>　　　　　　man ls | more 　　　 //对于| more的使用后文将会进行详细解释，这里只需知<br>　　　　　　　　　　　　　　　&nbsp; //道使用空格键是往前翻看帮助文档即可 <br><br>　
　看到这里，想必大家对于Unix操作系统的使用会有一定的感性认识了，已基本会使用类似于Windows操作系统中建立文件夹、建立文件、查看文件内
容、复制文件、剪切文件、删除文件、删除文件夹等操作了。可且慢，这时大概会有朋友问：“兄弟，偶还没登陆系统呢，怎么进行上面的操作啊？”这个问题提得
好，下面就让我们从头开始作登陆系统的操作吧。 <br>　　如果在本机上已安装了Unix操作系统，比如安装了SUN-Solaris，则只需启动系统，稍等片刻后会看到如图1的界面。 <br><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/zjzcl/unix2.JPG"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
（图1） <br><br>　　我们这里主要是使用命令行方式来使用Solaris，因此点按住“Options”按钮，这时会出现选项菜单，如图2所示。 <br><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/zjzcl/unix3.JPG"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
（图2） <br>　　将鼠标移动到“Command Line Login”项上后弹开。然后在出现如图3中所示的画面时，敲击回车键。 <br><img alt="" src="http://blog.csdn.net/images/blog_csdn_net/zjzcl/unix4.JPG"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
（图3） <br>　　这样，我们就能使用命令行来操纵操作系统了。这时会要求用户输入用户名及口令，默认情况下可使用用户名“root”、口令为空来进入系统。 <br>　
　如果用户是在本机上通过网络对远程装有Unix操作系统的主机进行操作，则可以使用telnet进行访问。假设该装有Unix操作系统主机的IP地址为
198.4.30.25，用户使用的操作系统是WindowsXP，则可以进入“DOS命令提示符”状态，输入以下命令： <br>　　　　　　telnet 198.4.30.25 <br>　　　　　　login: //输入登录用户名 <br>　　　　　　password: //输入登录口令 <br>　　倘若用户使用的是Red Hat Linux系统，则可以在桌面上右击鼠标，在弹出的菜单中选择“新建终端”项，再在随后弹出的窗口中进行相同的操作。通常用户若是第一次登入某远程主机，还需要先进行注册操作，具体情况视该远程主机操作的说明而定。 <br>　　要注意，在每次使用完毕要退出Unix系统之前，一定要进行注销，以防止他人通过你的账号进入系统，保证系统的完整性。输入命令“exit”即可完成注销过程。 <br><br>　　　　　　　　　　　　&nbsp;&nbsp; （三）演进所涉知识预习 <br><br>　　经过前面的上机操作，大家对于如何使用Unix系统应该有了一定的感性认识。为了下一步更深入的了解掌握Unix系统及使用的一些技巧，这里再对相关的应知内容做一补叙与准备。 <br><br>　　一、关于Shell <br>　　上文中曾简要介绍过的Shell，不同Shell的命令格式会略有差异，现今最常使用的Shell是C Shell（csh）和Bourne-again Shell（bash）。Shell之间可以嵌套，即在C Shell环境中，输入命令： <br>　　　　　　bash <br>就能进入Bourne-again Shell的使用环境。同理在Bourne-again Shell环境中，输入命令： <br>　　　　　　csh <br>就能进入C Shell的使用环境。大家可依据自己的使用习惯来选择相应的Shell。 <br><br>　　二、Unix命令格式 <br>　　1、Unix命令提示符 <br>　
　在命令行操作环境下，Unix系统会显示一提示符，提示用户可以在此提示符后输入一行命令。不同的Shell有不同的缺省提示符，如B
Shell、Bourne-again Shell的缺省提示符为"$"，C
Shell的缺省提示符为"%"。但当以root用户登录时，系统提示符统一缺省为"#"。 <br>　　2、基本命令格式 <br>　　Unix命令的基本格式如下： <br>　　　　　　Command [option(s)] [argument(s)] <br>Unix命令由一个命令（command）和零到多个参数构成。Unix的命令区分大小写，且命令和参数之间、参数与参数之间都应用空格隔开。 <br><br>　　三、Unix文件系统 <br>　　1、Unix文件系统分类 <br>　
　Unix操作系统可由多个可以动态安装及拆卸的文件系统组成。Unix文件系统主要分为两大类：根文件系统和附加文件系统。根文件系统是Unix系统至
少应含有的一个文件系统，它包含了构成操作系统的有关程序和目录，由“/”符号来表示。附加文件系统是除根文件系统以外的其它文件系统，它必须挂
（mount）到根文件系统的某个目录下才能使用。本文中若无特别声明，则都是针对根文件系统来进行说明的。 <br><br>　　2、Unix文件类型 <br>　　在Unix中文件共分为四种： <br>　　（1）普通文件（-）：又分为文本文件、二进制文件、数据文件； <br>　　（2）目录文件（d）； <br>　　（3）设备文件（l）； <br>　　（4）链接文件（b/c）：又可分为块设备文件、字符设备文件。 <br>　　普通文件中的文本文件主要包括ASCII文本文件、英文文本文件和一些可执行的脚本文件等；二进制文件主要是32位的可执行文件等；数据文件主要是系统中的应用程序运行时产生的文件。 <br>　　目录文件是用来存放文件目录的。 <br>　　设备文件代表着某种设备，一般放在/dev目录下。它分为块设备文件和字符设备文件，块设备文件以区块为输入输出单元，如磁盘；字符设备文件是以字符作为输入输出单元，如串口。 <br>　　链接文件类似于Windows系统中的快捷方式，它指向链接文件所链接着的文件。 <br>　　值得注意的是，与Windows系统不同，Unix系统中目录本身就是一个文件，另外文件类型与文件的后缀名无关。 <br>　　不同类型的文件有着不同的文件类型标识（可使用“ls -l”命令来进行查看），它们使用下列符号来表示相应的文件类型： <br>　　　　- 　普通文件 <br>　　　　d 　目录文件 <br>　　　　b 　块设备文件 <br>　　　　c 　字符设备文件 <br>　　　　l 　 链接文件 <br><br>　　3、Unix目录结构 <br>　　Unix系统采用树型的目录结构来组织文件，每一个目录可能包含了文件和其他的目录。该结构以根目录“/”为起点向下展开，每个目录可以有许多子目录，但每个目录都只能有一个父目录。 <br><br>　　4、Unix文件名称 <br>　　Unix文件名称的最大长度为256字符