﻿<?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-我的Blog我做主^_^-文章分类-LINUX</title><link>http://www.blogjava.net/wyz191/category/19600.html</link><description>走向一条通往JAVA的不归路...</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:07:56 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:07:56 GMT</pubDate><ttl>60</ttl><item><title>linux命令集－－－－整理中</title><link>http://www.blogjava.net/wyz191/articles/linux.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Wed, 31 Jan 2007 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/linux.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/96940.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/linux.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/96940.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/96940.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">目录：<br />            １、man<br />            ２、help<br />            ３、find<br />            ４、nslookup<br />            <br />一、<font size="5"><strong>man命令</strong></font></font>
		<br />
		<br />         这个命令应该是每个Linux系统上都有的。它格式化并显示在线的手册页。通常使用者只要在命令man后，输入想要获取的命令的名称（例如 ls），man就会列出一份完整的说明，其内容包括命令语法、各选项的意义以及相关命令等。<br /><br />该命令的一般形式为：<br /><br />man [选项] 命令名称<br /><br />命令中各选项的含义分别为：<br /><br />-M 路径 指定搜索man手册页的路径，通常这个路径由环境变量MANPATH预设，如果在命令行上指定另外的路径，则覆盖MANPATH的设定。<br /><br />-P 命令 指定所使用的分页程序，缺省使用/usr/bin/less–is，在环境变量MANPAGER中预设。<br /><br />-S 章节 由于一个命令名称可能会有很多类别，至于类别，列出如下：　<br /><br />章节 说明<br /><br />1 、一般使用者的命令<br />2、 系统调用的命令<br />3、 C语言函数库的命令<br />4、 有关驱动程序和系统设备的解释<br />5、 配置文件的解释<br />6、 游戏程序的命令<br />7、 其他的软件或是程序的命令<br /><br />有关系统维护的命令 　<br /><br />-a 显示所有的手册页，而不是只显示第一个。<br /><br />-d 这个选项主要在检查时使用，如果用户加入了一个新的文件，就可以用这个选项检查是否出错，这个选项并不会列出文件内容。<br /><br />-f 只显示出命令的功能而不显示其中详细的说明文件。<br /><br />-p string 设定运行的预先处理程序的顺序，共有下列几项：<br /><br />e eqn t tbl<br /><br />g grap r refer<br /><br />p pic v vgrind<br /><br />-w 不显示手册页，只显示将被格式化和显示的文件所在位置。<br /><br />例如：查看cd命令的使用方法。<br /><br />$ man cd<br /><br />cd（n） Tcl Built-In Commands cd（n）<br /><br />_________________________________________________________________<br /><br />NAME<br /><br />cd - Change working directory<br /><br />SYNOPSIS<br /><br />cd ?dirName?<br /><br />_________________________________________________________________<br /><br />DEs criptION<br /><br />Change the current working directory to dirName, or to the<br /><br />home directory （as specified in the HOME environment vari-<br /><br />able） if dirName is not given. Returns an empty string.<br /><br />KEYWORDS<br /><br />working directory<br /><br />Tcl 1<br /><br />（END）<br /><br />可以按q键退出man命令。<br /><br /><font color="#0000ff" size="5"><strong>二、help命令</strong></font><br /><br />         help命令用于查看所有Shell命令。用户可以通过该命令寻求Shell命令的用法，只需在所查找的命令后输入help命令，就可以看到所查命令的内容了。　<br /><br />例如：查看od命令的使用方法。<br /><br />$ od --help<br /><br /><font color="#0000ff" size="5"><strong>三、find命令</strong></font><br /><font color="#cccccc"> <br /><font color="#000000">使用说明 :  <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 /> # find . -ftype f  <br />  <br />将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出 <br /> # find . -ctime -20  <br /><br />find . -name "*" -exec grep xxx {} ; -print |morexxx为你想要找的字符串</font>  <br /><br /><font color="#0000ff" size="5"><strong>四、nslookup命令</strong></font><br /><font color="#000000"><br />         nslookup命令的功能是查询一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器，就可以用这个命令查看不同主机的IP地址对应的域名。<br /><br />该命令的一般格式为：<br /><br />nslookup [IP地址/域名]<br /><br /><p>Nslookup 必须要安装了TCP/IP 协议的网络环境之后才能使用。 
