﻿<?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-yuhaibo736</title><link>http://www.blogjava.net/yuhaibo736/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 12 May 2026 08:57:52 GMT</lastBuildDate><pubDate>Tue, 12 May 2026 08:57:52 GMT</pubDate><ttl>60</ttl><item><title>java将svg图片转换为png格式图片</title><link>http://www.blogjava.net/yuhaibo736/archive/2015/10/19/427819.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Mon, 19 Oct 2015 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2015/10/19/427819.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/427819.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2015/10/19/427819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/427819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/427819.html</trackback:ping><description><![CDATA[<p style="font-family: Arial, 宋体; margin: 0px 0px 9px; line-height: 24px;">有时候在客户端使用svg画图，而在服务器端需要同样的图片，在服务器端重新画一遍是非常费事的。这时候我们就可以利用已有的svg直接通过下面的类转换成png格式。</p>
<p style="font-family: Arial, 宋体; margin: 0px 0px 9px; line-height: 24px;">使用这个方法需要引用batic相关的包，maven pom文件如下：<br /><br /></p><div><font face="Arial, 宋体"><span style="line-height: 24px;">&lt;!-- svg 生成png格式图片 &nbsp;--&gt;<br /></span></font>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-svggen&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt; &nbsp; &nbsp; &nbsp; &nbsp;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-awt-util&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-bridge&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-css&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-dom&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-gvt&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-parser&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-script&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-svg-dom&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-transcoder&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-util&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;batik&lt;/groupId&gt;&lt;artifactId&gt;batik-xml&lt;/artifactId&gt;&lt;version&gt;1.6&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;!-- 此处不能使用2.9.1版本，使用2.9.1生成png会失败 --&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;xerces&lt;/groupId&gt;&lt;artifactId&gt;xercesImpl&lt;/artifactId&gt;&lt;version&gt;2.5.0&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;xml-apis&lt;/groupId&gt;&lt;artifactId&gt;xmlParserAPIs&lt;/artifactId&gt;&lt;version&gt;2.0.2&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;org.axsl.org.w3c.dom.svg&lt;/groupId&gt;&lt;artifactId&gt;svg-dom-java&lt;/artifactId&gt;&lt;version&gt;1.1&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;xml-apis&lt;/groupId&gt; &nbsp; &nbsp;&lt;artifactId&gt;xml-apis&lt;/artifactId&gt;&lt;version&gt;2.0.0&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;dependency&gt;&lt;groupId&gt;org.w3c.css&lt;/groupId&gt; &lt;artifactId&gt;sac&lt;/artifactId&gt; &nbsp; &nbsp;&lt;version&gt;1.3&lt;/version&gt;&lt;/dependency&gt;</div><div>&lt;!-- svg 生成png格式图片结束 &nbsp;--&gt;<br /><div>package com.yhb.web.util;</div><div></div><div>import java.io.ByteArrayInputStream;</div><div>import java.io.File;</div><div>import java.io.FileOutputStream;</div><div>import java.io.IOException;</div><div>import java.io.InputStream;</div><div>import java.io.OutputStream;</div><div>import java.io.UnsupportedEncodingException;</div><div>import java.net.URL;</div><div></div><div>import org.apache.batik.transcoder.TranscoderException;</div><div>import org.apache.batik.transcoder.TranscoderInput;</div><div>import org.apache.batik.transcoder.TranscoderOutput;</div><div>import org.apache.batik.transcoder.image.PNGTranscoder;<br /><div>public final class FileUtil {</div><div><span style="white-space:pre">	</span>/**&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@Description: 将svg字符串转换为png&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@Author:&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@param svgCode svg代码&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@param pngFilePath &nbsp;保存的路径&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@throws IOException io异常&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@throws TranscoderException svg代码异常&nbsp;</div><div>&nbsp; &nbsp; */ &nbsp;</div><div><span style="white-space:pre">	</span>public static void convertToPng(String svgCode,String pngFilePath) throws IOException,TranscoderException{ &nbsp;</div><div><span style="white-space:pre">		</span> &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; File file = new File (pngFilePath); &nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; FileOutputStream outputStream = null; &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; try { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file.createNewFile (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputStream = new FileOutputStream (file); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; convertToPng (svgCode, outputStream); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; } finally { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (outputStream != null) { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputStream.close (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e) { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;</div><div>&nbsp; &nbsp; } &nbsp;</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>/**&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@Description: 将svgCode转换成png文件，直接输出到流中&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@param svgCode svg代码&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@param outputStream 输出流&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@throws TranscoderException 异常&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*@throws IOException io异常&nbsp;</div><div>&nbsp; &nbsp; &nbsp;*/ &nbsp;</div><div>&nbsp; &nbsp; public static void convertToPng(String svgCode,OutputStream outputStream) throws TranscoderException,IOException{ &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; try { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; <span style="white-space:pre">	</span>byte[] bytes = svgCode.getBytes ("UTF-8"); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PNGTranscoder t = new PNGTranscoder (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TranscoderInput input = new TranscoderInput (new ByteArrayInputStream (bytes)); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TranscoderOutput output = new TranscoderOutput (outputStream); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.transcode (input, output); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputStream.flush (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; } finally { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (outputStream != null) { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; outputStream.close (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e) { &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace (); &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; } &nbsp;</div><div>&nbsp; &nbsp; } &nbsp;</div><div>}</div><div></div></div></div><p style="font-family: Arial, 宋体; margin: 0px 0px 9px; line-height: 24px;"></p><img src ="http://www.blogjava.net/yuhaibo736/aggbug/427819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2015-10-19 15:17 <a href="http://www.blogjava.net/yuhaibo736/archive/2015/10/19/427819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 中汉字排序问题 </title><link>http://www.blogjava.net/yuhaibo736/archive/2014/08/29/417496.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Fri, 29 Aug 2014 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2014/08/29/417496.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/417496.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2014/08/29/417496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/417496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/417496.html</trackback:ping><description><![CDATA[<p>方法1: 设定环境变量 <br />set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT （sh） <br />or setenv NLS_SORT SCHINESE_RADICAL_M (csh) <br />or regedit&nbsp; <br />HKLC/SOFTWARE/ORACLE/home0/NLS_SORT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (win)</p><p> </p><p>方法2: 在session中修改 <br />alter session set NLS_SORT='SCHINESE_RADICAL_M'</p><p> </p><p>方法3: 直接使用NLSSORT函数 (推荐)<br />select name,id from t <br />order by NLSSORT(name,'NLS_SORT = SCHINESE_STROKE_M')</p><p>设置NLS_SORT值:</p><p>SCHINESE_RADICAL_M 按照部首（第一顺序）、笔划（第二顺序）排序&nbsp; </p><p>SCHINESE_STROKE_M 按照笔划（第一顺序）、部首（第二顺序）排序&nbsp; </p><p>SCHINESE_PINYIN_M 按照拼音排序</p><img src ="http://www.blogjava.net/yuhaibo736/aggbug/417496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2014-08-29 14:13 <a href="http://www.blogjava.net/yuhaibo736/archive/2014/08/29/417496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mybatis + oscache小结</title><link>http://www.blogjava.net/yuhaibo736/archive/2014/08/11/416823.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Mon, 11 Aug 2014 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2014/08/11/416823.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/416823.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2014/08/11/416823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/416823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/416823.html</trackback:ping><description><![CDATA[
&nbsp;&nbsp;&nbsp; 在IBATIS中，框架内置了对OSCache的支持，如果我们想使用EHCache，则需要通过我们手工实现来完成二级缓存的功能机制。<p>&nbsp;&nbsp;&nbsp; 在mybatis中，开发组织只提供了一些默认的二级缓存实现的机制，并没有直接内置的支持OSCache和EHCache等二级缓存机制，而是作为一个集成jar包来提供二级缓存的实现，在官方网站上我们可以找到mybatis-ehcache-1.0.1-bundle.zip，mybatis-oscache-1.0.1-bundle.zip等ehcache和oscache提供二级缓存的独立工具包. 这里我就拿oscache在mybatis中的使用来举例说明：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.&nbsp;&nbsp; 将mybatis-oscache-1.0.1-bundle.zip中涉及到的jar包放入到classpath路径下&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maven下可以这样配置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span><strong><font color="#993300"><span class="tag">&lt;</span><span class="tag-name">dependencies</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>...&nbsp; </span></p><p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#993300"><span class="tag">&lt;</span><span class="tag-name">dependency</span><span class="tag">&gt;</span></font></strong><span>&nbsp; </span></span></p><p><span>&nbsp;&nbsp;&nbsp;<strong><font color="#993300"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span class="tag-name">groupId</span><span class="tag">&gt;</span></font></strong><span>org.mybatis.caches</span><strong><font color="#993300"><span class="tag">&lt;/</span><span class="tag-name">groupId</span><span class="tag">&gt;</span></font></strong><span>&nbsp; </span></span></p><p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><font color="#993300"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span></font></strong><span>mybatis-oscache</span><strong><font color="#993300"><span class="tag">&lt;/</span><span class="tag-name">artifactId</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;</span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><strong><font color="#993300"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span class="tag-name">version</span><span class="tag">&gt;</span></font></strong><span>1.0.2-SNAPSHOT</span><strong><font color="#993300"><span class="tag">&lt;/</span><span class="tag-name">version</span><span class="tag">&gt;</span></font></strong><span>&nbsp; </span></span></p><p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><font color="#993300"><span class="tag">&lt;/</span><span class="tag-name">dependency</span><span class="tag">&gt;</span></font></strong><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;javax.jms&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;jms&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.1&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;opensymphony&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;oscache&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;2.4&lt;/version&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exclusions&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exclusion&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.sun.jdmk&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;jmxtools&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exclusion&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exclusion&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;com.sun.jmx&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;jmxri&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exclusion&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/exclusions&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/dependency&gt;</p><p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp; </span></p><p class="alt"><span><strong><font color="#993300"><span class="tag">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/</span><span class="tag-name">dependencies</span><span class="tag">&gt;</span></font></strong><span> </span></span></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.&nbsp;&nbsp;&nbsp;<span>在mapper文件中的配置如下：</span></p><p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mapper </span><span>namespace</span><span>=</span><span>"org.test.AuthMapper"</span>&nbsp;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cache</span><span>&nbsp; type</span><span>=</span><span>"org.mybatis.caches.oscache.OSCache"</span><span>/&gt;</span></p><p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/mapper&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意下面两点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a)在</span>&lt;select id="getAuth" parameterType="Map" resultType="Auth"&nbsp; useCache="false"&gt;中使用useCache="false"或useCache="true"来决定是否使用二级缓存。&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Verdana">(b)在增删改中&lt;insert id="insertAuth" parameterType="Auth"&nbsp; flushCache="true"&gt;使用flushCache="true"或flushCache="flase"来决定对这些进行操作后清空该xml文件中所有查询语句的二级缓存。</font>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.&nbsp; 在src目录下创建一个oscache.properties的属性文件，在里面指定缓存的各种属性的设置：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache.memory=true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache.path=c:\\myapp\\cache<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Verdana">cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener</font><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Verdana">cache.persistence.overflow.only=true<br /></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Verdana">cache.capacity=100000</font><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></p> 
<img src ="http://www.blogjava.net/yuhaibo736/aggbug/416823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2014-08-11 18:22 <a href="http://www.blogjava.net/yuhaibo736/archive/2014/08/11/416823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iText生成PDF文件</title><link>http://www.blogjava.net/yuhaibo736/archive/2014/06/24/415071.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Tue, 24 Jun 2014 08:27:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2014/06/24/415071.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/415071.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2014/06/24/415071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/415071.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/415071.html</trackback:ping><description><![CDATA[<p>import java.awt.Color;<br />import java.io.FileOutputStream;</p><p>import com.itextpdf.text.BaseColor;<br />import com.itextpdf.text.Document;<br />import com.itextpdf.text.Element;<br />import com.itextpdf.text.Font;<br />import com.itextpdf.text.PageSize;<br />import com.itextpdf.text.Phrase;<br />import com.itextpdf.text.Rectangle;<br />import com.itextpdf.text.pdf.BaseFont;<br />import com.itextpdf.text.pdf.PdfPCell;<br />import com.itextpdf.text.pdf.PdfPTable;<br />import com.itextpdf.text.pdf.PdfWriter;</p><p>public class CellEvents {</p><p><br />&nbsp;/**<br />&nbsp; * @param args<br />&nbsp; */<br />&nbsp;public static void main(String[] args) {<br />&nbsp;&nbsp;Object[] objArr = new Object[]{100,20,300};<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Document document = new Document(PageSize.A4.rotate(),50,50,50,50);<br />&nbsp;&nbsp;try{<br />&nbsp;&nbsp;&nbsp;//bfSongti = BaseFont.createFont("/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);<br />&nbsp;&nbsp;&nbsp;Font songtiSFivefont = new Font(BaseFont.createFont("/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 9f);//宋体小五号字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置存放位置<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PdfWriter.getInstance(document, new FileOutputStream("D:/test.pdf"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.open();<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PdfPTable table = new PdfPTable(5);<br />&nbsp;&nbsp;&nbsp;table.setSpacingBefore(10f);<br />&nbsp;&nbsp;&nbsp;table.getDefaultCell().setPadding(5);<br />&nbsp;&nbsp;&nbsp;//HowbuyBorderPdfPTableEvent event = new HowbuyBorderPdfPTableEvent();<br />&nbsp;&nbsp;&nbsp;//table.setTableEvent(event);<br />&nbsp;&nbsp;&nbsp;//table.getDefaultCell().setBorder(Rectangle.NO_BORDER);<br />&nbsp;&nbsp;&nbsp;table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;PdfPCell cellTitle = new PdfPCell(new Phrase("总资产\n（万元）",songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorderWidth(2f);<br />&nbsp;&nbsp;&nbsp;cellTitle.setBackgroundColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorderColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;cellTitle.setMinimumHeight(25);<br />&nbsp;&nbsp;&nbsp;table.addCell(cellTitle);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;cellTitle = new PdfPCell(new Phrase(""));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorder(Rectangle.NO_BORDER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cellTitle);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;cellTitle = new PdfPCell(new Phrase("当前收益\n（万元）",songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorderWidth(2f);<br />&nbsp;&nbsp;&nbsp;cellTitle.setBackgroundColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorderColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cellTitle);<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;cellTitle = new PdfPCell(new Phrase("",songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorder(Rectangle.NO_BORDER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cellTitle);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;cellTitle = new PdfPCell(new Phrase("累计收益\n（万元）",songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorderWidth(2f);<br />&nbsp;&nbsp;&nbsp;cellTitle.setBackgroundColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cellTitle.setBorderColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cellTitle);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;float[] widths2 = { 24.5f, 12.25f,24.5f,12.25f,24.5f};</p><p>&nbsp;&nbsp;&nbsp;table.setWidths(widths2);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;table.setHorizontalAlignment(Element.ALIGN_LEFT);//<br />&nbsp;&nbsp;&nbsp;table.setWidthPercentage(70);<br />&nbsp;&nbsp;&nbsp;double zzc = objArr[0]==null ? 0:Double.parseDouble(objArr[0].toString());<br />&nbsp;&nbsp;&nbsp;double dqsy = objArr[1]==null ? 0:Double.parseDouble(objArr[1].toString());<br />&nbsp;&nbsp;&nbsp;double ljsy = objArr[2]==null ? 0:Double.parseDouble(objArr[2].toString());<br />&nbsp;&nbsp;&nbsp;PdfPCell cell1 = new PdfPCell(new Phrase(String.valueOf(zzc),songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cell1.setBorderWidth(2f);<br />&nbsp;&nbsp;&nbsp;cell1.setBorderColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cell1.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;cell1.setMinimumHeight(20);<br />&nbsp;&nbsp;&nbsp;table.addCell(cell1);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;cell1 = new PdfPCell(new Phrase("",songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cell1.setBorder(Rectangle.NO_BORDER);<br />&nbsp;&nbsp;&nbsp;cell1.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cell1);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;cell1 = new PdfPCell(new Phrase(String.valueOf(dqsy),songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cell1.setBorderWidth(2f);<br />&nbsp;&nbsp;&nbsp;cell1.setBorderColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cell1.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cell1);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;cell1 = new PdfPCell(new Phrase("",songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cell1.setBorder(Rectangle.NO_BORDER);<br />&nbsp;&nbsp;&nbsp;cell1.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cell1);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;cell1 = new PdfPCell(new Phrase(String.valueOf(ljsy),songtiSFivefont));<br />&nbsp;&nbsp;&nbsp;cell1.setBorderWidth(2f);<br />&nbsp;&nbsp;&nbsp;cell1.setBorderColor(new BaseColor(new Color(153, 51, 0)));<br />&nbsp;&nbsp;&nbsp;cell1.setHorizontalAlignment(Element.ALIGN_CENTER);<br />&nbsp;&nbsp;&nbsp;cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);<br />&nbsp;&nbsp;&nbsp;table.addCell(cell1);<br />&nbsp;&nbsp;&nbsp;document.add(table);<br />&nbsp;&nbsp;}catch(Exception ex){<br />&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.close();</p><p>&nbsp;}</p><p>}</p><img src ="http://www.blogjava.net/yuhaibo736/aggbug/415071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2014-06-24 16:27 <a href="http://www.blogjava.net/yuhaibo736/archive/2014/06/24/415071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat结合nginx使用小结</title><link>http://www.blogjava.net/yuhaibo736/archive/2014/06/17/414845.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Tue, 17 Jun 2014 07:24:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2014/06/17/414845.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/414845.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2014/06/17/414845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/414845.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/414845.html</trackback:ping><description><![CDATA[相信很多人都听过nginx，这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢？可能很多人未必了解。<p><span style="white-space: pre;">	</span>说到反向代理，可能很多人都听说，但具体什么是反向代理，很多人估计就不清楚了。摘一段百度百科上的描述：</p><div class="dp-highlighter"><div class="bar"><div class="tools">Html代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>反向代理（Reverse Proxy）方式是指以代理服务器来接受internet上的连接请求，然后将请求转发给内部网络上的服务器，并将从服务器上得到的结果返回给internet上请求连接的客户端，此时代理服务器对外就表现为一个服务器。&nbsp; </span></li></ol></div><pre style="display: none;" class="html" title="tomcat结合nginx使用小结" name="code" pre_index="0" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">反向代理（Reverse Proxy）方式是指以代理服务器来接受internet上的连接请求，然后将请求转发给内部网络上的服务器，并将从服务器上得到的结果返回给internet上请求连接的客户端，此时代理服务器对外就表现为一个服务器。</pre><p> <span style="white-space: pre;">	</span>这里讲得很直白。反向代理方式实际上就是一台负责转发的代理服务器，貌似充当了真正服务器的功能，但实际上并不是，代理服务器只是充当了转发的作用，并且从真正的服务器那里取得返回的数据。这样说，其实nginx完成的就是这样的工作。我们让nginx监听一个端口，譬如80端口，但实际上我们转发给在8080端口的tomcat，由它来处理真正的请求，当请求完成后，tomcat返回，但数据此时没直接返回，而是直接给nginx，由nginx进行返回，这里，我们会以为是nginx进行了处理，但实际上进行处理的是tomcat。</p><p><span style="white-space: pre;">	</span>说到上面的方式，也许很多人又会想起来，这样可以把静态文件交由nginx来进行处理。对，很多用到nginx的地方都是作为静态伺服器，这样可以方便缓存那些静态文件，比如CSS，JS，html，htm等文件。</p><p><span style="white-space: pre;">	</span>闲话就不多说了，我们直接来看看nginx怎么使用。</p><p> </p><p><span style="white-space: pre;">	</span>1）要用到的软件当然要下载啦。到nginx官网下一个。<a href="http://nginx.org/en/download.html"><font color="#000000">http://nginx.org/en/download.html</font></a>可以到这里去下。我现在用的版本是1.1.7，但基本上以后的版本都兼容，而且我们用到的并不涉及到太底层的，应该不会有什么变化。</p><p><span style="white-space: pre;">	</span>这里，由于我的是windows，当然下windows版啦。下完后首先要启动吧。进入到nginx文件夹，直接start nginx就OK了。</p><p><span style="white-space: pre;">	</span>比如我下载后放在D:\software\developerTools\server\nginx-1.1.7，直接cmd后cd D:\software\developerTools\server\nginx-1.1.7，有些不习惯命令行的可能会奇怪，它没有进行到那个文件夹。windows并不会在分区间跳转，除非你自己指定了。所以我们要直接d:如下：<span style="white-space: pre;">	</span></p><p><span style="white-space: pre;">	</span><img alt="" src="http://dl.iteye.com/upload/attachment/0068/3425/a263947b-878d-3fc2-994c-b81d697c2bc5.png" /></p><p><span style="white-space: pre;">	</span>然后，我们直接start nginx，这里也许你会看到一个窗口一闪而过，根据我们使用tomcat的经验，如果一闪而过，证明有错误了，是吧？但实际上不是。</p><p><span style="white-space: pre;">	</span><img alt="" src="http://dl.iteye.com/upload/attachment/0068/3427/eeb647a0-1020-3889-9cc7-47f807e68c27.png" /></p><p><span style="white-space: pre;">	</span>此时我们打开任务管理器，可以看到两个nginx.exe在那里好好的。这说明我们已经启动了，至于为什么两个，我们这里不深究。</p><p><span style="white-space: pre;">	</span><img alt="" src="http://dl.iteye.com/upload/attachment/0068/3429/da6d3454-7f2f-3e7b-9877-b4686c61dc37.png" /></p><p><span style="white-space: pre;">	</span>现在，我们已经启动了nginx，这时就可以启动tomcat，想着直接访问http://localhost就可以直接访问tomcat了。</p><p><span style="white-space: pre;">	</span>先不急，我们来看看启动后的nginx是怎样的。直接访问http://localhost可以看到：</p><p><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0068/3431/7482274c-687b-3af7-b766-ae9875cf3ede.png" width="700" height="88" /></p><p>&nbsp;&nbsp;&nbsp; <span style="white-space: pre;">	</span>我们可以看到nginx启动成功，现在访问是直接进到nginx的目录里面了。</p><p><span style="white-space: pre;">	</span>那么这些实际上是在哪里配置的。这就涉及到nginx的一个重要配置文件nginx.conf了。</p><p> </p><p><span style="white-space: pre;">	</span>2）我们可以看到nginx文件夹内有一个conf文件夹，其中有好几个文件，其他先不管，我们打开nginx.conf，可以看到一段：</p><p><img alt="" src="http://dl.iteye.com/upload/attachment/0068/3433/43070d7d-db54-3f75-b456-ea13d33ec11b.png" /></p><p> <span style="white-space: pre;">	</span>这段代码在server里面，相当于一个代理服务器，当然可以配置多个。</p><p><span style="white-space: pre;">	</span>下面我们仔细来分析一下：</p><p><span style="white-space: pre;">	</span>listen：表示当前的代理服务器监听的端口，默认的是监听80端口。注意，如果我们配置了多个server，这个listen要配置不一样，不然就不能确定转到哪里去了。</p><p><span style="white-space: pre;">	</span>server_name：表示监听到之后需要转到哪里去，这时我们直接转到本地，这时是直接到nginx文件夹内。</p><p><span style="white-space: pre;">	</span>location：表示匹配的路径，这时配置了/表示所有请求都被匹配到这里</p><p><span style="white-space: pre;">	</span>root：里面配置了root这时表示当匹配这个请求的路径时，将会在这个文件夹内寻找相应的文件，这里对我们之后的静态文件伺服很有用。</p><p><span style="white-space: pre;">	</span>index：当没有指定主页时，默认会选择这个指定的文件，它可以有多个，并按顺序来加载，如果第一个不存在，则找第二个，依此类推。</p><p><span style="white-space: pre;">	</span>下面的error_page是代表错误的页面，这里我们暂时不用，先不管它。</p><p> </p><p><span style="white-space: pre;">	</span>那我们知道了具体的配置了，怎么让它访问localhost时转到tomcat时。实际上就修改两个地方：</p><div class="dp-highlighter"><div class="bar"><div class="tools">Java代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-j"><li><span>server_name localhost:</span><span class="number">8080</span><span>;&nbsp; </span></li><li><span>&nbsp; </span></li><li><span>location / {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; proxy_pass http:<span class="comment">//localhost:8080</span><span>&nbsp; </span></span></li><li><span>}&nbsp; </span></li></ol></div><pre style="display: none;" class="java" title="tomcat结合nginx使用小结" name="code" pre_index="1" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">server_name localhost:8080;

location / {
    proxy_pass http://localhost:8080
}</pre><p> <span style="white-space: pre;">	</span>我们就修改了上面两个地方，我的tomcat在8080端口，可以根据自己的需要修改。这里有一个新元素proxy_pass，它表示代理路径，相当于转发，而不像之前说的root必须指定一个文件夹。</p><p><span style="white-space: pre;">	</span>此时我们修改了文件，是不是就意思着必须先关了nginx再重新启动了，其实不必，nginx可以重新加载文件的。</p><p><span style="white-space: pre;">	</span>我们直接运行：</p><div class="dp-highlighter"><div class="bar"><div class="tools">Html代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>nginx -s reload&nbsp; </span></li></ol></div><pre style="display: none;" class="html" title="tomcat结合nginx使用小结" name="code" pre_index="2" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">nginx -s reload</pre><p><span style="white-space: pre;">	</span>高兴得太早了，我们发现有一个错误：</p><p><img alt="" src="http://dl.iteye.com/upload/attachment/0068/3435/3828f9f5-e8c9-3f0e-94da-78607bb4d8b8.png" /></p><p> <span style="white-space: pre;">	</span>什么来的，45行发现错误，不希望在那一行找到}，于是我们仔细找，发现我们加入的proxy_pass很奇怪，没有;号结尾，这就是问题了，直接修改，然后再运行一下，发现没错误，OK了。</p><p><span style="white-space: pre;">	</span>如果不想直接加载，而只是想看看自己的配置文件有没有问题，可以直接输入:</p><div class="dp-highlighter"><div class="bar"><div class="tools">Xml代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>nginx -t&nbsp; </span></li></ol></div><pre style="display: none;" class="xml" title="tomcat结合nginx使用小结" name="code" pre_index="3" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">nginx -t</pre><p><span style="white-space: pre;">	</span>这可以检查配置文件中是否有错。 下面我们所有的修改都假设我们修改完成后运行了nginx -s reload进行重新加载配置文件，请注意。</p><p> </p><p><span style="white-space: pre;">	</span>一切没问题了，然后我们再重新打开http://localhost，我们看到下面的页面：</p><p><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0068/3437/97e8e766-00b8-3870-91da-1bb5e7d486df.png" width="700" height="255" /></p> <p><span style="white-space: pre;">	</span>这时，我们发现它并不是刚才的welcome页面了，而是tomcat的管理页面了，不管我们点击什么链接都是没问题的，相当于直接访问http://localhost:8080一样。</p><p> </p><p><span style="white-space: pre;">	</span>3）上面我们直接试了一个小例子，让nginx进行转发，即所谓的反向代理。但实际上我们的需求不会是这样的，我们需要分文件类型来进行过滤，比如jsp直接给tomcat处理，因为nginx并不是servlet容器，没办法处理JSP，而html,js,css这些不需要处理的，直接给nginx进行缓存。</p><p><span style="white-space: pre;">	</span>下面我们来进行一下配置，让JSP页面直接给tomcat，而html,png等一些图片和JS等直接给nginx进行缓存。</p><p><span style="white-space: pre;">	</span>这时最主要用的还是location这个元素，并且涉及到一部分正则，但不难：</p><div class="dp-highlighter"><div class="bar"><div class="tools">Xml代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>location ~ \.jsp$ {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass http://localhost:8080;&nbsp; </span></li><li><span>}&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></li><li><span>location ~ \.(html|js|css|png|gif)$ {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;&nbsp; </span></li><li><span>}&nbsp; </span></li></ol></div><pre style="display: none;" class="xml" title="tomcat结合nginx使用小结" name="code" pre_index="4" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">location ~ \.jsp$ {
        proxy_pass http://localhost:8080;
}
		
location ~ \.(html|js|css|png|gif)$ {
	root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;
}</pre><p> <span style="white-space: pre;">	</span>我们先要去掉之前配的location /，避免全部请求被拦截了。</p><p><span style="white-space: pre;">	</span>然后我们再来看看http://localhost</p><p><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0068/3440/b0be4b3a-9126-3ced-af3c-b8830155b3e7.png" width="700" height="124" /></p><p> <span style="white-space: pre;">	</span>当我们不指定jsp页面的时候，它会出现找不到，因为，此时并没有相应的location匹配，所以就会有404错误，这时就跳到了nginx自定义的error页面去了。</p><p><span style="white-space: pre;">	</span>而当我们用http://localhost/index.jsp去访问时，我们看到了熟悉的页面：</p><p><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0068/3442/aabbabef-eb6b-31ab-8e6d-fc6f3eaebf78.png" width="700" height="238" /></p><p> <span style="white-space: pre;">	</span>而且图片那些都显示正常，因为图片是png的，所以直接在tomcat/webapps/ROOT目录下直接查找，当然，如果我们点击Manager Application HOW-TO这个链接，我们发现：</p><p><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0068/3444/138b48c0-7ba3-3475-8474-0a7a0b6f8988.png" width="700" height="122" /></p><p> <span style="white-space: pre;">	</span>它还是找不到，为什么呢？因为这是个html页面，但它并不在ROOT目录下，而是在docs目录下，但当我们匹配html时，我们却到ROOT目录下去找，所以还是找不到这个页面。</p><p> </p><p><span style="white-space: pre;">	</span>一般情况下，如果我们需要用nginx来进行静态文件伺服，一般都会把所有静态文件，html,htm,js,css等都放在同一个文件夹下，这样就不会有tomcat这样的情况了，因为tomcat下的是属于不同的项目，这个我们就没办法了。</p><p> </p><p><span style="white-space: pre;">	</span>3）有些人会说，这些都只会找一台服务器，但如果我们想在一台服务器挂了的时候，自动去找另外一台，这怎么办？这实际上nginx都考虑到了。</p><p><span style="white-space: pre;">	</span>这时，我们之前用的proxy_pass就有大用途了。</p><p><span style="white-space: pre;">	</span>我们把之前的第一个例子，即全部都代理的修改一下：</p><p><span style="white-space: pre;">	</span>最后修改如下：</p><div class="dp-highlighter"><div class="bar"><div class="tools">Xml代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>upstream local_tomcat {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; server localhost:8080;&nbsp; </span></li><li><span>}&nbsp; </span></li><li><span>&nbsp; </span></li><li><span>server{&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass http://local_tomcat;&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #......其他省略&nbsp; </span></li><li><span>}&nbsp; </span></li></ol></div><pre style="display: none;" class="xml" title="tomcat结合nginx使用小结" name="code" pre_index="5" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">upstream local_tomcat {
	server localhost:8080;
}

server{
        location / {
           proxy_pass http://local_tomcat;
        }
        #......其他省略
}</pre><p> <span style="white-space: pre;">	</span>我们在server外添加了一个upstream，而直接在proxy_pass里面直接用http://+upstream的名称来使用。</p><p><span style="white-space: pre;">	</span>我们还是直接来http://localhost，还是和第一个一样的效果，所有链接都没问题，说明我们配置正确。</p><p><span style="white-space: pre;">	</span>upstream中的server元素必须要注意，不能加http://，但proxy_pass中必须加。</p><p><span style="white-space: pre;">	</span>我们刚才说可以在一个服务器挂了的情况下连到另外一个，那怎么弄呢？</p><p><span style="white-space: pre;">	</span>其实很简单，在upstream中的local_tomcat中配置多一个server。比如我现在弄多一个jetty，端口在9999，所以我们配置如下：</p><div class="dp-highlighter"><div class="bar"><div class="tools">Xml代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>upstream local_tomcat {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; server localhost:8080;&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; server localhost:9999;&nbsp; </span></li><li><span>}&nbsp; </span></li></ol></div><pre style="display: none;" class="xml" title="tomcat结合nginx使用小结" name="code" pre_index="6" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">upstream local_tomcat {
	server localhost:8080;
	server localhost:9999;
}</pre><p> <span style="white-space: pre;">	</span>此时，我们关闭tomcat，而只开jetty。我们来运行http://localhost看看效果：</p><p><img class="magplus" title="点击查看原始大小图片" alt="" src="http://dl.iteye.com/upload/attachment/0068/3450/ee3c0d04-955e-3a6b-997e-e13a38466e17.png" width="700" height="228" /></p><p> <span style="white-space: pre;">	</span>我们看到它请求到了jetty的页面，但由于jetty的机制，这时没有显示jetty主页，这个我们先不管。但我们的在一个服务器挂的情况下自动使用另外一个的功能实现了。</p><p> </p><p><span style="white-space: pre;">	</span>但有时我们就不想它挂的时候访问另外一个，而只是希望一个服务器访问的机会比另外一个大，这个可以在server最后加上一个weight=数字来指定，数字越大，表明请求到的机会越大。</p><div class="dp-highlighter"><div class="bar"><div class="tools">Xml代码 <a title="复制代码" href="http://cxshun.iteye.com/blog/1535188#"><img alt="复制代码" src="http://cxshun.iteye.com/images/icon_copy.gif" /></a> <a title="收藏这段代码" href="javascript:void()"><img class="star" alt="收藏代码" src="http://cxshun.iteye.com/images/icon_star.png" /><img style="display: none;" class="spinner" src="http://cxshun.iteye.com/images/spinner.gif"  alt="" /></a></div></div><ol class="dp-xml"><li><span>upstream local_tomcat {&nbsp; </span></li><li><span>&nbsp;&nbsp;&nbsp; server localhost:8080 <span class="attribute">weight</span><span>=</span><span class="attribute-value">1</span><span>;&nbsp; </span></span></li><li><span>&nbsp;&nbsp;&nbsp; server localhost:9999 <span class="attribute">weight</span><span>=</span><span class="attribute-value">5</span><span>;&nbsp; </span></span></li><li><span>}&nbsp; </span></li></ol></div><pre style="display: none;" class="xml" title="tomcat结合nginx使用小结" name="code" pre_index="7" source_url="http://cxshun.iteye.com/blog/1535188" codeable_type="Blog" codeable_id="1535188">upstream local_tomcat {
	server localhost:8080 weight=1;
	server localhost:9999 weight=5;
}</pre><p> <span style="white-space: pre;">	</span>这时我们给了jetty一个更高的权值，让它更有机会访问到，实际上当我们刷新http://localhost访问的时候发现jetty访问机率大很多，tomcat几乎没机会访问，一般情况下，如果我们必须这样用，不要相关太大，以免一个服务器负载太大。</p><p><span style="white-space: pre;">	</span>当然,server还有一些其他的元素，比如down表示暂时不用到该服务器等等。这些可以参考nginx的wiki。也许写了一大堆，有人会有问题，那nginx怎么关闭呢？这倒是个问题，其实直接运行nginx -s stop就可以关闭了。</p><p> </p><p><span style="white-space: pre;">	</span>基本上nginx的用法是这样，深入的以后我们如果用到再学习。</p><img src ="http://www.blogjava.net/yuhaibo736/aggbug/414845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2014-06-17 15:24 <a href="http://www.blogjava.net/yuhaibo736/archive/2014/06/17/414845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse10反编译插件安装</title><link>http://www.blogjava.net/yuhaibo736/archive/2014/05/26/414123.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Mon, 26 May 2014 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2014/05/26/414123.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/414123.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2014/05/26/414123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/414123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/414123.html</trackback:ping><description><![CDATA[<p><span style="font-family: courier new,courier; font-size: 14px;">第一步：</span></p><p><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;</span><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;</span><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;1）</span><span style="font-family: courier new,courier; font-size: 14px;"><span>下载jad.exe文件：</span><a style="color: rgb(62, 115, 160); text-decoration: none;" href="http://www.varaneckas.com/jad">http://www.varaneckas.com/jad</a></span></p><p><span style="font-family: courier new,courier; font-size: 14px;"> </span><span style="font-family: courier new,courier; font-size: 14px;"> </span><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;&nbsp; 2）</span><span style="font-family: courier new,courier; font-size: 14px;"><span>下载jadeclipse插件：</span><a style="color: rgb(62, 115, 160); text-decoration: none;" href="http://sourceforge.net/projects/jadclipse/files/">http://sourceforge.net/projects/jadclipse/files/</a></span></p><p><span style="font-family: courier new,courier; font-size: 14px;"><br />第二步：<br />&nbsp;&nbsp;&nbsp;&nbsp;1）解压缩jad158g.win.zip成jad.exe，把它copy至jre的bin目录下，比如我的jre安装到了c盘下，copy的路径即为c:\Program Files\Java\jre6\bin（下一步配置等待net.sf.jadclipse_3.3.0.jar配置完成之后再说）<br />&nbsp;&nbsp;&nbsp; 2）找到myeclipse的安装目录，我的myeclipse安装在c盘下，路径如下：c:\ Program Files\yEclipse10。该目录下有dropins文件，我们需要在该文件夹下，新建jad文件夹，jad文件夹下新建 features 和 plugins 两个文件夹，把net.sf.jadclipse_3.3.0.jar 复制到两个文件夹下，然后重启myeclipse。<br /><br />第三步：<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: courier new,courier; font-size: 14px;">1）在eclipse窗口下，点击Window &gt; Preferences &gt; Java &gt; JadClipse &gt; Path to Decompiler。（设置jad的绝对路径，如 </span><span style="font-family: courier new,courier; font-size: 14px;">c:\Program Files\Java\jre6\bin\jad.exe&nbsp; )。Use Eclipse code formatter(overrides Jad formatting instructions)选项打勾，与格式化出来的代码样式一致。</span></p><p><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;</span><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;</span><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;</span><span style="font-family: courier new,courier; font-size: 14px;">&nbsp;</span><span style="font-family: courier new,courier; font-size: 14px;">2）在eclipse窗口下，点击Window &gt; Preferences &gt; Java &gt; JadClipse &gt; Misc，将Convert Unicode strings into ANSI strings选项打勾，避免反编译后可能出现的中文乱码。<br />第四步：<br />&nbsp;&nbsp;&nbsp;&nbsp;安装完成后，myeclipse没有自动将JadClipse Class File Viewer设置成class文件的缺省打开方式，设置方法如<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/yuhaibo736/QQ图片20140526160148.jpg" width="830" height="707" /><br /><br /></p>在Eclipse的Windows&#8212;&gt; Perference&#8212;&gt;General-&gt;Editors-&gt;File <br />Associations中修改&#8220;*.class&#8221;默认关联的编辑器为&#8220;JadClipse Class File Viewer&#8221;。<br /><br />第五步：<br />&nbsp;&nbsp;&nbsp;&nbsp;设置完成，找一个jar包中的*.class文件，myeclipse将自动反编译。<br /></span></span><img src ="http://www.blogjava.net/yuhaibo736/aggbug/414123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2014-05-26 16:05 <a href="http://www.blogjava.net/yuhaibo736/archive/2014/05/26/414123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse或MyEclipse安装反编译插件</title><link>http://www.blogjava.net/yuhaibo736/archive/2014/05/21/413933.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Wed, 21 May 2014 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2014/05/21/413933.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/413933.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2014/05/21/413933.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/413933.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/413933.html</trackback:ping><description><![CDATA[
 
首先在网上下载<strong>Eclipse Class Decompiler插件： </strong><a title="http://download.csdn.net/detail/ibm_hoojo/5250263" href="http://download.csdn.net/detail/ibm_hoojo/5250263"><strong><font color="#1a8bc8">http://download.csdn.net/detail/ibm_hoojo/5250263</font></strong></a> <br />下载后，解压可以看到如下目录，复制所有文件粘贴到你的eclipse或MyEclipse的目录：D:\MyEclipse 6.5\dropins\eclipse或D:\eclipse\dropins\eclipse下，没有对应的文件夹就新建，选择覆盖即可。然后重新启动eclipse。&nbsp; <br /><img src="http://www.blogjava.net/images/blogjava_net/hoojo/WindowsLiveWriter/EclipseJava_C0FF/image_2.png"  alt="" /><br />再次打开.class文件就是反编译后的文件了<br /><br /><img src ="http://www.blogjava.net/yuhaibo736/aggbug/413933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2014-05-21 17:14 <a href="http://www.blogjava.net/yuhaibo736/archive/2014/05/21/413933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>启动oracle</title><link>http://www.blogjava.net/yuhaibo736/archive/2013/09/10/403924.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Tue, 10 Sep 2013 14:38:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2013/09/10/403924.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/403924.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2013/09/10/403924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/403924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/403924.html</trackback:ping><description><![CDATA[
用oracle用户登陆系统，<br />用户名/密码&nbsp; oracle/oracle <br />sqlplus / as sysdba <br />startup <br />启动后然后 exit<br />然后启动监听 lsnrctl start <br /><br />Linux 下启动oracle步骤<br />1.进入到sqlplus启动实例<br />[oracle@redhat ~]$ su - oracle --&#8220;切换到oracle用户&#8221;<br />2.[oracle@redhat ~]$ lsnrctl start --&#8220;打开监听&#8221;<br />3.[oracle@redhat ~]$ sqlplus /nolog --&#8220;进入到sqlplus&#8221;<br />4.SQL&gt; conn /as sysdba --&#8220;连接到sysdba&#8221;<br />5.SQL&gt; startup --&#8220;启动数据库实例&#8221;<br />6.SQL&gt; shutdown immediate --&#8220;关闭数据库实例&#8221;<br />7.[oracle@redhat ~]$ lsnrctl stop --&#8220;关闭监听&#8221;<br />
<img src ="http://www.blogjava.net/yuhaibo736/aggbug/403924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2013-09-10 22:38 <a href="http://www.blogjava.net/yuhaibo736/archive/2013/09/10/403924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux vi操作</title><link>http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403862.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Mon, 09 Sep 2013 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403862.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/403862.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/403862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/403862.html</trackback:ping><description><![CDATA[<br /><br /><p style="margin: 0cm 0cm 10pt;"><strong><span style="font-family: 宋体; font-size: 12pt;">一、vi的基本概念</span></strong></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">基本上vi可分为三种操作状态，分别是命令模式（Command mode）、插入模式（Insert mode）和底线命令模式（Last line mode），</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">各模式的功能区分如下：</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">1</span><span style="font-family: 宋体; font-size: 12pt;">． Comand mode：控制屏幕光标的移动，字符或光标的删除，移动复制某区段及进入Insert mode下，或者到Last line mode。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">2</span><span style="font-family: 宋体; font-size: 12pt;">． Insert mode：唯有在Insert mode下，才可做文字数据输入，按Esc等可回到Comand mode。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">3</span><span style="font-family: 宋体; font-size: 12pt;">． Last line mode：将储存文件或离开编辑器，也可设置编辑环境，如寻找字符串、列出行号等。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">不过可以把vi简化成两个模式，即是将Last line mode也算入Command mode,把vi分成<span>Command<br /></span>和Insert mode。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><strong><span style="font-family: 宋体; font-size: 12pt;">二、vi的基本操作</span></strong></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">1</span><span style="font-family: 宋体; font-size: 12pt;">．进入vi</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">在系统提示符号输入vi及文件名称后，即可进入vi全屏幕编辑画面：</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">$<br />vi testfile</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">注意：进入vi之后是处于&#8220;Command mode&#8221;下，要切换到Insert mode才能输入文字。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">初次用vi的用户都会想先用上下左右键移动光标，结果电脑一直叫，把自己气个半死，所以进入vi后，先不要乱动，转换入Insert后再说。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（1）切换至Insert mode编辑文件在Command mode下按&#8216;i&#8217;、&#8216;a&#8217;或&#8216;o&#8217;三键就可进入Insert mode。这时候就可以开始输入文字了。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">i: </span><span style="font-family: 宋体; font-size: 12pt;">插入，从目前光标所在之处插入所输入的文字。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">a: </span><span style="font-family: 宋体; font-size: 12pt;">增加，目前光标所在的下一个字开始输入文字。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">o: </span><span style="font-family: 宋体; font-size: 12pt;">插入新的一行，从行首开始输入文字。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（2）Insert的切换&#8594;<span>Command<br />mode</span>，按Esc键</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">您目前处于Insert mode，您就只能一直打字。假如您发现打错字了，想用光标键往回移动，将该字删除，就要按ESC键转换回Command mode，再删除文字。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（3）离开vi及存文件</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">在Command mode下，可按冒号&#8220;：&#8221;键入入Last line mode，例如：</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">:w<br />filename (</span><span style="font-family: 宋体; font-size: 12pt;">输入&#8220;w filename&#8221;，将文章存入指定的文件名filename)</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">:wq<br />(</span><span style="font-family: 宋体; font-size: 12pt;">输入&#8220;wq&#8221;，因为进入之时已经指定文件名testfile，所以会写入testfile并离开vi)</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">:q!<br />(</span><span style="font-family: 宋体; font-size: 12pt;">输入&#8220;q!&#8221;，强制离开并放弃编辑的文件)</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">2.Command<br />mode</span><span style="font-family: 宋体; font-size: 12pt;">功能键列表</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">在介绍command mode指令的时后，指令后面加上&#8220;常用&#8221;字眼的功能键，表示比较常用的vi指令，</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">请读者您一定要学会、记住。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（1）I、a、o切换进入Insert mode。[超级常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（2）移动光标</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">vi</span><span style="font-family: 宋体; font-size: 12pt;">可以直接用键盘上的光标键来上下左右移动，但正规的vi是用小写英文字母</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">h</span><span style="font-family: 宋体; font-size: 12pt;">、j、k、l，分别控制光标左、下、上、右移一格。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按Ctrl+B：屏幕往后移动一页。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按Ctrl+F：屏幕往前移动一页。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按Ctrl+U：屏幕往后移动半页。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按Ctrl+D：屏幕往前移动半页。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 0 （数字零）：移动文章的开头。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 G：移动到文章的最后。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 w：光标跳到下个word的开头。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 e：光标跳到下个word的字尾。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 b：光标回到上个word的开头。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 $：移到光标所在行的行尾。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 ^：移到该行第一个非空白的字符。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 0：移到该行的开头位置。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">按 #：移到该行的第#个位置，例：51、121。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（3）删除文字</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">x</span><span style="font-family: 宋体; font-size: 12pt;">：每按一次删除光标所在位置的后面一个字符。[超常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#x</span><span style="font-family: 宋体; font-size: 12pt;">：例如，6x 表删除光标所在位置的后面6个字符。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">X</span><span style="font-family: 宋体; font-size: 12pt;">：大字的X，每按一次删除光标所在位置的前面一个字符。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#X</span><span style="font-family: 宋体; font-size: 12pt;">：例如，20X 表删除光标所在位置的前面20个字符。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">dd</span><span style="font-family: 宋体; font-size: 12pt;">：删除光标所在行。[超常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#dd</span><span style="font-family: 宋体; font-size: 12pt;">：例如，6dd表删除从光标所在的该行往下数6行之文字。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（4）复制</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">yw</span><span style="font-family: 宋体; font-size: 12pt;">：将光标所在处到字尾的字符复制到缓冲区中。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（想在和#x、#X的功能相反）</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">p</span><span style="font-family: 宋体; font-size: 12pt;">：将缓冲区内的字符粘贴到光标所在位置（指令&#8216;yw&#8217;与&#8216;p必须搭配使用）。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">yy</span><span style="font-family: 宋体; font-size: 12pt;">：复制光标所在行。[超常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">p</span><span style="font-family: 宋体; font-size: 12pt;">：复制单行到您想粘贴之处。（指令&#8216;yy&#8217;与&#8216;p&#8217;必须搭配使用）</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#yy</span><span style="font-family: 宋体; font-size: 12pt;">：如：6yy表示拷贝从光标所在的该行往下数6行之文字。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">p:</span><span style="font-family: 宋体; font-size: 12pt;">复制多行到您想粘贴之处。（指令&#8216;#yy&#8217;与&#8216;p&#8217;必须搭配使用）</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">&#8220;ayy：将复制行放入buffer a, vi提供buffer功能，可将常用的数据存在buffer</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">&#8220;ap：将放在buffer a的数据粘贴。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">&#8220;b3yy：将三行数据存入buffer b。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">&#8220;b3p：将存在buffer b的资料粘贴</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（5）取代</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">r: </span><span style="font-family: 宋体; font-size: 12pt;">取代光标所在处的字符：[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">R</span><span style="font-family: 宋体; font-size: 12pt;">：取代字符直到按Esc为止。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（6）复原（undo）上一个指令</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">u</span><span style="font-family: 宋体; font-size: 12pt;">：假如您误操作一个指令，可以马上按u，回复到上一个操作。[超常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">.:<br />.</span><span style="font-family: 宋体; font-size: 12pt;">可以重复执行上一次的指令。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（7）更改</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">cw</span><span style="font-family: 宋体; font-size: 12pt;">：更改光标所在处的字到字尾$处。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">c#w</span><span style="font-family: 宋体; font-size: 12pt;">：例如，c3w代表更改3个字。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">（8）跳至指定行</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">Ctrl+G</span><span style="font-family: 宋体; font-size: 12pt;">：列出光标所在行的行号。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#G</span><span style="font-family: 宋体; font-size: 12pt;">：例如，15G，表示移动光标至文章的第15行行首。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">3.Last<br />line mode</span><span style="font-family: 宋体; font-size: 12pt;">下指令简介</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">读者您要使用Last line mode之前，请记得先按Esc键确定您已经处于Command mode下后，再按冒号&#8220;：&#8221;或&#8220;/&#8221;或&#8220;？&#8221;</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">三键的其中一键进入Last line mode。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">(1)</span><span style="font-family: 宋体; font-size: 12pt;">．列出行号</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">set<br />nu: </span><span style="font-family: 宋体; font-size: 12pt;">输入&#8220;<span>set<br />nu</span>或者set number&#8221;后，会在文章的每一行前面列出行号。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">set<br />nonu</span><span style="font-family: 宋体; font-size: 12pt;">：输入&#8220;<span>set<br />nonu</span>或者set nonumber&#8221;，取消行号</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">(2)</span><span style="font-family: 宋体; font-size: 12pt;">．跳到文章的某一行</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#</span><span style="font-family: 宋体; font-size: 12pt;">：井号代表一个数字，在<span>Last line<br />mode</span>提示符号&#8220;：&#8221;前输入数字，再按Enter就会跳到该行了，</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">如：15[Enter]就会跳到文章的第15行。[常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">(3)</span><span style="font-family: 宋体; font-size: 12pt;">．寻找字符串</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">/</span><span style="font-family: 宋体; font-size: 12pt;">关键字：先按/，再输入您想寻找的字，如果第一次找的关键字不是您相尽可能的，可以一直按n会往下寻找到您要的关键字为止。自上而下进行搜索！</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">？关键字：先按？，再输入您想寻找的字，如果第一次找的关键字不是您想要的，可以按n会往前寻找到您要的关键字为止。自下而上搜索！</span></p><br /><br /><p style="background: white;">如：3/x 表示查找当前点第三次出现 x 的地方，就像是 /x 后跟 2n。类似地，2/^e 将从当前位置开始的第二行查找以 e 开始的内容。</p><br /><br /><p style="background: white;">注意，到达文件底部之后，搜索将回到顶部。</p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">(4)</span><span style="font-family: 宋体; font-size: 12pt;">．取代字符串</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">1</span><span style="font-family: 宋体; font-size: 12pt;">，$s/string/replae/g：在last line mode输入&#8220;1，$s/string/replace/g&#8221;会将全文的string字符串取代为replace字符串，</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">其中1,$s就是指搜寻区间为文章从头至尾的意思，g则是表示全部取代不必确认。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">%s/string/replace/c</span><span style="font-family: 宋体; font-size: 12pt;">：同样会将全文的string字符串取代为replace字符串，和上面指令不同的地方是，%s和1,$s是相同的功能，</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">c</span><span style="font-family: 宋体; font-size: 12pt;">则是表示要替代之前必须再次确认是否取代。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">1,20s/string/replace/g</span><span style="font-family: 宋体; font-size: 12pt;">：将1至20行间的string替代为relpace字符串。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">(5)</span><span style="font-family: 宋体; font-size: 12pt;">．存文件</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">w</span><span style="font-family: 宋体; font-size: 12pt;">：在last line mode提示符号&#8220;：&#8221;前按w即可将文件存起来。[超常用]</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">#</span><span style="font-family: 宋体; font-size: 12pt;">，# w filename：如果您想摘取文章的某一段，存成另一个文件，可用这个指令#代表行号，例如30,50 w nice，</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">将您正在编辑文章的第30~50行存成nice这个文件。</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">或者是30,50 w &gt;&gt; nice ,表示把内容附加到nice文件，不覆盖</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">(6)</span><span style="font-family: 宋体; font-size: 12pt;">．离开</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">q</span><span style="font-family: 宋体; font-size: 12pt;">：按q就离开，有时如果无法离开vi，可搭配&#8220;！：强置离开vi，如&#8220;q！&#8221;</span></p><br /><br /><p style="margin: 0cm 0cm 10pt;"><span style="font-family: 宋体; font-size: 12pt;">qw</span><span style="font-family: 宋体; font-size: 12pt;">：一般建议离开时，搭配w一起使用，如此离开时还可存文件。[常用]</span></p><br /><br /><img src ="http://www.blogjava.net/yuhaibo736/aggbug/403862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2013-09-09 18:31 <a href="http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux命令大全</title><link>http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403861.html</link><dc:creator>yuhaibo736</dc:creator><author>yuhaibo736</author><pubDate>Mon, 09 Sep 2013 10:30:00 GMT</pubDate><guid>http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403861.html</guid><wfw:comment>http://www.blogjava.net/yuhaibo736/comments/403861.html</wfw:comment><comments>http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuhaibo736/comments/commentRss/403861.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuhaibo736/services/trackbacks/403861.html</trackback:ping><description><![CDATA[<p>系统信息 <br />arch 显示机器的处理器架构(1) <br />uname -m 显示机器的处理器架构(2) <br />uname -r 显示正在使用的内核版本 <br />dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) <br />hdparm -i /dev/hda 罗列一个磁盘的架构特性 <br />hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 <br />cat /proc/cpuinfo 显示CPU info的信息 <br />cat /proc/interrupts 显示中断 <br />cat /proc/meminfo 校验内存使用 <br />cat /proc/swaps 显示哪些swap被使用 <br />cat /proc/version 显示内核的版本 <br />cat /proc/net/dev 显示网络适配器及统计 <br />cat /proc/mounts 显示已加载的文件系统 <br />lspci -tv 罗列 PCI 设备 <br />lsusb -tv 显示 USB 设备 <br />date 显示系统日期 <br />cal 2007 显示2007年的日历表 <br />date 041217002007.00 设置日期和时间 - 月日时分年.秒 <br />clock -w 将时间修改保存到 BIOS </p><p>&nbsp;</p><p>关机 (系统的关机、重启以及登出 ) <br />shutdown -h now 关闭系统(1) <br />init 0 关闭系统(2) <br />telinit 0 关闭系统(3) <br />shutdown -h hours:minutes &amp; 按预定时间关闭系统 <br />shutdown -c 取消按预定时间关闭系统 <br />shutdown -r now 重启(1) <br />reboot 重启(2) <br />logout 注销 </p><p>&nbsp;</p><p>文件和目录 <br />cd /home 进入 '/ home' 目录' <br />cd .. 返回上一级目录 <br />cd ../.. 返回上两级目录 <br />cd 进入个人的主目录 <br />cd ~user1 进入个人的主目录 <br />cd - 返回上次所在的目录 <br />pwd 显示工作路径 <br />ls 查看目录中的文件 <br />ls -F 查看目录中的文件 <br />ls -l 显示文件和目录的详细资料 <br />ls -a 显示隐藏文件 <br />ls *[0-9]* 显示包含数字的文件名和目录名 <br />tree 显示文件和目录由根目录开始的树形结构(1) <br />lstree 显示文件和目录由根目录开始的树形结构(2) <br />mkdir dir1 创建一个叫做 'dir1' 的目录' <br />mkdir dir1 dir2 同时创建两个目录 <br />mkdir -p /tmp/dir1/dir2 创建一个目录树 <br />rm -f file1 删除一个叫做 'file1' 的文件' <br />rmdir dir1 删除一个叫做 'dir1' 的目录' <br />rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 <br />rm -rf dir1 dir2 同时删除两个目录及它们的内容 <br />mv dir1 new_dir 重命名/移动 一个目录 <br />cp file1 file2 复制一个文件 <br />cp dir/* . 复制一个目录下的所有文件到当前工作目录 <br />cp -a /tmp/dir1 . 复制一个目录到当前工作目录 <br />cp -a dir1 dir2 复制一个目录 <br />ln -s file1 lnk1 创建一个指向文件或目录的软链接 <br />ln file1 lnk1 创建一个指向文件或目录的物理链接 <br />touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) <br />file file1 outputs the mime type of the file as text <br />iconv -l 列出已知的编码 <br />iconv -f fromEncoding -t toEncoding inputFile &gt; outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding. <br />find . -maxdepth 1 -name *.jpg -print -exec convert "{}" -resize 80x60 "thumbs/{}" \; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) </p><p>&nbsp;</p><p>文件搜索 <br />find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录 <br />find / -user user1 搜索属于用户 'user1' 的文件和目录 <br />find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件 <br />find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件 <br />find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件 <br />find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 结尾的文件并定义其权限 <br />find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件，忽略光驱、捷盘等可移动设备 <br />locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令 <br />whereis halt 显示一个二进制文件、源码或man的位置 <br />which halt 显示一个二进制文件或可执行文件的完整路径 </p><p>&nbsp;</p><p>挂载一个文件系统 <br />mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在 <br />umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出 <br />fuser -km /mnt/hda2 当设备繁忙时强制卸载 <br />umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用 <br />mount /dev/fd0 /mnt/floppy 挂载一个软盘 <br />mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom <br />mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom <br />mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom <br />mount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件 <br />mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统 <br />mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备 <br />mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享 </p><p>&nbsp;</p><p>磁盘空间 <br />df -h 显示已经挂载的分区列表 <br />ls -lSr |more 以尺寸大小排列文件和目录 <br />du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间' <br />du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小 <br />rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统) <br />dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统) </p><p>返回顶部索引 ^</p><p>用户和群组 <br />groupadd group_name 创建一个新用户组 <br />groupdel group_name 删除一个用户组 <br />groupmod -n new_group_name old_group_name 重命名一个用户组 <br />useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 "admin" 用户组的用户 <br />useradd user1 创建一个新用户 <br />userdel -r user1 删除一个用户 ( '-r' 排除主目录) <br />usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性 <br />passwd 修改口令 <br />passwd user1 修改一个用户的口令 (只允许root执行) <br />chage -E 2005-12-31 user1 设置用户口令的失效期限 <br />pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户 <br />grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组 <br />newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组 </p><p>返回顶部索引 ^</p><p>文件的权限 - 使用 "+" 设置权限，使用 "-" 用于取消 <br />ls -lh 显示权限 <br />ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示 <br />chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读（r ）、写(w)和执行(x)的权限 <br />chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限 <br />chown user1 file1 改变一个文件的所有人属性 <br />chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性 <br />chgrp group1 file1 改变文件的群组 <br />chown user1:group1 file1 改变一个文件的所有人和群组属性 <br />find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件 <br />chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限 <br />chmod u-s /bin/file1 禁用一个二进制文件的 SUID位 <br />chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ，不过这是针对目录的 <br />chmod g-s /home/public 禁用一个目录的 SGID 位 <br />chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件 <br />chmod o-t /home/public 禁用一个目录的 STIKY 位 </p><p>返回顶部索引 ^</p><p>文件的特殊属性 - 使用 "+" 设置权限，使用 "-" 用于取消 <br />chattr +a file1 只允许以追加方式读写文件 <br />chattr +c file1 允许这个文件能被内核自动压缩/解压 <br />chattr +d file1 在进行文件系统备份时，dump程序将忽略这个文件 <br />chattr +i file1 设置成不可变的文件，不能被删除、修改、重命名或者链接 <br />chattr +s file1 允许一个文件被安全地删除 <br />chattr +S file1 一旦应用程序对这个文件执行了写操作，使系统立刻把修改的结果写到磁盘 <br />chattr +u file1 若文件被删除，系统会允许你在以后恢复这个被删除的文件 <br />lsattr 显示特殊的属性 </p><p>返回顶部索引 ^</p><p>打包和压缩文件 <br />bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件 <br />bzip2 file1 压缩一个叫做 'file1' 的文件 <br />gunzip file1.gz 解压一个叫做 'file1.gz'的文件 <br />gzip file1 压缩一个叫做 'file1'的文件 <br />gzip -9 file1 最大程度压缩 <br />rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包 <br />rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1' <br />rar x file1.rar 解压rar包 <br />unrar x file1.rar 解压rar包 <br />tar -cvf archive.tar file1 创建一个非压缩的 tarball <br />tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件 <br />tar -tf archive.tar 显示一个包中的内容 <br />tar -xvf archive.tar 释放一个包 <br />tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下 <br />tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包 <br />tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包 <br />tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包 <br />tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包 <br />zip file1.zip file1 创建一个zip格式的压缩包 <br />zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包 <br />unzip file1.zip 解压一个zip格式压缩包 </p><p>返回顶部索引 ^</p><p>RPM 包 - （Fedora, Redhat及类似系统） <br />rpm -ivh package.rpm 安装一个rpm包 <br />rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告 <br />rpm -U package.rpm 更新一个rpm包但不改变其配置文件 <br />rpm -F package.rpm 更新一个确定已经安装的rpm包 <br />rpm -e package_name.rpm 删除一个rpm包 <br />rpm -qa 显示系统中所有已经安装的rpm包 <br />rpm -qa | grep httpd 显示所有名称中包含 "httpd" 字样的rpm包 <br />rpm -qi package_name 获取一个已安装包的特殊信息 <br />rpm -qg "System Environment/Daemons" 显示一个组件的rpm包 <br />rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 <br />rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表 <br />rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表 <br />rpm -q package_name --whatprovides 显示一个rpm包所占的体积 <br />rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本l <br />rpm -q package_name --changelog 显示一个rpm包的修改历史 <br />rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供 <br />rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表 <br />rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书 <br />rpm --checksig package.rpm 确认一个rpm包的完整性 <br />rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性 <br />rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间 <br />rpm -Va 检查系统中所有已安装的rpm包- 小心使用 <br />rpm -Vp package.rpm 确认一个rpm包还未安装 <br />rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件 <br />rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包 <br />rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包 </p><p>返回顶部索引 ^</p><p>YUM 软件包升级器 - （Fedora, RedHat及类似系统） <br />yum install package_name 下载并安装一个rpm包 <br />yum localinstall package_name.rpm 将安装一个rpm包，使用你自己的软件仓库为你解决所有依赖关系 <br />yum update package_name.rpm 更新当前系统中所有安装的rpm包 <br />yum update package_name 更新一个rpm包 <br />yum remove package_name 删除一个rpm包 <br />yum list 列出当前系统中安装的所有包 <br />yum search package_name 在rpm仓库中搜寻软件包 <br />yum clean packages 清理rpm缓存删除下载的包 <br />yum clean headers 删除所有头文件 <br />yum clean all 删除所有缓存的包和头文件 </p><p>返回顶部索引 ^</p><p>DEB 包 (Debian, Ubuntu 以及类似系统) <br />dpkg -i package.deb 安装/更新一个 deb 包 <br />dpkg -r package_name 从系统删除一个 deb 包 <br />dpkg -l 显示系统中所有已经安装的 deb 包 <br />dpkg -l | grep httpd 显示所有名称中包含 "httpd" 字样的deb包 <br />dpkg -s package_name 获得已经安装在系统中一个特殊包的信息 <br />dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表 <br />dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表 <br />dpkg -S /bin/ping 确认所给的文件由哪个deb包提供 </p><p>返回顶部索引 ^</p><p>APT 软件工具 (Debian, Ubuntu 以及类似系统) <br />apt-get install package_name 安装/更新一个 deb 包 <br />apt-cdrom install package_name 从光盘安装/更新一个 deb 包 <br />apt-get update 升级列表中的软件包 <br />apt-get upgrade 升级所有已安装的软件 <br />apt-get remove package_name 从系统删除一个deb包 <br />apt-get check 确认依赖的软件仓库正确 <br />apt-get clean 从下载的软件包中清理缓存 <br />apt-cache search searched-package 返回包含所要搜索字符串的软件包名称 </p><p>返回顶部索引 ^</p><p>查看文件内容 <br />cat file1 从第一个字节开始正向查看文件的内容 <br />tac file1 从最后一行开始反向查看一个文件的内容 <br />more file1 查看一个长文件的内容 <br />less file1 类似于 'more' 命令，但是它允许在文件中和正向操作一样的反向操作 <br />head -2 file1 查看一个文件的前两行 <br />tail -2 file1 查看一个文件的最后两行 <br />tail -f /var/log/messages 实时查看被添加到一个文件中的内容 </p><p>返回顶部索引 ^</p><p>文本处理 <br />cat file1 file2 ... | command &lt;&gt; file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT <br />cat file1 | command( sed, grep, awk, grep, etc...) &gt; result.txt 合并一个文件的详细说明文本，并将简介写入一个新文件中 <br />cat file1 | command( sed, grep, awk, grep, etc...) &gt;&gt; result.txt 合并一个文件的详细说明文本，并将简介写入一个已有的文件中 <br />grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词"Aug" <br />grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"开始的词汇 <br />grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行 <br />grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串"Aug" <br />sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 "string1" 替换成 "string2" <br />sed '/^$/d' example.txt 从example.txt文件中删除所有空白行 <br />sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行 <br />echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容 <br />sed -e '1d' result.txt 从文件example.txt 中排除第一行 <br />sed -n '/stringa1/p' 查看只包含词汇 "string1"的行 <br />sed -e 's/ *$//' example.txt 删除每一行最后的空白字符 <br />sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 "string1" 并保留剩余全部 <br />sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容 <br />sed -n '5p;5q' example.txt 查看第5行 <br />sed -e 's/00*/0/g' example.txt 用单个零替换多个零 <br />cat -n file1 标示文件的行数 <br />cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行 <br />echo a b c | awk '{print $1}' 查看一行第一栏 <br />echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏 <br />paste file1 file2 合并两个文件或两栏的内容 <br />paste -d '+' file1 file2 合并两个文件或两栏的内容，中间用"+"区分 <br />sort file1 file2 排序两个文件的内容 <br />sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) <br />sort file1 file2 | uniq -u 删除交集，留下其他的行 <br />sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件) <br />comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容 <br />comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容 <br />comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分 </p><p>返回顶部索引 ^</p><p><br />字符设置和文件格式转换 <br />dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIX <br />unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS <br />recode ..HTML &lt; page.txt &gt; page.html 将一个文本文件转换成html <br />recode -l | more 显示所有允许的转换格式 </p><p>返回顶部索引 ^</p><p>文件系统分析 <br />badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块 <br />fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性 <br />fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 <br />e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性 <br />e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 <br />fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性 <br />fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性 <br />fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 <br />dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 </p><p>返回顶部索引 ^</p><p>初始化一个文件系统 <br />mkfs /dev/hda1 在hda1分区创建一个文件系统 <br />mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统 <br />mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统 <br />mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统 <br />fdformat -n /dev/fd0 格式化一个软盘 <br />mkswap /dev/hda3 创建一个swap文件系统 </p><p>返回顶部索引 ^</p><p>SWAP文件系统 <br />mkswap /dev/hda3 创建一个swap文件系统 <br />swapon /dev/hda3 启用一个新的swap文件系统 <br />swapon /dev/hda2 /dev/hdb3 启用两个swap分区 </p><p>返回顶部索引 ^</p><p>备份 <br />dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份 <br />dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份 <br />restore -if /tmp/home0.bak 还原一个交互式备份 <br />rsync -rogpav --delete /home /tmp 同步两边的目录 <br />rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsync <br />rsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录 <br />rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录 <br />dd bs=1M if=/dev/hda | gzip | ssh <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#64;&#105;&#112;&#95;&#97;&#100;&#100;&#114;">user@ip_addr</a> 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作 <br />dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件 <br />tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作 <br />( cd /tmp/local/ &amp;&amp; tar c . ) | ssh -C <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#64;&#105;&#112;&#95;&#97;&#100;&#100;&#114;">user@ip_addr</a> 'cd /home/share/ &amp;&amp; tar x -p' 通过ssh在远程目录中复制一个目录内容 <br />( tar c /home ) | ssh -C <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#117;&#115;&#101;&#114;&#64;&#105;&#112;&#95;&#97;&#100;&#100;&#114;">user@ip_addr</a> 'cd /home/backup-home &amp;&amp; tar x -p' 通过ssh在远程目录中复制一个本地目录 <br />tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方，保留原有权限及链接 <br />find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录 <br />find /var/log -name '*.log' | tar cv --files-from=- | bzip2 &gt; log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包 <br />dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作 <br />dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容 </p><p>返回顶部索引 ^</p><p>光盘 <br />cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容 <br />mkisofs /dev/cdrom &gt; cd.iso 在磁盘上创建一个光盘的iso镜像文件 <br />mkisofs /dev/cdrom | gzip &gt; cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件 <br />mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件 <br />cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件 <br />gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件 <br />mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件 <br />cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中 <br />cd-paranoia -- "-3" 从一个CD光盘转录音轨到 wav 文件中（参数-3） <br />cdrecord --scanbus 扫描总线以识别scsi通道 <br />dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码，例如一张 CD </p><p>返回顶部索引 ^</p><p>网络 - （以太网和WIFI无线） <br />ifconfig eth0 显示一个以太网卡的配置 <br />ifup eth0 启用一个 'eth0' 网络设备 <br />ifdown eth0 禁用一个 'eth0' 网络设备 <br />ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址 <br />ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing) <br />dhclient eth0 以dhcp模式启用 'eth0' <br />route -n show routing table <br />route add -net 0/0 gw IP_Gateway configura default gateway <br />route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16' <br />route del 0/0 gw IP_gateway remove static route <br />echo "1" &gt; /proc/sys/net/ipv4/ip_forward activate ip routing <br />hostname show hostname of system <br />host <a href="http://www.example.com">www.example.com</a> lookup hostname to resolve name to ip address and viceversa(1) <br />nslookup <a href="http://www.example.com">www.example.com</a> lookup hostname to resolve name to ip address and viceversa(2) <br />ip link show show link status of all interfaces <br />mii-tool eth0 show link status of 'eth0' <br />ethtool eth0 show statistics of network card 'eth0' <br />netstat -tup show all active network connections and their PID <br />netstat -tupl show all network services listening on the system and their PID <br />tcpdump tcp port 80 show all HTTP traffic <br />iwlist scan show wireless networks <br />iwconfig eth1 show configuration of a wireless network card <br />hostname show hostname <br />host <a href="http://www.example.com">www.example.com</a> lookup hostname to resolve name to ip address and viceversa <br />nslookup <a href="http://www.example.com">www.example.com</a> lookup hostname to resolve name to ip address and viceversa <br />whois <a href="http://www.example.com">www.example.com</a> lookup on Whois database </p><p>GO TOP INDEX ^ <br />Microsoft Windows networks (SAMBA) <br />nbtscan ip_addr netbios name resolution <br />nmblookup -A ip_addr netbios name resolution <br />smbclient -L ip_addr/hostname show remote shares of a windows host <br />smbget -Rr smb://ip_addr/share like wget can download files from a host windows via smb <br />mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share mount a windows network share</p><p>&nbsp;</p><img src ="http://www.blogjava.net/yuhaibo736/aggbug/403861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuhaibo736/" target="_blank">yuhaibo736</a> 2013-09-09 18:30 <a href="http://www.blogjava.net/yuhaibo736/archive/2013/09/09/403861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>