<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_小狼的世界</title><subtitle type="text">不积跬步，无以至千里、不积细流，无以成江海</subtitle><id>http://feed.cnblogs.com/blog/u/43046/rss</id><updated>2012-05-30T08:54:45Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/43046/rss"/><entry><id>http://www.cnblogs.com/cocowool/archive/2012/05/22/2513027.html</id><title type="text">Linux的IPC命令</title><summary type="text">进程间通信概述 进程间通信有如下的目的：1、数据传输，一个进程需要将它的数据发送给另一个进程，发送的数据量在一个字节到几M之间；2、共享数据，多个进程想要操作共享数据，一个进程对数据的修改，其他进程应该立刻看到；3、通知事件，一个进程需要向另一个或一组进程发送消息，通知它们发生了某件事情；4、资源共享，多个进程之间共享同样的资源。为了做到这一点，需要内核提供锁和同步机制；5、进程控制，有些进程希...</summary><published>2012-05-22T03:24:00Z</published><updated>2012-05-22T03:24:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/05/22/2513027.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/05/22/2513027.html"/><content type="html">&lt;p&gt;进程间通信概述&lt;/p&gt;  &lt;p&gt;进程间通信有如下的目的：1、数据传输，一个进程需要将它的数据发送给另一个进程，发送的数据量在一个字节到几M之间；2、共享数据，多个进程想要操作共享数据，一个进程对数据的修改，其他进程应该立刻看到；3、通知事件，一个进程需要向另一个或一组进程发送消息，通知它们发生了某件事情；4、资源共享，多个进程之间共享同样的资源。为了做到这一点，需要内核提供锁和同步机制；5、进程控制，有些进程希望完全控制另一个进程的执行（如Debug进程），此时控制进程希望能够拦截另一个进程的所有陷入和异常，并能够及时知道它的状态改变。&lt;/p&gt;  &lt;p&gt;Linux进程间通信由以下几部分发展而来：&lt;/p&gt;  &lt;p&gt;早期UNIX进程间通信：包括管道、FIFO、信号。&lt;/p&gt;  &lt;p&gt;基于System V的进程间通信：包括System V消息队列、System V信号灯（Semaphore）、System V共享内存。&lt;/p&gt;  &lt;p&gt;基于Socket进程间通信。&lt;/p&gt;  &lt;p&gt;基于POSIX进程间通信：包括POSIX消息队列、POSIX信号灯、POSIX共享内存。&lt;/p&gt;  &lt;p&gt;Linux中，与IPC相关的命令包括：ipcs、ipcrm（释放IPC）、&lt;/p&gt;  &lt;p&gt;IPCS命令是Linux下显示进程间通信设施状态的工具。我们知道，系统进行进程间通信（IPC）的时候，可用的方式包括信号量、共享内存、消息队列、管道、信号（signal）、套接字等形式[&lt;a href="http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html"&gt;2&lt;/a&gt;]。使用IPCS可以查看共享内存、信号量、消息队列的状态。&lt;/p&gt;  &lt;p&gt;例如在CentOS6.0上执行ipcs&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201205/201205221123426407.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201205/201205221123421706.png" width="585" height="176" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;具体的用法总结如下：&lt;/p&gt;  &lt;p&gt;1、显示所有的IPC设施&lt;/p&gt;  &lt;p&gt;# ipcs -a&lt;/p&gt;  &lt;p&gt;2、显示所有的消息队列Message Queue&lt;/p&gt;  &lt;p&gt;# ipcs -q&lt;/p&gt;  &lt;p&gt;3、显示所有的信号量&lt;/p&gt;  &lt;p&gt;# ipcs -s&lt;/p&gt;  &lt;p&gt;4、显示所有的共享内存&lt;/p&gt;  &lt;p&gt;# ipcs -m&lt;/p&gt;  &lt;p&gt;5、显示IPC设施的详细信息&lt;/p&gt;  &lt;p&gt;# ipcs -q -i id&lt;/p&gt;  &lt;p&gt;id 对应shmid、semid、msgid等。-q对应设施的类型（队列），查看信号量详细情况使用-s，查看共享内存使用-m。&lt;/p&gt;  &lt;p&gt;6、显示IPC设施的限制大小&lt;/p&gt;  &lt;p&gt;# ipcs -m -l&lt;/p&gt;  &lt;p&gt;-m对应设施类型，可选参数包括-q、-m、-s。&lt;/p&gt;  &lt;p&gt;7、显示IPC设施的权限关系&lt;/p&gt;  &lt;p&gt;# ipcs -c&lt;/p&gt;  &lt;p&gt;# ipcs -m -c&lt;/p&gt;  &lt;p&gt;# ipcs -q -c&lt;/p&gt;  &lt;p&gt;# ipcs -s -c&lt;/p&gt;  &lt;p&gt;8、显示最近访问过IPC设施的进程ID。&lt;/p&gt;  &lt;p&gt;# ipcs -p&lt;/p&gt;  &lt;p&gt;# ipcs -m -p&lt;/p&gt;  &lt;p&gt;# ipcs -q -p&lt;/p&gt;  &lt;p&gt;9、显示IPC设施的最后操作时间&lt;/p&gt;  &lt;p&gt;# ipcs -t&lt;/p&gt;  &lt;p&gt;# ipcs -q -t&lt;/p&gt;  &lt;p&gt;# ipcs -m -t&lt;/p&gt;  &lt;p&gt;# ipcs -s -t&lt;/p&gt;  &lt;p&gt;10、显示IPC设施的当前状态&lt;/p&gt;  &lt;p&gt;# ipcs -u&lt;/p&gt;  &lt;p&gt;Linux上的ipcs命令，不支持UNIX上的-b、-o指令，同样UNIX中不支持-l、-u指令，所以在编写跨平台的脚本时，需要注意这个问题。&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、&lt;a href="http://wenku.baidu.com/view/58048caddd3383c4bb4cd26f.html"&gt;Linux下IPCS的用法详解&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2、&lt;a href="http://www.cnblogs.com/linshui91/archive/2010/09/29/1838770.html"&gt;Linux进程间通信&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3、&lt;a href="http://blog.csdn.net/bonny95/article/details/6442821"&gt;Linux下IPCS的10种用法&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4、&lt;a href="http://www.linuxdiyf.com/viewarticle.php?id=6783"&gt;Linux IPC小结&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5、&lt;a href="http://www.cnblogs.com/wangkangluo1/archive/2012/05/14/2498786.html"&gt;Linux IPC总结&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2513027.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/05/22/2513027.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/05/18/2507843.html</id><title type="text">计算质数和回文数的小程序</title><summary type="text">Ruby 代码如下 1: def isZhishu?(num) 2: count = 2 3: while count &lt; num do 4: return false if ( num % count ) == 0 5: count = count + 1 6: end...</summary><published>2012-05-18T07:24:00Z</published><updated>2012-05-18T07:24:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/05/18/2507843.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/05/18/2507843.html"/><content type="html">&lt;div class="csharpcode"&gt;Ruby 代码如下&lt;/div&gt;  &lt;div class="csharpcode"&gt;&amp;#160;&lt;/div&gt;  &lt;div class="csharpcode"&gt;   &lt;span class="lnum"&gt;   1:  &lt;/span&gt;def isZhishu?(num)  &lt;span class="lnum"&gt;   2:  &lt;/span&gt;    count = 2  &lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;while&lt;/span&gt; count &amp;lt; num &lt;span class="kwrd"&gt;do&lt;/span&gt;  &lt;span class="lnum"&gt;   4:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ( num % count ) == 0  &lt;span class="lnum"&gt;   5:  &lt;/span&gt;        count = count + 1  &lt;span class="lnum"&gt;   6:  &lt;/span&gt;    end  &lt;span class="lnum"&gt;   7:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;  &lt;span class="lnum"&gt;   9:  &lt;/span&gt;end  &lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  11:  &lt;/span&gt;def isHuiwen?(num)  &lt;span class="lnum"&gt;  12:  &lt;/span&gt;    s = num.to_s.reverse.to_i  &lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; num == s  &lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;  &lt;span class="lnum"&gt;  16:  &lt;/span&gt;end  &lt;span class="lnum"&gt;  17:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  18:  &lt;/span&gt;count = 0  &lt;span class="lnum"&gt;  19:  &lt;/span&gt;10000.times{ |i|  &lt;span class="lnum"&gt;  20:  &lt;/span&gt;    i = i + 1  &lt;span class="lnum"&gt;  21:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; isZhishu?(i) &amp;amp;&amp;amp; isHuiwen?(i) then  &lt;span class="lnum"&gt;  22:  &lt;/span&gt;        printf &lt;span class="str"&gt;&amp;quot;%4d&amp;quot;&lt;/span&gt;, i  &lt;span class="lnum"&gt;  23:  &lt;/span&gt;        print &lt;span class="str"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;  &lt;span class="lnum"&gt;  24:  &lt;/span&gt;        count = count + 1  &lt;span class="lnum"&gt;  25:  &lt;/span&gt;    end  &lt;span class="lnum"&gt;  26:  &lt;/span&gt;}  &lt;span class="lnum"&gt;  27:  &lt;/span&gt;print &lt;span class="str"&gt;&amp;quot;\n\nTotal:#{count}&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;上面这个方法非常笨重，时间复杂度是 O（n^2），可以进行一些优化。根据 &lt;a href="http://www.cnblogs.com/cocowool/#2383293"&gt;@&lt;/a&gt;sdpfoue 的建议，做了优化。&lt;/p&gt;&lt;p&gt;首先就是可以只对大于3的奇数进行检查，因为偶数肯定可以被2整除，所以不需要考虑。&lt;/p&gt;&lt;p&gt;另外循环相除的时候，可以只除以质数，这样也能够减少不少步骤。但是会增加空间的消耗，就是所谓的用空间换时间。&lt;/p&gt;&lt;p&gt;具体代码如下：&lt;/p&gt;&lt;div class="csharpcode"&gt;  &lt;span class="lnum"&gt;   1:  &lt;/span&gt;def isZhishu?(num, arrZhishu)  &lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; num == 1 || num == 2  &lt;span class="lnum"&gt;   3:  &lt;/span&gt;    count = 2  &lt;span class="lnum"&gt;   4:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;   5:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt;( arrZhishu.empty? )then  &lt;span class="lnum"&gt;   6:  &lt;/span&gt;        #count = 2  &lt;span class="lnum"&gt;   7:  &lt;/span&gt;        &lt;span class="kwrd"&gt;while&lt;/span&gt; count &amp;lt; num &lt;span class="kwrd"&gt;do&lt;/span&gt;  &lt;span class="lnum"&gt;   8:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ( num % count ) == 0  &lt;span class="lnum"&gt;   9:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt;( count &amp;gt;= 11 ) then  &lt;span class="lnum"&gt;  10:  &lt;/span&gt;                count = count + 2 # Only judge even numbers  &lt;span class="lnum"&gt;  11:  &lt;/span&gt;            &lt;span class="kwrd"&gt;else&lt;/span&gt;  &lt;span class="lnum"&gt;  12:  &lt;/span&gt;                count = count + 1  &lt;span class="lnum"&gt;  13:  &lt;/span&gt;            end  &lt;span class="lnum"&gt;  14:  &lt;/span&gt;        end  &lt;span class="lnum"&gt;  15:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;  &lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;  &lt;span class="lnum"&gt;  18:  &lt;/span&gt;        arrZhishu.each{|&lt;span class="kwrd"&gt;value&lt;/span&gt;|  &lt;span class="lnum"&gt;  19:  &lt;/span&gt;            next &lt;span class="kwrd"&gt;if&lt;/span&gt; &lt;span class="kwrd"&gt;value&lt;/span&gt; == 1  &lt;span class="lnum"&gt;  20:  &lt;/span&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; ( num % &lt;span class="kwrd"&gt;value&lt;/span&gt; ) == 0  &lt;span class="lnum"&gt;  21:  &lt;/span&gt;        }  &lt;span class="lnum"&gt;  22:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;  &lt;span class="lnum"&gt;  23:  &lt;/span&gt;    end  &lt;span class="lnum"&gt;  24:  &lt;/span&gt;end  &lt;span class="lnum"&gt;  25:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  26:  &lt;/span&gt;def isHuiwen?(num)  &lt;span class="lnum"&gt;  27:  &lt;/span&gt;    s = num.to_s.reverse.to_i  &lt;span class="lnum"&gt;  28:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; num == s  &lt;span class="lnum"&gt;  29:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  30:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;  &lt;span class="lnum"&gt;  31:  &lt;/span&gt;end  &lt;span class="lnum"&gt;  32:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  33:  &lt;/span&gt;count = 0  &lt;span class="lnum"&gt;  34:  &lt;/span&gt;arrZhishu = Array.&lt;span class="kwrd"&gt;new&lt;/span&gt;  &lt;span class="lnum"&gt;  35:  &lt;/span&gt;i = 0  &lt;span class="lnum"&gt;  36:  &lt;/span&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt; i &amp;lt; 10000000 &lt;span class="kwrd"&gt;do&lt;/span&gt;  &lt;span class="lnum"&gt;  37:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; i &amp;gt;= 11 then  &lt;span class="lnum"&gt;  38:  &lt;/span&gt;        i = i + 2  &lt;span class="lnum"&gt;  39:  &lt;/span&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;  &lt;span class="lnum"&gt;  40:  &lt;/span&gt;        i = i + 1  &lt;span class="lnum"&gt;  41:  &lt;/span&gt;    end  &lt;span class="lnum"&gt;  42:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  43:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; isZhishu?(i, arrZhishu) &amp;amp;&amp;amp; isHuiwen?(i) then  &lt;span class="lnum"&gt;  44:  &lt;/span&gt;        arrZhishu.push(i)  &lt;span class="lnum"&gt;  45:  &lt;/span&gt;        #printf &lt;span class="str"&gt;&amp;quot;%4d&amp;quot;&lt;/span&gt;, i  &lt;span class="lnum"&gt;  46:  &lt;/span&gt;        #print &lt;span class="str"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;  &lt;span class="lnum"&gt;  47:  &lt;/span&gt;        count = count + 1  &lt;span class="lnum"&gt;  48:  &lt;/span&gt;    end  &lt;span class="lnum"&gt;  49:  &lt;/span&gt;end  &lt;span class="lnum"&gt;  50:  &lt;/span&gt;print &lt;span class="str"&gt;&amp;quot;\n\nTotal:#{count}&amp;quot;&lt;/span&gt;&lt;/div&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2507843.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/05/18/2507843.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/05/15/2501586.html</id><title type="text">HP-UX培训学习笔记</title><summary type="text">HP-UX操作系统全称为Hewlett Packard UniX，是惠普服务器上所有的操作系统。其发源自 AT &amp; T SRV4系统，可以支持HP的PA-RISC处理器、Intel的Itanium处理器。因为PA-RISC的停产（RISC机器现在越来越没落了），今后的主流就是只支持Intel的处理器了。 HP-UX操作系统版本包括：11.11（11iv1）、11.23（11iv2）、11.31（...</summary><published>2012-05-15T06:48:00Z</published><updated>2012-05-15T06:48:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/05/15/2501586.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/05/15/2501586.html"/><content type="html">&lt;p&gt;HP-UX操作系统全称为Hewlett Packard UniX，是惠普服务器上所有的操作系统。其发源自 AT &amp;amp; T SRV4系统，可以支持HP的PA-RISC处理器、Intel的Itanium处理器。因为PA-RISC的停产（RISC机器现在越来越没落了），今后的主流就是只支持Intel的处理器了。&lt;/p&gt;  &lt;p&gt;HP-UX操作系统版本包括：11.11（11iv1）、11.23（11iv2）、11.31（11iv3）。其中11i第一次发布时间是2000年。s&lt;/p&gt;  &lt;p&gt;培训中使用的环境是11.31，进入系统后，查看环境的办法：&lt;/p&gt;  &lt;p&gt;查看系统：uname -a&lt;/p&gt;  &lt;p&gt;查看软件版本：swlist | grep QPK&lt;/p&gt;  &lt;p&gt;查看文件系统的使用情况：bdf&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SMH工具&lt;/b&gt;：&lt;/p&gt;  &lt;p&gt;SMH（System Management Homepage）是一个系统管理工具，之前有一个名为SAM的工具。SMH是一个升级版本，提供了利用Web方式进行系统管理的方式。&lt;/p&gt;  &lt;p&gt;SAM支持HP-UX11iV1、V2,SMH支持 HP-UX 11iv1、v2、v3。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201205/201205151448041415.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Image(7)" border="0" alt="Image(7)" src="http://images.cnblogs.com/cnblogs_com/cocowool/201205/201205151448055527.png" width="244" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;这两个管理工具的特点包括：提供了图形化的管理界面、可以向非Root用户提供配置管理功能、方便的帮助信息、配置灵活可扩展性强、使用标准的HP-UX命令完成所有操作（每个操作都可以看到对应的命令行指令）、整合了HP的SIM（Systems Insight Manager）、提供了Windows、Linux支持（也就是说可以用来管理Windows和Linux）。&lt;/p&gt;  &lt;p&gt;SMH的启动有两种方式：autostart和start-on-boot。可以使用smhstartconfig这个命令查看当前的状态并进行启动方式的改变。autostart方式时，我们通过ip:2301端口进行访问。如果是start-on-boot，通过ip:2381进行访问。&lt;/p&gt;  &lt;p&gt;SMH菜单包括：Home、Settings、Tools、Task、Log等。&lt;/p&gt;  &lt;p&gt;可以说，系统中所有的操作命令都可以在SMH中来实现，这就为那些对于命令行不够熟悉的用户提供了管理系统的新途径。貌似这也是现在的一个趋势，大家都在尽力的推出专业、简单、易用的Web操作界面，降低管理的门槛。另一方面，也是让人们能够将精力更加的集中在系统资源的管理、分配上，而不必过分纠结于命令行指令。但是，很多时候，命令行还是无可替代的。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;HP-UX服务器的硬件&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;服务器的产品序列：入门级（rx66,rx56...）、中端（rx76、rx86）、高端（Superdome）&lt;/p&gt;  &lt;p&gt;服务器中的硬件包括：CPU（PA-RISC或者Itanium）、Cell boards或者MIO Controller（单元板或者）、System/Local Bus Adapter（系统/本地总线适配）、Memory Managment Processor Cards（MP管理卡）、Core I/O Cards、Interface Adapter Cards（OL*）&lt;/p&gt;  &lt;p&gt;CPU：HP-UX支持两种CPU架构，一种是HP自己的PA-RISC的CPU（2008年停产，2013年终止支持）、一种是Intel的Itanium。&lt;/p&gt;  &lt;p&gt;相关命令：machinfo&lt;/p&gt;  &lt;p&gt;Cell Boards（单元板）、Crossbars、MIO Controllers（）：HP-UX服务器分为两种，一种是Cell-Based System，一般是中端或者高端的服务器，CPU和内存插在一个个的单元板上，一个机器有多个单元板，多个单元板可以通过Crossbar连接在一起，这样可以提供强大的计算能力和硬件的容错能力，最多可以支持128个CPU、512个内存插槽；另外一种是MIO-Based System，这种架构用在HP的低端和刀片机上，最多支持8个CPU。这个系统通过单一的Memory、I/O（MIO）控制芯片同CPU、Memory和IO设备交互，也就是和我们普通的PC服务器差不多。&lt;/p&gt;  &lt;p&gt;System/Local Bus Adapter 提供了到IO扩展总线的连接，IO扩展总线可以支持一个或者多个槽位安装不同的扩展卡，HP提供了PCI、PCI-X、PCI-E三种总线类型，槽位速度达到2GB/sec。&lt;/p&gt;  &lt;p&gt;MP管理卡插在PCI插槽上，提供了串口的Console接入、远程访问（Telnet、SSH、HTTPS方式）、硬件检测和日志记录功能、电源管理功能等。&lt;/p&gt;  &lt;p&gt;Core I/O Cards 在不同机器上的变化比较大，主要是为服务器提供基础的连接接口，例如一个或多个SCSI接口用来连接磁盘、磁带机、DVD等，还有SAS接口连接本地磁盘，一个或多个LAN口、串口、打印机口、USB口、VGA口、Audio等。同时，大多数的机器还提供磁盘阵列控制器。&lt;/p&gt;  &lt;p&gt;除了Core I/O Cards之外，服务器还提供了其他的Interface Adapter Cards可以用来连接光线卡（Fiber Channel Host Bus Adapter）、ATM、X.25 Adapter等接口，如果支持OL*技术，还可以支持硬件的热插拔。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;olrad -q&lt;/p&gt;  &lt;p&gt;硬件的外观（型号）&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Disk Arrays and LUNs、SANs and Multipathing&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;当今的服务器，很多是将内置的磁盘做为Boot Disk，但是数据多数存放在Disk Arrays上。Disk Array 包含数十甚至数以百计、千计的磁盘。为了方便，利用一些管理软件，经常将一定数量的磁盘划分为一个LUN（Logical Units）。磁盘阵列管理软件会自动为每一个LUN分配一个独立的64位标识符WWID，管理员也可以为每个LUN分配一个比较容易记忆的LUN ID。操作系统将一个LUN看作一个磁盘设备，而不关心其到底由多少物理磁盘组成。&lt;/p&gt;  &lt;p&gt;SANs（Storage Area Network）的Multipathing的原理如下图所示，这样的做法带来了很大的灵活性，同时提供了高可用（High Availability）的环境以及应对高负载的能力。下图是最简单的一种SANs网络连接，依据网络的复杂性，到达一个LUN的通路可能有2、4、8甚至更多。在HP-UX的11iV1、V2版本中，对于通路的识别还需要依赖于LVM、VxVM等软件的外部支持，在V3版本中，这一特性已经被整合到内核中。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201205/201205151448056017.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Image(8)" border="0" alt="Image(8)" src="http://images.cnblogs.com/cnblogs_com/cocowool/201205/201205151448065428.png" width="189" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;分区连续体技术，包括nPar、vPar、VM、SRP（Secure Resource Partitions）。这种技术的出发点在于之前独立CPU的机器存在高峰瓶颈和利用率低估，通过加入更多的计算和内存单元，来达到资源的动态划分，一方面提高资源利用率，一方面提高高可用性。我觉得这种思路和云计算有些相似，只不过划分的物理逻辑单元不一样。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;scsimgr：scsimgr get_attr -a wwid -H 64000/0xfa00/0x4&amp;#160;&amp;#160;&amp;#160;&amp;#160; 获取LUN信息&lt;/p&gt;  &lt;p&gt;&lt;b&gt;硬件的编址（路径）&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;HP-UX 11iV1、V2采用传统（Legacy）的方式来为硬件编址，在V3版本中，采用了灵活编址（Agile View）来进行编址，同时仍支持传统方式。新的编址方式增强了系统的扩展性，Max LUN从原来的2TB到2TB以上，到单个LUN的通路从最多8个到最多32个。增强了适应性，在对SAN存储硬件进行更新替换时，不需要修改服务器的配置。&lt;/p&gt;  &lt;p&gt;传统（Legacy）视图&lt;/p&gt;  &lt;p&gt;传统硬件编址（HBA Hardware）：Cell/SBA/LBA/device/function&lt;/p&gt;  &lt;p&gt;卡的地址：cell/sba/lba/device/function.target.lan.port.&lt;/p&gt;  &lt;p&gt;传统SCSI盘：卡的地指.target.lunid&lt;/p&gt;  &lt;p&gt;SAN：卡的地址.domain.area.port.厂商编号.lun.lun.lun，使用的是交换机上的信息，如果端口发生变化，地址会发生变化&lt;/p&gt;  &lt;p&gt;灵活视图（agile）&lt;/p&gt;  &lt;p&gt;HBA Hardware Address：cell/SBA/LBA/device/function&lt;/p&gt;  &lt;p&gt;SCSI Address：HBA.target.lunid。使用16进制而不是十进制，例如：1/0/0/2/0.0xa.0x0&lt;/p&gt;  &lt;p&gt;FC Lunpath，卡的地址：阵列的wwpn号.oxlun，采用这种编址，连接方式仍然是多路径的，但是地址却可以唯一表示。&lt;/p&gt;  &lt;p&gt;Virtual FC Lunpath（虚拟地址）：HBA.virtual bus.virtual LUN ID，例如64000/0xfa00/0xlun&amp;#160;&amp;#160;&amp;#160;&amp;#160; lun映射到阵列上这个lun的wwid号&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;ioscan -fuNC disk/fc/tape/lan &lt;/p&gt;  &lt;p&gt;ioscan -m&lt;/p&gt;  &lt;p&gt;ioscan -m hwpath&amp;#160;&amp;#160;&amp;#160;&amp;#160; 查看三个地之间的映射关系&lt;/p&gt;  &lt;p&gt;scsimgr get_attr -a wwid -H 64000/oxfa00/ox#&lt;/p&gt;  &lt;p&gt;Slot Addressing 基于物理位置的地址（中高端机器支持）&lt;/p&gt;  &lt;p&gt;cabinet - bay -chassis - slot&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;olrad&lt;/p&gt;  &lt;p&gt;efi硬件编址，只是在itanium引导的时候使用，地址很长，实际映射的是逻辑地址&lt;/p&gt;  &lt;p&gt;如何插拔设备卡：兼容性、驱动&lt;/p&gt;  &lt;p&gt;&lt;b&gt;设备文件的管理&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;传统（legacy）命名的设备文件存放位置：&amp;#160;&amp;#160;&amp;#160;&amp;#160; /dev/dsk&amp;#160;&amp;#160;&amp;#160;&amp;#160; /dev/rdsk&lt;/p&gt;  &lt;p&gt;持久设备（虚拟地址，不会发生变化）文件存放位置：&amp;#160;&amp;#160;&amp;#160;&amp;#160; /dev/disk&amp;#160;&amp;#160;&amp;#160;&amp;#160; /dev/rdisk&lt;/p&gt;  &lt;p&gt;设备文件没有大小、设备类型（块设备、字符设备）、主号（驱动程序）和次号（内核中的地址）&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;ioscan -funC disk&lt;/p&gt;  &lt;p&gt;ioscan -m dsf&lt;/p&gt;  &lt;p&gt;lsdev&lt;/p&gt;  &lt;p&gt;ll查看/dev下的文件&lt;/p&gt;  &lt;p&gt;insf（物理设备）：添加物理设备&lt;/p&gt;  &lt;p&gt;mksf：按照指定方式添加物里设备&lt;/p&gt;  &lt;p&gt;mknod（逻辑设备）：设备文件路径&amp;#160; 类型 主号 次号。主要用来生成逻辑设备文件的&lt;/p&gt;  &lt;p&gt;rmsf：删除设备文件&lt;/p&gt;  &lt;p&gt;&lt;b&gt;磁盘设备的管理&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;磁盘的使用方式：整盘管理、逻辑卷管理LVM、VxVM&lt;/p&gt;  &lt;p&gt;物理卷 pv：有lvm结构数据的disk，数据包括pvra和vgra&lt;/p&gt;  &lt;p&gt;逻辑卷组 vg：一些物理pv的组合，是lvm中的最大空间池。/dev/vgname/group&lt;/p&gt;  &lt;p&gt;逻辑卷 lv：磁盘上的一个逻辑空间，在逻辑上是连续的，但是物理上不一定连续。/dev/vgname/lvname&amp;#160;&amp;#160;&amp;#160;&amp;#160; /dev/vgname/rlvname&lt;/p&gt;  &lt;p&gt;一个物理卷对应一个磁盘、多个磁盘组成卷组、逻辑卷对应分区（Size、VG name）&lt;/p&gt;  &lt;p&gt;最大的单位是卷组。&lt;/p&gt;  &lt;p&gt;物理卷：pvcreate&lt;/p&gt;  &lt;p&gt;卷组：&lt;/p&gt;  &lt;p&gt;逻辑卷：可以跨越磁盘，但是不能跨越卷组。默认顺序取第一可用空间（物理磁盘的加载顺序）。&lt;/p&gt;  &lt;p&gt;默认Extent(Physical Extent)的大小是4MB.&lt;/p&gt;  &lt;p&gt;建立连续的逻辑空间到离散的物理空间的映射。&lt;/p&gt;  &lt;p&gt;对于结构数据的操作一般使用字符设备文件。&lt;/p&gt;  &lt;p&gt;根盘一般有八个设备文件。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;pvcreate：创建物理卷，后面跟字符设备文件。pvcraete [-f] /dev/rdisk/disk#&lt;/p&gt;  &lt;p&gt;mknod：&lt;/p&gt;  &lt;p&gt;vgcreate：创建卷组，指定卷组名。&lt;/p&gt;  &lt;p&gt;lvcreate：创建逻辑卷，-n 指定名称，-L 指定大小，vgname&lt;/p&gt;  &lt;p&gt;vgextend：&lt;/p&gt;  &lt;p&gt;&lt;b&gt;文件系统管理&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;JFS。&lt;/p&gt;  &lt;p&gt;文件系统在逻辑卷中创建。逻辑卷的数据信息在磁盘顶部的VGA中。&lt;/p&gt;  &lt;p&gt;文件系统的数据分为两类：结构数据（Meta Data）和用户数据。&lt;/p&gt;  &lt;p&gt;结构数据的内容：&lt;/p&gt;  &lt;p&gt;超级块（Super Block）：文件系统的大小、文件系统的类型、文件系统的Block映射表、到其他系统的指针等。超级块有多个，主超级块等。fsck指令。&lt;/p&gt;  &lt;p&gt;iNode：ll执行后看到的信息中，除了文件名之外都存放在iNode中，另外还包括数据区的指针。&lt;/p&gt;  &lt;p&gt;目录（Dir）：本身是一个特殊的iNode。/是2号iNode。访问目录时，IO次数是路径深度的两倍。但不一定都是真实的物理IO，因为有缓存等的存在。目录中存放了该目录中的文件名。保存该目录下的目录和文件的inode号。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;newfs：newfs /dev/vg01/rdatavol，然后创建挂在点，mount命令进行挂载（可以修改fstab配置文件以在重启后继续生效）。&lt;/p&gt;  &lt;p&gt;mkdir：创建挂载点&lt;/p&gt;  &lt;p&gt;mount：挂载文件系统&lt;/p&gt;  &lt;p&gt;&lt;b&gt;     &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;逻辑卷和文件系统的维护&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;性能的维护、磁盘修复、空间的维护&lt;/p&gt;  &lt;p&gt; 随着使用时间的增加，文件系统中的碎片逐渐增多，可以使用fsadm进行维护。-D 参数表述对目录进行重组：1、对于小目录来说，将目录数据文件移动到inode的数据区；2、对于大目录来说，将经常访问的目录和文件移动到inode的数据区。&lt;/p&gt;  &lt;p&gt;碎片整理：fsadm -eD，对目录和文件进行整理&lt;/p&gt;  &lt;p&gt;磁盘修复：fsck /dev/vg01/rdatavol&lt;/p&gt;  &lt;p&gt;空间的维护：卷组扩容、逻辑卷扩容、文件系统扩容、文件系统减容、逻辑卷减容、移除逻辑卷、卷组减容等。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;bdf：查看空间使用情况&lt;/p&gt;  &lt;p&gt;lvextend：扩充逻辑卷，lvextend -L size /dev/vgname/lvname&lt;/p&gt;  &lt;p&gt;fsadm：fsadm -b size，只能在JFS online的系统中使用（需要单独授权），可以扩充或者缩减文件系统。如果不是，可以使用extendfs命令，需要首先卸载文件系统。&lt;/p&gt;  &lt;p&gt;fsextend：&lt;/p&gt;  &lt;p&gt;vgextend：扩充卷组&lt;/p&gt;  &lt;p&gt;lvreduce：缩逻辑卷&lt;/p&gt;  &lt;p&gt;vgreduce：缩卷组&lt;/p&gt;  &lt;p&gt;lvremove：移除逻辑卷&lt;/p&gt;  &lt;p&gt;vgremove：移除卷组&lt;/p&gt;  &lt;p&gt;vgchange：&lt;/p&gt;  &lt;p&gt;vgexport：&lt;/p&gt;  &lt;p&gt;pvmove：数据转移&lt;/p&gt;  &lt;p&gt;&lt;b&gt;交换区&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;交换区的目的在于缓解内存压力。&lt;/p&gt;  &lt;p&gt;设备交换分区（Device Swap）&lt;/p&gt;  &lt;p&gt;文件交换分区（File Swap）&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;swapon：&lt;/p&gt;  &lt;p&gt;swapinfo：-tm&lt;/p&gt;  &lt;p&gt;swapoff：&lt;/p&gt;  &lt;p&gt;&lt;b&gt;灾难恢复&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;这里灾难恢复主要针对根盘发生意外损坏的情况，我们有三种方法可以在灾难发生时提供恢复机制：Boot Disk Mirroring（根盘镜像）、Dynamic Root Disk（动态根磁盘）、Ignite-UX Recovery Tools（系统恢复带）。三种方法的恢复代价依次增加，在考虑容灾方案是应当考虑配合使用。&lt;/p&gt;  &lt;p&gt;Boot Disk Mirroring（根盘镜像）是指利用LVM、VxVM、阵列控制器或者SAN网络制作启动磁盘的镜像，在启动磁盘损坏时，我们仍可以通过镜像启动系统。镜像在安装系统的时候在Ignite选项中选择，主要应对非人为的磁盘损坏。无法避免人为的损坏 rm -rf /。&lt;/p&gt;  &lt;p&gt;DRD（Dynamic Root Disk）提供了一组工具，可以创建一个bootable的克隆镜像，根磁盘受损后，可以使用克隆镜像，但是这种方式必须要求系统重启。这种方式是为了避免人为的造成系统损坏，例如内核的不当修改、文件误删等场景（这个时候镜像盘中的系统也会损坏）。使用DRD，可以帮我们合理的减少非机划停机时间和计划停机时间。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;swlist DynRootDisk&amp;#160;&amp;#160;&amp;#160;&amp;#160; 查看是否安装了DRD工具包&lt;/p&gt;  &lt;p&gt;drd status&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 显示DRD镜像的信息&lt;/p&gt;  &lt;p&gt;drd clone&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 创建drd克隆镜像&lt;/p&gt;  &lt;p&gt;drd runcmd&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 在DRD克隆镜像上执行系统命令&lt;/p&gt;  &lt;p&gt;drd mount&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 挂载DRD克隆镜像到当前的文件系统中&lt;/p&gt;  &lt;p&gt;drd umount&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 卸载DRD克隆镜像&lt;/p&gt;  &lt;p&gt;drd active&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 将DRD镜像置为下次启动时的默认启动盘&lt;/p&gt;  &lt;p&gt;drd deactive&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 恢复当前的启动盘为默认启动盘&lt;/p&gt;  &lt;p&gt;drd rehost&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 将DRD镜像做为另外一台服务器的启动磁盘&lt;/p&gt;  &lt;p&gt;drd unrehost&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 撤销上面的操作&lt;/p&gt;  &lt;p&gt;drd命令还有一些公共的属性&lt;/p&gt;  &lt;p&gt;drd mode -?&lt;/p&gt;  &lt;p&gt;drd mode -x ?&lt;/p&gt;  &lt;p&gt;drd mode -p&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 启动预览模式&lt;/p&gt;  &lt;p&gt;drd mode [-x verbosity=3]&lt;/p&gt;  &lt;p&gt;DRD镜像创建成功后，默认情况下没有挂载到当前系统中，我们没有办法对上面的文件进行操作。如果此时希望为镜像系统打patch，可以使用drd runcmd模式，下面是一些在drd下安全的系统操作命令：&lt;/p&gt;  &lt;p&gt;swinstall&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 安装软件&lt;/p&gt;  &lt;p&gt;swremove&amp;#160;&amp;#160;&amp;#160;&amp;#160; 卸载软件&lt;/p&gt;  &lt;p&gt;swlist&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 查看软件列表&lt;/p&gt;  &lt;p&gt;swmodify&lt;/p&gt;  &lt;p&gt;swverify&lt;/p&gt;  &lt;p&gt;swjob&lt;/p&gt;  &lt;p&gt;kctune&lt;/p&gt;  &lt;p&gt;update-ux&lt;/p&gt;  &lt;p&gt;view&lt;/p&gt;  &lt;p&gt;除此之外还有一种办法可以修改镜像上的文件，可以通过drd mount命令将镜像挂载到当前的文件系统中，然后就可以修改镜像上的文件了。命令执行后，系统会在/var/opt/drd/mnts/sysimage_001下创建挂载点，之后我们就可以使用diff或者chsum命令来对当前系统和镜像系统中的文件进行比较。&lt;/p&gt;  &lt;p&gt;如果要备份用户数据和应用数据，可以使用tai、cpio、dd、dump、restore等命令。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;MP（Management Processor card）卡&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;所有的HP服务器都提供MP卡支持，通过MP卡我们可以通过多种途径连接到远程终端。MP卡有串口和网口两种端口，支持的连接方式：物理终端、telnet、ssh、web。早期的HP服务器提供一种GSP（Guardian Service Processor）的进入方式，HP的下一代替代产品就是MP。在最新的入门级服务器上，还提供了Integrated Lights Out Management Processor(iLo 2 Mp).&lt;/p&gt;  &lt;p&gt;co：console，系统控制台（单用户管理、忘记了root用户密码、管理系统的引导）&lt;/p&gt;  &lt;p&gt;vfp：查看背板闪灯&lt;/p&gt;  &lt;p&gt;cl：查看console的日志&lt;/p&gt;  &lt;p&gt;cm：MP的管理命令&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 网络管理：&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 账户管理：uc&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 电源管理：&lt;/p&gt;  &lt;p&gt;&lt;b&gt;系统启动&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;有些情况下需要进入到单用户模式。&lt;/p&gt;  &lt;p&gt;引导相关的组件：固件（EFI boot 马nager，NVRAM）、引导盘（引导区的内核vmunix和auto文件）&lt;/p&gt;  &lt;p&gt;Itanium有三个字盘：第一个放引导信息（FAT32）、第二个是vg00、第三个是诊断分区（FAT32）&lt;/p&gt;  &lt;p&gt;引导过程：自检、EFI boot manager 读取引导路径、调用系统引导区的内核加载器HPUX、读取auto文件决定加载的内核以及模式、OS启动。&lt;/p&gt;  &lt;p&gt;内核的加载模式：&lt;/p&gt;  &lt;p&gt;boot -is，单用户模式&lt;/p&gt;  &lt;p&gt;boot -lq，&lt;/p&gt;  &lt;p&gt;boot -tm，&lt;/p&gt;  &lt;p&gt;&lt;b&gt;服务的启动&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;系统启动后，使用init完成系统的初试化，其中服务的启动由rc完成。&lt;/p&gt;  &lt;p&gt;1、系统通过/sbin/rc*.d决定不同运行级别启动的服务。&lt;/p&gt;  &lt;p&gt;2、系统通过/sbin/rc*.d/文件夹下的文件名决定启动的顺序。文件的命名规范：S##Service、K##Service。顺序号越小启动顺序越高，关闭时，应当先关闭最后启动的服务。通过使用一个固定数值减去启动顺序的方式来决定。&lt;/p&gt;  &lt;p&gt;3、/sbin/init.d下实际存储所有的启动脚本，/sbin/rc*.d中只是建立一些软连接。启动脚本启动时，读取/etc/rc.config.d下的启动控制变量，来决定是否启动服务。脚本具有四个选项：start_msg、stop_msg、start、stop。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;内核管理&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;内核中包含了驱动和参数。可以有不止一个内核，内核以子目录的形式存在。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;kconfig：将内核作为一个整体进行管理&lt;/p&gt;  &lt;p&gt;kcmodule：调整内核中的模块&lt;/p&gt;  &lt;p&gt;kctune：调整内核中的参数&lt;/p&gt;  &lt;p&gt;内核失败时的处理办法。&lt;/p&gt;  &lt;p&gt;1、看内核日志：/var/adm/kc.log，或者kclog命令。&lt;/p&gt;  &lt;p&gt;2、根据情况选择不同的解决方案。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;网络的管理&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;网络的连通性、网络的服务。&lt;/p&gt;  &lt;p&gt;相关命令：&lt;/p&gt;  &lt;p&gt;三层&lt;/p&gt;  &lt;p&gt;ifconfig：如果需要永久生效，修改/etc/rc.config.d/netconf&lt;/p&gt;  &lt;p&gt;route：管理系统路由，如果需要永久生效，配置文件同上，启动脚本是/sbin/init.d/net&lt;/p&gt;  &lt;p&gt;hostname：修改主机名，配置文件/etc/rc.config.d/netconf，启动脚本是/sbin/init.d/hostname&lt;/p&gt;  &lt;p&gt;/etc/hosts，本地的主机名解析文件&lt;/p&gt;  &lt;p&gt;/etc/resolv.conf，DNS服务器的地址&lt;/p&gt;  &lt;p&gt;故障定位常用命令：&lt;/p&gt;  &lt;p&gt;lanscan&lt;/p&gt;  &lt;p&gt;lanadmin&lt;/p&gt;  &lt;p&gt;linkloop&lt;/p&gt;  &lt;p&gt;arp&lt;/p&gt;  &lt;p&gt;ping&lt;/p&gt;  &lt;p&gt;traceroute&lt;/p&gt;  &lt;p&gt;nslookup&lt;/p&gt;  &lt;p&gt;dig&lt;/p&gt;  &lt;p&gt;nsquery&lt;/p&gt;  &lt;p&gt;nwmgr&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、&lt;a href="http://www.junipercorp.com.cn/"&gt;www.junipercorp.com.cn&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2、&lt;a href="http://baike.baidu.com/view/58963.htm"&gt;百度百科 HP-UX&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3、&lt;a href="http://baike.baidu.com/view/1102790.htm"&gt;百度百科 Superblock&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4、&lt;a href="http://en.wikipedia.org/wiki/File_system"&gt;Wiki File System&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5、&lt;a href="http://blog.itpub.net/post/40024/488870"&gt;HP-UX常用命令&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6、&lt;a href="http://baike.baidu.com/view/413760.htm"&gt;百度百科 Itanium&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7、&lt;a href="http://wenku.baidu.com/view/ba0fe41fa300a6c30c229f6e.html"&gt;HP-UX LVM卷组学习笔记&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2501586.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/05/15/2501586.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/05/04/2482205.html</id><title type="text">使用Ruby简单实现的tail命令，支持动态输出</title><summary type="text">最主要的是使用seek这个命令，从文件的末尾开始读字符。读到一个换行符 \n 之后，计数器加一，直到找到符合要求的行数后，读内容到文件末尾输出。支持 –f 部分的想法是，在文件最后的位置不断地循环读，发现新内容后就进行输出。 脚本存在的问题：不支持多个文件，tail命令本身是可以支持的；不断循环的效率太低，应该有更好的办法可以优化。1#!/usr/bin/ruby23line=ARGV[0]4filename=ARGV[1]56unlessline&amp;&amp;filenamethen7print"Invalidparameter.\n"8print"Usa</summary><published>2012-05-04T01:58:00Z</published><updated>2012-05-04T01:58:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/05/04/2482205.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/05/04/2482205.html"/><content type="html">&lt;p&gt;最主要的是使用seek这个命令，从文件的末尾开始读字符。读到一个换行符 \n 之后，计数器加一，直到找到符合要求的行数后，读内容到文件末尾输出。支持 &amp;#8211;f 部分的想法是，在文件最后的位置不断地循环读，发现新内容后就进行输出。&lt;/p&gt;  &lt;p&gt;脚本存在的问题：不支持多个文件，tail命令本身是可以支持的；不断循环的效率太低，应该有更好的办法可以优化。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;!/usr/bin/ruby&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;line&amp;nbsp;=&amp;nbsp;ARGV[0]&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;filename&amp;nbsp;=&amp;nbsp;ARGV[1]&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;unless&amp;nbsp;line&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;filename&amp;nbsp;then&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Invalid&amp;nbsp;parameter.\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Usage:ruby&amp;nbsp;tail.rb&amp;nbsp;line&amp;nbsp;filename\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;end&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;line&amp;nbsp;=&amp;nbsp;line.to_i&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;begin&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;io&amp;nbsp;=&amp;nbsp;open(filename)&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lc&amp;nbsp;=&amp;nbsp;0&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stack&amp;nbsp;=&amp;nbsp;Array.new&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&amp;nbsp;lc&amp;nbsp;&amp;lt;&amp;nbsp;line&amp;nbsp;+&amp;nbsp;1&amp;nbsp;do&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n&amp;nbsp;=&amp;nbsp;n&amp;nbsp;+&amp;nbsp;1&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;io.seek(&amp;nbsp;-n,&amp;nbsp;IO::SEEK_END&amp;nbsp;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;io.pos&amp;nbsp;==&amp;nbsp;0&amp;nbsp;then&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;#&lt;/span&gt;&lt;span style="color: #008000;"&gt;break&amp;nbsp;unless&amp;nbsp;io.seek(&amp;nbsp;-n&amp;nbsp;,IO::SEEK_END)&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000;"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s&amp;nbsp;=&amp;nbsp;io.read(&amp;nbsp;1&amp;nbsp;)&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;/\n/&amp;nbsp;=~&amp;nbsp;s&amp;nbsp;then&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lc&amp;nbsp;=&amp;nbsp;lc&amp;nbsp;+&amp;nbsp;1&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;io.seek(-n,&amp;nbsp;IO::SEEK_END)&lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s&amp;nbsp;=&amp;nbsp;io.read()&lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last&amp;nbsp;=&amp;nbsp;io.pos&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;s&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&amp;nbsp;item&amp;nbsp;=&amp;nbsp;io.read()&amp;nbsp;do&lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;!&amp;nbsp;item.empty?&amp;nbsp;then&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;item&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;last&amp;nbsp;=&amp;nbsp;io.pos&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;io.pos&amp;nbsp;=&amp;nbsp;last&lt;br /&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;&lt;span style="color: #008080;"&gt;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br /&gt;&lt;span style="color: #008080;"&gt;44&lt;/span&gt;&amp;nbsp;rescue&lt;br /&gt;&lt;span style="color: #008080;"&gt;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;print&lt;/span&gt;&amp;nbsp;$@,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;46&lt;/span&gt;&amp;nbsp;end&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2482205.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/05/04/2482205.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/04/23/2466370.html</id><title type="text">Shell历史</title><summary type="text">浏览了一下Wiki，把shell的历史简要摘抄了一下，整个发展过程还是很有趣，csh贡献了很多的想法和特性，但是最后却没有流行起来。sh虽然刚开始功能比较简单，但是后续也一直在完善。bash我觉得目前对于使用linux的朋友来说是最常见的，但是这位Fox兄弟在Wiki上的评价只是Computer Programmer，远远不及Bourne老爷子呢。 Bourne Shell 是1977年...</summary><published>2012-04-23T06:12:00Z</published><updated>2012-04-23T06:12:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/04/23/2466370.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/04/23/2466370.html"/><content type="html">&lt;p&gt;浏览了一下Wiki，把shell的历史简要摘抄了一下，整个发展过程还是很有趣，csh贡献了很多的想法和特性，但是最后却没有流行起来。sh虽然刚开始功能比较简单，但是后续也一直在完善。bash我觉得目前对于使用linux的朋友来说是最常见的，但是这位Fox兄弟在Wiki上的评价只是Computer Programmer，远远不及Bourne老爷子呢。&lt;/p&gt;  &lt;p&gt;Bourne Shell&amp;#160;&amp;#160;&amp;#160;&amp;#160; 是1977年发布的Unix Version 7 中的默认Shell。目前大多数Unix系统仍保留着原始的 /bin/sh，或者保留一个软连接到其他Shell上 。该程序由 Stephen Bourne 在贝尔实验室工作期间开发，它的开发是做为 Thompson Shell 的一个替代。随着《The UNIX Programming Environment》（作者Brain W. Kernighan、Rob Pike）一书的出版，Bourne Shell开始变得流行起来。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204231411494623.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204231411503185.png" width="191" height="277" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Stephen_Bourne"&gt;Stephen Bourne&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;随着时间的发展，伴随着不断更新的系统（Version 7、SystemIII、SVR2、SVR3、SVR4），AT&amp;amp;T不断地增强shell的功能，但是因为shell一直没有版本号，所以我们只能依靠其支持的特性来区分SHELL的版本。&lt;/p&gt;  &lt;p&gt;对于SHELL的一些批评：交互式的使用不够友好（当时C Shell提供了history、aliases、job control等命令）；Unix系统使用C写成，但是shell的语法缺不像C，倒是有点像ALGOL；缺少正则表达式支持。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204231411512968.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Image(6)" border="0" alt="Image(6)" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204231411538117.png" width="185" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;后续的故事&lt;/p&gt;  &lt;p&gt;C Shell （csh）在1970年代，由当时还是加州大学伯克利分校的学生Bill Joy编写。在1978年，随着BSD Unix系统的第二个版本广泛发布。早期贡献代码的成员还包括：Michael Ubell, Eric Allman, Mike O'Brien and Jim Kulp。在一些系统如Mac OS X和Red Hat Linux上，csh实际上是tchsh，一种增强型的shell。csh包含了当今shell的绝大多数特性，包括filename wildcarding, piping, here documents, command substitution, variables and control structures for condition-testing and iteration。&lt;/p&gt;  &lt;p&gt;虽然csh有着众多的交互特性以及快速的执行速度，但是最终未能流行起来。整个80年代，csh不能够确保出现在所有的Unix系统上，但是sh可以，这也是造成csh不够流行的主要因素。90年代中期，csh的分发开始广泛起来，这时又遭受了POSIX委员会的质疑，指出语法不够完善、特性缺失、扩展性差等问题[&lt;a href="http://en.wikipedia.org/wiki/C_shell"&gt;8&lt;/a&gt;]。&lt;/p&gt;  &lt;p&gt;Korn Shell （ksh）由 David Korn 编写，1983年在USENIX上宣布。它向后兼容Bourne Shell，同时吸取了C Shell中的一些优点（job control）。代码贡献者还包括当时在Bell Labs的Mike Veach和Pat Sullivan。目前为开源软件：&lt;a href="http://www.kornshell.org/"&gt;http://www.kornshell.org/&lt;/a&gt;。ksh的早期版本为 ksh88，是AIX4上的默认shell。后来又发布了ksh93版本。&lt;/p&gt;  &lt;p&gt;Bash （the Bourne-Agian shell）由 Brian Fox 为GNU项目编写，目的是代替sh。首次发布于1989年，作为GNU项目的一个程序广泛分布在Linux、Mac OS X、Cygwin上。Brain Fox作为FSF的员工，首次开始工作是在1988年的1月10号，一年之后，发布了.99的测试版本。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120423141155267.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204231411565972.png" width="181" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Brian_Fox_(computer_programmer)"&gt;Brain J. Fox&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、The Linux Command Line: A Complete Introduction&lt;/p&gt;  &lt;p&gt;2、&lt;a href="http://baike.baidu.com/view/1867757.html?fromTaglist"&gt;umask 百度百科&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3、&lt;a href="http://bbs.chinaunix.net/thread-451969-1-1.html"&gt;关于setuid和setgid的讨论&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4、&lt;a href="http://en.wikipedia.org/wiki/Bash_(Unix_shell)"&gt;Wiki Bash Unix Shell&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5、&lt;a href="http://en.wikipedia.org/wiki/Bourne_shell"&gt;Bourne Shell&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6、&lt;a href="http://en.wikipedia.org/wiki/The_UNIX_Programming_Environment"&gt;The Unix Programming Environment&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7、&lt;a href="http://en.wikipedia.org/wiki/Korn_shell"&gt;Wiki Korn Shell&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;8、&lt;a href="http://en.wikipedia.org/wiki/C_shell"&gt;Wiki C Shell&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;9、&lt;a href="http://en.wikipedia.org/wiki/Bash_(Unix_shell)"&gt;Wiki Bash （Unix Shell）&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2466370.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/04/23/2466370.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/04/10/2440927.html</id><title type="text">ZendStudio中设置SVN:ignore</title><summary type="text">使用ZendStudio开发SVN中的代码时，经常容易将 .project、.settings、.buildpath 这类的zend的工程文件提交上去，非常麻烦，有几种方法可以去掉这个麻烦。 1、在ZendStudio的全局设置中设置 在Window -&gt; Preferences 中找到 Team -&gt; Ignored Resources，然后将需要屏蔽的项目添加进去，应用就可以了。 ...</summary><published>2012-04-10T09:17:00Z</published><updated>2012-04-10T09:17:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/04/10/2440927.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/04/10/2440927.html"/><content type="html">&lt;p&gt;使用ZendStudio开发SVN中的代码时，经常容易将 .project、.settings、.buildpath 这类的zend的工程文件提交上去，非常麻烦，有几种方法可以去掉这个麻烦。&lt;/p&gt;  &lt;p&gt;1、在ZendStudio的全局设置中设置&lt;/p&gt;  &lt;p&gt;在Window -&amp;gt; Preferences 中找到 Team -&amp;gt; Ignored Resources，然后将需要屏蔽的项目添加进去，应用就可以了。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204101716528373.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204101716533847.png" width="585" height="389" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2、在项目中单独设置特定文件&lt;/p&gt;  &lt;p&gt;选中不希望加入到SVN中的文件后，点击右键，按下图所示，就可以设置 svn:ignore&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120410171654683.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120410171654301.png" width="603" height="338" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3、利用 SetProperty 设置项目的属性&lt;/p&gt;  &lt;p&gt;在工程中点击右键，选择Team-&amp;gt;Show Properties 或者 Set Properties ，在出现的 Properties 面板中，点击右键，选择 Add，然后按照下图所示，添加自己需要忽略的文件&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204101716559188.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204101716558043.png" width="638" height="358" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、&lt;a href="http://lenss.nl/2008/06/hide-project-files-from-svn-in-zend-studio-for-eclipse/"&gt;Hide .project files from svn in zend studio&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lenss.nl/2008/06/hide-project-files-from-svn-in-zend-studio-for-eclipse/"&gt;&lt;/a&gt;2、&lt;a href="http://blog.hexu.org/archives/435.shtml"&gt;Windows下Zendstudio Add to svn：ignore&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2440927.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/04/10/2440927.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/04/05/2432787.html</id><title type="text">IBM的双机切换HACMP方案介绍</title><summary type="text">HACMP，全称为IBM High Availablity Cluster Multiprocessing。 IBM PowerHA （原来称为HACMP）是IBM为AIX Unix以及基于System p平台的Linux开发的一个集群高可用性的解决方案，其全称为High Availability Cluster MultiProcessing。HACMP的产品最早发布与1991年，如今的Pow...</summary><published>2012-04-05T02:37:00Z</published><updated>2012-04-05T02:37:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/04/05/2432787.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/04/05/2432787.html"/><content type="html">&lt;p&gt;HACMP，全称为IBM High Availablity Cluster Multiprocessing。&lt;/p&gt;  &lt;p&gt;IBM PowerHA （原来称为HACMP）是IBM为AIX Unix以及基于System p平台的Linux开发的一个集群高可用性的解决方案，其全称为High Availability Cluster MultiProcessing。HACMP的产品最早发布与1991年，如今的PowerHA SystemMirror for AIX7.1 已经是第20个版本。&lt;/p&gt;  &lt;p&gt;PowerHA最多可以支持32台Computer或者节点Node，可以主动的在节点上运行应用（Active），也可以被动的接管失败的节点（Passive）。文件系统中的数据也可以在集群之间共享。&lt;/p&gt;  &lt;p&gt;PowerHA高度依赖 IBM RSCT（IBM Reliable Scalable Cluster Technology, RSCT,是为AIX和Linux集群环境管理，提供的一组全面的软件[&lt;a href="http://en.wikipedia.org/wiki/IBM_RSCT"&gt;2&lt;/a&gt;]）&lt;/p&gt;  &lt;p&gt;下面探讨一下关于HACMP中实现高可用的方式，如下图是一个高可用的系统，在每个可能出现问题的节点上增加了冗余。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204051036565990.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Image(2)" border="0" alt="Image(2)" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120405103659153.png" width="379" height="441" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;为了实现系统的高可用，避免单点故障（Single Points Of Failure，SPOF），我们需要考察一个系统中的以下节点：&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1、服务器节点；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2、服务器电源；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3、网络适配器 Network Adapter；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 4、网络通路 Network；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 5、磁盘 Disk Adapter；&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 6、应用程序 Application；&lt;/p&gt;  &lt;p&gt;在HACMP中，通常将集群资源配置为一个个资源组 Resource Groups。这些资源组具有以下的属性：可以配置启动 Startup、切换 Failover、回撤 Fall back策略，设置处理时间和分布策略等。&lt;/p&gt;  &lt;p&gt;HACMP Hot standby configuration&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204051037051543.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204051037065871.png" width="429" height="259" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Mutal takeover&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204051037096064.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204051037109553.png" width="442" height="252" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Third party takeover&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204051037122354.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120405103715420.png" width="465" height="365" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;最近的版本信息：&lt;/p&gt;  &lt;p&gt;--------------------------&lt;/p&gt;  &lt;p&gt;PowerHA 7.1 发布于2010年，可用于AIX V6.1 TL6 以及 AIX V7.1&lt;/p&gt;  &lt;p&gt;PowerHA 6.1 发布于2009年，重新更名为 IBM PowerHA SystemMirror&lt;/p&gt;  &lt;p&gt;HACMP 5.5 发布于2008年，更名为 IBM PowerHA&lt;/p&gt;  &lt;p&gt;HACMP 5.4.1 发布于2007年&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、&lt;a href="http://en.wikipedia.org/wiki/IBM_High_Availability_Cluster_Multiprocessing"&gt;Wiki HACMP&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2、&lt;a href="http://en.wikipedia.org/wiki/IBM_RSCT"&gt;IBM RSCT&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3、&lt;a href="http://en.wikipedia.org/wiki/High-availability_cluster"&gt;Wiki High Availability Cluster&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4、&lt;a href="http://aix.chinaunix.net/doc/2009/01/06/1349637.shtml"&gt;HACMP参考资料 for HACMP 5.4&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5、&lt;a href="http://www.mtxia.com/js/Documentation/mtxia_HACMP.pdf"&gt;一个介绍HACMP的PPT&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2432787.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/04/05/2432787.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html</id><title type="text">WebLogic中的一些基本概念</title><summary type="text">WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训，为了便于自己记忆，培训后，整理梳理了一些WebLogic的资料，会陆续的发出来，下面是一些基本概念。Domain ： 域是作为单元进行管理的一组相关的 WebLogic Server 资源。一个域包含一个或多个 WebLogic Server 实例，这些实例可以是群集实例、非群集实例，或者是群集与非群集实例的组合。一个域可以包含多个群集。域还包含部署在域中的应用程序组件、此域中的这些应用程序组件和服务器实例所需的资源和服务。应用程序和服务器实例使用的资源和服务示例包括计算机定义、可选网络通道、连接器和启动类。 Do...</summary><published>2012-04-01T07:29:00Z</published><updated>2012-04-01T07:29:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html"/><content type="html">&lt;p&gt;&lt;strong&gt;WebLogic 中的基本概念&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;上周参加了单位组织的WebLogic培训，为了便于自己记忆，培训后，整理梳理了一些WebLogic的资料，会陆续的发出来，下面是一些基本概念。&lt;/p&gt;&lt;p&gt;Domain ：&lt;/p&gt;  &lt;p&gt;域是作为单元进行管理的一组相关的 WebLogic Server 资源。一个域包含一个或多个 WebLogic Server 实例，这些实例可以是群集实例、非群集实例，或者是群集与非群集实例的组合。一个域可以包含多个群集。域还包含部署在域中的应用程序组件、此域中的这些应用程序组件和服务器实例所需的资源和服务。应用程序和服务器实例使用的资源和服务示例包括计算机定义、可选网络通道、连接器和启动类。&lt;/p&gt;  &lt;p&gt;Domain 中包含一个特殊的 WebLogic 服务器实例，叫做 Administration Server，这是我们配置、管理Domain中所有资源的核心。通常，我们称加入Domain中的其他实例为 Managed Server，所有的Web应用、EJB、Web Services和其他资源都部署在这些服务器上。&lt;/p&gt;  &lt;p&gt;我们可以按照以下的一些标准来组织Domain：程序的逻辑划分，例如一个电商网站，可以将前台作为一个Domain，订单处理作为一个Domain，其他资源作为一个Domain；以物理地域为划分，例如一个跨国公司的网站，每个国家可以建立一个Domain；以尺寸来划分。&lt;/p&gt;  &lt;p&gt;Administration Server ：&lt;/p&gt;  &lt;p&gt;管理服务器是控制整个域配置的中心操作节点，管理服务器维护着整个域 Domain 的配置并将配置分配到每个被管理服务器 Managed Server 中，每个域中都必须有一个Administration Server。我们可以通过三个渠道访问管理服务器：Admin Server console、Oracle WebLogic Scripting Tool WLST、JMX客户端（通过WebLogic提供的API来实现），最后我们还可以通过SNMP协议来监控Admin Server的状态。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120401152912319.png"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120401152913776.png" width="459" height="249" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Admin Server 如果挂了，对于Domain中的Managed Server不会产生影响，如果配置了集群，对于负载均衡和Failover机制也不会产生影响，因为这些都是基于配置文件的（config.xml），而不依赖与Admin Server的实例。Admin Server 不必时刻运行，当我们需要修改配置或者部署应用时，把Admin Server运行起来就行。&lt;/p&gt;  &lt;p&gt;Managed Server ：&lt;/p&gt;  &lt;p&gt;被管理服务器是一个WebLogic Server的实例，他从Admin Server那里获取配置信息。通常在Managed Server上部署自己的服务、组件或应用。基于性能考虑，Managed Server维护着一份只读的域配置文件，当服务启动的时候，会从Admin Server上同步配置文件信息，如果配置文件发生了改变，Admin Server也会将改变推送到Managed Server上。&lt;/p&gt;  &lt;p&gt;Machine ：&lt;/p&gt;  &lt;p&gt;Machine 是指运行WebLogic Server实例的物理机器，通常与部属在其上的Managed Server相关连。Machine用于Node Manager（一个运行在物理服务器上的进程，可以远程重启Admin 和 Managed Server）重启失败的Managed Server，以及为集群的Managed Servers选择合适的Session存放位置（Session避免存放在同一台Machine上）。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/20120401152914186.png"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204011529153086.png" width="484" height="382" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Node Manager：&lt;/p&gt;  &lt;p&gt;运行在物理服务器上的一个进程，用来远程执行Admin Server 和 Managed Server的启动 Start、停止 Stop、挂起 Suspend、重启 Restart 操作。该进程与Domain并不关联但是与Machine相关连，如果你想在Admin Console 中对Server进行控制，则必须安装Node Manager。Node Manager 提供了Java-based和Script-based两个版本，实现的功能一样。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204011529158593.png"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204011529167970.png" width="609" height="400" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cluster ：&lt;/p&gt;  &lt;p&gt;集群是一组WebLogic Server的组合，集群是为了满足服务的高可用（High Avilability）以及可扩展（Load Balancing）需求而出现的。需要注意的是，集群中的WebLogic Server必须版本号一致。Cluster需要注意的几个问题：不能够跨Domain、Cluster中的服务器必须在同一个域中、Domain中可以有多个Cluster。&lt;/p&gt;  &lt;p&gt;J2EE Standard ：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204011529177315.png"&gt;&lt;img style="border: 0px currentColor; display: inline;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201204/201204011529186377.png" width="591" height="417" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;J2EE框架中的其他内容：JDBC、JNDI、JTA、JMS、JAAS、JMX、RMI-IIOP等。&lt;/p&gt;  &lt;p&gt;Java Servlets and JavaServer Pages：&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Servlet 是一个在服务器容器内运行的单独线程，JSP文件最终也会被编译成 Servlet，所以 Servlet 是JAVA编程中的一个非常重要的概念。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;参考资料：&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;1、&lt;a href="http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=3&amp;amp;p_org_id=1001&amp;amp;lang=US"&gt;Oracle University&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;2、&lt;a href="http://www.lupaworld.com/tutorial-view-aid-748.html"&gt;WebLogic Domain 的定义&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;3、&lt;a href="http://wenku.baidu.com/view/f3ef19f6f90f76c661371a3a.html"&gt;百度文库 WebLogic基础知识&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="border-collapse: separate; font-family: Tahoma; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-size: medium; "&gt;4、&lt;a href="http://www.cnblogs.com/google4y/archive/2012/02/01/2334158.html"&gt;WebLogic几个基本概念&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: Tahoma; font-size: medium; line-height: normal; "&gt;5、&lt;/span&gt;&lt;a href="http://blog.retailsolution.cn/archives/2953" style="font-family: Tahoma; font-size: medium; line-height: normal; "&gt;WebLogic基本概念&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2428861.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/03/31/2426815.html</id><title type="text">HTTP2.0之战</title><summary type="text">2009年，Google提议HTTP协议的举动引起了工业界的大讨论。当时的概念叫做 SPDY，时至今日，虽然人们对于Google的动机始终不是很清楚，但是毫无疑问SPDY还没有发现对手。 这周，这种情况也许会发生变化。像微软之前统治世界的方式一样（embrace + extend），他们现在正在着手一项奇怪的战略，推进了一组IETF尚未发布的技术方案，微软称之为下一代HTTP。包括了多路复用多个...</summary><published>2012-03-31T05:09:00Z</published><updated>2012-03-31T05:09:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/03/31/2426815.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/03/31/2426815.html"/><content type="html">&lt;p&gt;2009年，Google提议HTTP协议的举动引起了工业界的大讨论。当时的概念叫做 &lt;a href="http://www.readwriteweb.com/archives/spdy_google_wants_to_speed_up_the_web.php"&gt;SPDY&lt;/a&gt;，时至今日，虽然人们对于Google的动机始终不是很清楚，但是毫无疑问SPDY还没有发现对手。&lt;/p&gt;  &lt;p&gt;这周，这种情况也许会发生变化。像微软之前统治世界的方式一样（embrace + extend），他们现在正在着手一项奇怪的战略，推进了一组IETF尚未发布的技术方案，微软称之为下一代HTTP。包括了多路复用多个组件（像SPDY）和一个全时加密的会话层（类似SPDY，但是不依赖于SSL或TLS）。extend 的则暗示了 WebSocket 的应用，一项为下一代Web应用提供的双工通信标准。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;网络世界是否需要&amp;quot;S+M”?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;微软的介绍性文档中包括下面这一段话：“HTTP at its core is a simple request-response protocol. The [IETF Network] working group has clearly stated that it is a goal to preserve the semantics of HTTP. Thus, we believe that the request-response nature of the HTTP protocol must be preserved. The core HTTP 2.0 protocol should focus on optimizing these HTTP semantics, while improving the transport via a new session layer. Additional capabilities that introduce new communication models like unrequested responses must be treated as an extension to the core protocol, and explored separately from the core protocol.”。 &lt;/p&gt;  &lt;p&gt;大意是，HTTP的核心是一个请求、应答协议。IETF工作组已经明确表明要保留HTTP的语义，因此我们相信HTTP中请求、应答的本质必须保留下来。HTTP2.0的核心应该聚焦在如何优化这些语义以及通过引入新的会话层来改进传输效率。其他的诸如引入非请求式应答这样的新通讯方式等特性只能作为核心的扩展，与核心协议鲜明的区分开来。&lt;/p&gt;  &lt;p&gt;几乎所有的互联网工程师都认为，通过引入包含多路和加密功能的会话层，能够极大地提高Web互动的一致性，降低网络传输的消耗。对于Google的SPDY提议，除了因为使用SSL而造成了的TLS部分大量的修改外，基本上没有太多争议。&lt;/p&gt;  &lt;p&gt;&lt;img alt="spdy_chart_1.png" src="http://rww.readwriteweb.netdna-cdn.com/images/spdy_chart_1.png" /&gt;&lt;/p&gt;  &lt;p&gt;如果WebSocket是浏览器阵营一直以来的工作目标，微软在自己的HTTP2.0提案中加入WebSocket的内容究竟意欲何为呢？（下图是微软提议的示意图）&lt;/p&gt;  &lt;p&gt;&lt;img alt="120328 WebSockets architecture.jpg" src="http://rww.readwriteweb.netdna-cdn.com/enterprise/120328%20WebSockets%20architecture.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;上周的早些时候，微软的一位受人尊敬的互动工程师Jean Paoli在一篇&lt;a href="http://blogs.msdn.com/b/interoperability/archive/2012/03/26/speed-and-mobility-an-approach-for-http-2-0-to-make-mobile-apps-and-the-web-faster.aspx"&gt;博客&lt;/a&gt;中指出“HTTP的Speed+Mobility提案起源自Google的SPDY以及业界已经完成的WebSockets基础之上。SPDY在提醒人们注意Web的性能方面以及提升HTTP速度方面的努力令人尊敬，目前主要的问题在于如何使SPDY满足移动设备和应用的需求。”。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;有些内容被有意留空&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;微软此次提案的其他部分看起来更像是一场辩论，而不是一份提案。例如：“There is no 'one size fits all' deployment of HTTP. For example, at times it may not be optimal to use compression in certain environments. For constrained sensors from the 'Internet of things' scenario, CPU resources may be at a premium. Having a high performance but flexible HTTP 2.0 solution will enable interoperability for a wider variety of scenarios. There also may be aspects of security that are not appropriate for all implementations. Encryption must be optional to allow HTTP 2.0 to meet certain scenarios and regulations.”。&lt;/p&gt;  &lt;p&gt;关于加密会话层一直以来充满了争议，一些人认为他只应当被用在一些重要的事务上。如果对所有的事务进行加密，那么网络上的嗅探者将毫无作为。微软提议关掉这项特性，指出由此可以减少电力和时间的消耗。类似的争论还有很多，比如人们认为HTTP协议不太适合在设备之间进行通讯，他们建议选用C/S的通讯方式，其中就有微软。&lt;/p&gt;  &lt;p&gt;微软真的想促进HTTP协议的进步吗？至少从历史上来看不是这样的。&lt;/p&gt;  &lt;p&gt;HTTP 1.0's deficiencies and omissions are legendary, and its usefulness in the modern realm of Web applications has come only with substantive effort. The need to replace HTTP 1.0 was recognized by cooperating members of the IETF from the time the Web began.&lt;/p&gt;  &lt;p&gt;But the first, best chance at upgrading HTTP with an object-oriented protocol geared toward apps came and went in 1999. HTTP-NG, as it was called at the time, ceased to be discussed not long after some of its creators were hired into Microsoft Research. A technology that would have enabled Web applications a full decade-and-a-half before the form factors for such apps were even fleshed out, stalled for lack of momentum - all in the interest of &amp;quot;open discussion.&amp;quot; There's a danger here that Microsoft's move could cause the latest incarnation of HTTP 2.0 to suffer the same fate.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、&lt;a href="http://www.readwriteweb.com/enterprise/2012/03/microsoft-sees-googles-hand-fo.php?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+readwriteweb+%28ReadWriteWeb%29"&gt;Is Microsoft Challenging Google on HTTP2.0 with WebSocket？&lt;/a&gt;     &lt;br /&gt;2、&lt;a href="http://www.readwriteweb.com/archives/spdy_google_wants_to_speed_up_the_web.php"&gt;SPDY&lt;/a&gt;    &lt;br /&gt;3、&lt;a href="http://baike.baidu.com/view/3623887.htm"&gt;WebSocket 百度百科&lt;/a&gt;    &lt;br /&gt;4、&lt;a href="http://www.cnblogs.com/wei2yi/archive/2011/03/23/1992830.html"&gt;认识HTML5的WebSocket&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2426815.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/03/31/2426815.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html</id><title type="text">SMTP的相关命令</title><summary type="text">SMTP是Simple Mail Transfer Protocol的简写。 邮件是日常工作、生活中不能缺少的一个工具，下面是邮件收发的流程。 邮件的发送，主要是通过SMTP协议来实现的。SMTP协议最早在RFC 821（1982年）中定义，最后更新是在RFC 5321（2008年）中，更新中包含了扩展SMTP（ESMTP）。 在平时的程序开发中经常会有发送邮件的这种需求，所以免不了要对...</summary><published>2012-03-14T01:38:00Z</published><updated>2012-03-14T01:38:00Z</updated><author><name>Cocowool</name><uri>http://www.cnblogs.com/cocowool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html"/><content type="html">&lt;p&gt;SMTP是Simple Mail Transfer Protocol的简写。&lt;/p&gt;  &lt;p&gt;邮件是日常工作、生活中不能缺少的一个工具，下面是邮件收发的流程。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/cocowool/201203/201203140938066513.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Image" border="0" alt="Image" src="http://images.cnblogs.com/cnblogs_com/cocowool/201203/201203140938068432.png" width="244" height="157" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;邮件的发送，主要是通过SMTP协议来实现的。SMTP协议最早在RFC 821（1982年）中定义，最后更新是在RFC 5321（2008年）中，更新中包含了扩展SMTP（ESMTP）。&lt;/p&gt;  &lt;p&gt;在平时的程序开发中经常会有发送邮件的这种需求，所以免不了要对邮件发送服务器的可用性进行测试。下面是整理的命令，用来在命令行下测试SMTP服务器，进行邮件发送等操作，相信对于加深SMTP的理解可以起到促进作用。&lt;/p&gt;  &lt;p&gt;SMTP默认使用25端口，我们可以使用telnet工具进行测试。&lt;/p&gt;  &lt;p&gt;1、连接SMTP服务器，查看是否存活。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;telnet smtp.sina.com 25&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;Connected to mail.sina.com.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;Escape character is '^]'.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;220 smtp ready&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 在telnet下转义符是Ctrol+]，如果想退出，按转义符后输入quit，就可以退回到命令行了。&lt;/p&gt;  &lt;p&gt;2、用户登陆&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 连接到服务器后，使用AUTH LOGIN命令进行用户登陆（SMTP命令不区分大小写）&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;auth login&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;334 VXNlcm5hbWU6&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;c2VydmljZUBoZWVwLmNx&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;334 UGFzc3dvcmQ6&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;xxxxxxxx&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;235 go ahead&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 235返回码表明登陆验证成功，用户可以进行后续的操作了。用户邮箱和密码是经过Base64编码的，这个与服务器的安全特性相关，属于可配置项。&lt;/p&gt;  &lt;p&gt;3、发送邮件。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 用户身份验证通过后，执行下面的命令进行邮件的发送。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;235 #2.0.0 OK Authenticated&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;MAIL FROM: &lt;a href="mailto:yunpan001@sina.com"&gt;yunpan001@sina.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;250 sender &amp;lt;yunpan001@sina.com&amp;gt; ok&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;RCPT to: &lt;a href="mailto:cocowool@gmail.com"&gt;cocowool@gmail.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;250 recipient &amp;lt;cocowool@gmail.com&amp;gt; ok&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;DATA&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;354 go ahead&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;Subject: Hi smtp mail&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;hello mail&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;gt;250 ok:&amp;#160; Message 1763097690 accepted&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SMTP命令列表&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;HELO&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;客户端为标识自己的身份而发送的命令（通常带域名）&lt;/p&gt;  &lt;p&gt;&lt;b&gt;EHLO&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;     &lt;br /&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;使服务器可以表明自己支持扩展简单邮件传输协议 (ESMTP) 命令。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;MAIL FROM&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;标识邮件的发件人；以 MAIL FROM: 的形式使用。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;RCPT TO&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;标识邮件的收件人；以 RCPT TO: 的形式使用。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;TURN&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;允许客户端和服务器交换角色，并在相反的方向发送邮件，而不必建立新的连接。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;ATRN&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;ATRN (Authenticated TURN) 命令可以选择将一个或多个域作为参数。如果该会话已通过身份验证，则ATRN 命令一定会被拒绝。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SIZE&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;提供一种使 SMTP 服务器可以指出所支持的最大邮件大小的机制。兼容的服务器必须提供大小范围，以指出可以接受的最大邮件大小。客户端发送的邮件不应大于服务器所指出的这一大小。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;ETRN&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;SMTP 的扩展。SMTP 服务器可以发送 ETRN 以请求另一台服务器发送它所拥有的任何电子邮件。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;PIPELINING&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;提供发送命令流（而无需在每个命令之后都等待响应）的能力。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;CHUNKING&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;替换 DATA 命令的 ESMTP 命令。该命令使 SMTP 主机不必持续地扫描数据的末尾，它发送带参数的 BDAT 命令，该参数包含邮件的总字节数。接收方服务器计算邮件的字节数，如果邮件大小等于 BDAT 命令发送的值时，则该服务器假定它收到了全部的邮件数据。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;DATA&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;客户端发送的、用于启动邮件内容传输的命令。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;DSN&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;启用传递状态通知的 ESMTP 命令。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;RSET&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;使整个邮件的处理无效，并重置缓冲区。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;VRFY&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;确认在邮件传递过程中可以使用邮箱；例如，vrfy ted 确认在本地服务器上驻留 Ted 的邮箱。该命令在 Exchange 实现中默认关闭。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;HELP&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;返回 SMTP 服务所支持的命令列表。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;QUIT&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;终止会话。&lt;/p&gt;  &lt;p&gt;&lt;b&gt;SMTP命令响应码&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;211&amp;#160; System status, or system help reply   &lt;br /&gt;214&amp;#160; Help message (Information on how to use the receiver or the meaning of a particular non-standard command; this reply is useful only to the human user)    &lt;br /&gt;220&amp;#160; &amp;lt;domain&amp;gt; Service ready    &lt;br /&gt;221&amp;#160; &amp;lt;domain&amp;gt; Service closing transmission channel    &lt;br /&gt;250&amp;#160; Requested mail action okay, completed    &lt;br /&gt;251&amp;#160; User not local; will forward to &amp;lt;forward-path&amp;gt; (See Section 3.4)    &lt;br /&gt;252&amp;#160; Cannot VRFY user, but will accept message and attempt delivery (See Section 3.5.3)    &lt;br /&gt;354&amp;#160; Start mail input; end with &amp;lt;CRLF&amp;gt;.&amp;lt;CRLF&amp;gt;    &lt;br /&gt;421&amp;#160; &amp;lt;domain&amp;gt; Service not available, closing transmission channel (This may be a reply to any command if the service knows it must shut down)    &lt;br /&gt;450&amp;#160; Requested mail action not taken: mailbox unavailable (e.g., mailbox busy or temporarily blocked for policy reasons)    &lt;br /&gt;451&amp;#160; Requested action aborted: local error in processing    &lt;br /&gt;452&amp;#160; Requested action not taken: insufficient system storage    &lt;br /&gt;455&amp;#160; Server unable to accommodate parameters    &lt;br /&gt;500&amp;#160; Syntax error, command unrecognized (This may include errors such as command line too long)    &lt;br /&gt;501&amp;#160; Syntax error in parameters or arguments502&amp;#160; Command not implemented (see Section 4.2.4)&lt;/p&gt;  &lt;p&gt;503&amp;#160; Bad sequence of commands   &lt;br /&gt;504&amp;#160; Command parameter not implemented    &lt;br /&gt;550&amp;#160; Requested action not taken: mailbox unavailable (e.g., mailbox not found, no access, or command rejected for policy reasons) &lt;/p&gt;  &lt;p&gt;551&amp;#160; User not local; please try &amp;lt;forward-path&amp;gt; (See Section 3.4)   &lt;br /&gt;552&amp;#160; Requested mail action aborted: exceeded storage allocation    &lt;br /&gt;553&amp;#160; Requested action not taken: mailbox name not allowed (e.g.,mailbox syntax incorrect)    &lt;br /&gt;554&amp;#160; Transaction failed (Or, in the case of a connection-opening response, &amp;quot;No SMTP service here&amp;quot;)    &lt;br /&gt;555&amp;#160; MAIL FROM/RCPT TO parameters not recognized or not implemente&lt;/p&gt;  &lt;p&gt;参考资料：&lt;/p&gt;  &lt;p&gt;1、&lt;a href="http://blog.donews.com/Shan/page/17"&gt;SMTP指令说明&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2、&lt;a href="http://baike.baidu.com/view/5450.htm"&gt;SMTP百度百科&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3、&lt;a href="http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol"&gt;Wiki Smtp&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4、&lt;a href="http://tools.ietf.org/html/rfc5321"&gt;RFC 5321&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;5、&lt;a href="http://univasity.iteye.com/blog/1173296"&gt;电子邮件收发原理和实现&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;6、&lt;a href="http://compig.net/blog/?p=5"&gt;Telnet下Smtp命令发送邮件&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;7、&lt;a href="http://www.yuki-onna.co.uk/email/smtp.html"&gt;Send Mail Using Telnet&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/cocowool/aggbug/2395390.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/cocowool/archive/2012/03/14/2395390.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