</p><p>现在网络中已经架设好了一台 DNS 服务器，主机名称为 linlin ,它可以把域名 www.feitium.net 解析为 192.168.0.1 的IP地址，这是我们平时用得比较多的正向解析功能。 
</p><p>检测步骤如下： 
</p><p> Nslookup www.feitium.net ，“回车”之后即可看到如下结果： <br />　　Server: linlin <br />　　Address: 192.168.0.5 <br />　　Name: www.feitium.net <br />　　Address: 192.168.0.1 <br />　　以上结果显示，正在工作的 DNS 服务器的主机名为 linlin ，它的 IP 地址是192.168.0.5 ，而域名www.feitium.net 所对应的 IP 地址为 192.168.0.1 。那么，在检测到 DNS 服务器 linlin 已经能顺利实现正向解析的情况下，它的反向解析是否正常呢? 也就是说，能否把IP地址192.168.0.1反向解析为域名www.feitium.net ?我们在命令提示符C:\&gt;的后面键入 Nslookup 192.168.0.1 ，得到结果如下： <br />　　Server: linlin <br />　　Address: 192.168.0.5 <br />　　Name: www.feitium.net <br />　　Address: 192.168.0.1 <br />这说明，DNS 服务器 linlin 的反向解析功能也正常。 
</p><p>然而，有的时候，我们键入Nslookup www.feitium.net ，却出现如下结果： <br />Server: linlin <br />Address: 192.168.0.5 <br />*** linlin can't find www.feitium.net: Non-existent domain 
</p><p>这种情况说明网络中DNS服务器 linlin 在工作，却不能实现域名 www.feitium.net的正确解析。此时，要分析DNS服务器的配置情况，看是否 www.feitium.net 这一条域名对应的 IP 地址记录已经添加到了DNS的数据库中。 
</p><p>还有的时候，我们键入Nslookup www.feitium.net ，会出现如下结果： <br />*** Can't find server name for domain: No response from server <br />*** Can't find www.feitium.net : Non-existent domain <br />这时，说明测试主机在目前的网络中，根本没有找到可以使用的 DNS 服务器。此时，我们要对整个网络的连通性作全面的检测，并检查DNS服务器是否处于正常工作状态，采用逐步排错的方法，找出 DNS 服务不能启动的根源</p></font><br /></font><img src ="http://www.blogjava.net/wyz191/aggbug/96940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-01-31 14:06 <a href="http://www.blogjava.net/wyz191/articles/linux.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下的dns设置详解</title><link>http://www.blogjava.net/wyz191/articles/96828.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Wed, 31 Jan 2007 00:22:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/96828.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/96828.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/96828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/96828.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/96828.html</trackback:ping><description><![CDATA[①简介<br />DNS就是Domain Name System，它能够把形如<a href="http://www.21php.com/" target="_blank">http://www.21php.com/</a>这样的域名转换为211.152.50.35这样的IP地址；没有DNS，浏览21php.com这个网站时，就必须用211.152.50.35这么难记的数字来访问。提供DNS服务的就是DNS服务器。DNS服务器可以分为三种，高速缓存服务器（Cache-only server）、主服务器（Primary Name server）、辅助服务器（Second Name Server）。 <br /><br />DNS的详细原理、工作流程、术语、概念，限于篇幅，这里就不说了。可以阅读专门的文章，如DNS-HOWTO加以了解。 <br /><br />②配置主DNS服务器<br />首先我们做以下假设：A服务器为21php.com的主域名服务器，其IP地址为11.0.0.1，B服务器为21php.com的辅助域名服务器，其IP地址为11.0.0.2； <br /><br />下面我们配置服务器11.0.0.1为21PHP.COM的主DNS服务器 <br /><br />Linux下的dns功能是通过bind软件实现的。bind软件安装后，会产生几个固有文件，分为两类，一类是配置文件在/etc目录下，一类是dns记录文件在/var/named目录下。加上其他相关文件，共同设置dns服务器。下面是所有和dns设置相关文件的列表与说明。 <br /><br />位于/etc目录下的有：hosts,host.conf,resolv.conf,named.boot,named.conf。 <br /><br />1、“hosts”文件，定义了主机名和ip地址的对应，其中也有将要运行dns这台电脑的ip地址和主机名。内容： <br />127.0.0.1 localhost.localdomain localhost <br />2、“host.conf”文件[Boban注：原来误写成hosts.conf]，"order hosts bind"语句，指定了对主机名的解析顺序是先到hosts中查找，然后到dns服务器的记录里查找。“multi on”则是允许一个主机名对应多个ip地址。内容： <br />order hosts, bind <br />multi on <br />nospoof on <br />3、“resolv.conf”文件，“nameserver 10.0.0.211”指定了dns服务器的地址。注意，这个文件对普通非dns服务器的电脑（非windows的系统；Windows系统是在“网络属性”中设置这项的）来说，是必不可少的。你如果没有设置本机为dns服务器，你又要能够解析域名，就必须指定一个dns服务器的地址。你可以最多写上三个地址，作为前一个失败时的候选dns服务器。“domain zrs.com”指定默认的域。文件内容： <br />domain 21php.com <br />nameserver 11.0.0.1 <br />4、“named.boot”文件是早期版本的bind软件使用的配置文件，现在新版本中已经让位于“named.conf”。named.conf是dns server配置的核心文件。下面我们一段一段的来解说。 <br /><br /># named.conf - configuration for bind <br /># <br /># Generated automatically by bindconf, alchemist et al. <br />controls { <br />inet 127.0.0.1 allow { localhost; } keys { rndckey; }; <br />}; <br /><br />include "/etc/rndc.key";options { <br />directory "/var/named/"; <br />}; <br />zone "." { <br />type hint; <br />file "named.ca"; <br />}; <br />zone "0.0.127.in-addr.arpa" { <br />type master; <br />file "0.0.127.in-addr.arpa.zone"; <br />}; <br />zone "localhost" { <br />type master; <br />file "localhost.zone"; <br />}; <br />zone "21php.com" { <br />type master; <br />notify yes; <br />file "21php.com"; <br />}; <br /><br /><br />上文中#为注释符号， 其他各行含义如下： <br />diretory /var/named <br /><br />指定named从 /var/named 目录下读取DNS数据文件，这个目录用户可自行指定并创建，指定后所有的DNS数据文件都存放在此目录下； <br /><br />zone "." { <br />type hint; <br />file "named.ca"; <br />}; <br />指定named从 named.ca 文件中获得Internet的顶层“根”服务器地址 。 <br /><br />zone "0.0.127.in-addr.arpa" { <br />type master; <br />file "0.0.127.in-addr.arpa.zone"; <br />}; <br />指定named作为127.0.0网段地址转换主服务器，named.local文件中包含了127.0.0.*形式的地址到域名的转换数据（127.0.0网段地址是局域网接口的内部 loopback地址）； <br /><br />zone "localhost" { <br />type master; <br />file "localhost.zone"; <br />}; <br />指定包含localhost的DNS文件数据存放在/var/named/localhost.zone中； <br /><br />zone "21php.com" { <br />type master; <br />notify yes; <br />file "21php.com.zone"; <br />}; <br />以上语句表明域21php.com的DNS数据存放在/var/named/目录下的21php.com.zone中； <br /><br />我们可以用文本编辑器打开/var/named/21php.com.zone，其内容如下： <br /><br />$TTL 86400 @ IN SOA @ root.localhost ( <br />2 ; serial <br />28800 ; refresh <br />7200 ; retry <br />604800 ; expire <br />86400 ; ttl <br />) <br /><br />@ IN NS localhost <br /><br /><br />www IN A 11.0.0.233 <br />www2 IN A 11.0.0.23 <br />forum IN A 11.0.0.10 <br />@ IN MX 5 mail.21php.com. <br /><br /><br />该文件的前部分是相应的参数设置，此部分不需要改动，后面的部分就是具体的DNS数据； <br /><br />例如： <br /><br />www IN A 11.0.0.233 <br />将<a href="http://www.21php.com/" target="_blank">http://www.21php.com/</a> 解析到地址11.0.0.233； <br /><br />www2 IN A 11.0.0.23 <br />将www2.21php.com 解析到地址11.0.0.23； <br /><br />club IN A 11.0.0.10 <br />将club.21php.com 解析到地址11.0.0.10； <br /><br />③配置辅助DNS服务器<br /><br />配置服务器11.0.0.2为21php.com辅助dns服务器 <br /><br />辅助DNS服务器，可从主服务器中转移一整套域信息。区文件是从主服务器中转移出来的，并作为本地磁盘文件存储在辅助服务器中。在辅助服务器中有域信息的完整拷贝，所以也可以可以回答对该域的查询。这部分的配置内容如下： <br />zone "21php.com" IN { <br />type slave; <br />file "21php.com.zone"; <br />masters { 11.0.0.1; }; <br />}; <br /><br />可以看到，和主DNS服务器不同地方就是：“type”改为了“slave”，然后指明了主DNS服务器的地址“masters { 11.0.0.1; };”。DNS服务启动时，就会自动连接11.0.0.1,读取21php.com域的信息，然后保存到本机的21php.com.zone文件里。 <br /><br /><br />④测试DNS服务器 <br /><br />改动过DNS的相应文件，用“ndc restart”命令重新启动服务，在redhat 7.1以上版本中使用命令： <br />/etc/rc.d/init.d/named restart <br />或者<br />/etc/rc.d/init.d/named reload<br />使改动生效。 <br /><br />要测试DNS，可以找一台客户机，把它的DNS地址设成新建立的DNS服务器地址，然后试试上网，收信，下载等。也可以使用nslookup命令：运行nslookup，输入要查询的主机名，看是否返回正确的ip地址，在redhat 7.1以上版本中推荐使用dig命令。<br /><br />注：以上分别在REDHAT 6.1 REDHAT 9 测试过<img src ="http://www.blogjava.net/wyz191/aggbug/96828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-01-31 08:22 <a href="http://www.blogjava.net/wyz191/articles/96828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文件编辑器 vi</title><link>http://www.blogjava.net/wyz191/articles/96741.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Tue, 30 Jan 2007 07:20:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/96741.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/96741.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/96741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/96741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/96741.html</trackback:ping><description><![CDATA[
		<strong>来自：</strong>LinuxSir.Org<br /><b>摘要：</b>vi 编辑器是最常用的文档创建和编辑工具，初学者应该学会简单应用vi ，学会在vi 中做简单的修改、删除、插入、搜索及替换作业；如果您是新手，不妨看看本文，或许这篇文档能让您在最短的时间内学会vi的简单操作； 
