1 掛載分區
文件系統1中已經知道了能夠根據inode號在指定分區找文件了,也已經能根據目錄文件內容,找指定的inode了,在指定的分區內,就可以對文件進行操作了。但是還有幾個問題,那就是inode是不能跨分區的,Linux下有多個分區,那Linux下是我們是如何知道自己在那一個分區的?
1.分區寫入文件系統,無法直接使用,需要和指定的目錄關聯,進行掛載才能使用。
2.因此,可以根據訪問目標文件的"路徑前綴"準確判斷我在哪?個分區。
?例如:
/home/iu/study/test1/home/iu/study/test2
將兩個分區分別掛載到這兩個目錄下時,在該分區下創建文件,對文件進行操作,需要進行路徑解析,進行路徑解析時,路徑前綴就會有一部分是該分區的路徑,這樣就能確定該文件在哪個分區里面了。
總結(文件系統的大致操作流程):
2 軟硬連接
2.1 硬鏈接
前面我們知道,每個文件名對應一個inode,那多個文件名是否可以對應多個inode呢?其實這是可以的。這就是建立硬鏈接。
命令:
ln [被鏈接的文件名] [鏈接的文件名]
硬鏈接,其實可以理解為重命名,可以用來文件備份。本質是并沒有創建新的文件,而是在指定的目錄文件下(內容中),建立了一個新的文件名與inode的映射關系。
利用ls命令查看文件信息時,可以看到這里數字2,1,2這是什么呢?其實是引用計數,一個文件inode對應了多少個文件名,在刪除時,引用計數--,當減為0時才會將對應磁盤上的文件刪除。
注意:目錄文件不能創建硬鏈接
前面說過,訪問文件時需要路徑解析,會構建dentry樹結構,如果創建了目錄的硬鏈接,就會形成路徑環路問題。
還有一點就是我們在創建一個目錄文件時,默認引用計數為2,這是因為有 . (當前路徑)的存在,在當前目錄文件下再創建一個目錄文件時,引用計數就會變成3,是因為在新的目錄文件下存在?..?(上一級路徑),相等于有三個指向同一個inode了。
?這里不是系統都創建目錄文件的inode了嗎?不會形成環路問題嗎?
其實這是經過特殊處理的,可以理解為在構建dentry樹結構時,. 和 ..,被作為遞歸出口,將這兩個忽略掉了。
2.2 軟連接
硬鏈接是通過inode引用另外?個文件,軟鏈接是通過名字引用另外?個文件,但實際上,新的文件和被引用的文件的inode不同(這是兩個不同的文件),其實軟連接中的文件內容對應的是,對應文件的文件路徑字符串。應用主要是創建一些快捷方式。
命令:
ln -s [被鏈接的文件名] [鏈接的文件名]
2.3?軟硬連接對比
軟連接是獨立文減件
硬鏈接只是文件名和目標文件inode的映射關系