posts - 40,  comments - 7,  trackbacks - 0
            2007年1月23日
          關于inode;


          inode 譯成中文就是索引節點。每個存儲設備或存儲設備的分區(存儲設備是硬盤、軟盤、U盤 ... ... )被格式化為文件系統后,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。

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

          當我們用ls 查看某個目錄或文件時,如果加上-i 參數,就可以看到inode節點了;比如我們前面所說的例子;



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

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


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


          在Linux 文件系統中,inode值相同的文件是硬鏈接文件,也就是說,不同的文件名,inode可能是相同的,一個inode值可以對應多個文件。理解鏈接文件并不難,看看例子就會了。在Linux中,鏈接文件是通過ln工具來創建的。


          2.11 創建硬鏈接,硬鏈接和源文件關系;


          用ln 創建文件硬鏈接的語法:



          # ln 源文件 目標文件

          下面我們舉一個例子,在這個例子中,我們要為sun.txt 創建其硬鏈接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 注:我們通過ln 來創建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在沒有創建硬鏈接文件sun002.txt的時候,其鏈接個數是1(也就是-rw-r--r--后的那個數值),創建了硬鏈接sun002.txt創建后,這個值變成了2。也就是說,我們每次為sun.txt創建一個新的硬鏈接文件后,其硬鏈接個數都會增加1。

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

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

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



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

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


          2.12 軟鏈接的創建,及軟接與源文件的關系;


          創建軟鏈接(也被稱為符號鏈接)的語法;



          # ln -s 源文文件或目錄 目標文件或目錄

          軟鏈接也叫符號鏈接,他和硬鏈接有所不同,軟鏈接文件只是其源文件的一個標記。當我們刪除了源文件后,鏈接文件不能獨立存在,雖然仍保留文件名,但我們卻不能查看軟鏈接文件的內容了。



          [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 、所屬文件種類、創建或修改時間等... ...我們來對比一下:

          首先 對比一下節點:兩個文件的節點不同;
          其次 兩個文件的歸屬的種類不同 linuxsir001.txt是-,也就是普通文件,而linuxsir002.txt 是l,它是一個鏈接文件;
          第三 兩個文件的讀寫權限不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫權限是 rwxrwxrwx
          第三 兩者的硬鏈接個數相同;都是1
          第四 兩文件的屬主和所歸屬的用戶組相同;
          第五 修改(或訪問、創建)時間不同;

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

          值得我們注意的是:當我們修改鏈接文件的內容時,就意味著我們在修改源文件的內容。當然源文件的屬性也會發生改變,鏈接文件的屬性并不會發生變化。當我們把源文件刪除后,鏈接文件只存在一個文件名,因為失去了源文件,所以軟鏈接文件也就不存在了。這一點和硬鏈接是不同的;



          [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的內容;
          linuxsir002.txt: 沒有那個文件或目錄 注:得到提示,linuxsir002.txt不存在。

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

          我們可以看到軟鏈接文件,其實只是源文件的一個標記,當源文件失去時,他也就是存在了。軟鏈接文件只是占用了inode來存儲軟鏈接文件屬性等信息,但文件存儲是指向源文件的。

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

          1。控制流程()


          A.條件語句
          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。循環

          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。游標

          在PL/SQL程序中定義的游標叫做顯式游標。

          A.顯式游標的處理由四個部分組成:
          cursor $cursorname is $Query;   --定義游標
          open $cursorname;         --打開游標
          fetch $cursorname into $othervariable  --把游標中的東西取出
          close $cursorname??? --關閉游標

          B.游標屬性
          %found?? ?? ?? 布爾型屬性,當最近一次讀紀錄成功
          ,為true.
          %nofound                失敗時,為false.
          %isopen
          %rowcount?? ?? 返回已從游標中讀取的記錄數。

          C.參數化游標

          所有的SQL語句在上下文區內部都是可執行的,因此都有一個游標指向上下文區,此游標就是所謂的SQL游標。
          與顯式游標不同,SQL游標不被程序打開和關閉。


          4.異常處理概念

          異常處理是用來處理正常執行過程中未預料的事件。如果PL/SQL程序塊一旦產生異常而又沒有指出如何處理時,程序會自動終止。
          異常處理部分放在PL/SQL的后半部分,結構為:

          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必須放在最后

          異常分為預定義和用戶定義兩種。
          用戶定義的異常是通過顯式使用RAISE語句來引發。如

          DECLARE
          ? e_TooManyStudents EXCEPTION;? -- 類型為Exception,用于指示錯誤條件
          ? v_CurrentStudents NUMBER(3);? -- HIS-101學生注冊當前號
          ? v_MaxStudents NUMBER(3);????? -- HIS-101學生注冊允許的最大號

          BEGIN
           /* 找出注冊學生當前號和允許的最大號 */

          ? SELECT current_students, max_students

          ??? INTO v_CurrentStudents, v_MaxStudents

          ??? FROM classes

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

          ? /* 檢查學生的號 */

          ? IF v_CurrentStudents > v_MaxStudents THEN

          /* 太多的學生注冊,則觸發例外處理 */

          ? RAISE e_TooManyStudents;

          ? END IF;

          EXCEPTION

          ? WHEN e_TooManyStudents THEN

          ??? /* 當太多的學生注冊,就插入信息解釋發生過錯誤 */

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

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

          END;


          END;

          用戶定義的的異常處理
          可以使用RAISE_APPLICATION_ERROR來創建自己的錯誤處理:
          RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
          其中
          error_number是從-20000到-20999之間的參數; error_message是相應的提示信息,小于512字節。如:

          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;? -- 班上學生的當前號
          v_MaxStudents NUMBER;????? -- 班上學生的最大號

          BEGIN
          /* 找出學生的當前號和最大號 */
          SELECT current_students, max_students
          ?INTO v_CurrentStudents, v_MaxStudents
          FROM classes
          WHERE course = p_Course
          AND department = p_Department;

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

          /* 加一個學生在本班 */
          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 閱讀(373) | 評論 (0)編輯 收藏
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          歡迎探討,努力學習Java哈

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 金乡县| 铜陵市| 斗六市| 岳西县| 重庆市| 朝阳县| 五原县| 六安市| 高青县| 襄樊市| 堆龙德庆县| 遂宁市| 乌兰县| 贵阳市| 小金县| 全州县| 沅江市| 浦城县| 崇礼县| 永德县| 株洲市| 黔南| 阳春市| 介休市| 廉江市| 西城区| 兴仁县| 徐水县| 横峰县| 平阴县| 临湘市| 民丰县| 锡林郭勒盟| 波密县| 黔东| 临夏市| 奎屯市| 永德县| 古蔺县| 阳东县| 色达县|