<p><font size="4"><b>目录</b></font></p><ul><a href="http://www.linuxsir.org/main/?q=node/206#1"><font color="#000099">1、关于文本编辑器；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#2"><font color="#000099">2、vi 编辑器；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3"><font color="#000099">3、vi 编辑器的使用方法；</font></a><p></p><ul><a href="http://www.linuxsir.org/main/?q=node/206#3.1"><font color="#000099">3.1 如何调用vi ；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.2"><font color="#000099">3.2 vi 的三种命令模式；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.3"><font color="#000099">3.3 文件的保存和退出；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.4"><font color="#000099">3.4 光标移动；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.5"><font color="#000099">3.5 插入模式（文本的插入）；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.6"><font color="#000099">3.6 文本内容的删除操作；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.7"><font color="#000099">3.7 恢复修改及恢复删除操作；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.8"><font color="#000099">3.8 可视模式；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.9"><font color="#000099">3.9 复制和粘帖的操作；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.10"><font color="#000099">3.10 关于行号；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.11"><font color="#000099">3.11 查找和替换功能；</font></a><p></p><ul><a href="http://www.linuxsir.org/main/?q=node/206#3.11.1"><font color="#000099">3.11.1 查找；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#3.11.2"><font color="#000099">3.11.2 替换；</font></a></ul></ul><p><a href="http://www.linuxsir.org/main/?q=node/206#4"><font color="#000099">4、关于本文；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#5"><font color="#000099">5、后记；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#6"><font color="#000099">6、参考文档；</font></a><br /><a href="http://www.linuxsir.org/main/?q=node/206#7"><font color="#000099">7、相关文档；</font></a></p></ul><p><font color="blue"><b><br />+++++++++++++++++++++++++++++++++++++<br />正文<br />+++++++++++++++++++++++++++++++++++++<br /></b></font></p><p><font id="1" size="4"><b><br />1、关于文本编辑器；<br /></b></font></p><p>文本编辑器有很多，比如图形模式的gedit、kwrite、OpenOffice ... ... ，文本模式下的编辑器有vi、vim（vi的增强版本）和nano ... ... vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下vi（vim）最简单的用法，以让Linux入门级用户在最短的时间内学会使用它。</p><p>nano 工具和DOS操作系统下的edit操作相似，使用简单，我们不作介绍了，如果您有兴趣，不妨尝试一下；</p><p><font id="2" size="4"><b><br />2、vi 编辑器；<br /></b></font></p><p><b>为什么要学会简单应用vi</b></p><p>vi或vim是Linux最基本的文本编辑工具，vi或vim虽然没有图形界面编辑器那样点鼠标的简单操作，但vi编辑器在系统管理、服务器管理中，永远不是图形界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时，我们仍需要字符模式下的编辑器vi；</p><p>vi或vim 编辑器在创建和编辑简单文档最高效的工具；</p><p><font id="3" size="4"><b><br />3、vi 编辑器的使用方法；<br /></b></font></p><p><font id="3.1" size="3"><b><br />3.1 如何调用vi ；<br /></b></font></p><p></p><div class="codeblock"><code>[root@localhost ~]# vi filename</code></div><p></p><p></p><div class="codeblock"><code>~<br />~<br />~<br />~<br />~<br />~<br />~<br />~</code></div><p></p><p><font id="3.2" size="3"><b><br />3.2 vi 的三种命令模式；<br /></b></font></p><p></p><div class="codeblock"><code>Command（命令）模式，用于输入命令；<br />Insert（插入）模式，用于插入文本；<br />Visual（可视）模式，用于视化的的高亮并选定正文；</code></div><p></p><p><font id="3.3" size="3"><b><br />3.3 文件的保存和退出；<br /></b></font></p><p>Command 模式是vi或vim的默认模式，如果我们处于其它命令模式时，要通过ESC键切换过来。</p><p>当我们按ESC键后，接着再输入:号时，vi会在屏幕的最下方等待我们输入命令；</p><p></p><div class="codeblock"><code>:w 保存；<br />:w filename 另存为filename；<br />:wq! 保存退出；<br />:wq! filename 注：以filename为文件名保存后退出；<br />:q! 不保存退出；<br />:x 应该是保存并退出 ，功能和:wq!相同</code></div><p></p><p><font id="3.4" size="3"><b><br />3.4 光标移动；<br /></b></font></p><p>当我们按ESC进入Command模式后，我们可以用下面的一些键位来移动光标；</p><p></p><div class="codeblock"><code>j 向下移动一行；<br />k 向上移动一行；<br />h 向左移动一个字符；<br />l 向右移动一个字符；<br />ctrl+b 向上移动一屏；<br />ctrl+f 向下移动一屏；<br />向上箭头 向上移动；<br />向下箭头 向下移动；<br />向左箭头 向左移动；<br />向右箭头 向右移动；</code></div><p></p><p>我们编辑一个文件时，对于 j、k、l和h键，还能在这些动作命令的前面加上数字，比如 3j，表示向下移动3行。</p><p><font id="3.5" size="3"><b><br />3.5 插入模式（文本的插入）；<br /></b></font></p><p></p><div class="codeblock"><code>i 在光标之前插入；<br />a 在光标之后插入；<br />I 在光标所在行的行首插入；<br />A 在光标所在行的行末插入；<br />o 在光标所在的行的上面插入一行；<br />O 在光标所在的行的下面插入一行；<br />s 删除光标后的一个字符，然后进入插入模式；<br />S 删除光标所在的行，然后进入插入模式；</code></div><p></p><p><font id="3.6" size="3"><b><br />3.6 文本内容的删除操作；<br /></b></font></p><p></p><div class="codeblock"><code>x 一个字符；<br />#x 删除几个字符，#表示数字，比如3x；<br />dw 删除一个单词；<br />#dw 删除几个单词，#用数字表示，比如3dw表示删除三个单词；<br />dd 删除一行；<br />#dd 删除多个行，#代表数字，比如3dd 表示删除光标行及光标的下两行；<br />d$ 删除光标到行尾的内容；<br />J 清除光标所处的行与上一行之间的空格，把光标行和上一行接在一起；</code></div><p></p><p><font id="3.7" size="3"><b><br />3.7 恢复修改及恢复删除操作；<br /></b></font></p><p></p><div class="codeblock"><code>u 撤消修改或删除操作；</code></div><p></p><p>按ESC键返回Command（命令）模式，然后按u键来撤消删除以前的删除或修改；如果您想撤消多个以前的修改或删除操作，请按多按几次u。这和Word的撤消操作没有太大的区别；</p><p><font id="3.8" size="3"><b><br />3.8 可视模式；<br /></b></font></p><p>在最新的Linux发行版本中，vi提供了可视模式，因为这个功能是vim才有的。如果您用的vi没有这个功能，就换成vim就有了。打开可视模式，按ESC键，然后按v就进入可视模式；</p><p>可视模式为我们提供了极为友好的选取文本范围，以高亮显示；在屏幕的最下方显示有；</p><p></p><div class="codeblock"><code>-- 可视 -- <br />或<br />--VISUAL--</code></div><p></p><p><b>如图：</b></p><p><a href="http://www.linuxsir.org/main/files/viphotolinuxsir.jpg" target="_blank"><img height="200" src="http://www.linuxsir.org/main/files/viphotolinuxsir.jpg" weight="200" /></a></p><p>进入可视模式，我们就可以用前面所说的命令行模式中的光标移动指令，可以进行文本范围的选取。</p><p><b>选取文本范围有何用？</b></p><p>我们可以对某部份删除作业，按d键就删除了我们选中的内容。<br />选中内容后，我们按y就表示复制；按d表示删除；</p><p>值得一提是的删除的同时，也表示复制。我们返回到命令模式，然后移动光标到某个位置，然后按shift+p键，就把刚才删除的内容贴上了。我们先在这里提一句，在后文，我们还得详细说说。</p><p><b>退出可视模式，还是用ESC键；</b></p><p><font id="3.9" size="3"><b><br />3.9 复制和粘帖的操作；<br /></b></font></p><p>其实删除也带有剪切的意思，当我们删除文字时，可以把光标移动到某处，然后按shift+p键就把内容贴在原处，然后再移动光标到某处，然后再按p或shift+p又能贴上；</p><p></p><div class="codeblock"><code>p 在光标之后粘帖；<br />shift+p 在光标之前粘帖</code></div><p></p><p><b>来举一例：</b></p><p>比如我们想把一个文档的第三行复制下来，然后帖到第五行的后面，我们应该怎么做呢？</p><p><b>有两种方法；</b></p><p><font color="blue">第一种方法：</font></p><p>先把第三行删除，把光标移动到第三行处，然后用dd动作，接着再按一下shift+p键。这样就把刚才删除的第三行帖在原处了。</p><p>接着我们再用k键移动光标到第五行，然后再按一下p键，这样就把第三行的内容又帖到第五行的后面了；</p><p><font color="blue">第二种方法；</font></p><p>进入可视模式，按ESC键，然后按v键。移动鼠标指针，选中第三行的内容，然后按y键复制；再移动指针到第五行，最后按p键；</p><p><b>所以复制和粘贴操作，是命令模式、插入模式及可视模式的综合运用；我们要学会各种模式之间的切换，要常用ESC键；更为重要的学会在命令模式下移动光标；</b></p><p><font id="3.10" size="3"><b><br />3.10 关于行号；<br /></b></font></p><p>有时我们配置一个程序运行时，会出现配置文件X行出现错误 。这时我们要用到行号相关的操作；</p><p><b><br />为所有内容添加行号；<br /></b></p><p>按ESC键，然后输入：</p><p></p><div class="codeblock"><code>:set number</code></div><p></p><p><b>光标所处位置</b></p><p>在屏幕的右下角，有类似如下的；</p><p></p><div class="codeblock"><code>         57,8 27%</code></div><p></p><p>在这之中，57表示第57行，8表示第8个字符；</p><p><font id="3.11" size="3"><b><br />3.11 查找和替换功能；<br /></b></font></p><p><font id="3.11.1" size="2"><b><br />3.11.1 查找；<br /></b></font></p><p>首先，我们要进入ESC键，进入命令模式；我们输入/或?就进入查找模式了；</p><p></p><div class="codeblock"><code>/SEARCH 注：正向查找，按n键把光标移动到下一个符合条件的地方；<br />?SEARCH 注：反向查找，按shift+n 键，把光标移动到下一个符合条件的</code></div><p></p><p><b>举一例：</b>比如我想在一个文件中找到swap单词，我应该如下做；</p><p>首先按ESC键，进入命令模式，然后输入；</p><p></p><div class="codeblock"><code>/swap<br />或<br />?swap</code></div><p></p><p><font id="3.11.2" size="2"><b><br />3.11.2 替换；<br /></b></font></p><p>按ESC键进入命令模式；</p><p></p><div class="codeblock"><code>:s /SEARCH/REPLACE/g 注：把当前光标所处的行中的SEARCH单词，替换成REPLACE，并把所有SEARCH高亮显示；<br />:%s /SEARCH/REPLACE 注：把文档中所有SEARCH替换成REPLACE；<br />:#,# s /SEARCH/REPLACE/g 注：＃号表示数字，表示从多少行到多少行，把SEARCH替换成REPLACE；</code></div><p></p><p>注：在这之中，g表示全局查找；我们注意到，就是没有替换的地方，也会把SEARCH高亮显示；</p><p><b>举例说明：</b></p><p>比如我们有一篇文档要修改；</p><p>我们把光标所在的行，把所有单词the，替换成THE，应该是：</p><p></p><div class="codeblock"><code>:s /the/THE/g</code></div><p></p><p>我们把整篇文档的所有的the都替换成THE，应该是： </p><p></p><div class="codeblock"><code>:%s /the/THE</code></div><p></p><p>我们仅仅是把第1行到第10行中的the，替换成THE，应该是；</p><p></p><div class="codeblock"><code>:1,10 s /the/THE/g</code></div><p></p><p><font id="4" size="4"><b><br />4、关于本文；<br /></b></font></p><p>我写本文的目的是让新手在最短的时间内用vi或vim创建、编辑和修改文件，所以说这篇文档并不是大而全的vi手册。如果把vi所有的功能都说全了，至少得写一本千页的手册；本也没有涉及更为高级的vi用法。如果想了解的更多，请查找man和help；</p><p><font id="5" size="4"><b><br />5、后记；<br /></b></font></p><p>到目前为止，关于目录和文件的操作，我写过有几篇了，从文件和目录的创建、删除、复制到属性操作，最后到文件修改等系列文档。这些文档都是有相关性的，如果把这些相关性的文档连起来，就是一个整体知识块。我们只有掌握了这些知识，才能实现文件系统的管理。</p><p>在以后我会写什么内容呢？？？？可能会补充一下文件的查找，其实以前有类似文档，到时我总结一下，贴出来给大家看看就行了。</p><p>下一步是准备网络基础文档建设中，网络基础比较重要，这是我计划的下一个重点。。。。。。。。</p><p><font id="6" size="4"><b><br />6、参考文档；<br /></b></font></p><p>man vi 和vi --help <br /><br /></p><p>Vim 实用技术：技巧，插件，定制 (Practical Vim)new (2006-3-22)</p><p>技巧<br />http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim1/</p><p>插件<br />http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim2/</p><p>定制<br />http://www-128.ibm.com/developerworks/cn/linux/l-tip-vim3/<br /><br />在终端中直接输入vimtutor,有一个英文的教程,每涉及到一类指令都有一些专门设置的段落供你练习,特别方便,这样学习起来更快.大伙试试呀!</p><img src ="http://www.blogjava.net/wyz191/aggbug/96741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-01-30 15:20 <a href="http://www.blogjava.net/wyz191/articles/96741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat catalina.sh问题</title><link>http://www.blogjava.net/wyz191/articles/catalina_sh.html</link><dc:creator>java_蝈蝈</dc:creator><author>java_蝈蝈</author><pubDate>Tue, 30 Jan 2007 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/wyz191/articles/catalina_sh.html</guid><wfw:comment>http://www.blogjava.net/wyz191/comments/96714.html</wfw:comment><comments>http://www.blogjava.net/wyz191/articles/catalina_sh.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wyz191/comments/commentRss/96714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wyz191/services/trackbacks/96714.html</trackback:ping><description><![CDATA[
		<p>　　今天上午碰到这样一个问，就是在向catalina.sh里添加信息＜CATALINA_OPTS="-Dcom.onewaveinc.WebPro=/home/jakarta-tomcat-4.1.30/webapps/ROOT/webpro.xml"＞时，再重新启动Tomcat就会报bin/startup.sh文件找不到的错误，利用bin/catalina.sh start命令也不行，经过询问朋友才最终明白是什么原因．<br />解决：<br />原来我是把linux服务器上的catalina.sh文件下载到本地后做修改，然后再传到服务器上，这时候上传的文件没有执行权限，所以出现了那种错误，这时需要用chmod修改文件的执行权限，或者直接在服务器上修改就可以了．</p>
		<p>感悟：知道的还是太少了，学吧，呵呵，你就学吧．．．．．．<br /><br /><font size="6"><strong><font color="#ff0000">附：</font></strong><br /></font><strong><font color="#0000ff" size="5">chmod命令详解</font><br /></strong><br />指令名称 : chmod <br />使用权限 : 所有使用者 <br />使用方式 : chmod [-cfvR] [--help] [--version] mode file... <br />说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 <br />参数 : <br />mode : 权限设定字串，格式如下 : [ugoa...][[+-=][rwxX]...][,...]，其中 <br />u 表示该档案的拥有者，g 表示与该档案的拥有者属于同一个群体(group)者，o 表示其他以外的人，a 表示这三者皆是。 <br />+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 <br />r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 <br />-c : 若该档案权限确实已经更改，才显示其更改动作 <br />-f : 若该档案权限无法被更改也不要显示错误讯息 <br />-v : 显示权限变更的详细资料 <br />-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) <br />--help : 显示辅助说明 <br />--version : 显示版本 <br />范例 :将档案 file1.txt 设为所有人皆可读取 : <br />chmod ugo+r file1.txt  <br />将档案 file1.txt 设为所有人皆可读取 : <br />chmod a+r file1.txt  <br />将档案 file1.txt 与 file2.txt 设为该档案拥有者，与其所属同一个群体者可写入，但其他以外的人则不可写入 : <br />chmod ug+w,o-w file1.txt file2.txt  <br />将 ex1.py 设定为只有该档案拥有者可以执行 : <br />chmod u+x ex1.py  <br />将目前目录下的所有档案与子目录皆设为任何人可读取 : <br />chmod -R a+r *  <br />此外chmod也可以用数字来表示权限如 chmod 777 file <br />语法为：chmod abc file <br />其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。 <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 />chmod a=rwx file  <br />和 <br />chmod 777 file  <br />效果相同 <br />chmod ug=rwx,o=x file  <br />和 <br />chmod 771 file  <br />效果相同 <br />若用chmod 4755 filename可使此程序具有root的权限<br /><br /><font color="#ff0000" size="5"><strong><font color="#0000ff">catalina.sh详解：</font><br /></strong></font></p>
		<h3>1 - 概述 </h3>
		<p>脚本catalina.sh用于启动和关闭tomcat服务器，是最关键的脚本<br />另外的脚本startup.sh和shutdown.sh都是使用不同的参数调用了该脚本<br />该脚本的使用方法如下（引自该脚本本身）：<br /></p>
		<p>
				<tt>
						<pre>  echo "Usage: catalina.sh ( commands ... )"
  echo "commands:"
  echo "  debug             Start Catalina in a debugger"
  echo "  debug -security   Debug Catalina with a security manager"
  echo "  embedded          Start Catalina in embedded mode"
  echo "  jpda start        Start Catalina under JPDA debugger"
  echo "  run               Start Catalina in the current window"
  echo "  run -security     Start in the current window with security manager"
  echo "  start             Start Catalina in a separate window"
  echo "  start -security   Start in a separate window with security manager"
  echo "  stop              Stop Catalina"
