【Linux】Linux文件目錄

從文件管理的角度來看,文件分爲數據文件和目錄文件。由於目錄文件是管理文件,所以從管理的角度來看,文件中目錄的結構就會直接影響文件管理效果。目前,常見的目錄結構有兩種:一體化目錄和分立式目錄。

 

一體化目錄

一體化目錄與文件之間關係示意圖如下:

也就是說,這種目錄的特點就是把一個文件的所有信息都放在一個目錄項中,所以叫做一體化目錄。

 

分立式目錄

由於一體化目錄把用戶沒有必要知道的文件地址等物理信息都暴露給了用戶,既不利於信息的隱蔽,也缺乏靈活性,違背了信息管理原則,因此在分立式目錄中,目錄被分成兩部分:一部分只記錄文件的文件名等用戶關心的邏輯信息;另一部分則只記錄文件所佔用的存儲塊數目、位置等物理信息。前者叫做邏輯目錄,簡稱目錄;後者叫做文件索引節點,或i節點(inode)。由於i結點與文件唯一對應,所以i結點也叫做文件控制塊(FCB)。

分立式目錄及目錄文件的結構如下所示:

用於集中記錄i節點的文件叫做設備文件;而集中記錄邏輯目錄的文件叫做邏輯目錄文件。

分立目錄文件的最大特點是,多個邏輯文件目錄項可以對應同一個i節點,從而同一個文件可以有多種訪問路徑和不同的名稱。爲了記錄同一個文件究竟有多少個引用,在設備文件中有一個引用計數項。

現代文件系統大多數都採用這種靈活地分立式目錄文件。

 

硬連接與符號連接

目錄與文件之間的關聯叫做連接,前面所述的連接方式都爲硬連接。Linux及大多數UNIX的現代版本還有另一種連接,稱爲符號連接,或軟連接。

符號連接是一種通過文件來查找另一個文件的方法,即文件路徑的終端不是用戶要訪問的目標文件,而是一個存放目標文件路徑及文件名的特殊文件(連接文件)。這樣,當用戶進程通過連接文件目錄找到連接文件時,系統還需要再根據連接文件中提供的路徑和文件名找到目標文件。 

符號連接之所以還叫軟連接,是因爲根據連接文件中的路徑來查找目標文件的操作是由系統來完成的,目標文件與連接文件之間是互相獨立的、互不影響的。所以當連接文件被刪除時,目標文件不會受到任何影響;相應地,目標文件被刪除時,連接文件也不會受到任何影響,只不過在通過符號連接到該文件時,爲用戶返回一個“該連接文件不存在”的提示。

符號連接的優點在於,可以用一個文件指向另一個磁盤上的文件或目錄,甚至還可以指向另一臺計算機上的一個文件或目錄。

linux硬鏈接和軟鏈接的區別

原理上:

硬鏈接:A是B的硬鏈接(A和B都是文件名),則A的目錄項中的inode節點號與B的目錄項中的inode節點號相同,即一個inode節點對應兩個不同的文件名,兩個文件名指向同一個文件,A和B對文件系統來說是完全平等的。如果刪除了其中一個,對另外一個沒有影響。每增加一個文件名,inode節點上的鏈接數增加一,每刪除一個對應的文件名,inode節點上的鏈接數減一,直到爲0,inode節點和對應的數據塊被回收。注:文件和文件名是不同的東西,rm A刪除的只是A這個文件名,而A對應的數據塊(文件)只有在inode節點鏈接數減少爲0的時候纔會被系統回收。

軟鏈接:A是B的軟鏈接(A和B都是文件名),A的目錄項中的inode節點號與B的目錄項中的inode節點號不相同,A和B指向的是兩個不同的inode,繼而指向兩塊不同的數據塊。但是A的數據塊中存放的只是B的路徑名(可以根據這個找到B的目錄項)。A和B之間是“主從”關係,如果B被刪除了,A仍然存在(因爲兩個是不同的文件),但指向的是一個無效的鏈接。

使用限制上:

