目錄介紹
在
計算機或相關設備中,一個“目錄”或“資料夾”就是一個裝有數字檔案系統的虛擬“容器”。在它裡面保存著一組檔案和其它一些目錄(資料夾)。計算機的檔案系統可被形象地看作一個檔案“櫥櫃”。在它之中,高等的目錄(資料夾)中有“抽屜”,低等的子目錄中可能有“抽屜”中的資料夾。一個典型的檔案系統可能會包含成千上萬個目錄(資料夾)。多個檔案通過存儲在一個目錄(資料夾)中,可以達到有組織的存儲檔案的目的。在一個目錄(資料夾)中的另一個目錄(資料夾)被稱作它的子目錄(子資料夾)。這樣,這些目錄(資料夾)就構成了層次(hierarchy),或樹形結構。
有些作業系統中,用戶被限制只能訪問他們自己的用戶資料夾或工程目錄,使用戶間的活動相隔離。在 Unix 中,目錄被看作一類檔案。當前目錄即當前用戶正在使用的目錄。使用當前目錄的主要目的是為了提高檔案的檢索速度。
目錄結構
目錄結構的組織,關係到檔案系統的存取速度,也關係到檔案的共享性和安全性。因此,組織好檔案的目錄,是設計好檔案系統的重要環節。目前常用的目錄結構形式有單級目錄、兩級目錄和多級目錄。
單級目錄結構
這是最簡單的目錄結構。在整個檔案系統中只建立一張目錄表,每個檔案占一個目錄項,目錄項中含檔案名稱、檔案擴展名、檔案長度、檔案類型、檔案物理地址以及其它檔案屬性。此外,為表明每個目錄項是否空閒,又設定了一個狀態位。
兩級目錄
為了克服單級目錄所存在的缺點,可以為每一個用戶建立一個單獨的用戶檔案目錄UFD(User File Directory)。這些檔案目錄具有相似的結構,它由用戶所有檔案的檔案控制塊組成。 此外, 在系統中再建立一個主檔案目錄 MFD(Master File Directory); 在主檔案目錄中,每個用戶目錄檔案都占有一個目錄項,其目錄項中包括用戶名和指向該用戶目錄檔案的指針。
多級目錄結構
對於大型檔案系統,通常採用三級或三級以上的目錄結構,以提高對目錄的檢索速度和檔案系統的性能。多級目錄結構又稱為樹型目錄結構,主目錄在這裡被稱為根目錄,把數據檔案稱為樹葉,其它的目錄均作為樹的結點。
路徑名
在樹形目錄結構中,從根目錄到任何數據檔案,都只有一條惟一的通路。在該路徑上從樹的根(即主目錄)開始,把全部目錄檔案名稱與數據檔案名稱依次地用“/”連線起來,即構成該數據檔案的路徑名(path name)。系統中的每一個檔案都有惟一的路徑名。把從當前目錄開始直到數據檔案為止所構成的路徑名,稱為相對路徑名(relative path name);而把從樹根開始的路徑名稱為絕對路徑名(absolute path name)。
目錄查詢技術
當用戶要訪問一個已存在檔案時,系統首先利用用戶提供的檔案名稱對目錄進行查詢,找出該檔案的檔案控制塊或對應索引結點;然後,根據 FCB 或索引結點中所記錄的檔案物理地址(盤塊號),換算出檔案在磁碟上的物理位置;最後,再通過磁碟驅動程式,將所需檔案讀入記憶體。目前對目錄進行查詢的方式有兩種: 線性檢索法和 Hash 方法。
線性檢索法
線性檢索法又稱為順序檢索法。在單級目錄中,利用用戶提供的檔案名稱,用順序查找法直接從檔案目錄中找到指名檔案的目錄項。在樹型目錄中,用戶提供的檔案名稱是由多個檔案分量名組成的路徑名,此時須對多級目錄進行查找。假定用戶給定的檔案路徑名是/usr/ast/mbox,則查找/usr/ast/mbox 檔案的過程如圖 所示。
具體查找過程說明如下:
首先,系統應先讀入第一個檔案分量名 usr,用它與根目錄檔案(或當前目錄檔案)中各目錄項中的檔案名稱順序地進行比較,從中找出匹配者,並得到匹配項的索引結點號 6,再從6 號索引結點中得知 usr 目錄檔案放在 132 號盤塊中,將該盤塊內容讀入記憶體。
接著,系統再將路徑名中的第二個檔案分量名 ast 讀入,用它與放在 132 號盤塊中的第二級目錄檔案中各目錄項的檔案名稱順序進行比較,又找到匹配項,從中得到 ast 的目錄檔案放在26 號索引結點中, 再從26號索引結點中得知/usr/ast是存放在496號盤塊中, 再讀入496號盤塊。
然後, 系統又將該檔案的第三個分量名 mbox 讀入, 用它與第三級目錄檔案/usr/ast 中各目錄項中的檔案名稱進行比較,最後得到/usr/ast/mbox 的索引結點號為 60,即在 60 號索引結點中存放了指定檔案的物理地址。目錄查詢操作到此結束。如果在順序查找過程中發現有一個檔案分量名未能找到,則應停止查找,並返回“檔案未找到”信息。
Hash 方法
如果我們建立了一張 Hash 索引檔案目錄,便可利用Hash 方法進行查詢,即系統利用用戶提供的檔案名稱並將它變換為檔案目錄的索引值,再利用該索引值到目錄中去查找,這將顯著地提高檢索速度。
順便指出,在現代作業系統中,通常都提供了模式匹配功能,即在檔案名稱中使用了通配符“*” 、 “?”等。對於使用了通配符的檔案名稱,系統此時便無法利用 Hash 方法檢索目錄,因此,這時系統還是需要利用線性查找法查找目錄。
在進行檔案名稱的轉換時,有可能把 n 個不同的檔案名稱轉換為相同的 Hash 值,即出現了所謂的“衝突” 。一種處理此“衝突”的有效規則是:
(1) 在利用 Hash 法索引查找目錄時,如果目錄表中相應的目錄項是空的,則表示系統中並無指定檔案。
(2) 如果目錄項中的檔案名稱與指定檔案名稱相匹配, 則表示該目錄項正是所要尋找的檔案所對應的目錄項,故而可從中找到該檔案所在的物理地址。
(3) 如果在目錄表的相應目錄項中的檔案名稱與指定檔案名稱並不匹配,則表示發生了“衝突” , 此時須將其 Hash 值再加上一個常數(該常數應與目錄的長度值互質), 形成新的索引值,再返回到第一步重新開始查找。
Linux 常用命令
命令 1:mkdir
用途:創建目錄
實例 1:mkdir do
含義:在當前目錄下創建名為 do 的子目錄
實例 2:mkdir do/align
含義:在子目錄 do 下創建名為 align 的子目錄(子目錄 do 已經存在)
實例 3:mkdir –p hba/tree
含義:在當前目錄下創建名為 hba 的子目錄,並在子目錄 hba 下創建名為 tree 的子目錄
命令 2:rmdir
用途:刪除目錄
實例 1:rmdir tmp
含義:刪除當前目錄下名為 tmp 的子目錄,該子目錄中沒有檔案和子目錄
命令 3:cd
用途:改變目錄
實例 1:cd
含義:回到用戶主目錄,即登錄時進入的目錄
實例 2:cd do
含義:進入子目錄 do
實例 3:cd ..
含義:回到上級目錄
實例 4:cd hba/tree
含義:直接進入子目錄 hba 下的 tree 子目錄
實例 5:cd ../do/align
含義:進入上級目錄 do 下的 align 子目錄
命令 4:ls
用途:顯示檔案或目錄
實例 1:ls
含義:顯示當前目錄下子目錄和檔案名稱
實例 2:ls -l
含義:顯示當前目錄下子目錄和檔案名稱詳細信息,包括屬性、許可權、大小和創建日期等
命令 5:rm
用途:刪除檔案或目錄
實例 1:rm seq2
含義:刪除檔案 seq2
實例 2:rm *.txt
含義:刪除所有以.txt 結尾的檔案
實例 3:rm –r temp/*
含義:刪除子目錄 temp 下所有子目錄和檔案,保留該目錄
實例 4:rm –r temp
含義:刪除子目錄 temp 和該目錄下所有子目錄和檔案
命令 6:chmod
用途:改變檔案或目錄許可權
實例 1:chmod –w ppf1.fas
含義:取消所有用戶對 ppf1.fas 的寫許可權
實例 2:chmod +w seq1
含義:將當前目錄下 seq1 設定為本用戶可寫,其他用戶許可權不變
實例 3:chmod -w keep/
含義:取消子目錄 keep 寫許可權,不能在該目錄下創建和刪除檔案或子目錄
實例 4:chmod 755 bin/*
含義:將子目錄 bin 下所有檔案設定為本用戶可讀可寫可執行,其它用戶可讀可執行