文件引用模型
在linux中,一切皆文件,而文件包含元數據(metedata)和用戶數據(user data)。元數據中的inode號是系統標識和獲取用戶數據的唯一憑證,而文件名僅是為了方便用戶記憶和使用。為了管理和組織文件,目錄被引入系統,也正是在目錄中記錄了文件名和inode號的對應關系,可用如下模型表示:
(注:可以通過stat和ls -i命令獲得文件的inode號)
*為了解決文件的共享使用,引入了軟鏈接(soft link 或 symbolic link)和硬鏈接(hard link),同時也有隱藏文件路徑、增加權限的安全和節省存儲空間等好處。
1. 硬鏈接
若一個inode號對應多個文件名,則稱這些文件為硬鏈接。(硬鏈接為文件的一個別名,他們有共同的inode)硬鏈接有如下幾個特點:
- 文件有相同的inode號和數據塊(data block);
- 只能對已存在的文件創建;
- 不能交叉文件系統創建硬鏈接;
- 不能對目錄創建(防止產生目錄環),只能對文件創建;
- 刪除一個硬鏈接文件不會影響其他具有相同inode號的文件。
2. 軟鏈接
若文件用戶數據塊中存放的是另一個文件的路徑名,則該文件就是軟鏈接。軟鏈接就是一個普通的文件,只是文件的數據塊內容有點特殊。軟鏈接擁有自己的inode號和數據塊,其有如下特點:
- 軟鏈接有自己的文件屬性和權限等;
- 可對不存在的文件或目錄創建軟鏈接;
- 可交叉文件系統創建;
- 可對文件或目錄創建;
- 創建軟連接時,鏈接計數不會增加;
- 刪除軟鏈接并不影響所指向的文件,但若指向的原文件被刪除,則相關軟鏈接變成了死鏈接(所指向的文件被重新創建,死鏈接可恢復為正常的軟鏈接)。
軟、硬鏈接的訪問示意圖:
?