posts - 40,  comments - 7,  trackbacks - 0
            2007年1月23日
          關(guān)于inode;


          inode 譯成中文就是索引節(jié)點(diǎn)。每個(gè)存儲(chǔ)設(shè)備或存儲(chǔ)設(shè)備的分區(qū)(存儲(chǔ)設(shè)備是硬盤(pán)、軟盤(pán)、U盤(pán) ... ... )被格式化為文件系統(tǒng)后,應(yīng)該有兩部份,一部份是inode,另一部份是Block,Block是用來(lái)存儲(chǔ)數(shù)據(jù)用的。而inode呢,就是用來(lái)存儲(chǔ)這些數(shù)據(jù)的信息,這些信息包括文件大小、屬主、歸屬的用戶(hù)組、讀寫(xiě)權(quán)限等。inode為每個(gè)文件進(jìn)行信息索引,所以就有了inode的數(shù)值。操作系統(tǒng)根據(jù)指令,能通過(guò)inode值最快的找到相對(duì)應(yīng)的文件。

          做個(gè)比喻,比如一本書(shū),存儲(chǔ)設(shè)備或分區(qū)就相當(dāng)于這本書(shū),Block相當(dāng)于書(shū)中的每一頁(yè),inode 就相當(dāng)于這本書(shū)前面的目錄,一本書(shū)有很多的內(nèi)容,如果想查找某部份的內(nèi)容,我們可以先查目錄,通過(guò)目錄能最快的找到我們想要看的內(nèi)容。雖然不太恰當(dāng),但還是比較形象。

          當(dāng)我們用ls 查看某個(gè)目錄或文件時(shí),如果加上-i 參數(shù),就可以看到inode節(jié)點(diǎn)了;比如我們前面所說(shuō)的例子;



          [root@localhost ~]# ls -li lsfile.sh
          2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh

          lsfile.sh 的inode值是 2408949 ; 查看一個(gè)文件或目錄的inode,要通過(guò)ls 命令的的 -i參數(shù)。


          2.10 inode 相同的文件是硬鏈接文件;


          在Linux 文件系統(tǒng)中,inode值相同的文件是硬鏈接文件,也就是說(shuō),不同的文件名,inode可能是相同的,一個(gè)inode值可以對(duì)應(yīng)多個(gè)文件。理解鏈接文件并不難,看看例子就會(huì)了。在Linux中,鏈接文件是通過(guò)ln工具來(lái)創(chuàng)建的。


          2.11 創(chuàng)建硬鏈接,硬鏈接和源文件關(guān)系;


          用ln 創(chuàng)建文件硬鏈接的語(yǔ)法:



          # ln 源文件 目標(biāo)文件

          下面我們舉一個(gè)例子,在這個(gè)例子中,我們要為sun.txt 創(chuàng)建其硬鏈接sun002.txt。然后看一下sun.txt和sun002.txt的屬性的變化;


          [root@localhost ~]# ls -li sun.txt 注:查看sun.txt的屬性;
          2408263 -rw-r--r-- 1 root root 29 04-22 21:02 sun.txt 注:這是sun.txt的屬性;
          [root@localhost ~]# ln sun.txt sun002.txt 注:我們通過(guò)ln 來(lái)創(chuàng)建sun.txt的硬鏈接文件sun002.txt
          [root@localhost ~]# ls -li sun* 注:我們列一下sun.txt 和sun002.txt
          2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun002.txt
          2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun.txt

          我們可以看到sun.txt在沒(méi)有創(chuàng)建硬鏈接文件sun002.txt的時(shí)候,其鏈接個(gè)數(shù)是1(也就是-rw-r--r--后的那個(gè)數(shù)值),創(chuàng)建了硬鏈接sun002.txt創(chuàng)建后,這個(gè)值變成了2。也就是說(shuō),我們每次為sun.txt創(chuàng)建一個(gè)新的硬鏈接文件后,其硬鏈接個(gè)數(shù)都會(huì)增加1。

          inode值相同的文件,他們的關(guān)系是互為硬鏈接的關(guān)系。當(dāng)我們修改其中一個(gè)文件的內(nèi)容時(shí),互為硬鏈接的文件的內(nèi)容也會(huì)跟著變化。如果我們刪除互為硬鏈接關(guān)系的某個(gè)文件時(shí),其它的文件并不受影響。比如我們把sun.txt刪除后,我們還是一樣能看到sun002.txt的內(nèi)容,并且sun02.txt仍是存在的。

          可以這么理解,互為硬鏈接關(guān)系的文件,他們好象是克隆體,他們的屬性幾乎是完全一樣;

          下面的例子,我們把sun.txt刪除,然后我們看一下sun002.txt 是不是能看到其內(nèi)容。



          [root@localhost ~]# rm -rf sun.txt
          [root@localhost ~]# more sun002.txt

          注意:硬鏈接不能為目錄創(chuàng)建,只有文件才能創(chuàng)建硬鏈接。


          2.12 軟鏈接的創(chuàng)建,及軟接與源文件的關(guān)系;


          創(chuàng)建軟鏈接(也被稱(chēng)為符號(hào)鏈接)的語(yǔ)法;



          # ln -s 源文文件或目錄 目標(biāo)文件或目錄

          軟鏈接也叫符號(hào)鏈接,他和硬鏈接有所不同,軟鏈接文件只是其源文件的一個(gè)標(biāo)記。當(dāng)我們刪除了源文件后,鏈接文件不能獨(dú)立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內(nèi)容了。



          [root@localhost ~]# ls -li linuxsir001.txt
          2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
          [root@localhost ~]# ln -s linuxsir001.txt linuxsir002.txt
          [root@localhost ~]# ls -li linuxsir001.txt linuxsir002.txt
          2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt
          2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt

          解釋

          上面的例子,首先我們查看 linuxsir001.txt 的屬性,比如inode 、所屬文件種類(lèi)、創(chuàng)建或修改時(shí)間等... ...我們來(lái)對(duì)比一下:

          首先 對(duì)比一下節(jié)點(diǎn):兩個(gè)文件的節(jié)點(diǎn)不同;
          其次 兩個(gè)文件的歸屬的種類(lèi)不同 linuxsir001.txt是-,也就是普通文件,而linuxsir002.txt 是l,它是一個(gè)鏈接文件;
          第三 兩個(gè)文件的讀寫(xiě)權(quán)限不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫(xiě)權(quán)限是 rwxrwxrwx
          第三 兩者的硬鏈接個(gè)數(shù)相同;都是1
          第四 兩文件的屬主和所歸屬的用戶(hù)組相同;
          第五 修改(或訪(fǎng)問(wèn)、創(chuàng)建)時(shí)間不同;

          我們還注意到了linuxsir002.txt 后面有一個(gè)標(biāo)記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟鏈接文件。

          值得我們注意的是:當(dāng)我們修改鏈接文件的內(nèi)容時(shí),就意味著我們?cè)谛薷脑次募膬?nèi)容。當(dāng)然源文件的屬性也會(huì)發(fā)生改變,鏈接文件的屬性并不會(huì)發(fā)生變化。當(dāng)我們把源文件刪除后,鏈接文件只存在一個(gè)文件名,因?yàn)槭チ嗽次募攒涙溄游募簿筒淮嬖诹恕_@一點(diǎn)和硬鏈接是不同的;



          [root@localhost ~]# rm -rf linuxsir001.txt 注:刪除linuxsir001.txt
          [root@localhost ~]# ls -li linuxsir002.txt 注:查看linuxsir002 的屬性;
          2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt
          [root@localhost ~]# more linuxsir002.txt 注:查看linuxsir002.txt的內(nèi)容;
          linuxsir002.txt: 沒(méi)有那個(gè)文件或目錄 注:得到提示,linuxsir002.txt不存在。

          上面的例子告訴我們,如果一個(gè)鏈接文件失去了源,就意味著他已經(jīng)不存在了;

          我們可以看到軟鏈接文件,其實(shí)只是源文件的一個(gè)標(biāo)記,當(dāng)源文件失去時(shí),他也就是存在了。軟鏈接文件只是占用了inode來(lái)存儲(chǔ)軟鏈接文件屬性等信息,但文件存儲(chǔ)是指向源文件的。

          軟件鏈接,可以為文件或目錄都適用。無(wú)論是軟鏈接還是硬鏈接,都可以用rm來(lái)刪除。rm工具是通用的。
          參考資料:http://techcenter.dicder.com/2006/0908/content_185.htm
          posted @ 2007-07-13 09:54 Lansing 閱讀(752) | 評(píng)論 (0)編輯 收藏
          寫(xiě)一些關(guān)于PL/SQL的語(yǔ)法,免得等到用到的時(shí)候還要去亂翻。
          1。控制流程(if,while)
          2。循環(huán)(for)
          3。游標(biāo)(cursor)
          4。異常處理(exception)

          1。控制流程()


          A.條件語(yǔ)句
          IF <statement> THEN
          ?? PL/SQL
          END IF;

          IF <statement> THEN
          ?? PL/SQL
          ELSE
          ?? PL/SQL
          END IF;

          IF
          <statement> THEN
          ?? PL/SQL
          ELSIF <statement> THEN
          ?? PL/SQL
          END IF;


          2。循環(huán)

          A.simple loop
          LOOP
          ?? SQL
          ?? EXIT WHEN <statement>;
          END LOOP;

          LOOP
          ?? SQL
          ?? IF
          <statement> THEN
          ?? EXIT;
          ?? END IF;
          END LOOP;

          B.While loop
          WHILE <statement> LOOP
          ?? SQL
          END LOOP;

          C.For loop
          FOR $counter in $low .. $high LOOP
          ?? SQL
          END LOOP


          3。游標(biāo)

          在PL/SQL程序中定義的游標(biāo)叫做顯式游標(biāo)。

          A.顯式游標(biāo)的處理由四個(gè)部分組成:
          cursor $cursorname is $Query;   --定義游標(biāo)
          open $cursorname;         --打開(kāi)游標(biāo)
          fetch $cursorname into $othervariable  --把游標(biāo)中的東西取出
          close $cursorname??? --關(guān)閉游標(biāo)

          B.游標(biāo)屬性
          %found?? ?? ?? 布爾型屬性,當(dāng)最近一次讀紀(jì)錄成功
          時(shí) ,為true.
          %nofound                失敗時(shí),為false.
          %isopen
          %rowcount?? ?? 返回已從游標(biāo)中讀取的記錄數(shù)。

          C.參數(shù)化游標(biāo)

          所有的SQL語(yǔ)句在上下文區(qū)內(nèi)部都是可執(zhí)行的,因此都有一個(gè)游標(biāo)指向上下文區(qū),此游標(biāo)就是所謂的SQL游標(biāo)。
          與顯式游標(biāo)不同,SQL游標(biāo)不被程序打開(kāi)和關(guān)閉。


          4.異常處理概念

          異常處理是用來(lái)處理正常執(zhí)行過(guò)程中未預(yù)料的事件。如果PL/SQL程序塊一旦產(chǎn)生異常而又沒(méi)有指出如何處理時(shí),程序會(huì)自動(dòng)終止。
          異常處理部分放在PL/SQL的后半部分,結(jié)構(gòu)為:

          EXCEPTION
          ?????? WHEN first_exception THEN <code to handle first exception>
          ?????? WHEN second_exception THEN <code to handle second exception>
          ?????? WHEN OTHERS THEN <
          code to handle second exception >? --OTHERS必須放在最后

          異常分為預(yù)定義和用戶(hù)定義兩種。
          用戶(hù)定義的異常是通過(guò)顯式使用RAISE語(yǔ)句來(lái)引發(fā)。如

          DECLARE
          ? e_TooManyStudents EXCEPTION;? -- 類(lèi)型為Exception,用于指示錯(cuò)誤條件
          ? v_CurrentStudents NUMBER(3);? -- HIS-101學(xué)生注冊(cè)當(dāng)前號(hào)
          ? v_MaxStudents NUMBER(3);????? -- HIS-101學(xué)生注冊(cè)允許的最大號(hào)

          BEGIN
           /* 找出注冊(cè)學(xué)生當(dāng)前號(hào)和允許的最大號(hào) */

          ? SELECT current_students, max_students

          ??? INTO v_CurrentStudents, v_MaxStudents

          ??? FROM classes

          ??? WHERE department = 'HIS' AND course = 101;

          ? /* 檢查學(xué)生的號(hào) */

          ? IF v_CurrentStudents > v_MaxStudents THEN

          /* 太多的學(xué)生注冊(cè),則觸發(fā)例外處理 */

          ? RAISE e_TooManyStudents;

          ? END IF;

          EXCEPTION

          ? WHEN e_TooManyStudents THEN

          ??? /* 當(dāng)太多的學(xué)生注冊(cè),就插入信息解釋發(fā)生過(guò)錯(cuò)誤 */

          ??? INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||

          ????? 'students: max allowed is ' || v_MaxStudents);

          END;


          END;

          用戶(hù)定義的的異常處理
          可以使用RAISE_APPLICATION_ERROR來(lái)創(chuàng)建自己的錯(cuò)誤處理:
          RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
          其中
          error_number是從-20000到-20999之間的參數(shù); error_message是相應(yīng)的提示信息,小于512字節(jié)。如:

          CREATE OR REPLACE PROCEDURE Register (
          p_StudentID IN students.id%TYPE,
          p_Department IN classes.department%TYPE,
          p_Course IN classes.course%TYPE) AS
          v_CurrentStudents NUMBER;? -- 班上學(xué)生的當(dāng)前號(hào)
          v_MaxStudents NUMBER;????? -- 班上學(xué)生的最大號(hào)

          BEGIN
          /* 找出學(xué)生的當(dāng)前號(hào)和最大號(hào) */
          SELECT current_students, max_students
          ?INTO v_CurrentStudents, v_MaxStudents
          FROM classes
          WHERE course = p_Course
          AND department = p_Department;

          /* 確認(rèn)另外的學(xué)生是否有足夠的教室 */
          IF v_CurrentStudents + 1 > v_MaxStudents THEN
          RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||
          p_Department || ' ' || p_Course);
          END IF;

          /* 加一個(gè)學(xué)生在本班 */
          ClassPackage.AddStudent(p_StudentID, p_Department, p_Course);

          EXCEPTION
          WHEN NO_DATA_FOUND THEN
             
          RAISE_APPLICATION_ERROR(-20001, p_Department || ' ' || p_Course ||
          ??? ?? ??
          ' doesn''t exist!');
          END Register;

          posted @ 2007-01-23 10:10 Lansing 閱讀(375) | 評(píng)論 (0)編輯 收藏
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          歡迎探討,努力學(xué)習(xí)Java哈

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 古蔺县| 富川| 苗栗县| 县级市| 子长县| 曲水县| 龙岩市| 从化市| 江达县| 昆明市| 台东市| 锡林郭勒盟| 汕尾市| 邵东县| 大埔县| 佛冈县| 文登市| 长汀县| 观塘区| 温宿县| 吴川市| 兴国县| 军事| 个旧市| 永泰县| 鹿泉市| 元江| 汝阳县| 榆社县| 夏津县| 库车县| 肥城市| 泾川县| 龙井市| 昭平县| 隆昌县| 柯坪县| 家居| 湖州市| 庐江县| 安仁县|