<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 41, comments - 15, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2012年12月11日

    有時(shí)候在客戶端使用svg畫圖,而在服務(wù)器端需要同樣的圖片,在服務(wù)器端重新畫一遍是非常費(fèi)事的。這時(shí)候我們就可以利用已有的svg直接通過下面的類轉(zhuǎn)換成png格式。

    使用這個(gè)方法需要引用batic相關(guān)的包,maven pom文件如下:

    <!-- svg 生成png格式圖片  -->
    <dependency><groupId>batik</groupId><artifactId>batik-svggen</artifactId><version>1.6</version></dependency>        
    <dependency><groupId>batik</groupId><artifactId>batik-awt-util</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-bridge</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-css</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-dom</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-gvt</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-parser</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-script</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-svg-dom</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-transcoder</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-util</artifactId><version>1.6</version></dependency>
    <dependency><groupId>batik</groupId><artifactId>batik-xml</artifactId><version>1.6</version></dependency>
    <!-- 此處不能使用2.9.1版本,使用2.9.1生成png會(huì)失敗 -->
    <dependency><groupId>xerces</groupId><artifactId>xercesImpl</artifactId><version>2.5.0</version></dependency>
    <dependency><groupId>xml-apis</groupId><artifactId>xmlParserAPIs</artifactId><version>2.0.2</version></dependency>
    <dependency><groupId>org.axsl.org.w3c.dom.svg</groupId><artifactId>svg-dom-java</artifactId><version>1.1</version></dependency>
    <dependency><groupId>xml-apis</groupId>    <artifactId>xml-apis</artifactId><version>2.0.0</version></dependency>
    <dependency><groupId>org.w3c.css</groupId> <artifactId>sac</artifactId>    <version>1.3</version></dependency>
    <!-- svg 生成png格式圖片結(jié)束  -->
    package com.yhb.web.util;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URL;
    import org.apache.batik.transcoder.TranscoderException;
    import org.apache.batik.transcoder.TranscoderInput;
    import org.apache.batik.transcoder.TranscoderOutput;
    import org.apache.batik.transcoder.image.PNGTranscoder;
    public final class FileUtil {
    /** 
         *@Description: 將svg字符串轉(zhuǎn)換為png 
         *@Author: 
         *@param svgCode svg代碼 
         *@param pngFilePath  保存的路徑 
         *@throws IOException io異常 
         *@throws TranscoderException svg代碼異常 
        */  
    public static void convertToPng(String svgCode,String pngFilePath) throws IOException,TranscoderException{  
     
            File file = new File (pngFilePath);  
      
            FileOutputStream outputStream = null;  
            try {  
                file.createNewFile ();  
                outputStream = new FileOutputStream (file);  
                convertToPng (svgCode, outputStream);  
            } finally {  
                if (outputStream != null) {  
                    try {  
                        outputStream.close ();  
                    } catch (IOException e) {  
                        e.printStackTrace ();  
                    }  
                }  
            }  
        }  
    /** 
         *@Description: 將svgCode轉(zhuǎn)換成png文件,直接輸出到流中 
         *@param svgCode svg代碼 
         *@param outputStream 輸出流 
         *@throws TranscoderException 異常 
         *@throws IOException io異常 
         */  
        public static void convertToPng(String svgCode,OutputStream outputStream) throws TranscoderException,IOException{  
            try {  
            byte[] bytes = svgCode.getBytes ("UTF-8");  
                PNGTranscoder t = new PNGTranscoder ();  
                TranscoderInput input = new TranscoderInput (new ByteArrayInputStream (bytes));  
                TranscoderOutput output = new TranscoderOutput (outputStream);  
                t.transcode (input, output);  
                outputStream.flush ();  
            } finally {  
                if (outputStream != null) {  
                    try {  
                        outputStream.close ();  
                    } catch (IOException e) {  
                        e.printStackTrace ();  
                    }  
                }  
            }  
        }  
    }

    posted @ 2015-10-19 15:17 yuhaibo736 閱讀(314) | 評(píng)論 (0)編輯 收藏

    方法1: 設(shè)定環(huán)境變量
    set NLS_SORT=SCHINESE_RADICAL_M ;export NLS_SORT (sh)
    or setenv NLS_SORT SCHINESE_RADICAL_M (csh)
    or regedit 
    HKLC/SOFTWARE/ORACLE/home0/NLS_SORT        (win)

    方法2: 在session中修改
    alter session set NLS_SORT='SCHINESE_RADICAL_M'

    方法3: 直接使用NLSSORT函數(shù) (推薦)
    select name,id from t
    order by NLSSORT(name,'NLS_SORT = SCHINESE_STROKE_M')

    設(shè)置NLS_SORT值:

    SCHINESE_RADICAL_M 按照部首(第一順序)、筆劃(第二順序)排序 

    SCHINESE_STROKE_M 按照筆劃(第一順序)、部首(第二順序)排序 

    SCHINESE_PINYIN_M 按照拼音排序

    posted @ 2014-08-29 14:13 yuhaibo736 閱讀(1286) | 評(píng)論 (0)編輯 收藏

        在IBATIS中,框架內(nèi)置了對(duì)OSCache的支持,如果我們想使用EHCache,則需要通過我們手工實(shí)現(xiàn)來完成二級(jí)緩存的功能機(jī)制。

        在mybatis中,開發(fā)組織只提供了一些默認(rèn)的二級(jí)緩存實(shí)現(xiàn)的機(jī)制,并沒有直接內(nèi)置的支持OSCache和EHCache等二級(jí)緩存機(jī)制,而是作為一個(gè)集成jar包來提供二級(jí)緩存的實(shí)現(xiàn),在官方網(wǎng)站上我們可以找到mybatis-ehcache-1.0.1-bundle.zip,mybatis-oscache-1.0.1-bundle.zip等ehcache和oscache提供二級(jí)緩存的獨(dú)立工具包. 這里我就拿oscache在mybatis中的使用來舉例說明:

           1.   將mybatis-oscache-1.0.1-bundle.zip中涉及到的jar包放入到classpath路徑下 
                 maven下可以這樣配置
                   <dependencies>  
                        
    ... 

                        <dependency> 

                            <groupId>org.mybatis.caches</groupId> 

                            <artifactId>mybatis-oscache</artifactId>      
                             <version>1.0.2-SNAPSHOT</version> 

                        </dependency>             

                        <dependency>
                            <groupId>javax.jms</groupId>
                            <artifactId>jms</artifactId>
                            <version>1.1</version>
                        </dependency>

                        <dependency>
                             <groupId>opensymphony</groupId>
                             <artifactId>oscache</artifactId>
                             <version>2.4</version>
                             <exclusions>       
                                   <exclusion>
                                       <groupId>com.sun.jdmk</groupId>
                                       <artifactId>jmxtools</artifactId>
                                   </exclusion>
                               <exclusion>
                               <groupId>com.sun.jmx</groupId>
                               <artifactId>jmxri</artifactId>
                           </exclusion>
                         </exclusions>
                    </dependency>

                        ... 

                    </dependencies>

           2.   在mapper文件中的配置如下:

                 <mapper namespace="org.test.AuthMapper" >         

                     <cache  type="org.mybatis.caches.oscache.OSCache"/>

                 </mapper>
                注意下面兩點(diǎn)
                 (a)在
    <select id="getAuth" parameterType="Map" resultType="Auth"  useCache="false">中使用useCache="false"或useCache="true"來決定是否使用二級(jí)緩存。    
                 (b)在增刪改中<insert id="insertAuth" parameterType="Auth"  flushCache="true">使用flushCache="true"或flushCache="flase"來決定對(duì)這些進(jìn)行操作后清空該xml文件中所有查詢語句的二級(jí)緩存。 

           3.  在src目錄下創(chuàng)建一個(gè)oscache.properties的屬性文件,在里面指定緩存的各種屬性的設(shè)置:
                 cache.memory=true             
                 cache.path=c:\\myapp\\cache
                 cache.persistence.class=com.opensymphony.oscache.plugins.diskpersistence.DiskPersistenceListener
                 cache.persistence.overflow.only=true
                 cache.capacity=100000

                

    posted @ 2014-08-11 18:22 yuhaibo736 閱讀(2731) | 評(píng)論 (0)編輯 收藏

    import java.awt.Color;
    import java.io.FileOutputStream;

    import com.itextpdf.text.BaseColor;
    import com.itextpdf.text.Document;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.Rectangle;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfWriter;

    public class CellEvents {


     /**
      * @param args
      */
     public static void main(String[] args) {
      Object[] objArr = new Object[]{100,20,300};
      
      Document document = new Document(PageSize.A4.rotate(),50,50,50,50);
      try{
       //bfSongti = BaseFont.createFont("/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
       Font songtiSFivefont = new Font(BaseFont.createFont("/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED), 9f);//宋體小五號(hào)字
             //設(shè)置存放位置
             PdfWriter.getInstance(document, new FileOutputStream("D:/test.pdf"));
             document.open();
     
             PdfPTable table = new PdfPTable(5);
       table.setSpacingBefore(10f);
       table.getDefaultCell().setPadding(5);
       //HowbuyBorderPdfPTableEvent event = new HowbuyBorderPdfPTableEvent();
       //table.setTableEvent(event);
       //table.getDefaultCell().setBorder(Rectangle.NO_BORDER);
       table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
       PdfPCell cellTitle = new PdfPCell(new Phrase("總資產(chǎn)\n(萬元)",songtiSFivefont));
       cellTitle.setBorderWidth(2f);
       cellTitle.setBackgroundColor(new BaseColor(new Color(153, 51, 0)));
       cellTitle.setBorderColor(new BaseColor(new Color(153, 51, 0)));
       cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);
       cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);
       cellTitle.setMinimumHeight(25);
       table.addCell(cellTitle);
     
       cellTitle = new PdfPCell(new Phrase(""));
       cellTitle.setBorder(Rectangle.NO_BORDER);
       cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);
       cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cellTitle);
       
       cellTitle = new PdfPCell(new Phrase("當(dāng)前收益\n(萬元)",songtiSFivefont));
       cellTitle.setBorderWidth(2f);
       cellTitle.setBackgroundColor(new BaseColor(new Color(153, 51, 0)));
       cellTitle.setBorderColor(new BaseColor(new Color(153, 51, 0)));
       cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);
       cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cellTitle);
     
       cellTitle = new PdfPCell(new Phrase("",songtiSFivefont));
       cellTitle.setBorder(Rectangle.NO_BORDER);
       cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);
       cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cellTitle);
       
       
       cellTitle = new PdfPCell(new Phrase("累計(jì)收益\n(萬元)",songtiSFivefont));
       cellTitle.setBorderWidth(2f);
       cellTitle.setBackgroundColor(new BaseColor(new Color(153, 51, 0)));
       cellTitle.setBorderColor(new BaseColor(new Color(153, 51, 0)));
       cellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);
       cellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cellTitle);
       
       float[] widths2 = { 24.5f, 12.25f,24.5f,12.25f,24.5f};

       table.setWidths(widths2);
       
       table.setHorizontalAlignment(Element.ALIGN_LEFT);//
       table.setWidthPercentage(70);
       double zzc = objArr[0]==null ? 0:Double.parseDouble(objArr[0].toString());
       double dqsy = objArr[1]==null ? 0:Double.parseDouble(objArr[1].toString());
       double ljsy = objArr[2]==null ? 0:Double.parseDouble(objArr[2].toString());
       PdfPCell cell1 = new PdfPCell(new Phrase(String.valueOf(zzc),songtiSFivefont));
       cell1.setBorderWidth(2f);
       cell1.setBorderColor(new BaseColor(new Color(153, 51, 0)));
       cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
       cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
       cell1.setMinimumHeight(20);
       table.addCell(cell1);
       
       cell1 = new PdfPCell(new Phrase("",songtiSFivefont));
       cell1.setBorder(Rectangle.NO_BORDER);
       cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
       cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cell1);
       
       cell1 = new PdfPCell(new Phrase(String.valueOf(dqsy),songtiSFivefont));
       cell1.setBorderWidth(2f);
       cell1.setBorderColor(new BaseColor(new Color(153, 51, 0)));
       cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
       cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cell1);
       
       cell1 = new PdfPCell(new Phrase("",songtiSFivefont));
       cell1.setBorder(Rectangle.NO_BORDER);
       cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
       cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cell1);
       
       cell1 = new PdfPCell(new Phrase(String.valueOf(ljsy),songtiSFivefont));
       cell1.setBorderWidth(2f);
       cell1.setBorderColor(new BaseColor(new Color(153, 51, 0)));
       cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
       cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);
       table.addCell(cell1);
       document.add(table);
      }catch(Exception ex){
       ex.printStackTrace();
      }
            document.close();

     }

    }

    posted @ 2014-06-24 16:27 yuhaibo736 閱讀(1463) | 評(píng)論 (0)編輯 收藏

    相信很多人都聽過nginx,這個(gè)小巧的東西慢慢地在吞食apache和IIS的份額。那究竟它有什么作用呢?可能很多人未必了解。

    說到反向代理,可能很多人都聽說,但具體什么是反向代理,很多人估計(jì)就不清楚了。摘一段百度百科上的描述:

    Html代碼 復(fù)制代碼 收藏代碼
    1. 反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。 

    這里講得很直白。反向代理方式實(shí)際上就是一臺(tái)負(fù)責(zé)轉(zhuǎn)發(fā)的代理服務(wù)器,貌似充當(dāng)了真正服務(wù)器的功能,但實(shí)際上并不是,代理服務(wù)器只是充當(dāng)了轉(zhuǎn)發(fā)的作用,并且從真正的服務(wù)器那里取得返回的數(shù)據(jù)。這樣說,其實(shí)nginx完成的就是這樣的工作。我們讓nginx監(jiān)聽一個(gè)端口,譬如80端口,但實(shí)際上我們轉(zhuǎn)發(fā)給在8080端口的tomcat,由它來處理真正的請(qǐng)求,當(dāng)請(qǐng)求完成后,tomcat返回,但數(shù)據(jù)此時(shí)沒直接返回,而是直接給nginx,由nginx進(jìn)行返回,這里,我們會(huì)以為是nginx進(jìn)行了處理,但實(shí)際上進(jìn)行處理的是tomcat。

    說到上面的方式,也許很多人又會(huì)想起來,這樣可以把靜態(tài)文件交由nginx來進(jìn)行處理。對(duì),很多用到nginx的地方都是作為靜態(tài)伺服器,這樣可以方便緩存那些靜態(tài)文件,比如CSS,JS,html,htm等文件。

    閑話就不多說了,我們直接來看看nginx怎么使用。

    1)要用到的軟件當(dāng)然要下載啦。到nginx官網(wǎng)下一個(gè)。http://nginx.org/en/download.html可以到這里去下。我現(xiàn)在用的版本是1.1.7,但基本上以后的版本都兼容,而且我們用到的并不涉及到太底層的,應(yīng)該不會(huì)有什么變化。

    這里,由于我的是windows,當(dāng)然下windows版啦。下完后首先要啟動(dòng)吧。進(jìn)入到nginx文件夾,直接start nginx就OK了。

    比如我下載后放在D:\software\developerTools\server\nginx-1.1.7,直接cmd后cd D:\software\developerTools\server\nginx-1.1.7,有些不習(xí)慣命令行的可能會(huì)奇怪,它沒有進(jìn)行到那個(gè)文件夾。windows并不會(huì)在分區(qū)間跳轉(zhuǎn),除非你自己指定了。所以我們要直接d:如下:

    然后,我們直接start nginx,這里也許你會(huì)看到一個(gè)窗口一閃而過,根據(jù)我們使用tomcat的經(jīng)驗(yàn),如果一閃而過,證明有錯(cuò)誤了,是吧?但實(shí)際上不是。

    此時(shí)我們打開任務(wù)管理器,可以看到兩個(gè)nginx.exe在那里好好的。這說明我們已經(jīng)啟動(dòng)了,至于為什么兩個(gè),我們這里不深究。

    現(xiàn)在,我們已經(jīng)啟動(dòng)了nginx,這時(shí)就可以啟動(dòng)tomcat,想著直接訪問http://localhost就可以直接訪問tomcat了。

    先不急,我們來看看啟動(dòng)后的nginx是怎樣的。直接訪問http://localhost可以看到:

        我們可以看到nginx啟動(dòng)成功,現(xiàn)在訪問是直接進(jìn)到nginx的目錄里面了。

    那么這些實(shí)際上是在哪里配置的。這就涉及到nginx的一個(gè)重要配置文件nginx.conf了。

    2)我們可以看到nginx文件夾內(nèi)有一個(gè)conf文件夾,其中有好幾個(gè)文件,其他先不管,我們打開nginx.conf,可以看到一段:

    這段代碼在server里面,相當(dāng)于一個(gè)代理服務(wù)器,當(dāng)然可以配置多個(gè)。

    下面我們仔細(xì)來分析一下:

    listen:表示當(dāng)前的代理服務(wù)器監(jiān)聽的端口,默認(rèn)的是監(jiān)聽80端口。注意,如果我們配置了多個(gè)server,這個(gè)listen要配置不一樣,不然就不能確定轉(zhuǎn)到哪里去了。

    server_name:表示監(jiān)聽到之后需要轉(zhuǎn)到哪里去,這時(shí)我們直接轉(zhuǎn)到本地,這時(shí)是直接到nginx文件夾內(nèi)。

    location:表示匹配的路徑,這時(shí)配置了/表示所有請(qǐng)求都被匹配到這里

    root:里面配置了root這時(shí)表示當(dāng)匹配這個(gè)請(qǐng)求的路徑時(shí),將會(huì)在這個(gè)文件夾內(nèi)尋找相應(yīng)的文件,這里對(duì)我們之后的靜態(tài)文件伺服很有用。

    index:當(dāng)沒有指定主頁時(shí),默認(rèn)會(huì)選擇這個(gè)指定的文件,它可以有多個(gè),并按順序來加載,如果第一個(gè)不存在,則找第二個(gè),依此類推。

    下面的error_page是代表錯(cuò)誤的頁面,這里我們暫時(shí)不用,先不管它。

    那我們知道了具體的配置了,怎么讓它訪問localhost時(shí)轉(zhuǎn)到tomcat時(shí)。實(shí)際上就修改兩個(gè)地方:

    Java代碼 復(fù)制代碼 收藏代碼
    1. server_name localhost:8080
    2.  
    3. location / { 
    4.     proxy_pass http://localhost:8080 

    我們就修改了上面兩個(gè)地方,我的tomcat在8080端口,可以根據(jù)自己的需要修改。這里有一個(gè)新元素proxy_pass,它表示代理路徑,相當(dāng)于轉(zhuǎn)發(fā),而不像之前說的root必須指定一個(gè)文件夾。

    此時(shí)我們修改了文件,是不是就意思著必須先關(guān)了nginx再重新啟動(dòng)了,其實(shí)不必,nginx可以重新加載文件的。

    我們直接運(yùn)行:

    Html代碼 復(fù)制代碼 收藏代碼
    1. nginx -s reload 

    高興得太早了,我們發(fā)現(xiàn)有一個(gè)錯(cuò)誤:

    什么來的,45行發(fā)現(xiàn)錯(cuò)誤,不希望在那一行找到},于是我們仔細(xì)找,發(fā)現(xiàn)我們加入的proxy_pass很奇怪,沒有;號(hào)結(jié)尾,這就是問題了,直接修改,然后再運(yùn)行一下,發(fā)現(xiàn)沒錯(cuò)誤,OK了。

    如果不想直接加載,而只是想看看自己的配置文件有沒有問題,可以直接輸入:

    Xml代碼 復(fù)制代碼 收藏代碼
    1. nginx -t 

    這可以檢查配置文件中是否有錯(cuò)。 下面我們所有的修改都假設(shè)我們修改完成后運(yùn)行了nginx -s reload進(jìn)行重新加載配置文件,請(qǐng)注意。

    一切沒問題了,然后我們?cè)僦匦麓蜷_http://localhost,我們看到下面的頁面:

    這時(shí),我們發(fā)現(xiàn)它并不是剛才的welcome頁面了,而是tomcat的管理頁面了,不管我們點(diǎn)擊什么鏈接都是沒問題的,相當(dāng)于直接訪問http://localhost:8080一樣。

    3)上面我們直接試了一個(gè)小例子,讓nginx進(jìn)行轉(zhuǎn)發(fā),即所謂的反向代理。但實(shí)際上我們的需求不會(huì)是這樣的,我們需要分文件類型來進(jìn)行過濾,比如jsp直接給tomcat處理,因?yàn)閚ginx并不是servlet容器,沒辦法處理JSP,而html,js,css這些不需要處理的,直接給nginx進(jìn)行緩存。

    下面我們來進(jìn)行一下配置,讓JSP頁面直接給tomcat,而html,png等一些圖片和JS等直接給nginx進(jìn)行緩存。

    這時(shí)最主要用的還是location這個(gè)元素,并且涉及到一部分正則,但不難:

    Xml代碼 復(fù)制代碼 收藏代碼
    1. location ~ \.jsp$ { 
    2.         proxy_pass http://localhost:8080; 
    3.          
    4. location ~ \.(html|js|css|png|gif)$ { 
    5.     root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT; 

    我們先要去掉之前配的location /,避免全部請(qǐng)求被攔截了。

    然后我們?cè)賮砜纯磆ttp://localhost

    當(dāng)我們不指定jsp頁面的時(shí)候,它會(huì)出現(xiàn)找不到,因?yàn)椋藭r(shí)并沒有相應(yīng)的location匹配,所以就會(huì)有404錯(cuò)誤,這時(shí)就跳到了nginx自定義的error頁面去了。

    而當(dāng)我們用http://localhost/index.jsp去訪問時(shí),我們看到了熟悉的頁面:

    而且圖片那些都顯示正常,因?yàn)閳D片是png的,所以直接在tomcat/webapps/ROOT目錄下直接查找,當(dāng)然,如果我們點(diǎn)擊Manager Application HOW-TO這個(gè)鏈接,我們發(fā)現(xiàn):

    它還是找不到,為什么呢?因?yàn)檫@是個(gè)html頁面,但它并不在ROOT目錄下,而是在docs目錄下,但當(dāng)我們匹配html時(shí),我們卻到ROOT目錄下去找,所以還是找不到這個(gè)頁面。

    一般情況下,如果我們需要用nginx來進(jìn)行靜態(tài)文件伺服,一般都會(huì)把所有靜態(tài)文件,html,htm,js,css等都放在同一個(gè)文件夾下,這樣就不會(huì)有tomcat這樣的情況了,因?yàn)閠omcat下的是屬于不同的項(xiàng)目,這個(gè)我們就沒辦法了。

    3)有些人會(huì)說,這些都只會(huì)找一臺(tái)服務(wù)器,但如果我們想在一臺(tái)服務(wù)器掛了的時(shí)候,自動(dòng)去找另外一臺(tái),這怎么辦?這實(shí)際上nginx都考慮到了。

    這時(shí),我們之前用的proxy_pass就有大用途了。

    我們把之前的第一個(gè)例子,即全部都代理的修改一下:

    最后修改如下:

    Xml代碼 復(fù)制代碼 收藏代碼
    1. upstream local_tomcat { 
    2.     server localhost:8080; 
    3.  
    4. server{ 
    5.         location / { 
    6.            proxy_pass http://local_tomcat; 
    7.         } 
    8.         #......其他省略 

    我們?cè)趕erver外添加了一個(gè)upstream,而直接在proxy_pass里面直接用http://+upstream的名稱來使用。

    我們還是直接來http://localhost,還是和第一個(gè)一樣的效果,所有鏈接都沒問題,說明我們配置正確。

    upstream中的server元素必須要注意,不能加http://,但proxy_pass中必須加。

    我們剛才說可以在一個(gè)服務(wù)器掛了的情況下連到另外一個(gè),那怎么弄呢?

    其實(shí)很簡(jiǎn)單,在upstream中的local_tomcat中配置多一個(gè)server。比如我現(xiàn)在弄多一個(gè)jetty,端口在9999,所以我們配置如下:

    Xml代碼 復(fù)制代碼 收藏代碼
    1. upstream local_tomcat { 
    2.     server localhost:8080; 
    3.     server localhost:9999; 

    此時(shí),我們關(guān)閉tomcat,而只開jetty。我們來運(yùn)行http://localhost看看效果:

    我們看到它請(qǐng)求到了jetty的頁面,但由于jetty的機(jī)制,這時(shí)沒有顯示jetty主頁,這個(gè)我們先不管。但我們的在一個(gè)服務(wù)器掛的情況下自動(dòng)使用另外一個(gè)的功能實(shí)現(xiàn)了。

    但有時(shí)我們就不想它掛的時(shí)候訪問另外一個(gè),而只是希望一個(gè)服務(wù)器訪問的機(jī)會(huì)比另外一個(gè)大,這個(gè)可以在server最后加上一個(gè)weight=數(shù)字來指定,數(shù)字越大,表明請(qǐng)求到的機(jī)會(huì)越大。

    Xml代碼 復(fù)制代碼 收藏代碼
    1. upstream local_tomcat { 
    2.     server localhost:8080 weight=1
    3.     server localhost:9999 weight=5

    這時(shí)我們給了jetty一個(gè)更高的權(quán)值,讓它更有機(jī)會(huì)訪問到,實(shí)際上當(dāng)我們刷新http://localhost訪問的時(shí)候發(fā)現(xiàn)jetty訪問機(jī)率大很多,tomcat幾乎沒機(jī)會(huì)訪問,一般情況下,如果我們必須這樣用,不要相關(guān)太大,以免一個(gè)服務(wù)器負(fù)載太大。

    當(dāng)然,server還有一些其他的元素,比如down表示暫時(shí)不用到該服務(wù)器等等。這些可以參考nginx的wiki。也許寫了一大堆,有人會(huì)有問題,那nginx怎么關(guān)閉呢?這倒是個(gè)問題,其實(shí)直接運(yùn)行nginx -s stop就可以關(guān)閉了。

    基本上nginx的用法是這樣,深入的以后我們?nèi)绻玫皆賹W(xué)習(xí)。

    posted @ 2014-06-17 15:24 yuhaibo736 閱讀(1382) | 評(píng)論 (0)編輯 收藏

    第一步:

       1)下載jad.exe文件:http://www.varaneckas.com/jad

       2)下載jadeclipse插件:http://sourceforge.net/projects/jadclipse/files/


    第二步:
        1)解壓縮jad158g.win.zip成jad.exe,把它c(diǎn)opy至jre的bin目錄下,比如我的jre安裝到了c盤下,copy的路徑即為c:\Program Files\Java\jre6\bin(下一步配置等待net.sf.jadclipse_3.3.0.jar配置完成之后再說)
        2)找到myeclipse的安裝目錄,我的myeclipse安裝在c盤下,路徑如下:c:\ Program Files\yEclipse10。該目錄下有dropins文件,我們需要在該文件夾下,新建jad文件夾,jad文件夾下新建 features 和 plugins 兩個(gè)文件夾,把net.sf.jadclipse_3.3.0.jar 復(fù)制到兩個(gè)文件夾下,然后重啟myeclipse。

    第三步:
        1)在eclipse窗口下,點(diǎn)擊Window > Preferences > Java > JadClipse > Path to Decompiler。(設(shè)置jad的絕對(duì)路徑,如 c:\Program Files\Java\jre6\bin\jad.exe  )。Use Eclipse code formatter(overrides Jad formatting instructions)選項(xiàng)打勾,與格式化出來的代碼樣式一致。

        2)在eclipse窗口下,點(diǎn)擊Window > Preferences > Java > JadClipse > Misc,將Convert Unicode strings into ANSI strings選項(xiàng)打勾,避免反編譯后可能出現(xiàn)的中文亂碼。
    第四步:
        安裝完成后,myeclipse沒有自動(dòng)將JadClipse Class File Viewer設(shè)置成class文件的缺省打開方式,設(shè)置方法如

    在Eclipse的Windows—> Perference—>General->Editors->File
    Associations中修改“*.class”默認(rèn)關(guān)聯(lián)的編輯器為“JadClipse Class File Viewer”。

    第五步:
        設(shè)置完成,找一個(gè)jar包中的*.class文件,myeclipse將自動(dòng)反編譯。

    posted @ 2014-05-26 16:05 yuhaibo736 閱讀(1368) | 評(píng)論 (0)編輯 收藏

    首先在網(wǎng)上下載Eclipse Class Decompiler插件: http://download.csdn.net/detail/ibm_hoojo/5250263
    下載后,解壓可以看到如下目錄,復(fù)制所有文件粘貼到你的eclipse或MyEclipse的目錄:D:\MyEclipse 6.5\dropins\eclipse或D:\eclipse\dropins\eclipse下,沒有對(duì)應(yīng)的文件夾就新建,選擇覆蓋即可。然后重新啟動(dòng)eclipse。 

    再次打開.class文件就是反編譯后的文件了

    posted @ 2014-05-21 17:14 yuhaibo736 閱讀(1112) | 評(píng)論 (0)編輯 收藏

    用oracle用戶登陸系統(tǒng),
    用戶名/密碼  oracle/oracle
    sqlplus / as sysdba
    startup
    啟動(dòng)后然后 exit
    然后啟動(dòng)監(jiān)聽 lsnrctl start

    Linux 下啟動(dòng)oracle步驟
    1.進(jìn)入到sqlplus啟動(dòng)實(shí)例
    [oracle@redhat ~]$ su - oracle --“切換到oracle用戶”
    2.[oracle@redhat ~]$ lsnrctl start --“打開監(jiān)聽”
    3.[oracle@redhat ~]$ sqlplus /nolog --“進(jìn)入到sqlplus”
    4.SQL> conn /as sysdba --“連接到sysdba”
    5.SQL> startup --“啟動(dòng)數(shù)據(jù)庫實(shí)例”
    6.SQL> shutdown immediate --“關(guān)閉數(shù)據(jù)庫實(shí)例”
    7.[oracle@redhat ~]$ lsnrctl stop --“關(guān)閉監(jiān)聽”

    posted @ 2013-09-10 22:38 yuhaibo736 閱讀(994) | 評(píng)論 (0)編輯 收藏



    一、vi的基本概念



    基本上vi可分為三種操作狀態(tài),分別是命令模式(Command mode)、插入模式(Insert mode)和底線命令模式(Last line mode),



    各模式的功能區(qū)分如下:



    1. Comand mode:控制屏幕光標(biāo)的移動(dòng),字符或光標(biāo)的刪除,移動(dòng)復(fù)制某區(qū)段及進(jìn)入Insert mode下,或者到Last line mode。



    2. Insert mode:唯有在Insert mode下,才可做文字?jǐn)?shù)據(jù)輸入,按Esc等可回到Comand mode。



    3. Last line mode:將儲(chǔ)存文件或離開編輯器,也可設(shè)置編輯環(huán)境,如尋找字符串、列出行號(hào)等。



    不過可以把vi簡(jiǎn)化成兩個(gè)模式,即是將Last line mode也算入Command mode,把vi分成Command
    和Insert mode。



    二、vi的基本操作



    1.進(jìn)入vi



    在系統(tǒng)提示符號(hào)輸入vi及文件名稱后,即可進(jìn)入vi全屏幕編輯畫面:



    $
    vi testfile



    注意:進(jìn)入vi之后是處于“Command mode”下,要切換到Insert mode才能輸入文字。



    初次用vi的用戶都會(huì)想先用上下左右鍵移動(dòng)光標(biāo),結(jié)果電腦一直叫,把自己氣個(gè)半死,所以進(jìn)入vi后,先不要亂動(dòng),轉(zhuǎn)換入Insert后再說。



    (1)切換至Insert mode編輯文件在Command mode下按‘i’、‘a’或‘o’三鍵就可進(jìn)入Insert mode。這時(shí)候就可以開始輸入文字了。



    i: 插入,從目前光標(biāo)所在之處插入所輸入的文字。



    a: 增加,目前光標(biāo)所在的下一個(gè)字開始輸入文字。



    o: 插入新的一行,從行首開始輸入文字。



    (2)Insert的切換→Command
    mode
    ,按Esc鍵



    您目前處于Insert mode,您就只能一直打字。假如您發(fā)現(xiàn)打錯(cuò)字了,想用光標(biāo)鍵往回移動(dòng),將該字刪除,就要按ESC鍵轉(zhuǎn)換回Command mode,再刪除文字。



    (3)離開vi及存文件



    在Command mode下,可按冒號(hào)“:”鍵入入Last line mode,例如:



    :w
    filename (
    輸入“w filename”,將文章存入指定的文件名filename)



    :wq
    (
    輸入“wq”,因?yàn)檫M(jìn)入之時(shí)已經(jīng)指定文件名testfile,所以會(huì)寫入testfile并離開vi)



    :q!
    (
    輸入“q!”,強(qiáng)制離開并放棄編輯的文件)



    2.Command
    mode
    功能鍵列表



    在介紹command mode指令的時(shí)后,指令后面加上“常用”字眼的功能鍵,表示比較常用的vi指令,



    請(qǐng)讀者您一定要學(xué)會(huì)、記住。



    (1)I、a、o切換進(jìn)入Insert mode。[超級(jí)常用]



    (2)移動(dòng)光標(biāo)



    vi可以直接用鍵盤上的光標(biāo)鍵來上下左右移動(dòng),但正規(guī)的vi是用小寫英文字母



    h、j、k、l,分別控制光標(biāo)左、下、上、右移一格。



    按Ctrl+B:屏幕往后移動(dòng)一頁。[常用]



    按Ctrl+F:屏幕往前移動(dòng)一頁。[常用]



    按Ctrl+U:屏幕往后移動(dòng)半頁。



    按Ctrl+D:屏幕往前移動(dòng)半頁。



    按 0 (數(shù)字零):移動(dòng)文章的開頭。[常用]



    按 G:移動(dòng)到文章的最后。[常用]



    按 w:光標(biāo)跳到下個(gè)word的開頭。[常用]



    按 e:光標(biāo)跳到下個(gè)word的字尾。



    按 b:光標(biāo)回到上個(gè)word的開頭。



    按 $:移到光標(biāo)所在行的行尾。[常用]



    按 ^:移到該行第一個(gè)非空白的字符。



    按 0:移到該行的開頭位置。[常用]



    按 #:移到該行的第#個(gè)位置,例:51、121。[常用]



    (3)刪除文字



    x:每按一次刪除光標(biāo)所在位置的后面一個(gè)字符。[超常用]



    #x:例如,6x 表刪除光標(biāo)所在位置的后面6個(gè)字符。[常用]



    X:大字的X,每按一次刪除光標(biāo)所在位置的前面一個(gè)字符。



    #X:例如,20X 表刪除光標(biāo)所在位置的前面20個(gè)字符。



    dd:刪除光標(biāo)所在行。[超常用]



    #dd:例如,6dd表刪除從光標(biāo)所在的該行往下數(shù)6行之文字。[常用]



    (4)復(fù)制



    yw:將光標(biāo)所在處到字尾的字符復(fù)制到緩沖區(qū)中。



    (想在和#x、#X的功能相反)



    p:將緩沖區(qū)內(nèi)的字符粘貼到光標(biāo)所在位置(指令‘yw’與‘p必須搭配使用)。



    yy:復(fù)制光標(biāo)所在行。[超常用]



    p:復(fù)制單行到您想粘貼之處。(指令‘yy’與‘p’必須搭配使用)



    #yy:如:6yy表示拷貝從光標(biāo)所在的該行往下數(shù)6行之文字。[常用]



    p:復(fù)制多行到您想粘貼之處。(指令‘#yy’與‘p’必須搭配使用)



    “ayy:將復(fù)制行放入buffer a, vi提供buffer功能,可將常用的數(shù)據(jù)存在buffer



    “ap:將放在buffer a的數(shù)據(jù)粘貼。



    “b3yy:將三行數(shù)據(jù)存入buffer b。



    “b3p:將存在buffer b的資料粘貼



    (5)取代



    r: 取代光標(biāo)所在處的字符:[常用]



    R:取代字符直到按Esc為止。



    (6)復(fù)原(undo)上一個(gè)指令



    u:假如您誤操作一個(gè)指令,可以馬上按u,回復(fù)到上一個(gè)操作。[超常用]



    .:
    .
    可以重復(fù)執(zhí)行上一次的指令。



    (7)更改



    cw:更改光標(biāo)所在處的字到字尾$處。



    c#w:例如,c3w代表更改3個(gè)字。



    (8)跳至指定行



    Ctrl+G:列出光標(biāo)所在行的行號(hào)。



    #G:例如,15G,表示移動(dòng)光標(biāo)至文章的第15行行首。[常用]



    3.Last
    line mode
    下指令簡(jiǎn)介



    讀者您要使用Last line mode之前,請(qǐng)記得先按Esc鍵確定您已經(jīng)處于Command mode下后,再按冒號(hào)“:”或“/”或“?”



    三鍵的其中一鍵進(jìn)入Last line mode。



    (1).列出行號(hào)



    set
    nu:
    輸入“set
    nu
    或者set number”后,會(huì)在文章的每一行前面列出行號(hào)。



    set
    nonu
    :輸入“set
    nonu
    或者set nonumber”,取消行號(hào)



    (2).跳到文章的某一行



    #:井號(hào)代表一個(gè)數(shù)字,在Last line
    mode
    提示符號(hào)“:”前輸入數(shù)字,再按Enter就會(huì)跳到該行了,



    如:15[Enter]就會(huì)跳到文章的第15行。[常用]



    (3).尋找字符串



    /關(guān)鍵字:先按/,再輸入您想尋找的字,如果第一次找的關(guān)鍵字不是您相盡可能的,可以一直按n會(huì)往下尋找到您要的關(guān)鍵字為止。自上而下進(jìn)行搜索!



    ?關(guān)鍵字:先按?,再輸入您想尋找的字,如果第一次找的關(guān)鍵字不是您想要的,可以按n會(huì)往前尋找到您要的關(guān)鍵字為止。自下而上搜索!



    如:3/x 表示查找當(dāng)前點(diǎn)第三次出現(xiàn) x 的地方,就像是 /x 后跟 2n。類似地,2/^e 將從當(dāng)前位置開始的第二行查找以 e 開始的內(nèi)容。



    注意,到達(dá)文件底部之后,搜索將回到頂部。



    (4).取代字符串



    1,$s/string/replae/g:在last line mode輸入“1,$s/string/replace/g”會(huì)將全文的string字符串取代為replace字符串,



    其中1,$s就是指搜尋區(qū)間為文章從頭至尾的意思,g則是表示全部取代不必確認(rèn)。



    %s/string/replace/c:同樣會(huì)將全文的string字符串取代為replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,



    c則是表示要替代之前必須再次確認(rèn)是否取代。



    1,20s/string/replace/g:將1至20行間的string替代為relpace字符串。



    (5).存文件



    w:在last line mode提示符號(hào)“:”前按w即可將文件存起來。[超常用]



    #,# w filename:如果您想摘取文章的某一段,存成另一個(gè)文件,可用這個(gè)指令#代表行號(hào),例如30,50 w nice,



    將您正在編輯文章的第30~50行存成nice這個(gè)文件。



    或者是30,50 w >> nice ,表示把內(nèi)容附加到nice文件,不覆蓋



    (6).離開



    q:按q就離開,有時(shí)如果無法離開vi,可搭配“!:強(qiáng)置離開vi,如“q!”



    qw:一般建議離開時(shí),搭配w一起使用,如此離開時(shí)還可存文件。[常用]



    posted @ 2013-09-09 18:31 yuhaibo736 閱讀(859) | 評(píng)論 (0)編輯 收藏

    系統(tǒng)信息
    arch 顯示機(jī)器的處理器架構(gòu)(1)
    uname -m 顯示機(jī)器的處理器架構(gòu)(2)
    uname -r 顯示正在使用的內(nèi)核版本
    dmidecode -q 顯示硬件系統(tǒng)部件 - (SMBIOS / DMI)
    hdparm -i /dev/hda 羅列一個(gè)磁盤的架構(gòu)特性
    hdparm -tT /dev/sda 在磁盤上執(zhí)行測(cè)試性讀取操作
    cat /proc/cpuinfo 顯示CPU info的信息
    cat /proc/interrupts 顯示中斷
    cat /proc/meminfo 校驗(yàn)內(nèi)存使用
    cat /proc/swaps 顯示哪些swap被使用
    cat /proc/version 顯示內(nèi)核的版本
    cat /proc/net/dev 顯示網(wǎng)絡(luò)適配器及統(tǒng)計(jì)
    cat /proc/mounts 顯示已加載的文件系統(tǒng)
    lspci -tv 羅列 PCI 設(shè)備
    lsusb -tv 顯示 USB 設(shè)備
    date 顯示系統(tǒng)日期
    cal 2007 顯示2007年的日歷表
    date 041217002007.00 設(shè)置日期和時(shí)間 - 月日時(shí)分年.秒
    clock -w 將時(shí)間修改保存到 BIOS

     

    關(guān)機(jī) (系統(tǒng)的關(guān)機(jī)、重啟以及登出 )
    shutdown -h now 關(guān)閉系統(tǒng)(1)
    init 0 關(guān)閉系統(tǒng)(2)
    telinit 0 關(guān)閉系統(tǒng)(3)
    shutdown -h hours:minutes & 按預(yù)定時(shí)間關(guān)閉系統(tǒng)
    shutdown -c 取消按預(yù)定時(shí)間關(guān)閉系統(tǒng)
    shutdown -r now 重啟(1)
    reboot 重啟(2)
    logout 注銷

     

    文件和目錄
    cd /home 進(jìn)入 '/ home' 目錄'
    cd .. 返回上一級(jí)目錄
    cd ../.. 返回上兩級(jí)目錄
    cd 進(jìn)入個(gè)人的主目錄
    cd ~user1 進(jìn)入個(gè)人的主目錄
    cd - 返回上次所在的目錄
    pwd 顯示工作路徑
    ls 查看目錄中的文件
    ls -F 查看目錄中的文件
    ls -l 顯示文件和目錄的詳細(xì)資料
    ls -a 顯示隱藏文件
    ls *[0-9]* 顯示包含數(shù)字的文件名和目錄名
    tree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)(1)
    lstree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)(2)
    mkdir dir1 創(chuàng)建一個(gè)叫做 'dir1' 的目錄'
    mkdir dir1 dir2 同時(shí)創(chuàng)建兩個(gè)目錄
    mkdir -p /tmp/dir1/dir2 創(chuàng)建一個(gè)目錄樹
    rm -f file1 刪除一個(gè)叫做 'file1' 的文件'
    rmdir dir1 刪除一個(gè)叫做 'dir1' 的目錄'
    rm -rf dir1 刪除一個(gè)叫做 'dir1' 的目錄并同時(shí)刪除其內(nèi)容
    rm -rf dir1 dir2 同時(shí)刪除兩個(gè)目錄及它們的內(nèi)容
    mv dir1 new_dir 重命名/移動(dòng) 一個(gè)目錄
    cp file1 file2 復(fù)制一個(gè)文件
    cp dir/* . 復(fù)制一個(gè)目錄下的所有文件到當(dāng)前工作目錄
    cp -a /tmp/dir1 . 復(fù)制一個(gè)目錄到當(dāng)前工作目錄
    cp -a dir1 dir2 復(fù)制一個(gè)目錄
    ln -s file1 lnk1 創(chuàng)建一個(gè)指向文件或目錄的軟鏈接
    ln file1 lnk1 創(chuàng)建一個(gè)指向文件或目錄的物理鏈接
    touch -t 0712250000 file1 修改一個(gè)文件或目錄的時(shí)間戳 - (YYMMDDhhmm)
    file file1 outputs the mime type of the file as text
    iconv -l 列出已知的編碼
    iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.
    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)

     

    文件搜索
    find / -name file1 從 '/' 開始進(jìn)入根文件系統(tǒng)搜索文件和目錄
    find / -user user1 搜索屬于用戶 'user1' 的文件和目錄
    find /home/user1 -name \*.bin 在目錄 '/ home/user1' 中搜索帶有'.bin' 結(jié)尾的文件
    find /usr/bin -type f -atime +100 搜索在過去100天內(nèi)未被使用過的執(zhí)行文件
    find /usr/bin -type f -mtime -10 搜索在10天內(nèi)被創(chuàng)建或者修改過的文件
    find / -name \*.rpm -exec chmod 755 '{}' \; 搜索以 '.rpm' 結(jié)尾的文件并定義其權(quán)限
    find / -xdev -name \*.rpm 搜索以 '.rpm' 結(jié)尾的文件,忽略光驅(qū)、捷盤等可移動(dòng)設(shè)備
    locate \*.ps 尋找以 '.ps' 結(jié)尾的文件 - 先運(yùn)行 'updatedb' 命令
    whereis halt 顯示一個(gè)二進(jìn)制文件、源碼或man的位置
    which halt 顯示一個(gè)二進(jìn)制文件或可執(zhí)行文件的完整路徑

     

    掛載一個(gè)文件系統(tǒng)
    mount /dev/hda2 /mnt/hda2 掛載一個(gè)叫做hda2的盤 - 確定目錄 '/ mnt/hda2' 已經(jīng)存在
    umount /dev/hda2 卸載一個(gè)叫做hda2的盤 - 先從掛載點(diǎn) '/ mnt/hda2' 退出
    fuser -km /mnt/hda2 當(dāng)設(shè)備繁忙時(shí)強(qiáng)制卸載
    umount -n /mnt/hda2 運(yùn)行卸載操作而不寫入 /etc/mtab 文件- 當(dāng)文件為只讀或當(dāng)磁盤寫滿時(shí)非常有用
    mount /dev/fd0 /mnt/floppy 掛載一個(gè)軟盤
    mount /dev/cdrom /mnt/cdrom 掛載一個(gè)cdrom或dvdrom
    mount /dev/hdc /mnt/cdrecorder 掛載一個(gè)cdrw或dvdrom
    mount /dev/hdb /mnt/cdrecorder 掛載一個(gè)cdrw或dvdrom
    mount -o loop file.iso /mnt/cdrom 掛載一個(gè)文件或ISO鏡像文件
    mount -t vfat /dev/hda5 /mnt/hda5 掛載一個(gè)Windows FAT32文件系統(tǒng)
    mount /dev/sda1 /mnt/usbdisk 掛載一個(gè)usb 捷盤或閃存設(shè)備
    mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 掛載一個(gè)windows網(wǎng)絡(luò)共享

     

    磁盤空間
    df -h 顯示已經(jīng)掛載的分區(qū)列表
    ls -lSr |more 以尺寸大小排列文件和目錄
    du -sh dir1 估算目錄 'dir1' 已經(jīng)使用的磁盤空間'
    du -sk * | sort -rn 以容量大小為依據(jù)依次顯示文件和目錄的大小
    rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小為依據(jù)依次顯示已安裝的rpm包所使用的空間 (fedora, redhat類系統(tǒng))
    dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小為依據(jù)顯示已安裝的deb包所使用的空間 (ubuntu, debian類系統(tǒng))

    返回頂部索引 ^

    用戶和群組
    groupadd group_name 創(chuàng)建一個(gè)新用戶組
    groupdel group_name 刪除一個(gè)用戶組
    groupmod -n new_group_name old_group_name 重命名一個(gè)用戶組
    useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 創(chuàng)建一個(gè)屬于 "admin" 用戶組的用戶
    useradd user1 創(chuàng)建一個(gè)新用戶
    userdel -r user1 刪除一個(gè)用戶 ( '-r' 排除主目錄)
    usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nologin user1 修改用戶屬性
    passwd 修改口令
    passwd user1 修改一個(gè)用戶的口令 (只允許root執(zhí)行)
    chage -E 2005-12-31 user1 設(shè)置用戶口令的失效期限
    pwck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的用戶
    grpck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的群組
    newgrp group_name 登陸進(jìn)一個(gè)新的群組以改變新創(chuàng)建文件的預(yù)設(shè)群組

    返回頂部索引 ^

    文件的權(quán)限 - 使用 "+" 設(shè)置權(quán)限,使用 "-" 用于取消
    ls -lh 顯示權(quán)限
    ls /tmp | pr -T5 -W$COLUMNS 將終端劃分成5欄顯示
    chmod ugo+rwx directory1 設(shè)置目錄的所有人(u)、群組(g)以及其他人(o)以讀(r )、寫(w)和執(zhí)行(x)的權(quán)限
    chmod go-rwx directory1 刪除群組(g)與其他人(o)對(duì)目錄的讀寫執(zhí)行權(quán)限
    chown user1 file1 改變一個(gè)文件的所有人屬性
    chown -R user1 directory1 改變一個(gè)目錄的所有人屬性并同時(shí)改變改目錄下所有文件的屬性
    chgrp group1 file1 改變文件的群組
    chown user1:group1 file1 改變一個(gè)文件的所有人和群組屬性
    find / -perm -u+s 羅列一個(gè)系統(tǒng)中所有使用了SUID控制的文件
    chmod u+s /bin/file1 設(shè)置一個(gè)二進(jìn)制文件的 SUID 位 - 運(yùn)行該文件的用戶也被賦予和所有者同樣的權(quán)限
    chmod u-s /bin/file1 禁用一個(gè)二進(jìn)制文件的 SUID位
    chmod g+s /home/public 設(shè)置一個(gè)目錄的SGID 位 - 類似SUID ,不過這是針對(duì)目錄的
    chmod g-s /home/public 禁用一個(gè)目錄的 SGID 位
    chmod o+t /home/public 設(shè)置一個(gè)文件的 STIKY 位 - 只允許合法所有人刪除文件
    chmod o-t /home/public 禁用一個(gè)目錄的 STIKY 位

    返回頂部索引 ^

    文件的特殊屬性 - 使用 "+" 設(shè)置權(quán)限,使用 "-" 用于取消
    chattr +a file1 只允許以追加方式讀寫文件
    chattr +c file1 允許這個(gè)文件能被內(nèi)核自動(dòng)壓縮/解壓
    chattr +d file1 在進(jìn)行文件系統(tǒng)備份時(shí),dump程序?qū)⒑雎赃@個(gè)文件
    chattr +i file1 設(shè)置成不可變的文件,不能被刪除、修改、重命名或者鏈接
    chattr +s file1 允許一個(gè)文件被安全地刪除
    chattr +S file1 一旦應(yīng)用程序?qū)@個(gè)文件執(zhí)行了寫操作,使系統(tǒng)立刻把修改的結(jié)果寫到磁盤
    chattr +u file1 若文件被刪除,系統(tǒng)會(huì)允許你在以后恢復(fù)這個(gè)被刪除的文件
    lsattr 顯示特殊的屬性

    返回頂部索引 ^

    打包和壓縮文件
    bunzip2 file1.bz2 解壓一個(gè)叫做 'file1.bz2'的文件
    bzip2 file1 壓縮一個(gè)叫做 'file1' 的文件
    gunzip file1.gz 解壓一個(gè)叫做 'file1.gz'的文件
    gzip file1 壓縮一個(gè)叫做 'file1'的文件
    gzip -9 file1 最大程度壓縮
    rar a file1.rar test_file 創(chuàng)建一個(gè)叫做 'file1.rar' 的包
    rar a file1.rar file1 file2 dir1 同時(shí)壓縮 'file1', 'file2' 以及目錄 'dir1'
    rar x file1.rar 解壓rar包
    unrar x file1.rar 解壓rar包
    tar -cvf archive.tar file1 創(chuàng)建一個(gè)非壓縮的 tarball
    tar -cvf archive.tar file1 file2 dir1 創(chuàng)建一個(gè)包含了 'file1', 'file2' 以及 'dir1'的檔案文件
    tar -tf archive.tar 顯示一個(gè)包中的內(nèi)容
    tar -xvf archive.tar 釋放一個(gè)包
    tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp目錄下
    tar -cvfj archive.tar.bz2 dir1 創(chuàng)建一個(gè)bzip2格式的壓縮包
    tar -xvfj archive.tar.bz2 解壓一個(gè)bzip2格式的壓縮包
    tar -cvfz archive.tar.gz dir1 創(chuàng)建一個(gè)gzip格式的壓縮包
    tar -xvfz archive.tar.gz 解壓一個(gè)gzip格式的壓縮包
    zip file1.zip file1 創(chuàng)建一個(gè)zip格式的壓縮包
    zip -r file1.zip file1 file2 dir1 將幾個(gè)文件和目錄同時(shí)壓縮成一個(gè)zip格式的壓縮包
    unzip file1.zip 解壓一個(gè)zip格式壓縮包

    返回頂部索引 ^

    RPM 包 - (Fedora, Redhat及類似系統(tǒng))
    rpm -ivh package.rpm 安裝一個(gè)rpm包
    rpm -ivh --nodeeps package.rpm 安裝一個(gè)rpm包而忽略依賴關(guān)系警告
    rpm -U package.rpm 更新一個(gè)rpm包但不改變其配置文件
    rpm -F package.rpm 更新一個(gè)確定已經(jīng)安裝的rpm包
    rpm -e package_name.rpm 刪除一個(gè)rpm包
    rpm -qa 顯示系統(tǒng)中所有已經(jīng)安裝的rpm包
    rpm -qa | grep httpd 顯示所有名稱中包含 "httpd" 字樣的rpm包
    rpm -qi package_name 獲取一個(gè)已安裝包的特殊信息
    rpm -qg "System Environment/Daemons" 顯示一個(gè)組件的rpm包
    rpm -ql package_name 顯示一個(gè)已經(jīng)安裝的rpm包提供的文件列表
    rpm -qc package_name 顯示一個(gè)已經(jīng)安裝的rpm包提供的配置文件列表
    rpm -q package_name --whatrequires 顯示與一個(gè)rpm包存在依賴關(guān)系的列表
    rpm -q package_name --whatprovides 顯示一個(gè)rpm包所占的體積
    rpm -q package_name --scripts 顯示在安裝/刪除期間所執(zhí)行的腳本l
    rpm -q package_name --changelog 顯示一個(gè)rpm包的修改歷史
    rpm -qf /etc/httpd/conf/httpd.conf 確認(rèn)所給的文件由哪個(gè)rpm包所提供
    rpm -qp package.rpm -l 顯示由一個(gè)尚未安裝的rpm包提供的文件列表
    rpm --import /media/cdrom/RPM-GPG-KEY 導(dǎo)入公鑰數(shù)字證書
    rpm --checksig package.rpm 確認(rèn)一個(gè)rpm包的完整性
    rpm -qa gpg-pubkey 確認(rèn)已安裝的所有rpm包的完整性
    rpm -V package_name 檢查文件尺寸、 許可、類型、所有者、群組、MD5檢查以及最后修改時(shí)間
    rpm -Va 檢查系統(tǒng)中所有已安裝的rpm包- 小心使用
    rpm -Vp package.rpm 確認(rèn)一個(gè)rpm包還未安裝
    rpm2cpio package.rpm | cpio --extract --make-directories *bin* 從一個(gè)rpm包運(yùn)行可執(zhí)行文件
    rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 從一個(gè)rpm源碼安裝一個(gè)構(gòu)建好的包
    rpmbuild --rebuild package_name.src.rpm 從一個(gè)rpm源碼構(gòu)建一個(gè) rpm 包

    返回頂部索引 ^

    YUM 軟件包升級(jí)器 - (Fedora, RedHat及類似系統(tǒng))
    yum install package_name 下載并安裝一個(gè)rpm包
    yum localinstall package_name.rpm 將安裝一個(gè)rpm包,使用你自己的軟件倉庫為你解決所有依賴關(guān)系
    yum update package_name.rpm 更新當(dāng)前系統(tǒng)中所有安裝的rpm包
    yum update package_name 更新一個(gè)rpm包
    yum remove package_name 刪除一個(gè)rpm包
    yum list 列出當(dāng)前系統(tǒng)中安裝的所有包
    yum search package_name 在rpm倉庫中搜尋軟件包
    yum clean packages 清理rpm緩存刪除下載的包
    yum clean headers 刪除所有頭文件
    yum clean all 刪除所有緩存的包和頭文件

    返回頂部索引 ^

    DEB 包 (Debian, Ubuntu 以及類似系統(tǒng))
    dpkg -i package.deb 安裝/更新一個(gè) deb 包
    dpkg -r package_name 從系統(tǒng)刪除一個(gè) deb 包
    dpkg -l 顯示系統(tǒng)中所有已經(jīng)安裝的 deb 包
    dpkg -l | grep httpd 顯示所有名稱中包含 "httpd" 字樣的deb包
    dpkg -s package_name 獲得已經(jīng)安裝在系統(tǒng)中一個(gè)特殊包的信息
    dpkg -L package_name 顯示系統(tǒng)中已經(jīng)安裝的一個(gè)deb包所提供的文件列表
    dpkg --contents package.deb 顯示尚未安裝的一個(gè)包所提供的文件列表
    dpkg -S /bin/ping 確認(rèn)所給的文件由哪個(gè)deb包提供

    返回頂部索引 ^

    APT 軟件工具 (Debian, Ubuntu 以及類似系統(tǒng))
    apt-get install package_name 安裝/更新一個(gè) deb 包
    apt-cdrom install package_name 從光盤安裝/更新一個(gè) deb 包
    apt-get update 升級(jí)列表中的軟件包
    apt-get upgrade 升級(jí)所有已安裝的軟件
    apt-get remove package_name 從系統(tǒng)刪除一個(gè)deb包
    apt-get check 確認(rèn)依賴的軟件倉庫正確
    apt-get clean 從下載的軟件包中清理緩存
    apt-cache search searched-package 返回包含所要搜索字符串的軟件包名稱

    返回頂部索引 ^

    查看文件內(nèi)容
    cat file1 從第一個(gè)字節(jié)開始正向查看文件的內(nèi)容
    tac file1 從最后一行開始反向查看一個(gè)文件的內(nèi)容
    more file1 查看一個(gè)長(zhǎng)文件的內(nèi)容
    less file1 類似于 'more' 命令,但是它允許在文件中和正向操作一樣的反向操作
    head -2 file1 查看一個(gè)文件的前兩行
    tail -2 file1 查看一個(gè)文件的最后兩行
    tail -f /var/log/messages 實(shí)時(shí)查看被添加到一個(gè)文件中的內(nèi)容

    返回頂部索引 ^

    文本處理
    cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUT
    cat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一個(gè)文件的詳細(xì)說明文本,并將簡(jiǎn)介寫入一個(gè)新文件中
    cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一個(gè)文件的詳細(xì)說明文本,并將簡(jiǎn)介寫入一個(gè)已有的文件中
    grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關(guān)鍵詞"Aug"
    grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以"Aug"開始的詞匯
    grep [0-9] /var/log/messages 選擇 '/var/log/messages' 文件中所有包含數(shù)字的行
    grep Aug -R /var/log/* 在目錄 '/var/log' 及隨后的目錄中搜索字符串"Aug"
    sed 's/stringa1/stringa2/g' example.txt 將example.txt文件中的 "string1" 替換成 "string2"
    sed '/^$/d' example.txt 從example.txt文件中刪除所有空白行
    sed '/ *#/d; /^$/d' example.txt 從example.txt文件中刪除所有注釋和空白行
    echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下單元格內(nèi)容
    sed -e '1d' result.txt 從文件example.txt 中排除第一行
    sed -n '/stringa1/p' 查看只包含詞匯 "string1"的行
    sed -e 's/ *$//' example.txt 刪除每一行最后的空白字符
    sed -e 's/stringa1//g' example.txt 從文檔中只刪除詞匯 "string1" 并保留剩余全部
    sed -n '1,5p;5q' example.txt 查看從第一行到第5行內(nèi)容
    sed -n '5p;5q' example.txt 查看第5行
    sed -e 's/00*/0/g' example.txt 用單個(gè)零替換多個(gè)零
    cat -n file1 標(biāo)示文件的行數(shù)
    cat example.txt | awk 'NR%2==1' 刪除example.txt文件中的所有偶數(shù)行
    echo a b c | awk '{print $1}' 查看一行第一欄
    echo a b c | awk '{print $1,$3}' 查看一行的第一和第三欄
    paste file1 file2 合并兩個(gè)文件或兩欄的內(nèi)容
    paste -d '+' file1 file2 合并兩個(gè)文件或兩欄的內(nèi)容,中間用"+"區(qū)分
    sort file1 file2 排序兩個(gè)文件的內(nèi)容
    sort file1 file2 | uniq 取出兩個(gè)文件的并集(重復(fù)的行只保留一份)
    sort file1 file2 | uniq -u 刪除交集,留下其他的行
    sort file1 file2 | uniq -d 取出兩個(gè)文件的交集(只留下同時(shí)存在于兩個(gè)文件中的文件)
    comm -1 file1 file2 比較兩個(gè)文件的內(nèi)容只刪除 'file1' 所包含的內(nèi)容
    comm -2 file1 file2 比較兩個(gè)文件的內(nèi)容只刪除 'file2' 所包含的內(nèi)容
    comm -3 file1 file2 比較兩個(gè)文件的內(nèi)容只刪除兩個(gè)文件共有的部分

    返回頂部索引 ^


    字符設(shè)置和文件格式轉(zhuǎn)換
    dos2unix filedos.txt fileunix.txt 將一個(gè)文本文件的格式從MSDOS轉(zhuǎn)換成UNIX
    unix2dos fileunix.txt filedos.txt 將一個(gè)文本文件的格式從UNIX轉(zhuǎn)換成MSDOS
    recode ..HTML < page.txt > page.html 將一個(gè)文本文件轉(zhuǎn)換成html
    recode -l | more 顯示所有允許的轉(zhuǎn)換格式

    返回頂部索引 ^

    文件系統(tǒng)分析
    badblocks -v /dev/hda1 檢查磁盤hda1上的壞磁塊
    fsck /dev/hda1 修復(fù)/檢查hda1磁盤上linux文件系統(tǒng)的完整性
    fsck.ext2 /dev/hda1 修復(fù)/檢查hda1磁盤上ext2文件系統(tǒng)的完整性
    e2fsck /dev/hda1 修復(fù)/檢查hda1磁盤上ext2文件系統(tǒng)的完整性
    e2fsck -j /dev/hda1 修復(fù)/檢查hda1磁盤上ext3文件系統(tǒng)的完整性
    fsck.ext3 /dev/hda1 修復(fù)/檢查hda1磁盤上ext3文件系統(tǒng)的完整性
    fsck.vfat /dev/hda1 修復(fù)/檢查hda1磁盤上fat文件系統(tǒng)的完整性
    fsck.msdos /dev/hda1 修復(fù)/檢查hda1磁盤上dos文件系統(tǒng)的完整性
    dosfsck /dev/hda1 修復(fù)/檢查hda1磁盤上dos文件系統(tǒng)的完整性

    返回頂部索引 ^

    初始化一個(gè)文件系統(tǒng)
    mkfs /dev/hda1 在hda1分區(qū)創(chuàng)建一個(gè)文件系統(tǒng)
    mke2fs /dev/hda1 在hda1分區(qū)創(chuàng)建一個(gè)linux ext2的文件系統(tǒng)
    mke2fs -j /dev/hda1 在hda1分區(qū)創(chuàng)建一個(gè)linux ext3(日志型)的文件系統(tǒng)
    mkfs -t vfat 32 -F /dev/hda1 創(chuàng)建一個(gè) FAT32 文件系統(tǒng)
    fdformat -n /dev/fd0 格式化一個(gè)軟盤
    mkswap /dev/hda3 創(chuàng)建一個(gè)swap文件系統(tǒng)

    返回頂部索引 ^

    SWAP文件系統(tǒng)
    mkswap /dev/hda3 創(chuàng)建一個(gè)swap文件系統(tǒng)
    swapon /dev/hda3 啟用一個(gè)新的swap文件系統(tǒng)
    swapon /dev/hda2 /dev/hdb3 啟用兩個(gè)swap分區(qū)

    返回頂部索引 ^

    備份
    dump -0aj -f /tmp/home0.bak /home 制作一個(gè) '/home' 目錄的完整備份
    dump -1aj -f /tmp/home0.bak /home 制作一個(gè) '/home' 目錄的交互式備份
    restore -if /tmp/home0.bak 還原一個(gè)交互式備份
    rsync -rogpav --delete /home /tmp 同步兩邊的目錄
    rsync -rogpav -e ssh --delete /home ip_address:/tmp 通過SSH通道rsync
    rsync -az -e ssh --delete ip_addr:/home/public /home/local 通過ssh和壓縮將一個(gè)遠(yuǎn)程目錄同步到本地目錄
    rsync -az -e ssh --delete /home/local ip_addr:/home/public 通過ssh和壓縮將本地目錄同步到遠(yuǎn)程目錄
    dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通過ssh在遠(yuǎn)程主機(jī)上執(zhí)行一次備份本地磁盤的操作
    dd if=/dev/sda of=/tmp/file1 備份磁盤內(nèi)容到一個(gè)文件
    tar -Puf backup.tar /home/user 執(zhí)行一次對(duì) '/home/user' 目錄的交互式備份操作
    ( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通過ssh在遠(yuǎn)程目錄中復(fù)制一個(gè)目錄內(nèi)容
    ( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通過ssh在遠(yuǎn)程目錄中復(fù)制一個(gè)本地目錄
    tar cf - . | (cd /tmp/backup ; tar xf - ) 本地將一個(gè)目錄復(fù)制到另一個(gè)地方,保留原有權(quán)限及鏈接
    find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 從一個(gè)目錄查找并復(fù)制所有以 '.txt' 結(jié)尾的文件到另一個(gè)目錄
    find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 結(jié)尾的文件并做成一個(gè)bzip包
    dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一個(gè)將 MBR (Master Boot Record)內(nèi)容復(fù)制到軟盤的動(dòng)作
    dd if=/dev/fd0 of=/dev/hda bs=512 count=1 從已經(jīng)保存到軟盤的備份中恢復(fù)MBR內(nèi)容

    返回頂部索引 ^

    光盤
    cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一個(gè)可復(fù)寫的光盤內(nèi)容
    mkisofs /dev/cdrom > cd.iso 在磁盤上創(chuàng)建一個(gè)光盤的iso鏡像文件
    mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盤上創(chuàng)建一個(gè)壓縮了的光盤iso鏡像文件
    mkisofs -J -allow-leading-dots -R -V "Label CD" -iso-level 4 -o ./cd.iso data_cd 創(chuàng)建一個(gè)目錄的iso鏡像文件
    cdrecord -v dev=/dev/cdrom cd.iso 刻錄一個(gè)ISO鏡像文件
    gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻錄一個(gè)壓縮了的ISO鏡像文件
    mount -o loop cd.iso /mnt/iso 掛載一個(gè)ISO鏡像文件
    cd-paranoia -B 從一個(gè)CD光盤轉(zhuǎn)錄音軌到 wav 文件中
    cd-paranoia -- "-3" 從一個(gè)CD光盤轉(zhuǎn)錄音軌到 wav 文件中(參數(shù)-3)
    cdrecord --scanbus 掃描總線以識(shí)別scsi通道
    dd if=/dev/hdc | md5sum 校驗(yàn)一個(gè)設(shè)備的md5sum編碼,例如一張 CD

    返回頂部索引 ^

    網(wǎng)絡(luò) - (以太網(wǎng)和WIFI無線)
    ifconfig eth0 顯示一個(gè)以太網(wǎng)卡的配置
    ifup eth0 啟用一個(gè) 'eth0' 網(wǎng)絡(luò)設(shè)備
    ifdown eth0 禁用一個(gè) 'eth0' 網(wǎng)絡(luò)設(shè)備
    ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址
    ifconfig eth0 promisc 設(shè)置 'eth0' 成混雜模式以嗅探數(shù)據(jù)包 (sniffing)
    dhclient eth0 以dhcp模式啟用 'eth0'
    route -n show routing table
    route add -net 0/0 gw IP_Gateway configura default gateway
    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'
    route del 0/0 gw IP_gateway remove static route
    echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing
    hostname show hostname of system
    host www.example.com lookup hostname to resolve name to ip address and viceversa(1)
    nslookup www.example.com lookup hostname to resolve name to ip address and viceversa(2)
    ip link show show link status of all interfaces
    mii-tool eth0 show link status of 'eth0'
    ethtool eth0 show statistics of network card 'eth0'
    netstat -tup show all active network connections and their PID
    netstat -tupl show all network services listening on the system and their PID
    tcpdump tcp port 80 show all HTTP traffic
    iwlist scan show wireless networks
    iwconfig eth1 show configuration of a wireless network card
    hostname show hostname
    host www.example.com lookup hostname to resolve name to ip address and viceversa
    nslookup www.example.com lookup hostname to resolve name to ip address and viceversa
    whois www.example.com lookup on Whois database

    GO TOP INDEX ^
    Microsoft Windows networks (SAMBA)
    nbtscan ip_addr netbios name resolution
    nmblookup -A ip_addr netbios name resolution
    smbclient -L ip_addr/hostname show remote shares of a windows host
    smbget -Rr smb://ip_addr/share like wget can download files from a host windows via smb
    mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share mount a windows network share

     

    posted @ 2013-09-09 18:30 yuhaibo736 閱讀(818) | 評(píng)論 (0)編輯 收藏

    手工建庫后出現(xiàn)ORA-06553:PLS-213:Standard包不可訪問 問題,在網(wǎng)上查下了資料解決了!

    ORACLE數(shù)據(jù)庫,在一次意外操作中,使得ORACLE數(shù)據(jù)庫出現(xiàn)故障,提示:ORA-06553:PLS-213:Standard包不可訪問。一般都是由于操作不當(dāng)引起的,如:刪除某一用戶權(quán)限、刪除某一數(shù)據(jù)等等。下面把我總結(jié)出來的處理經(jīng)驗(yàn)公布如下:

    另外說幾點(diǎn):網(wǎng)上很多人的博客雖然也有說明此問題的解決方法,但都比較專業(yè),沒有一些操作經(jīng)驗(yàn)的根本看不懂,也不知道如何操作,往往使讀者更糊涂。

    首先,本文測(cè)試平臺(tái):windows 2003,oracle 9i

    我們的目標(biāo):執(zhí)行catalog.sql和catproc.sql重建數(shù)據(jù)字典。

    1.點(diǎn)擊左下角的“開始”--運(yùn)行 輸入 sqlplus /nolog

    2.使用“超級(jí)管理員”(sys)的賬戶和密碼 進(jìn)入你的系統(tǒng),命令如下:

    sql > connect sys/你的密碼@你的數(shù)據(jù)庫 as sysdba

    如果提示正確登錄,則已經(jīng)成功一半了。如果沒有成功登錄,則參考是否忘記密碼,忘記密碼的補(bǔ)救不在本文的范圍,涉及到的請(qǐng)自行參考資料。

    3. SQL>@D:\oracle\ora90\rdbms\admin\catalog.sql

    4. SQL>@D:\oracle\ora90\rdbms\admin\CATPROC.SQL

    5. SQL>@D:\oracle\ora90\rdbms\admin\DBMSSUTIL.SQL

    6. SQL>ALTER PACKAGE STANDARD COMPILE;

    7. SQL>ALTER PACKAGE DBMS_STANDARD COMPILE;

    8. SQL>SHUTDOWN ABOUT;

    9. SQL>STARTUP;

    參考:(一般不用,如果恢復(fù)成功。)

    @ORACLE_BASE\ORACLE_HOME\rdbms\admin\utlrp.sql

    posted @ 2013-09-09 18:29 yuhaibo736 閱讀(995) | 評(píng)論 (0)編輯 收藏

    webservice的原理及概念

    1 webservice

    所謂webservice就是定義了一套標(biāo)準(zhǔn)的調(diào)用過程:

    a 服務(wù)器首先用一套標(biāo)準(zhǔn)的方法向外界描述它所提供的服務(wù)的內(nèi)容,就屬于WSDL

    b 客戶端需要以一種標(biāo)準(zhǔn)的協(xié)議來調(diào)用此服務(wù),這屬于SOAP.

    c 服務(wù)提供者將服務(wù)內(nèi)容放在一個(gè)公共的網(wǎng)址讓大家查詢,就屬于UDDI.

    2 命名空間

    命名空間其主要目的通過加一個(gè)命名屬性,使名稱保持唯一性。WSDL有大量的使用命名空間的地方。本質(zhì)上WSDL是一個(gè)XML文件,作為一個(gè)XML文件,為了區(qū)別同名的元素,就需要采用命名空間的概念。

    3 WSDL的本質(zhì):服務(wù)內(nèi)容的標(biāo)準(zhǔn)化描述

    WSDL的全稱是web service Description Language,是一種基于XML格式的關(guān)于web服務(wù)的描述語言。其主要目的在于web service的提供者將自己的web服務(wù)的所有相關(guān)內(nèi)容,如所提供的服務(wù)的傳輸方式,服務(wù)方法接口,接口參數(shù),服務(wù)路徑等,生成相應(yīng)的完全文檔,發(fā)布給使用者。使用者可以通過這個(gè)WSDL文檔,創(chuàng)建相應(yīng)的SOAP請(qǐng)求消息,通過HTTP傳遞給webservice提供者;web服務(wù)在完成服務(wù)請(qǐng)求后,將SOAP返回消息傳回請(qǐng)求者,服務(wù)請(qǐng)求者再根據(jù)WSDL文檔將SOAP返回消息解析成自己能夠理解的內(nèi)容。

    4 SOAP的本質(zhì):標(biāo)準(zhǔn)的傳輸協(xié)議

    SOAP是web service的標(biāo)準(zhǔn)通信協(xié)議,SOAP為simple object access protocoll的縮寫,簡(jiǎn)單對(duì)象訪問協(xié)議. 它是一種標(biāo)準(zhǔn)化的傳輸消息的XML消息格式。

    5 UDDI的本質(zhì):服務(wù)的公共網(wǎng)址

    將web service進(jìn)行UDDI注冊(cè)發(fā)布,UDDI是一種創(chuàng)建注冊(cè)表服務(wù)的規(guī)范,以便大家將自己的web service進(jìn)行注冊(cè)發(fā)布供使用者查找.然而當(dāng)服務(wù)提供者想將自己的web service向全世界公布,以便外部找到其服務(wù)時(shí),那么服務(wù)提供者可以將自己的web service注冊(cè)到相應(yīng)的UDDI商用注冊(cè)網(wǎng)站,目前全球有IBM等4家UDDI商用注冊(cè)網(wǎng)站。因?yàn)閃SDL文件中已經(jīng)給定了web service的地址URI,外部可以直接通過WSDL提供的URI進(jìn)行相應(yīng)的web service調(diào)用。所以UDDI并不是一個(gè)必需的web service組件,服務(wù)方完全可以不進(jìn)行UDDI的注冊(cè)。

    posted @ 2013-04-23 11:17 yuhaibo736 閱讀(258) | 評(píng)論 (0)編輯 收藏

    java處理word已經(jīng)存在很多種方法了,但是用起來都不是那么方便,而且不太靈活,而使用xml的方法可以做到非常靈活,你可以先建好模板,然后往里面填數(shù),模板怎么建,填出來的效果就是怎么樣的。首先說說word和xml的關(guān)系,每個(gè)word它都對(duì)應(yīng)著一個(gè)xml文件,也就是說你修改了xml,對(duì)應(yīng)的word文件也就跟著修改了。通過word的保存功能可以將一個(gè)word文件保存為xml文件,該文件雖然是.xml格式的,但是直接雙擊打開的話還是使用word打開,所以你只能用txt將它打開,用txt打開之后將里面的一句話:<?mso-application progid="Word.Document"?>去掉,然后保存,接著就可以雙擊直接打開了,這樣使用的就是IE打開的,你這樣就可以查看里面的節(jié)點(diǎn)具體的構(gòu)造。

    最上面的主節(jié)點(diǎn)是<w:wordDocument>(如果不是的話,相信你將word文件保存成xml的時(shí)候使用的是07word,選擇的是:word xml文檔(*.xml),你可以選擇word 2003 xml文檔(*.xml)試試);該主節(jié)點(diǎn)下面有大致8個(gè)節(jié)點(diǎn),其中我們要操作的就是<w:body>節(jié)點(diǎn),該節(jié)點(diǎn)是word的正文節(jié)點(diǎn),其他的節(jié)點(diǎn)沒有去研究;<w:body>下面包含的節(jié)點(diǎn)可能會(huì)有:<w:p>段落節(jié)點(diǎn)、<w:tbl>表格節(jié)點(diǎn)。

    接著要做的就是在java程序中,使用dom來解析編輯xml文件,這里貼出一些代碼來供大家參考:

     

    public Document loadXML(String filename){//////////加載xml文件

    Document document = null; 

       try{

       DocumentBuilderFactory   factory = DocumentBuilderFactory.newInstance();    

           DocumentBuilder builder=factory.newDocumentBuilder();    

           document=builder.parse(new File(filename));    

           document.normalize(); 

       }catch (Exception ex){

           ex.printStackTrace(); 

       }   

       return document; 

    }

     

    public boolean doc2XmlFile(Document document,File targetFile){ ///////回寫xml文件

    boolean flag = true; 

       try{

       TransformerFactory tFactory = TransformerFactory.newInstance();    

           Transformer transformer = tFactory.newTransformer();  

           DOMSource source = new DOMSource(document);  

           StreamResult result = new StreamResult(targetFile.toURI().getPath());

           transformer.transform(source, result);  

       }catch(Exception ex){ 

           flag = false; 

           ex.printStackTrace(); 

       } 

       return flag;       

    }

    String void function(){///////////程序入口

     

    String rootPath=ServletActionContext.getServletContext().getRealPath("/excelTemplate")+"\\";

    try{

    Document document=loadXML(rootPath+"projectModel.xml");

    Element root = document.getDocumentElement();

    NodeList rootList=root.getChildNodes();

    Node bodyNode=null;///////w:body

    for(int i=0;i<rootList.getLength();i++){////////找到<w:body>節(jié)點(diǎn)

    bodyNode=rootList.item(i);

    if("w:body".equals(bodyNode.getNodeName())){

    break;

    }

    }

    NodeList nodeList=bodyNode.getChildNodes();

    for(int i=0;i<nodeList.getLength();i++){

    Node node=nodeList.item(i);

    if("w:tbl".equals(node.getNodeName())){

    dealWithTableNode(document,node);

    }else if("w:p".equals(node.getNodeName())){

    dealWithWPNode(document,node);

    }

     

    }

    File destFile = File.createTempFile("project", ".xml");

    doc2XmlFile(document,destFile);///////回寫

    inputStream = new FileInputStream(destFile);/////////生成流,用于下載

    fileName=URLEncoder.encode(project.getProjectName(),"utf-8")+".doc";

    }catch(Exception e){

    e.printStackTrace();

    }

     

    }

    注意:

    1、在解析編輯xml文件的時(shí)候一定好看好節(jié)點(diǎn)的位置,比如一般的文本內(nèi)容的話可能是在<w:p>節(jié)點(diǎn)下的<w:r>節(jié)點(diǎn)下的<w:t>里設(shè)置,使用的是getTextContent()方法來獲取它的內(nèi)容,setTextContent()來設(shè)置它的參數(shù)

    2、對(duì)于圖片如何插入呢?首先最好在模板中插入一張圖片,主要用于定下圖片的那些格式,然后圖片必須用java轉(zhuǎn)成base64的字符串,這里也提供一個(gè)方法:

     

    private String toBASE64codeFile(File file){

    String codeString="";

    try{

    FileInputStream fis=new FileInputStream(file);

    BASE64Encoder encoder=new BASE64Encoder();

    byte[] b=new byte[228];

    int count=-1,n=0;

    while((count=fis.read(b))!=-1){

    codeString+=encoder.encode(b);

    }

    return codeString;

    }catch(Exception e){

    e.printStackTrace();

    return "";

    }

    }

    然后找到<w:pict>節(jié)點(diǎn):一般如果圖片是在table里的話,該節(jié)點(diǎn)就是在<w:tbl>-<w:tr>-<w:tc>-<w:p>-<w:r>節(jié)點(diǎn)下面,不在table里的話就是:<w:p>-<w:r>,建議仿照用IE打開的xml對(duì)照一下。然后將該節(jié)點(diǎn)下的<w:binData>的內(nèi)容置成你所要插入的圖片的base64碼即可。

    posted @ 2013-03-06 13:30 yuhaibo736 閱讀(613) | 評(píng)論 (0)編輯 收藏

    將幾個(gè)word文件合并到一個(gè)word文件,需要下載jacob-1.17-M2.zip,將壓縮文件內(nèi)的jacob-1.17-M2-x64.dll放到windows/system32下,將jacob.jar放到項(xiàng)目中
    public static void main(String[] args) {
       List list  = new ArrayList();
       String file1= "D:\\file1.doc";
       String file2= "D:\\file2.doc";
       String file3= "D:\\file3.doc";
       list.add(file1);
       list.add(file2);
       list.add(file3);
       uniteDoc(list,"d:\\file.doc");
     }
     public static void uniteDoc(List fileList, String savepaths) {
      if (fileList.size() == 0 || fileList == null) {
       return;
      }
      //打開word
      ActiveXComponent app = new ActiveXComponent("Word.Application");//啟動(dòng)word
      try {
       // 設(shè)置word不可見
       app.setProperty("Visible", new Variant(false));
       //獲得documents對(duì)象
       Object docs = app.getProperty("Documents").toDispatch();
       //打開第一個(gè)文件
       Object doc = Dispatch
                    .invoke(
                            (Dispatch) docs,
                            "Open",
                            Dispatch.Method,
                            new Object[] { (String) fileList.get(0),
                                    new Variant(false), new Variant(true) },
                            new int[3]).toDispatch();
       //追加文件
       for (int i = 1; i < fileList.size(); i++) {
        Dispatch.invoke(app.getProperty("Selection").toDispatch(),
                        "insertFile", Dispatch.Method, new Object[] {
                                (String) fileList.get(i), "",
                                new Variant(false), new Variant(false),
                                new Variant(false) }, new int[3]);
       }
       //保存新的word文件
       Dispatch.invoke((Dispatch) doc, "SaveAs", Dispatch.Method,
                    new Object[] { savepaths, new Variant(1) }, new int[3]);
       Variant f = new Variant(false);
       Dispatch.call((Dispatch) doc, "Close", f);
      } catch (Exception e) {
       throw new RuntimeException("合并word文件出錯(cuò).原因:" + e);
      } finally {
       app.invoke("Quit", new Variant[] {});
      }
     }


    posted @ 2013-03-06 13:20 yuhaibo736 閱讀(1242) | 評(píng)論 (0)編輯 收藏


    package com.cbd.dk.test;

    import java.util.ListIterator;
    import java.util.Stack;

    public class Test {

     private String src;

     public Test(String src) {
      this.src = src;
     }
     public double getResult() {
      String postfix = getPostfix();
      Stack<String> stk = new Stack<String>();
      //System.out.println(postfix);
      String parts[] = postfix.split(" +");
      double result=0;
      for(int i=0; i<parts.length; i++){
       char tmp = parts[i].charAt(0);
       if(!isOperator(tmp)){
        stk.push(parts[i]);
       }else{
        double a = Double.parseDouble(stk.pop());
        double b = Double.parseDouble(stk.pop());
        result = calculate(b,a,tmp);
        stk.push(String.valueOf(result));
       }
      }
      return result;
     }


     /**
      * test if the character is an operator,such +,-,*,/
      * @param op  the character to test
      * @return  true if op is an operator otherwise false
      */
     private boolean isOperator(char op){
      return (op=='+'||op=='-'||op=='*'||op=='/');
     }


     /**
      * calculate an expression such (a op b)
      * @param a  number 1
      * @param b  number 2
      * @param op the operator
      * @return  (double)(a op b)
      */
     public double calculate(double a, double b, char op) {
      switch (op) {
       case '+':
        return a + b;
       case '-':
        return a - b;
       case '*':
        return a * b;
       case '/':
        return a / b;
      }
      return -1;
     }


     /**
      * convert the suffix to postfix
      * @return the postfix as a string
      */
     private String getPostfix() {
      Stack<String> stk = new Stack<String>();
      String postfix = new String();
      char op;
      int i = 0;
      while (i < src.length()) {
       if (Character.isDigit(src.charAt(i))||src.charAt(i)=='.') {
        postfix += " ";
        do {
         postfix += src.charAt(i++);
        } while ((i < src.length()) && (Character.isDigit(src.charAt(i))));
        postfix += " ";
       }else {
        switch (op = src.charAt(i++)) {
         case '(':
          stk.push("(");
          break;
         case ')':
          while (stk.peek() != "(") {
           String tmp = stk.pop();
           postfix += tmp;
           if(tmp.length()==1 && isOperator(tmp.charAt(0)))
            postfix += " ";
          }
          stk.pop();
          postfix += " ";
          break;
         case '+':
         case '-':
          while ((!stk.empty()) && (stk.peek() != "(")) {
           postfix += stk.pop()+" ";
          }
          stk.push(new Character(op).toString());
          break;
         case '*':
         case '/':
          while ((!stk.empty()) && ((stk.peek() == "*") || (stk.peek() == "/"))) {
           postfix += stk.pop()+" ";
          }
          stk.push(new Character(op).toString());
          break;
        }
       }
      }
      ListIterator it = stk.listIterator(stk.size());
      while (it.hasPrevious())
       postfix += it.previous() + " ";
      return postfix.trim().replaceAll(" +\\.",".");
     }

     /**
      * main function
      * @param args
      */
     public static void main(String args[]) {
      //System.out.println(new Test("((1.5+6.000)*9+9.36)*(8-8*8+8*7)").getResult());
      System.out.println(new Test("(2+(3*2)/2)").getResult());
     }
    }

    posted @ 2012-12-11 16:24 yuhaibo736 閱讀(1134) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 久久久久久久免费视频| 亚洲第一极品精品无码久久| 亚洲精品亚洲人成在线播放| 在线涩涩免费观看国产精品| 亚洲国产精品成人| 亚洲AV永久无码精品放毛片| 免费精品国产自产拍在线观看图片 | 亚洲欧洲专线一区| 国产成在线观看免费视频| 色播亚洲视频在线观看| 免费污视频在线观看| 亚洲一区二区三区偷拍女厕 | 在线观看亚洲av每日更新| 羞羞视频在线免费观看| 日日AV拍夜夜添久久免费| 亚洲性无码一区二区三区| 成年免费大片黄在线观看岛国| 亚洲综合视频在线观看| **真实毛片免费观看| 亚洲视频日韩视频| 2019中文字幕在线电影免费| 67pao强力打造67194在线午夜亚洲| 国产无遮挡无码视频免费软件 | 在线亚洲精品福利网址导航| 色爽黄1000部免费软件下载| 四虎永久免费影院| 国产成人亚洲综合在线| 国产jizzjizz免费视频| 特级毛片免费播放| 国产精品亚洲精品日韩已方 | 亚洲国产综合91精品麻豆| 久久精品免费电影| 久久亚洲精品成人AV| 亚洲一区二区三区免费观看| 亚洲国产中文在线视频| 国产免费的野战视频| 亚洲www77777| 国产又长又粗又爽免费视频 | 免费91最新地址永久入口| 久久久久久亚洲精品| 91成人免费观看|