</pre>
				</tt>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<h3>2 - 脚本分析 </h3>
		<p>
				<tt>
						<pre>#!/bin/sh

<font color="green">
# =============================================================
# 该脚本设置正确的环境变量和系统信息，然后启动或者停止tomcat server
# 具体的操作是：
# 使用命令行参数作为args的实参，调用org.apache.catalina.startup.Bootstrap.main(String[])
# ==============================================================
</font><font color="green">
# -----------------------------------------------------------------------------
# Start/Stop Script for the CATALINA Server
#
# Environment Variable Prequisites
#
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.
#
#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
#                   the JVM should use (java.io.tmpdir).  Defaults to
#                   $CATALINA_BASE/temp.
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#
#   JAVA_OPTS       (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
#                   command is executed. The default is "dt_socket".
#
#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is 8000.
#
#   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension
#                   (JSSE) installation, whose JAR files will be added to the
#                   system class path used to start Tomcat.
#
#   CATALINA_PID    (Optional) Path of the file which should contains the pid
#                   of catalina startup java process, when start (fork) is used
# -----------------------------------------------------------------------------
</font><font color="green">
# OS specific support.  $var _must_ be set to either true or false.
</font>
cygwin=false
case "`uname`" in
CYGWIN*) cygwin=true;;
esac

