複製鏈接
請複製以下鏈接發送給好友

當前目錄

鎖定
當一個文件系統含有許多級時,每訪問一個文件,都要使用從樹根開始直到樹葉(數據文件)為止的、包括各中間節點(目錄)名的全路徑名。這是相當麻煩的事,同時由於一個進程運行時所訪問的文件大多僅侷限於某個範圍,因而非常不便。基於這一點,可為每個進程設置一個“當前目錄” ,又稱為“工作目錄” 。進程對各文件的訪問都相對於“當前目錄”而進行。此時各文件所使用的路徑名,只需從當前目錄開始,逐級經過中間的目錄文件,最後到達要訪問的數據文件。當前目錄即當前用户或經常正在使用的目錄。
中文名
當前目錄
外文名
Current Directory
學    科
計算機
定    義
當前正在使用的目錄
有關術語
目錄
領    域
文件系統、操作系統

當前目錄目錄介紹

計算機或相關設備中,一個“目錄”或“文件夾”就是一個裝有數字文件系統的虛擬“容器”。在它裏面保存着一組文件和其它一些目錄(文件夾)。計算機的文件系統可被形象地看作一個文件“櫥櫃”。在它之中,高等的目錄(文件夾)中有“抽屜”,低等的子目錄中可能有“抽屜”中的文件夾。一個典型的文件系統可能會包含成千上萬個目錄(文件夾)。多個文件通過存儲在一個目錄(文件夾)中,可以達到有組織的存儲文件的目的。在一個目錄(文件夾)中的另一個目錄(文件夾)被稱作它的子目錄(子文件夾)。這樣,這些目錄(文件夾)就構成了層次(hierarchy),或樹形結構。
有些操作系統中,用户被限制只能訪問他們自己的用户文件夾或工程目錄,使用户間的活動相隔離。在 Unix 中,目錄被看作一類文件 [1]  。當前目錄即當前用户正在使用的目錄。使用當前目錄的主要目的是為了提高文件的檢索速度。

當前目錄目錄結構

目錄結構的組織,關係到文件系統的存取速度,也關係到文件的共享性和安全性。因此,組織好文件的目錄,是設計好文件系統的重要環節。目前常用的目錄結構形式有單級目錄、兩級目錄和多級目錄。

當前目錄單級目錄結構

這是最簡單的目錄結構。在整個文件系統中只建立一張目錄表,每個文件佔一個目錄項,目錄項中含文件名、文件擴展名、文件長度、文件類型、文件物理地址以及其它文件屬性。此外,為表明每個目錄項是否空閒,又設置了一個狀態位。

當前目錄兩級目錄

為了克服單級目錄所存在的缺點,可以為每一個用户建立一個單獨的用户文件目錄UFD(User File Directory)。這些文件目錄具有相似的結構,它由用户所有文件的文件控制塊組成。 此外, 在系統中再建立一個主文件目錄 MFD(Master File Directory); 在主文件目錄中,每個用户目錄文件都佔有一個目錄項,其目錄項中包括用户名和指向該用户目錄文件的指針。 [2] 

當前目錄多級目錄結構

對於大型文件系統,通常採用三級或三級以上的目錄結構,以提高對目錄的檢索速度和文件系統的性能。多級目錄結構又稱為樹型目錄結構,主目錄在這裏被稱為根目錄,把數據文件稱為樹葉,其它的目錄均作為樹的結點。 [2] 

當前目錄路徑名

在樹形目錄結構中,從根目錄到任何數據文件,都只有一條惟一的通路。在該路徑上從樹的根(即主目錄)開始,把全部目錄文件名與數據文件名依次地用“/”連接起來,即構成該數據文件的路徑名(path name)。系統中的每一個文件都有惟一的路徑名。把從當前目錄開始直到數據文件為止所構成的路徑名,稱為相對路徑名(relative path name);而把從樹根開始的路徑名稱為絕對路徑名(absolute path name)。

當前目錄目錄查詢技術

當用户要訪問一個已存在文件時,系統首先利用用户提供的文件名對目錄進行查詢,找出該文件的文件控制塊或對應索引結點;然後,根據 FCB 或索引結點中所記錄的文件物理地址(盤塊號),換算出文件在磁盤上的物理位置;最後,再通過磁盤驅動程序,將所需文件讀入內存。目前對目錄進行查詢的方式有兩種: 線性檢索法和 Hash 方法。

當前目錄線性檢索法

圖1 圖1
線性檢索法又稱為順序檢索法。在單級目錄中,利用用户提供的文件名,用順序查找法直接從文件目錄中找到指名文件的目錄項。在樹型目錄中,用户提供的文件名是由多個文件分量名組成的路徑名,此時須對多級目錄進行查找。假定用户給定的文件路徑名是/usr/ast/mbox,則查找/usr/ast/mbox 文件的過程如圖1所示。
具體查找過程説明如下:
首先,系統應先讀入第一個文件分量名 usr,用它與根目錄文件(或當前目錄文件)中各目錄項中的文件名順序地進行比較,從中找出匹配者,並得到匹配項的索引結點號 6,再從6 號索引結點中得知 usr 目錄文件放在 132 號盤塊中,將該盤塊內容讀入內存。
接着,系統再將路徑名中的第二個文件分量名 ast 讀入,用它與放在 132 號盤塊中的第二級目錄文件中各目錄項的文件名順序進行比較,又找到匹配項,從中得到 ast 的目錄文件放在26 號索引結點中, 再從26號索引結點中得知/usr/ast是存放在496號盤塊中, 再讀入496號盤塊。
然後, 系統又將該文件的第三個分量名 mbox 讀入, 用它與第三級目錄文件/usr/ast 中各目錄項中的文件名進行比較,最後得到/usr/ast/mbox 的索引結點號為 60,即在 60 號索引結點中存放了指定文件的物理地址。目錄查詢操作到此結束。如果在順序查找過程中發現有一個文件分量名未能找到,則應停止查找,並返回“文件未找到”信息。 [2] 

當前目錄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 下所有文件設置為本用户可讀可寫可執行,其它用户可讀可執行 [3] 
參考資料