硬鏈接:

  • 不能對目錄創建硬鏈接,原因有幾種,最重要的是:文件系統不能存在鏈接環(目錄創建時的".."除外,這個系統可以識別出來),存在環的後果會導致例如文件遍歷等操作的混亂(du,pwd等命令的運作原理就是基於文件硬鏈接,順便一提,ls -l結果的第二列也是文件的硬鏈接數,即inode節點的鏈接數);
  • 不能對不同的文件系統創建硬鏈接,即兩個文件名要在相同的文件系統下;
  • 不能對不存在的文件創建硬鏈接,由原理即可知原因。

軟鏈接:

  • 可以對目錄創建軟鏈接,遍歷操作會忽略目錄的軟鏈接;
  • 可以跨文件系統;
  • 可以對不存在的文件創建軟鏈接,因爲放的只是一個字符串,至於這個字符串是不是對於一個實際的文件,就是另外一回事了。

命令:

  • 硬連接:ln 源文件 鏈接名
  • 軟連接:ln -s 源文件 鏈接名

參考文章:linux 文件inode 詳解

 

目錄樹及根目錄

目錄樹

既然目錄的集合也是一種文件,也就是說,一個目錄項既可以指向一個普通文件,也可以指向一個目錄文件。於是,爲了便於文件的管理,在文件數目巨大的文件系統中,可以採用多級目錄結構。

下圖所示就是一個具有三級目錄的目錄樹,第一級目錄叫做根目錄,第二級目錄爲第一級目錄的子目錄,也是第三級目錄的父目錄:

根目錄

由前面的介紹中可知,在訪問一個文件時,首先須訪問目錄文件並通過目錄來得到文件的i節點,進而得到文件。但由於目錄本身存在於目錄文件之中,而目錄文件也需要通過目錄來得到,於是,一個文件系統必須有一個不作爲文件而存在的目錄項,這個目錄就叫做根目錄。

也就是說,磁盤上的文件系統除了普通文件和目錄文件之外,在磁盤的某個固定的位置還要有一個不需要通過文件就能獲得的目錄——根目錄,以使系統可以通過它來得到其他目錄文件或普通文件。

 

磁盤文件系統

保存在磁盤上的文件系統叫做磁盤文件系統,它是操作系統的文件管理系統的工作基礎。

磁盤格式化

一塊空磁盤必須經格式化處理之後才能使用。磁盤格式化分爲物理格式化和邏輯格式化。

  • 所謂物理格式化,也叫低級格式化,就是在磁盤上簡歷標準記錄格式,從而可以將其看成是若干存儲塊組成的線性空間;
  • 所謂邏輯格式化,也叫高級格式化,就是按照文件管理和存儲要求,在磁盤上建立操作系統可以識別、具有邏輯意義的存儲區,例如引導記錄區、文件目錄區、數據區等。

通常,硬盤在出廠前就已經進行過物理格式化,用戶的工作就是對磁盤進行邏輯格式化。

磁盤上的文件系統

磁盤邏輯格式化之後,在磁盤上通常包括如下信息:如何啓動所存儲操作系統、磁盤的總塊數、空閒塊的數目及位置、目錄結構以及各個具體數據文件。

通常磁盤的存儲邏輯結構爲一下幾部分:

  • 引導控制塊:它通常爲磁盤的第一塊,因系統啓動後,BIOS要到引導塊中尋找引導程序,以便引導操作系統,所以作爲引導塊必須包含引導操作系統所需要的信息。由於在系統引導時,系統還沒有建立起文件系統的各個機制,還不能解釋任何文件,所以引導塊信息爲一組有序塊,作爲二進制文件被BIOS讀入內存並被處理器執行;
  • 主分區,也叫根分區。該分區一般爲操作系統內核映像文件及其他系統文件的存儲區;
  • 分區控制塊:除了主分區之外的其他分區通常就是用來存儲文件的數據分區。這些分區的第一塊爲分區控制塊,該塊中含有本分區所包含的塊數、塊的大小、空閒塊的數量及位置、文件控制塊(FCB)的數量以及位置等信息;
  • 目錄文件:通常處於分區控制塊之後,存放分區內文件的目錄文件;
  • 文件控制塊(FCB):它通常處在文件數據塊之前,內含文件的邏輯及物理信息,如文件許可、擁有者、大小以及佔用數據塊的位置等信息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章