<font color="green">
# PRG是被执行的脚本的名称，可以认为PRG=="catalina.sh"，也可能是某个符号链，指向该脚本。
</font>
PRG="$0"

<font color="green">
# 处理了一下PRG，等循环跳出之后PRG成为 ????
</font>
while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-&gt; \(.*\)$'`
  if expr "$link" : '.*/.*' &gt; /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done


<font color="green">
# PRGDIR是PRG的目录路径名称
</font>
PRGDIR=`dirname "$PRG"`

<font color="green">
# 执行$CATALINA_HOME/BIN/setenv.sh来设置环境变量
# [ -r filename ] 是判断是否文件存在且可读
</font>
CATALINA_HOME=`cd "$PRGDIR/.." ; pwd`
if [ -r "$CATALINA_HOME"/bin/setenv.sh ]; then
  . "$CATALINA_HOME"/bin/setenv.sh
fi


<font color="green">
# For Cygwin, 确保所有的路径名都符合UNIX格式
</font>
if $cygwin; then
  [ -n "$JAVA_HOME" ] &amp;&amp; JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CATALINA_HOME" ] &amp;&amp; CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
  [ -n "$CATALINA_BASE" ] &amp;&amp; CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
  [ -n "$CLASSPATH" ] &amp;&amp; CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
  [ -n "$JSSE_HOME" ] &amp;&amp; JSSE_HOME=`cygpath --path --unix "$JSSE_HOME"`
