當前目錄

當前目錄

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

基本介紹

  • 中文名:當前目錄
  • 外文名:Current Directory
  • 學科:計算機
  • 定義:當前正在使用的目錄
  • 有關術語:目錄
  • 領域:檔案系統、作業系統
目錄介紹,目錄結構,單級目錄結構,兩級目錄,多級目錄結構,路徑名,目錄查詢技術,線性檢索法,Hash 方法,Linux 常用命令,

目錄介紹

計算機或相關設備中,一個“目錄”或“資料夾”就是一個裝有數字檔案系統的虛擬“容器”。在它裡面保存著一組檔案和其它一些目錄(資料夾)。計算機的檔案系統可被形象地看作一個檔案“櫥櫃”。在它之中,高等的目錄(資料夾)中有“抽屜”,低等的子目錄中可能有“抽屜”中的資料夾。一個典型的檔案系統可能會包含成千上萬個目錄(資料夾)。多個檔案通過存儲在一個目錄(資料夾)中,可以達到有組織的存儲檔案的目的。在一個目錄(資料夾)中的另一個目錄(資料夾)被稱作它的子目錄(子資料夾)。這樣,這些目錄(資料夾)就構成了層次(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 下所有檔案設定為本用戶可讀可寫可執行,其它用戶可讀可執行

相關詞條

熱門詞條

聯絡我們