文章目錄
- 檔案系統
- inode
- 軟硬鏈接
- 軟連接
- 硬鏈接
- 軟硬鏈接的區別總結
- 目錄
檔案系統
檔案=屬性+內容
在Linux中,一般把屬性資料集合在一起,取名為inode,而內容則保存在block中,
一般一個檔案只有一個inode,但有多個資料塊block,
但是硬碟當中有多個檔案,所以就會有多個inode和block,作業系統會將這些inode管理起來,形成inode表,
所以檔案系統其實是磁區的整體化描述,比如基本情況,空間一共多大,inode,block等資訊,

所以使用ls -l的時候看到的除了看到檔案名,還看到了檔案元資料,其本質是這條命令一執行就變成了行程,然后讀取這些檔案的資訊將資訊拿到記憶體中然后顯示出來,

另外,stat命令能夠看到更多資訊:

檔案系統對硬碟的管理,實際上是將硬碟進行劃分成陣列,對陣列進行管理:

將硬碟劃分為一個個塊組:

Linux ext2檔案系統,上圖為磁盤檔案系統圖(內核記憶體映像肯定有所不同),磁盤是典型的塊設備,硬碟磁區被劃分為一個個block,一個block的大小是由格式化的時候確定的,并且不可以更改,例如mke2fs的-b選項可以設定block大小為1024、2048或4096位元組,而上圖中啟動塊(Boot Block)的大小是確定的,其中每個塊組又分為多個小的塊,每個塊的功能如下:
- Block Group:ext2檔案系統會根據磁區的大小劃分為數個Block Group,而每個Block Group都有著相同的結構組成,類似于政府管理各區,
- 超級塊(Super Block):存放檔案系統本身的結構資訊,記錄的資訊主要有:bolck 和 inode的總量,未使用的block和inode的數量,一個block和inode的大小,最近一次掛載的時間,最近一次寫入資料的時間,最近一次檢驗磁盤的時間等其他檔案系統的相關資訊,Super Block的資訊被破壞,可以說整個檔案系統結構就被破壞了,
- GDT,Group Descriptor Table:塊組描述符,描述塊組屬性資訊,
塊位圖(Block Bitmap):Block Bitmap中記錄著Data Block中哪個資料塊已經被占用,哪個資料塊沒有被占用,- inode位圖(inode Bitmap):每個bit表示一個inode是否空閑可用,inode中包含資料區對應的映射關系,inode id可以用來標識一個inode,
- i節點表(inode Table):存放檔案屬性 如 檔案大小,所有者,最近修改時間等.,
- 資料區(Date blocks):存放檔案的內容,
inode
通過ls -i的命令可以查看檔案的inode id:

要找到一個檔案,作業系統會通過inode id找到對應的inode,由于inode中包含資料區對應的映射關系,所以可以通過inode找到對應的資料區,讀取里面存放的內容,

inode編號是有限的,所以如果inode編號用完了,即使磁盤空間沒滿也無法創建新的檔案了,
以創建一個名字為abc的檔案為例:
創建一個新檔案主要有一下4個操作:
- 存盤屬性:內核先找到一個空閑的i節點(這里是263466),內核把檔案資訊記錄到其中,
- 存盤資料:該檔案需要存盤在三個磁盤塊,內核找到了三個空閑塊:300,500,800,將內核緩沖區的第一塊資料復制到300,下一塊復制到500,以此類推,
- 記錄分配情況:檔案內容按順序300,500,800存放,內核在inode上的磁盤分布區記錄了上述塊串列,
- 添加檔案名到目錄,

內核將入口(263466,abc)添加到目錄檔案,檔案名和inode之間的對應關系將檔案名和檔案的內容及屬性連接起來,
軟硬鏈接
相比于硬鏈接,軟連接的應用場景比較多,
ln[選項]...源檔案或目錄目標檔案或目錄這條命令可以對檔案進行鏈接,加-s選項為軟連接,不加則為硬鏈接,
軟連接

可以看到軟連接是一個獨立的檔案(有獨立的inode),
軟連接更像是Windows下的快捷方式,軟鏈接的inode所指向的內容實際上是保存了一個絕對路徑,當用戶訪問這個檔案時,系統會自動將其替換成其所指的檔案路徑,所以當這個檔案已經被洗掉或者路徑發生改變,自然就會顯示無法找到該檔案了,
軟連接的使用場景一般是源檔案的路徑比較深的時候,直接在專案頂層對該源檔案進行軟連接,就可以不需要進入源檔案的目錄打開它了,
硬鏈接

硬鏈接和指向的檔案共享同一個inode,說明它們是同一個檔案,
這個h_link其實就是該目錄下檔案名和inode的映射關系,
所以此時即使把log.txt這個檔案刪掉,h_link依然可以打開,因為刪掉的僅僅也是一個檔案名和inode的映射關系,相當于對檔案名進行重命名,刪掉以后對應的鏈接數會減一,

鏈接數是有幾個檔案和inode有映射關系,
對于一個目錄,其鏈接數是2,這是因為有兩個檔案和其inode發生映射關系:

而如果在該目錄下創建一個子目錄,鏈接數會變成3,這是因為子目錄下有一個隱藏的上級目錄..也指向該目錄:

軟硬鏈接的區別總結
- 硬鏈接的源檔案和鏈接檔案共用一個inode號,說明他們是同一個檔案;而軟鏈接原檔案和和鏈接檔案是不同的檔案,鏈接檔案inode指向的是源檔案的絕對路徑,
- 硬鏈接在檔案屬性上體現不出來,其表示檔案型別的字符處為“-”原檔案是普通檔案,硬鏈接檔案也是普通檔案;而軟鏈接明確標識是鏈接檔案,其表示檔案型別的字符處為“l”,
- 硬鏈接鏈接數目要增加,軟鏈接的鏈接數目不會增加,
- 硬鏈接檔案大小跟原檔案相同;軟鏈接檔案大小與原檔案不同,
- 硬鏈接有自己的檔案名;軟鏈接的檔案名通常是指向其鏈接的原檔案,
- inode id只在本檔案系統內有效,所以硬鏈接是無法跨越兩個檔案系統來建立鏈接的,軟連接的則不同,因為新的inode中存盤的是目標檔案的路徑,該路徑是可以找到原始檔案的inode的,所以可以跨檔案系統建立,
- 軟連接一般有以下作用:1.當用戶需要在不同的目錄下用到相同的檔案時,不需要在每一個目錄下都存放該檔案,只要在某個固定的目錄下存放,然后在其它的目錄下用命令鏈接( link)它即可,不必重復的占用磁盤空間,2.解決磁盤空間不足的情況,例如某個磁盤磁區的空間已經快用完,但是現在必須在該磁盤磁區下創建一個新的目錄并存盤大量的檔案,那么可以在磁區中建立指向另一個剩余空間較多的磁盤磁區中目錄的軟鏈接,這樣就能解決空間不足問題,
目錄
目錄也是一個檔案,目錄的inode放的是目錄的創建時間、大小等資訊,目錄的內容則是檔案名和inode的映射關系,檔案名是給人看的,而系統看的是inode編號,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321331.html
標籤:其他
上一篇:二叉排序樹