fi

<font color="green">
# 设置用来初始化SystemClassLoader的CLASSPATH变量：通过执行脚本setclasspath.sh完成
# 注意：脚本setclasspath.sh改变了原来的$CLASSPATH变量，而把它设为：
# CLASSPATH=$CATALINA_HOME/bin/bootstrap.jar:$JAVA_HOME/lib/tools.jar
# 其中bootstrap.jar是package org.apache.catalina.startup的打包文件，
# 含有启动方法org.apache.catalina.startup.Bootstrap.main(String[] args)
# tools.jar含有javac编译器，用来把jsp文件编译成为servlet class
</font>
if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then
  BASEDIR="$CATALINA_HOME"
  . "$CATALINA_HOME"/bin/setclasspath.sh
else
  echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"
  echo "This file is needed to run this program"
  exit 1
fi

<font color="green">
# 在CLASSPATH环境变量后面补上一些JAR文件
# [ -n string ] 判断字符串是否长度非0；[ -z string ] 判断字符串是否长度为0
# 它们可以用来判断是否某个环境变量已经被设置
</font>
if [ -n "$JSSE_HOME" ]; then
  CLASSPATH="$CLASSPATH":"$JSSE_HOME"/lib/jcert.jar:"$JSSE_HOME"/lib/jnet.jar:"$JSSE_HOME"/lib/jsse.jar
