• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 200, comments - 8, trackbacks - 0, articles - 0

            import java.io.BufferedReader;
            import java.io.IOException;
            import java.io.InputStreamReader;
            public class MyEclipseGen {
            private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";
            public String getSerial(String userId, String licenseNum) {
            java.util.Calendar cal = java.util.Calendar.getInstance();
            cal.add(1, 3);
            cal.add(6, -1);
            java.text.NumberFormat nf = new java.text.DecimalFormat("000");
            licenseNum = nf.format(Integer.valueOf(licenseNum));
            String verTime = new StringBuilder("-").append(
            new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
            .append("0").toString();
            String type = "YE3MP-";
            String need = new StringBuilder(userId.substring(0, 1)).append(type)
            .append("300").append(licenseNum).append(verTime).toString();
            String dx = new StringBuilder(need).append(LL).append(userId)
            .toString();
            int suf = this.decode(dx);
            String code = new StringBuilder(need).append(String.valueOf(suf))
            .toString();
            return this.change(code);
            }
            private int decode(String s) {
            int i;
            char[] ac;
            int j;
            int k;
            i = 0;
            ac = s.toCharArray();
            j = 0;
            k = ac.length;
            while (j < k) {
            i = (31 * i) + ac[j];
            j++;
            }
            return Math.abs(i);
            }
            private String change(String s) {
            byte[] abyte0;
            char[] ac;
            int i;
            int k;
            int j;
            abyte0 = s.getBytes();
            ac = new char[s.length()];
            i = 0;
            k = abyte0.length;
            while (i < k) {
            j = abyte0[i];
            if ((j >= 48) && (j <= 57)) {
            j = (((j - 48) + 5) % 10) + 48;
            } else if ((j >= 65) && (j <= 90)) {
            j = (((j - 65) + 13) % 26) + 65;
            } else if ((j >= 97) && (j <= 122)) {
            j = (((j - 97) + 13) % 26) + 97;
            }
            ac[i] = (char) j;
            i++;
            }
            return String.valueOf(ac);
            }
            public MyEclipseGen() {
            super();
            }
            public static void main(String[] args) {
            try {
            System.out.println("please input register name:");
            BufferedReader reader = new BufferedReader(new InputStreamReader(
            System.in));
            String userId = null;
            userId = reader.readLine();
            MyEclipseGen myeclipsegen = new MyEclipseGen();
            String res = myeclipsegen.getSerial(userId, "5");
            System.out.println("Serial:" + res);
            reader.readLine();
            } catch (IOException ex) {
            }
            }
            }

            posted @ 2012-07-28 12:28 鑫龍 閱讀(261) | 評論 (0)編輯 收藏

            在網(wǎng)上搜了一下,發(fā)現(xiàn)有很多人提供了解決的辦法,但我一一試過,最終都不行。
            解決方案列表如下:
            1、[分享]Spring啟動異常: cvc-elt.1: Cannot find the declaration of element 'beans'
            2、spring從sun jdk到IBMjdk

            這兩篇文章中都提供了各自的解決方法,但為何在我的應(yīng)用中就是不行了?
            其實(shí)不是不行,而是需要根據(jù)Spring的版本不同,進(jìn)行不同的處理,剛好我用的是Spring2.5,所以解決起來需要另一種方法,即配置文件XML的頭部的聲明應(yīng)該為:
            <?xml version="1.0" encoding="UTF-8"?>

            <!--
              - Application context definition for JPetStore's business layer.
              - Contains bean references to the transaction manager and to the DAOs in
              - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
              
            -->
            <beans xmlns="http://www.springframework.org/schema/beans"
                     xmlns:xsi
            ="http://www.w3.org/2001/XMLSchema-instance"
                     xmlns:aop
            ="http://www.springframework.org/schema/aop"
                     xmlns:tx
            ="http://www.springframework.org/schema/tx"
                     xsi:schemaLocation
            ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
                       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
            >

            這段聲明,是來自Spring2.5包中自帶的Sample目錄中的一些例子的代碼中,當(dāng)我把我的XML的頭部改成這樣以后,果然可以順利啟動。

            posted @ 2012-07-16 19:21 鑫龍 閱讀(2123) | 評論 (0)編輯 收藏

            數(shù)組和指針概念很容易讓初學(xué)者混淆,這里把我所知道的概括一下,希望對大家有所幫助。

            一維數(shù)組和一級指針的相同和差異

            一維數(shù)組的名字大部分情況下可以當(dāng)成一個(gè)常指針來看,也就是說:

            int a[3] int * const p;

            則數(shù)組名a可以在大部分p能用的地方使用,有兩種情況比較特殊:

            1. p可以在定義是初始化一個(gè)地址如:int *p const = new int[100];,而且這也是唯一的初始化他的機(jī)會。而數(shù)組則是有操作系統(tǒng)載入可執(zhí)行文件時(shí)初始化內(nèi)存空間的。
            2. sizeof運(yùn)算符對p計(jì)算將獲得指針的長度(現(xiàn)在一般為4),而對數(shù)組名則得到數(shù)組占有的所有字節(jié)數(shù)。

            在內(nèi)存排布上,一維數(shù)組和一階指針指向的內(nèi)存是完全一樣的。

            高維數(shù)組和高階指針

            對于高維數(shù)組(以二維為例,其他完全一樣),情況和一維數(shù)組完全不一樣。例如對于數(shù)組和指針:

            int a[3][4] int**p;

            他們就沒有任何可比性。初學(xué)者從一維數(shù)組中的知識簡單的推斷出a是一個(gè)等價(jià)于int**的東西,*a就可以得到一個(gè) int*的值,這其實(shí)是完全錯誤的。

            從內(nèi)存排布上,數(shù)組按照先低維后高維的順序一次排列數(shù)組的每個(gè)元素。其中低維到高維是指定義數(shù)組時(shí),離數(shù)組名越近的維為低維,反之為高維,例如上面這個(gè)數(shù)組,3就是低維的維數(shù),4為高維的維數(shù),因此,在內(nèi)存中,上面這個(gè)數(shù)組占有12個(gè)int單元,所有單元靠在一起,其順序則為

            a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3]

            如果a是一個(gè)和二階指針等價(jià)的常量,那么他的值應(yīng)該指向一個(gè)指針數(shù)組才對,而實(shí)際上這樣的指針數(shù)組是不存在。

            從前面這個(gè)排布還可以看出一個(gè)問題,在排列過程中,數(shù)組的最低維不確定是沒有關(guān)系的,但是為了安排好數(shù)組元素的先后順序,高維的維數(shù)必須確定,也就是說在使用數(shù)組類型來定義指針時(shí),必須首先確定高維,例如:

            int (*p)[3] = new int[4][3]

            是可以的,但是

            int (*p)[] = new int[4][3]

            就不行。

            回到一維數(shù)組

            仔細(xì)考慮一維數(shù)組和多維數(shù)組,是不是編譯器對一維數(shù)組特殊處理了?其實(shí)也不是,數(shù)組名其實(shí)代表的是數(shù)組對象也就是其第一個(gè)元素的地址,從這個(gè)角度講,一維數(shù)組名a代表了a[0]的地址,二維數(shù)組名a代表了a[0][0]的地址,高維數(shù)組的名字從這個(gè)意義講更接近1階指針.

            posted @ 2012-01-28 19:40 鑫龍 閱讀(508) | 評論 (0)編輯 收藏

              今天寫程序的時(shí)候要用到二維數(shù)組作參數(shù)傳給一個(gè)函數(shù),我發(fā)現(xiàn)將二維數(shù)組作參數(shù)進(jìn)行傳遞還不是想象得那么簡單,但是最后我也解決了遇到的問題,所以這篇文章主要介紹如何處理二維數(shù)組當(dāng)作參數(shù)傳遞的情況,希望大家不至于再在這上面浪費(fèi)時(shí)間。

                  下文是我從互聯(lián)網(wǎng)上download的一篇文章,講的很好,但是我后面將指出問題所在,并加以改進(jìn),希望對你有所幫助:

              首先,我引用了譚浩強(qiáng)先生編著的《C程序設(shè)計(jì)》上面的一節(jié)原文,它簡要介紹了如何將二維數(shù)組作為參數(shù)傳遞,原文如下(略有改變,請?jiān)?span style="line-height: 34px; ">)

              [原文開始]

                可以用二維數(shù)組名作為實(shí)參或者形參,在被調(diào)用函數(shù)中對形參數(shù)組定義時(shí)可以指定所有維數(shù)的大小,也可以省略第一維的大小說明,如:

                void Func(int array[3][10]);

                void Func(int array[][10]);

                二者都是合法而且等價(jià),但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:

                void Func(int array[][]);

                因?yàn)閺膶?shí)參傳遞來的是數(shù)組的起始地址,在內(nèi)存中按數(shù)組排列規(guī)則存放(按行存放),而并不區(qū)分行和列,如果在形參中不說明列數(shù),則系統(tǒng)無法決定應(yīng)為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:

                void Func(int array[3][]);實(shí)參數(shù)組維數(shù)可以大于形參數(shù)組,例如實(shí)參數(shù)組定義為:

                void Func(int array[3][10]);

                而形參數(shù)組定義為:

                int array[5][10];

                這時(shí)形參數(shù)組只取實(shí)參數(shù)組的一部分,其余部分不起作用。

              [原文結(jié)束]

              大家可以看到,將二維數(shù)組當(dāng)作參數(shù)的時(shí)候,必須指明所有維數(shù)大小或者省略第一維的,但是不能省略第二維或者更高維的大小,這是由編譯器原理限制的。大家在學(xué)編譯原理這么課程的時(shí)候知道編譯器是這樣處理數(shù)組的:

              對于數(shù)組 int p[m][n];

              如果要取p[i][j]的值(i>=0 && i<m && 0<=j && j < n),編譯器是這樣尋址的,它的地址為:

              p + i*n + j;

              從以上可以看出,如果我們省略了第二維或者更高維的大小,編譯器將不知道如何正確的尋址。但是我們在編寫程序的時(shí)候卻需要用到各個(gè)維數(shù)都不固定的二維數(shù)組作為參數(shù),這就難辦了,編譯器不能識別阿,怎么辦呢?不要著急,編譯器雖然不能識別,但是我們完全可以不把它當(dāng)作一個(gè)二維數(shù)組,而是把它當(dāng)作一個(gè)普通的指針,再另外加上兩個(gè)參數(shù)指明各個(gè)維數(shù),然后我們?yōu)槎S數(shù)組手工尋址,這樣就達(dá)到了將二維數(shù)組作為函數(shù)的參數(shù)傳遞的目的,根據(jù)這個(gè)思想,我們可以把維數(shù)固定的參數(shù)變?yōu)榫S數(shù)隨即的參數(shù),例如:

                void Func(int array[3][10]);

                void Func(int array[][10]);

              變?yōu)椋?/span>

                void Func(int **array, int m, int n);

              在轉(zhuǎn)變后的函數(shù)中,array[i][j]這樣的式子是不對的(不信,大家可以試一下),因?yàn)榫幾g器不能正確的為它尋址,所以我們需要模仿編譯器的行為把array[i][j]這樣的式子手工轉(zhuǎn)變?yōu)椋?/span>

                *((int*)array + n*i + j);

                在調(diào)用這樣的函數(shù)的時(shí)候,需要注意一下,如下面的例子:

                int a[3][3] =

                {

                  {1, 1, 1},

                  {2, 2, 2},

                  {3, 3, 3}

                };

                Func(a, 3, 3);

              根據(jù)不同編譯器不同的設(shè)置,可能出現(xiàn)warning 或者error,可以進(jìn)行強(qiáng)制轉(zhuǎn)換如下調(diào)用: 

                Func((int**)a, 3, 3);

              其實(shí)多維數(shù)組和二維數(shù)組原理是一樣的,大家可以自己擴(kuò)充的多維數(shù)組,這里不再贅述。寫到這里,我先向看了這篇文章后悔的人道歉,浪費(fèi)你的時(shí)間了。下面是一個(gè)完整的例子程序,這個(gè)例子程序的主要功能是求一個(gè)圖中某個(gè)頂點(diǎn)到其他頂點(diǎn)的最短路經(jīng),圖是以鄰接矩陣的形式存放的(也就是一個(gè)二維數(shù)組),其實(shí)這個(gè)函數(shù)也是挺有用的,但是我們這篇文章的重點(diǎn)在于將二維數(shù)組作為函數(shù)的參數(shù)傳遞。

                上文結(jié)束,上文最后指出了實(shí)現(xiàn)二位數(shù)組作為函數(shù)參數(shù)的方法,但是它實(shí)現(xiàn)的是將靜態(tài)的二位數(shù)組作為參數(shù),但是如何將動態(tài)而為數(shù)組作為參數(shù)呢?上面的方法顯然是不合適的,下面是我琢磨出來的方法。

                先將靜態(tài)數(shù)組作為參數(shù)的代碼貼出來:

            #include <iostream>
            using namespace std;

            void Calc(int **A, int m, int n);

            int _tmain(int argc, _TCHAR* argv[])
            {
                int row = 0;
                int col = 0;
                int i = 0;
                int A[3][3];
                
                for (row = 0; row < 3; row++)
                {
                    for (col = 0; col < 3; col++)
                    {
                        A[row][col] = row + col;
                    }
                }
                Calc((int **)A, 3, 3);
                return 0;
            }

            void Calc(int **A, int m, int n)
            {
                if (NULL == A || m <1 || n < 1)
                {
                    return;
                }

                int row = 0;
                int col = 0;
                int i = 0;
                int j = 0;
                int **matrix = NULL;
                matrix = new int*[m];
                if (NULL == matrix)
                {
                    return;
                }
                for (row = 0; row < m; row++)
                {
                    matrix[row] = new int[n];
                    if (NULL == matrix[row])
                    {
                        for (i = 0; i < row; i++)
                        {
                            delete []matrix[i];
                            matrix[i] = NULL;
                        }
                        delete []matrix;
                        matrix = NULL;
                        return;
                    }
                }
                for (row = 0; row < m; row++)
                {
                    for (col = 0; col < n; col++)
                    {
                        matrix[row][col] = *((int *)A + row * n + col);
                        //matrix[row][col] = A[row][col];
                    }
                }
                
                
                for (row = 0; row < m; row++)
                {
                    for (col = 0; col < n; col++)
                    {
                        cout<<matrix[row][col]<<"  ";
                    }
                    cout<<"\n";
                }
            }

            下面是動態(tài)二位數(shù)組作為函數(shù)參數(shù)時(shí)的代碼:

            #include <iostream>
            using namespace std;

            void Calc(int **A, int m, int n);

            int main(int argc, char* argv[])
            {
                int row = 0;
                int col = 0;
                int i = 0;
                int **A = NULL;
                A = new int*[3];
                if (NULL == A)
                {
                    return 0;
                }
                for (row = 0; row < 3; row++)
                {
                    A[row] = new int[3];
                    if (NULL == A[row])
                    {
                        for (i = 0; i < row; i++)
                        {
                            delete []A[i];
                            A[i] = NULL;
                        }
                        delete []A;
                        A = NULL;
                        return 0;
                    }
                }
                
                for (row = 0; row < 3; row++)
                {
                    for (col = 0; col < 3; col++)
                    {
                        A[row][col] = row + col;
                    }
                }
                Calc((int **)A, 3, 3);
                return 0;
            }

            void Calc(int **A, int m, int n)
            {
                if (NULL == A || m <1 || n < 1)
                {
                    return;
                }

                int row = 0;
                int col = 0;
                int i = 0;
                int j = 0;
                int **matrix = NULL;
                matrix = new int*[m];
                if (NULL == matrix)
                {
                    return;
                }
                for (row = 0; row < m; row++)
                {
                    matrix[row] = new int[n];
                    if (NULL == matrix[row])
                    {
                        for (i = 0; i < row; i++)
                        {
                            delete []matrix[i];
                            matrix[i] = NULL;
                        }
                        delete []matrix;
                        matrix = NULL;
                        return;
                    }
                }
                for (row = 0; row < m; row++)
                {
                    for (col = 0; col < n; col++)
                    {
                        //matrix[row][col] = *((int *)A + row * n + col);
                        matrix[row][col] = A[row][col];
                    }
                }
                
                
                for (row = 0; row < m; row++)
                {
                    for (col = 0; col < n; col++)
                    {
                        cout<<matrix[row][col]<<"  ";
                    }
                    cout<<"\n";
                }
            }
                注意上面的代碼的不同之處,即將動態(tài)二維數(shù)組作為函數(shù)參數(shù)時(shí),在函數(shù)里面應(yīng)用時(shí)候要將其偽裝成靜態(tài)二維數(shù)組!

                這樣,以上的兩段代碼不僅實(shí)現(xiàn)了堆和棧之間數(shù)據(jù)的傳遞,而且實(shí)現(xiàn)了堆和堆之間數(shù)據(jù)的傳遞!

            posted @ 2012-01-28 19:24 鑫龍 閱讀(1689) | 評論 (0)編輯 收藏

                根據(jù)設(shè)定的晶振,怎么樣確定asm("nop");延時(shí)了多少時(shí)間?比如7.3728MHz下,一個(gè)asm("nop");代表多少時(shí)間呢?

                指令周期是執(zhí)行一條指令所需要的時(shí)間,一般由若干個(gè)機(jī)器周期組成,是從取指令、分析取數(shù)到執(zhí)行完所需的全部時(shí)間。指令不同,所需的機(jī)器周期數(shù)也不同。對于一些簡單的的單字節(jié)指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執(zhí)行,不再需要其它的機(jī)器周期。對于一些比較復(fù)雜的指令,例如轉(zhuǎn)移指令、乘法指令,則需要兩個(gè)或者兩個(gè)以上的機(jī)器周期。通常含一個(gè)機(jī)器周期的指令稱為單周期指令,包含兩個(gè)機(jī)器周期的指令稱為雙周期指令。

                機(jī)器周期:通常用內(nèi)存中讀取一個(gè)指令字的最短時(shí)間來規(guī)定CPU周期,(也就是 計(jì)算機(jī)通過內(nèi)部或外部總線進(jìn)行一次信息傳輸從而完成一個(gè)或幾個(gè)微操作所需要的時(shí)間它一般由12個(gè)時(shí)鐘周期組成。而時(shí)鐘周期=1秒/晶振頻率,因此單片機(jī)的機(jī)器周期=12秒/晶振頻率

                指令周期=若干個(gè)機(jī)器周期=12個(gè)時(shí)鐘周期12秒/晶振頻率 (51系列)

            posted @ 2011-12-08 13:26 鑫龍 閱讀(2279) | 評論 (0)編輯 收藏

                 摘要: Hibernate 一對多外鍵雙向關(guān)聯(lián) 一、模型介紹 一個(gè)人(Person)對應(yīng)多個(gè)地址(Address)。 二、實(shí)體(省略getter、setter方法) public class Person1nfk_sx implements Serializable {    private int personid...  閱讀全文

            posted @ 2011-11-18 17:02 鑫龍 閱讀(420) | 評論 (0)編輯 收藏

            若Eclipse 報(bào) “Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ”錯誤,我們可以通過一下方法進(jìn)行處理:首先, 打開Eclipse軟件,選擇菜單欄run,在二級菜單中選擇 Debug Configurations,然后:在彈出的窗口中選擇(x)=arguments選項(xiàng)卡,VM arguments中輸入所需要的內(nèi)存最大占用量,比如輸入-Xmx800m即可。

            posted @ 2011-09-15 09:21 鑫龍 閱讀(1236) | 評論 (0)編輯 收藏

              好啦,從這里開始我們就開始學(xué)習(xí)linux的一些常用命令。首先進(jìn)入centos-》應(yīng)用程序-》附件-》終端,開始命令行之旅。

            一、文件處理命令 
               1.網(wǎng)絡(luò)信息查看命令:ifconfig 英文原型:intface config(附加的。。。可以無視)

               2.文件處理命令:ls   英文原型:list   命令所在路徑:/bin/ls   執(zhí)行權(quán)限:所有用戶
                 功能表述:顯示文件目錄 常用可選項(xiàng):-a -l -i(a表示all即顯示所有文件目錄,l表示long即顯示詳細(xì)文件屬性,i顯示文件的inode)
                 注:當(dāng)鍵入ls -l時(shí)候,會輸出類似如下圖所示信息
                     
                     第1個(gè)字母表示的文件類型(d表示目錄,-表示2進(jìn)制文件,l表示軟鏈接文件)
                     第2-4字母表示的是文件擁有者的權(quán)限(r表示read,w表示write,x表示execute)
                     第5-7和第8-10字符分別表示文件所屬組的權(quán)限與其他用戶的權(quán)限
                     第11個(gè)數(shù)字表示此文件的硬鏈接數(shù)
                     第12個(gè)單詞表示文件擁有者是誰?
                     第13個(gè)單詞表示文件所屬組是誰?
                     接下來的數(shù)字是文件的大小(字節(jié)單位)和文件最后修改的時(shí)間

               3.文件處理命令:cd   英文原型:change directory   命令所在路徑:shell內(nèi)置命令   執(zhí)行權(quán)限:所有用戶
                 功能表述:切換目錄   
                 注:.表示當(dāng)前目錄,..表示上級目錄,/表示根目錄

               4.文件處理命令:pwd   英文原型:print working directory   命令所在路徑:/bin/pwd   執(zhí)行權(quán)限:所有用戶
                 功能表述:顯示當(dāng)前所在的工作目錄

               5.文件處理命令:mkdir   英文原型:make directory   命令所在路徑:/bin/mkdir   執(zhí)行權(quán)限:所有用戶
                 功能表述:創(chuàng)建目錄

               6.文件處理命令:touch   命令所在路徑:/bin/touch 執(zhí)行權(quán)限:所有用戶
                 功能表述:創(chuàng)建文件

               7.文件處理命令:cp   英文原型:copy   命令所在路徑:/bin/cp   執(zhí)行權(quán)限:所有用戶
                 功能表述:復(fù)制文件或目錄   常用可選項(xiàng):-R -p(-R表示復(fù)制目錄,p表示復(fù)制時(shí)不改變時(shí)間)
                 注:cp 源文件 目的文件

               8.文件處理命令:mv   英文原型:move   命令所在路徑:/bin/mv   執(zhí)行權(quán)限:所有用戶
                 功能表述:剪切文件或改名

               9.文件處理命令:rm   英文原型:remove   命令所在路徑:/bin/rm   執(zhí)行權(quán)限:所有用戶
                 功能表述:刪除文件或目錄   常用可選項(xiàng):-r -f(r表示刪除目錄,f表示force即強(qiáng)制刪除無須任何詢問)

               10.文件處理命令:cat   英文原型:concatenate and display file   命令所在路徑:/bin/cat   執(zhí)行權(quán)限:所有用戶
                  功能表述:顯示文件內(nèi)容(適合較短文件)

               11.文件處理命令:more   命令所在路徑:/bin/more   執(zhí)行權(quán)限:所有用戶
                  功能表述:分頁顯示文件內(nèi)容
                  注:進(jìn)入分頁顯示狀態(tài)后,空格表示下一頁,回車表示下一行,q表示退出分頁顯示模式

               12.文件處理命令:head   命令所在路徑:/bin/head   執(zhí)行權(quán)限:所有用戶
                  功能表述:顯示文件頭幾行   常用可選項(xiàng):-number(此處數(shù)字表示需要顯示的文件頭幾行的數(shù)字)

               13.文件處理命令:tail   命令所在路徑:/bin/tail   執(zhí)行權(quán)限:所有用戶
                  功能表述:顯示文件后幾行   常用可選項(xiàng):-number -f(此處數(shù)字表示需要顯示的文件后幾行的數(shù)字,f表示動態(tài)顯示)
                  注:對于一些日志,實(shí)時(shí)在更新,那么通常使用-f選項(xiàng)來關(guān)注日志不斷更新的末尾.

               14.文件處理命令:ln   英文原型:link   命令所在路徑:/bin/ln   執(zhí)行權(quán)限:所有用戶
                  功能表述:創(chuàng)建鏈接   常用可選項(xiàng):-s(s表示soft即創(chuàng)建的鏈接是軟鏈接)
                  現(xiàn)在看下圖,來演示創(chuàng)建軟鏈接
                     
                 上圖中首先用ln -s創(chuàng)建一個(gè)軟鏈接host.soft,而這個(gè)軟件鏈接指向了/etc/host.conf文件。其實(shí)所謂的軟鏈接在windows里面就當(dāng)于快捷方式而已。可以看見軟鏈接的類型是l類型,而軟鏈接的權(quán)限基本上全是滿的,后面還用箭頭表示了軟鏈接指向那個(gè)文件。
                 如果沒有用-s則創(chuàng)建硬鏈接,應(yīng)注意硬鏈接是windows里面沒有的功能,硬鏈接相當(dāng)于一個(gè)可以可以動態(tài)更新的副本。而且當(dāng)原文件刪除后,軟連接就無用了,硬鏈接卻還有用。看如下指令:
                 
                 首先我試圖創(chuàng)建一個(gè)硬鏈接由/study/host.hard指向/etc/host.conf,但是失敗了。原因是/study和/根分區(qū)不是一個(gè)物理分區(qū),在我裝系統(tǒng)的時(shí)候,把根分區(qū)和/study分成了sda0和sda1兩個(gè)物理分區(qū)。所以結(jié)論是硬鏈接只能在同一個(gè)物理分區(qū)上進(jìn)行。然后我建立了一個(gè)test文件,并創(chuàng)建了一個(gè)硬鏈接指向它,可以看見權(quán)限和內(nèi)容是完全一樣的。
                 那以上是為什么呢?鏈接的底層到底是怎么實(shí)現(xiàn)的呢?
                 由于linux下的文件是通過索引節(jié)點(diǎn)號(Inode)來唯一標(biāo)示文件,硬鏈接可以認(rèn)為并不是一個(gè)新文件而只是一個(gè)指針,指向原文件索引節(jié)點(diǎn)的指針,系統(tǒng)并不為它重新分配inode。每添加一個(gè)一個(gè)硬鏈接,原文件的鏈接數(shù)就加1。而軟鏈接卻是一個(gè)新的文件,所以有不同的inode,只不過它的文件內(nèi)容是原文件的路徑。

            二、權(quán)限管理命令: 
              
                 1.權(quán)限管理命令:chmod   英文原型:change the permission mode   命令所在路徑:/bin/chmod   執(zhí)行權(quán)限:所有用戶
                   功能表述:更改文件或目錄權(quán)限
                   注:chmod有兩種格式,第一種是字母格式,chmod u/g/o +/-/= r/w/x 文件名/目錄名(u代表user即文件所有者,g代表gourp即文件所屬組,o代表other即其他用戶,+-=分別表示添加、刪除、賦予權(quán)限的操作,rwx代表權(quán)限).第二種格式是數(shù)字格式,chmod xyz(xyz分別是三個(gè)0-7的數(shù)字,每個(gè)0-7的數(shù)字其實(shí)是3個(gè)二進(jìn)制的換算,3個(gè)二進(jìn)制分別表示rwx,也就是說r是4、w是2、x是1。而x代表文件所有者得權(quán)限數(shù)字,y代表所屬組權(quán)限數(shù)字,z是其他用戶的權(quán)限數(shù)字.比如某文件的權(quán)限是rwxr-xr-x 換成數(shù)字形式就是 755).接下來看下面一個(gè)實(shí)驗(yàn):
                  
                  
                 上面代碼中創(chuàng)建了一個(gè)目錄,后又在目錄創(chuàng)建了一個(gè)文件并給予滿權(quán)限,但當(dāng)我用一個(gè)普通用戶去刪除這個(gè)文件時(shí)候卻為什么說權(quán)限不夠呢?可是權(quán)限上說other的權(quán)限是rwx丫。原因其實(shí)在于我們對rwx的理解,其實(shí)rwx對于文件和目錄是不同的。總結(jié)如下:
                 
                  文件的r(cat、more、head、tail)、w(echo、vi)、x(命令、腳本)
                  目錄的r(ls)、w(touch、rm、mkdir)、x(cd)

                  2.權(quán)限管理命令:chown   英文原型:change file ownership   命令所在路徑:/bin/chown   執(zhí)行權(quán)限:所有用戶
                    功能表述:改變文件或目錄所有者   
                    注:chown 用戶 文件

                  3.權(quán)限管理命令:chgrp   英文原型:change file group   命令所在路徑:/bin/chgrp   執(zhí)行權(quán)限:所有用戶
                    功能表述:改變文件或目錄所屬組   
                    注:chgrp 所屬組 文件

                  4.權(quán)限管理命令:umask   命令所在路徑:/bin/umask   執(zhí)行權(quán)限:所有用戶
                    功能表述:顯示和設(shè)置文件的缺省權(quán)限   常用可選項(xiàng):-S(S表示以rwx的方式顯示缺省權(quán)限)
                    注:umask有兩種使用方式,演示如下:
                    
                    第一種是rws的方式顯示出缺省權(quán)限,而第二種方式是顯示的0002,這是什么意思呢?第一個(gè)數(shù)字0是表示一種特殊權(quán)限位,而后面的三個(gè)數(shù)字就是分別表示ugo的缺省權(quán)限,可是為什么不是775呢?顯然775+002=777,所以我們可以看出002其實(shí)是缺省缺陷的掩碼。哇哈哈~


            三、文件搜索命令: 
                           1.文件搜索命令:which   命令所在路徑:/user/bin/which   執(zhí)行權(quán)限:所有用戶
                           功能表述:顯示系統(tǒng)命令所在目錄

                        2.文件搜索命令:find   命令所在路徑:/user/bin/which   執(zhí)行權(quán)限:所有用戶
                           功能表述:查找文件或目錄
                           注:find的命令較為復(fù)雜,大致格式為find 目標(biāo)目錄 搜索選項(xiàng) 搜索條件。常用的搜索選項(xiàng)有4種:
                                   (1)-name 以文件或目錄的名稱來搜索,常用*,?等通配符連用
                                   (2)-size 以文件或者目錄大小來搜索,用+(大于)、-(小于)某一個(gè)數(shù)字來搜索。單位是512字節(jié)(block),100M=204800
                                   (3)-user 以文件的擁有者來搜索
                                   (4)以時(shí)間的搜索方式,常用-ctime、-atime、-mtime、-cmin、-amin、-mmin,其中time表示天,min表示分鐘,c表示change指代文件或目錄的屬性被修改過,a表示access指代文件或目錄被訪問過,m表示modify指代文件或目錄的內(nèi)容被修改過。另外用-表示在某段時(shí)間之內(nèi),+表示某段時(shí)間之外。舉例如下:
                                    
                                    以上程序段在列舉了上面4種方式外,還加入了兩種連接符。第一種是邏輯連接符,-a表示and即邏輯與,-o表示or即邏輯或.第二種是執(zhí)行連接符,當(dāng)你用find查詢到一個(gè)元素集合時(shí),你可以通過-exec來對集合中的元素進(jìn)行操作,要特別注意格式:-exec 操作命令 {}\另外可以用ok來代替exec,兩者之間功能相似,不同的在于exec是直接執(zhí)行,而ok會先詢問再執(zhí)行。

                       3.文件搜索命令:locate   命令所在路徑:/user/bin/locate   執(zhí)行權(quán)限:所有用戶
                          功能表述:尋找文件或者目錄
                          注:此命令功能類似于find,但查找方式不同。find是在硬盤中查找,而locate是在文件目錄的數(shù)據(jù)庫查找,速度與效率比find快很多。但有一個(gè)缺點(diǎn)就是,如果你需要查找的文件在目錄數(shù)據(jù)庫中沒有記錄的話就查找不到,所以常配合更新目錄數(shù)據(jù)庫的updatedb使用。
                           
                          從上面程序段可以看出,我新創(chuàng)建的test.file文件剛開始用locate查找不到,而用find卻可以查到。但當(dāng)我更新過目錄文件數(shù)據(jù)庫后,再用locate就可以查詢到了。

                       4.
            文件搜索命令:grep   命令所在路徑:/bin/locate   執(zhí)行權(quán)限:所有用戶
                          功能表述:在指定文件中搜索指定的字符串行并輸出
                          注:舉例如下,在services文件中查找含tftp字符串的行,并輸出
                          

            四、幫助命令:
                      1.幫助命令:man   英文原型:manual   命令所在路徑:/usr/bin/man   執(zhí)行權(quán)限:所有用戶
                         功能表述:獲取幫組信息
                         注:man后面可以接命令,同時(shí)也可以接配置文件。如果命令和配置文件同名,默認(rèn)是命令幫組(man 1 commad),你可以man 5 配置file

                     2.幫助命令:whatis   執(zhí)行權(quán)限:所有用戶
                        功能表述:獲取簡短幫助信息
                        注:whatis也是從某幫助信息的數(shù)據(jù)庫中查詢幫助,所以常用makewhatis來更新相關(guān)數(shù)據(jù)庫。

                     3.幫助命令:help   執(zhí)行權(quán)限:所有用戶
                        功能表述:查看shell內(nèi)置命令的幫助,man是誤差查詢shell內(nèi)置命令的幫助的。當(dāng)你用man查詢的時(shí)候如果查不到你所需要的東西。也許用help你會有意外的收獲,哇呵呵。


            五、壓縮命令
                      1.壓縮命令:gzip   命令所在路徑:/bin/gzip   執(zhí)行權(quán)限:所有用戶
                      功能表述:壓縮文件(只能是文件,不能是目錄)
                      注:gzip壓縮文件會丟失原文件。gzip -d 文件,是解壓縮

                    2.壓縮命令:gunzip   命令所在路徑:/bin/gunzip   執(zhí)行權(quán)限:所有用戶
                      功能表述:解壓gizp文件

                    3.壓縮命令:tar   命令所在路徑:/bin/tar   執(zhí)行權(quán)限:所有用戶
                      功能表述:把文件或目錄打包成一個(gè)二進(jìn)制文件   常用可選項(xiàng):-cxvfz(c代表create即創(chuàng)建,x代表execute即解包,v代表view即查看打包或解包過程,f與c連用表示打包后的文件名稱,f與x連用表示解包的目標(biāo)名稱,z與c連用表示打包后壓縮,z與x連用表示解包后解壓)
                       注:f必須放在可選項(xiàng)的最后,源文件在前,目標(biāo)文件在后。下面演示該命令:           
                             

                    4.壓縮命令:zip   命令所在路徑:/usr/bin/zip   執(zhí)行權(quán)限:所有用戶
                      功能表述:以zip的形式壓縮文件或目錄   常用可選項(xiàng):-r(r表示壓縮目錄)
                      注:zip格式是與window之間無需轉(zhuǎn)換而可通用的壓縮格式,用來壓縮一些不大且共享與雙系統(tǒng)間的文件很好。

                    5.壓縮命令:unzip   命令所在路徑:/usr/bin/unzip   執(zhí)行權(quán)限:所有用戶
                      功能表述:以zip的形式解壓文件或目錄

                    6.壓縮命令:bzip2   命令所在路徑:/usr/bin/bzip2   執(zhí)行權(quán)限:所有用戶
                      功能表述:以bzip2的形式壓縮文件(是gzip的升級版)   常用可選項(xiàng):-k(壓縮后保留原文件)

            六、網(wǎng)絡(luò)通信命令:
                      1.網(wǎng)絡(luò)通信命令:write   命令所在路徑:/usr/bin/write   執(zhí)行權(quán)限:所有用戶
                         功能表述:向另外一個(gè)用戶實(shí)時(shí)發(fā)送消息,并以CTRL+d結(jié)束
                         注:格式是write 用戶

                      2.網(wǎng)絡(luò)通信命令:wall   命令所在路徑:/usr/bin/wall   執(zhí)行權(quán)限:所有用戶
                         功能表述:向所有用戶廣播消息

                      3.網(wǎng)絡(luò)通信命令:ping   命令所在路徑:/usr/sbin/ping   執(zhí)行權(quán)限:所有用戶
                         功能表述:發(fā)送icmp報(bào)文   常用可選項(xiàng):-cs(c代表count即控制報(bào)文數(shù)目,s代表報(bào)文大小)

            七、系統(tǒng)命令:
                      1.系統(tǒng)命令:shutdown   命令所在路徑:/usr/sbin/shutdown   執(zhí)行權(quán)限:所有用戶
                         功能表述:關(guān)機(jī)   常用可選項(xiàng):-h(h代表hour即多少小時(shí)以后關(guān)機(jī))

                      2.系統(tǒng)命令:reboot   命令所在路徑:/usr/sbin/reboot   執(zhí)行權(quán)限:所有用戶
                          功能表述:重啟


            八、Shell命令:
                        shell是一整命令行解釋程序,一個(gè)linux操作系統(tǒng)可以有多個(gè)shell,我們可以查看:
                        
                       操作系統(tǒng)默認(rèn)的一般是bash,我也是用bash。在shell中,你可用tab鍵自動補(bǔ)全。

                        1.Shell命令:alias
                         功能表述:別名機(jī)制,alias 別名="命令 -選項(xiàng)"(若沒有選項(xiàng)可不用引號)
                         注:unalias 別名,可以解除別名

                        2.Shell命令:alias
                         功能表述:別名機(jī)制,alias 別名="命令 -選項(xiàng)"(若沒有選項(xiàng)可不用引號)
                         注:unalias 別名,可以解除別名

                      3.Shell命令:>    >>    <    2>
                         功能表述:輸出、附加輸出、輸入、錯誤輸出
                         注:進(jìn)程的文件描述字是 輸出為0,輸入為1,錯誤輸出為2
                         
                        
                       4.Shell命令: | (管道)
                         功能表述:把前一個(gè)命令的輸出結(jié)果作為下一個(gè)命令的輸入?yún)?shù)。
                         
                         第一個(gè)把ls命令的查詢結(jié)果用more命令來讀取,后面類似。

                       5.Shell命令: ;   &&   ||   (命令連接符
            )
                         功能表述:如下
                         


                      6.Shell命令: ``(命令替換符號)
                         功能表述:如下
                         

            posted @ 2011-05-03 19:42 鑫龍 閱讀(485) | 評論 (0)編輯 收藏

               今天從頭開始學(xué)習(xí)linux,表示我本來就不會,呵呵。我的所有筆記都是從lamp兄弟連的視頻里整理出來的(不做廣告,但那視頻確實(shí)還可以),記錄下來給自己以后用。首先從linux的安裝開始講解,哇哈哈哈!~~~~~下面按步驟開始:

               1.進(jìn)行前期準(zhǔn)備工作,我們需要下載兩個(gè)東西。ps:我裝linux是基于虛擬機(jī),那樣比較適合菜鳥。第一個(gè)要下載的東西就是虛擬機(jī)vmware,你可以到http://www.vmware.com/的官方網(wǎng)站去下載最新的版本,這次我下載的是VMware-workstation-7.1.3版(貌似用workstation比較好,比較強(qiáng)大).第二個(gè)要下載的東西就是操作系統(tǒng)了,我選用的是centos,一個(gè)紅帽系列的linux,你可以到http://www.centos.org/去下載,這次我下載的是CentOS-5.5-i386-bin-DVD版本(注意別下成源碼了,要下的是鏡像文件).

               2.準(zhǔn)備好以后開始安裝vmware了,雙擊安裝程序
                 
                 出現(xiàn)上圖,然后一直下一步,記得選典型安裝,方便一點(diǎn)。

               3.安裝好wmware后,開始在wmware里面配置安裝centos.先進(jìn)入wmmare,出現(xiàn)下圖界面:
                 
                 點(diǎn)擊中間那個(gè)new virtual machine,開始創(chuàng)建一個(gè)新的虛擬機(jī),選擇典型以后,會出現(xiàn)下圖:
                 
                 這里是要你選擇這個(gè)虛擬機(jī)操作系統(tǒng)的安裝程序在哪里,默認(rèn)是選擇的光驅(qū)。但我們已經(jīng)下了鏡像文件,所以點(diǎn)擊第二個(gè)installer disc image file,然后從browse里面選擇我們剛才下載的centos鏡像文件即可。繼續(xù)下一步:
                 
                 第一個(gè)fullname是你這個(gè)操作系統(tǒng)在虛擬機(jī)叫什么名字,下面那個(gè)貌似一個(gè)用戶的注冊,暫時(shí)不知道神馬用。。請大家告訴我。繼續(xù)點(diǎn)擊下一步,出現(xiàn)一個(gè)20G的東西,這個(gè)事給虛擬機(jī)的這個(gè)操作系統(tǒng)分配硬盤,不要看20G這么大,這只是一個(gè)上限,一般操作系統(tǒng)用不了20G的,哇呵呵。點(diǎn)擊下一步:
                 
                 這里列出來的是操作系統(tǒng)硬件的一些配置(不是真正的硬件,你虛擬機(jī)虛擬出來的配置),點(diǎn)擊customize hardware可以修改里面的參數(shù),一般無視就好,哇呵呵~~再點(diǎn)擊finish,wmware就算配置好了,到此搞一段落,接下來是虛擬機(jī)就會重啟開始進(jìn)入centos的安裝界面,如果你沒有重啟的話,你就手動點(diǎn)一下power on的按鈕來開機(jī)。

               4.接下來就是安裝centos了,重啟以后會進(jìn)入如下界面:
                 

                       上面已經(jīng)寫的很清楚了,如果你要用圖形界面的方式安裝的的話,請按回車鍵,這時(shí)候我們應(yīng)該毫不猶豫的按一下回車鍵,淡然你如果猶豫一下也沒關(guān)系,哇哈哈~~~進(jìn)入安裝以后,首先要你選擇安裝過程中的語言,果斷選中文不。。。然后會選擇鍵盤,應(yīng)該是選美國英語式,然后下一步(這個(gè)時(shí)候可能會彈出一個(gè)窗口,說要格式化分區(qū)才能裝,你點(diǎn)是就是了。放心,他只會把虛擬機(jī)分配給操作系統(tǒng)的那部分硬盤格式化,不會影響你現(xiàn)在的系統(tǒng))。然后繼續(xù)下一步:
                     
                     這里的話要稍微慢點(diǎn),這里是選擇分區(qū),我反正是選了自定義分區(qū)結(jié)構(gòu),其他的選了有什么后果我表示不知道!。。。這里出現(xiàn)了一個(gè)sda的字樣,稍微解釋一下,sd表示sata類型的硬盤,sda又表示檢測到的第一塊sd型的硬盤所以就叫sda,如果你有多塊的話,就會叫sdb\sdc等。。然后下一步:
                     
                    這里就是給剛才的20G硬盤分配空間了。這里需要說一下,linux的文件系統(tǒng)和windows的文件系統(tǒng)是完全不同的,linux沒有所謂的盤符的概念(即沒有C盤、d盤),換之是完全的一個(gè)倒樹結(jié)構(gòu),就是一個(gè)根目錄,然后所有的文件鏈接在上面,但是并不是想象的這么簡單。以后的筆記中,我會慢慢的幫大家深入淺出linux的文件管理,這里就不說了。首先我點(diǎn)新建的按鈕,出現(xiàn)下圖:
                   
                  掛載點(diǎn)我們就暫時(shí)理解為目錄吧,整個(gè)分配空間的過程中,我們必須分配兩個(gè)類型的空間。第一個(gè)就是根目錄,也就是上圖中表示的/(左斜杠),空間類型選ext3就可以了,大小稍微要大一點(diǎn),因?yàn)椴僮飨到y(tǒng)的所有文件是會默認(rèn)放在根目錄下面的,如果不夠大就game over了。然后第二個(gè)必須分配的空間是swap空間,你新建一個(gè)目錄,掛載點(diǎn)不用選直接在文件系統(tǒng)類型哪里選擇swap就可以了,大小的話,官方建議是內(nèi)存的兩倍。話說學(xué)過操作系統(tǒng)的孩子們都知道,swap目錄就是虛擬內(nèi)存機(jī)制在硬盤上開創(chuàng)的假內(nèi)存而已,哇呵呵呵~~~分這兩個(gè)必須分配的空間以后,如果還有剩下的,你可以任意分配了。。。分完就點(diǎn)下一步,然后是說用grub引導(dǎo)程序來引導(dǎo)操作系統(tǒng),不用管默認(rèn)即可,下一步:
                   
                  這里非常重要,這里是配置上網(wǎng)的相關(guān)信息,因?yàn)槊總€(gè)人的情況有所不同,我家的話,是通過單位的局域網(wǎng)接入網(wǎng)絡(luò)的,然后我家又買了一個(gè)無線路由器,所以我家又是一個(gè)小局域網(wǎng),so我選擇dhcp的自動配置。如果大家用的是固定IP的話,就自己改一下吧。。下一步,要設(shè)置一個(gè)密碼,這個(gè)密碼是操作系統(tǒng)的root用戶的密碼,話說這個(gè)root在你這個(gè)操作系統(tǒng)里面可是最大的噢,還是設(shè)計(jì)一個(gè)比較高級的密碼吧,不然被別人破了。就準(zhǔn)備哭把~~~下一步:
                  
                  這里是來選擇安裝一些linux自帶的軟件,其中上面的框框里面前兩個(gè)是圖形化界面,哈哈一次可以安裝2個(gè)圖像化界面,相當(dāng)犀利吧,windows可是做不到噢。大家按照自己的意愿選吧,沒什么必須的。。下一步。。。貌似沒有下一步了。。就又重啟真的開始裝了。這里注意下,重啟以后最好先把操作系統(tǒng)關(guān)機(jī),把剛剛之前設(shè)置的鏡像文件路徑改掉,不然重啟就又會進(jìn)入鏡像文件中去,而不是進(jìn)入操作系統(tǒng)。

                    5.重啟進(jìn)入操作系統(tǒng)之后,首先要配置一些操作系統(tǒng)的東西,比如時(shí)間。防火墻之類的。就不說了,然后輸入root和你剛剛設(shè)置的密碼進(jìn)入下圖:
                   
                   能夠到達(dá)這里,說明你的linux已經(jīng)完全裝好了。。。。哇哈哈~恭喜恭喜,紅包拿來~~~~

            posted @ 2011-05-03 19:38 鑫龍 閱讀(404) | 評論 (0)編輯 收藏

              學(xué)JAVA有3年了吧,全部放棄樓,讀研究生準(zhǔn)備搞嵌入式了。從頭開始,歡迎大家對我進(jìn)行教育,特此開播記錄轉(zhuǎn)變過程。哇呵呵~~

            posted @ 2011-03-31 12:50 鑫龍 閱讀(247) | 評論 (0)編輯 收藏

            僅列出標(biāo)題
            共20頁: First 12 13 14 15 16 17 18 19 20 
            2021国内久久精品| 久久久久国产精品嫩草影院| 思思久久99热只有频精品66| 久久夜色精品国产网站| 99精品国产在热久久| 国产 亚洲 欧美 另类 久久| 久久久久国产视频电影| 97精品国产97久久久久久免费| 97超级碰碰碰久久久久| 亚洲精品无码久久久| av无码久久久久不卡免费网站 | 久久久久久国产a免费观看不卡| 色天使久久综合网天天| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久国产精品国语对白| 久久精品人人做人人爽电影蜜月| 色综合久久综精品| 久久精品国产亚洲AV嫖农村妇女| 久久综合成人网| 99久久国产热无码精品免费久久久久| 色婷婷综合久久久中文字幕| 久久久噜噜噜久久中文字幕色伊伊| 日本久久久久亚洲中字幕| 亚洲综合久久夜AV | 精品久久久久久无码人妻热| 久久96国产精品久久久| 日韩精品久久无码人妻中文字幕| 亚洲七七久久精品中文国产| 狠狠人妻久久久久久综合蜜桃| 国内精品久久久久影院一蜜桃| 久久精品亚洲AV久久久无码| 国产精品成人久久久| 久久91精品国产91| 久久精品久久久久观看99水蜜桃| 色偷偷88欧美精品久久久| 久久99国产精品久久久| 精品蜜臀久久久久99网站| 国产成人无码久久久精品一| 狠狠色丁香婷综合久久| 亚洲国产精品一区二区久久| 国产精品99久久久久久猫咪|