fi
CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar


<font color="green">
# 指定CATALINA_BASE变量
# 如果CATALINA_BASE没有值，就让CATALINA_BASE=$CATALINA_HOME
</font>

if [ -z "$CATALINA_BASE" ] ; then
  CATALINA_BASE="$CATALINA_HOME"
fi


<font color="green">
# 指定CATALINA_TMPDIR变量
# 如果CATALINA_TMPDIR没有值，就让CATALINA_TMPDIR=$CATALINA_BASE/temp
</font>
if [ -z "$CATALINA_TMPDIR" ] ; then
  # Define the java.io.tmpdir to use for Catalina
  CATALINA_TMPDIR="$CATALINA_BASE"/temp
fi

<font color="green">
# For Cygwin, 在执行java程序前把路径名转换成WINDOWS格式
</font>
if $cygwin; then
  JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  CATALINA_HOME=`cygpath --path --windows "$CATALINA_HOME"`
  CATALINA_BASE=`cygpath --path --windows "$CATALINA_BASE"`
  CATALINA_TMPDIR=`cygpath --path --windows "$CATALINA_TMPDIR"`
  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  JSSE_HOME=`cygpath --path --windows "$JSSE_HOME"`
fi


<font color="green">
# 显示信息，然后执行命令
echo "Using CATALINA_BASE:   $CATALINA_BASE"
echo "Using CATALINA_HOME:   $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
echo "Using JAVA_HOME:       $JAVA_HOME"
</font><font color="green">
# ......当执行catalina.sh的参数是jpda的时候......
</font>
if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=n"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi


<font color="green">
# ......当执行catalina.sh的参数是debug的时候......
</font>
if [ "$1" = "debug" ] ; then
  shift
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
    shift
    exec "$_RUNJDB" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-4.0/catalina/src/share \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  else
    exec "$_RUNJDB" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-4.0/catalina/src/share \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  fi


<font color="green">
# ......当执行catalina.sh的参数是embedded的时候......
</font>
elif [ "$1" = "embedded" ] ; then
  shift
  echo "Embedded Classpath: $CLASSPATH"
  exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
    -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
    -Dcatalina.base="$CATALINA_BASE" \
    -Dcatalina.home="$CATALINA_HOME" \
    -Djava.io.tmpdir="$CATALINA_TMPDIR" \
    org.apache.catalina.startup.Embedded "$@"


<font color="green">
# +----------------------------------------------------+
# |  ......当执行catalina.sh的参数是run的时候......    |
# |  在当前窗口中启动tomcat服务器！！！                |
# +----------------------------------------------------+
</font>
elif [ "$1" = "run" ]; then
<font color="green">
  # 把参数run去掉
</font>
  shift
  
<font color="green">
  # 如果参数是run -security，则启动Security Manager
</font>
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
    shift
    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
      
<font color="green">
  # 如果参数是孤单的run，则在本窗口中启动tomcat服务器
  # 在本窗口中启动的方法是使用exec，让当前进程fork一个新进程来启动tomcat，当前进程是tomcat的父进程
  # 启动tomcat的类是org.apache.catalina.startup.Bootstrap.main("start");
</font>
  else
    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  fi

<font color="green">
# +----------------------------------------------------+
# |  ......当执行catalina.sh的参数是start的时候......  |
# |  在新窗口中启动tomcat服务器！！！                  |
# +----------------------------------------------------+
</font>
elif [ "$1" = "start" ] ; then
<font color="green">
  # 把参数start去掉
</font>
  shift
<font color="green">  
  # 创建一个文件（如果文件不存在的话）$CATALINA_BASE/logs/catalina.out  
</font>
  touch "$CATALINA_BASE"/logs/catalina.out
<font color="green">
  # 如果参数是start -security，则启动Security Manager
</font>
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
    shift
    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      &gt;&gt; "$CATALINA_BASE"/logs/catalina.out 2&gt;&amp;1 &amp;

      if [ ! -z "$CATALINA_PID" ]; then
        echo $! &gt; $CATALINA_PID
      fi
      
<font color="green">
  # 如果参数是孤单的start，那么在新窗口中启动tomcat
</font>
  else
    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      &gt;&gt; "$CATALINA_BASE"/logs/catalina.out 2&gt;&amp;1 &amp;

      if [ ! -z "$CATALINA_PID" ]; then
        echo $! &gt; $CATALINA_PID
      fi      
  fi

<font color="green">
# +----------------------------------------------------+
# |  ......当执行catalina.sh的参数是stop的时候......   |
# |  关闭tomcat服务器！！！                            |
# +----------------------------------------------------+
</font>
elif [ "$1" = "stop" ] ; then
<font color="green">
  # 把参数stop去掉
</font>
  shift
  
<font color="green">
  # 关闭tomcat服务器的类是org.apache.catalina.startup.Bootstrap-&gt;main("stop");
  # 注意：java -D 是设置系统属性
</font>  
  exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
    -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
    -Dcatalina.base="$CATALINA_BASE" \
    -Dcatalina.home="$CATALINA_HOME" \
    -Djava.io.tmpdir="$CATALINA_TMPDIR" \
    org.apache.catalina.startup.Bootstrap "$@" stop


<font color="green">
# +----------------------------------------------------+
# |  ......当执行catalina.sh的参数不可辨认的时候...... |
# |  打印帮助信息，由此查看各种参数代表的意义！！！    |
# +----------------------------------------------------+
</font>
else
  echo "Usage: catalina.sh ( commands ... )"
  echo "commands:"
  echo "  debug             Start Catalina in a debugger"
  echo "  debug -security   Debug Catalina with a security manager"
  echo "  embedded          Start Catalina in embedded mode"
  echo "  jpda start        Start Catalina under JPDA debugger"
  echo "  run               Start Catalina in the current window"
  echo "  run -security     Start in the current window with security manager"
  echo "  start             Start Catalina in a separate window"
  echo "  start -security   Start in a separate window with security manager"
  echo "  stop              Stop Catalina"
  exit 1

fi
</pre>
				</tt>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>
		</p>
<img src ="http://www.blogjava.net/wyz191/aggbug/96714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wyz191/" target="_blank">java_蝈蝈</a> 2007-01-30 13:43 <a href="http://www.blogjava.net/wyz191/articles/catalina_sh.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>