Linux下軟鏈接與硬鏈接的區別
Linux中的文件都文件名和數據,在linux上面被分為兩個部分:元數據與數據。用戶數據,即文件數據塊(data block),數據塊是記錄文件真實內容的地方,而元數據是文件的附加屬性,如大小,創建時間,所有者等信息。在Linux中,元數據中的inode號(inode是文件的元數據的一部分,但其不包含文件名,inode號即索引節點號)才是文件的唯一標識而不是文件名。文件名僅是為了方便人們的記憶和使用,系統或程序通過inode號尋找正確的文件數據快。下圖為程序通過文件名獲取文件內容的過程:
在 Linux 系統中查看 inode 號可使用命令 stat 或 ls –i
硬鏈接:
硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接硬鏈接是直接建立在節點表上的(inode),建立硬鏈接指向一個文件的時候,會更新節點表上面的計數值。舉個例子,一個文件被連接了兩次(硬鏈接),這個文件的計數值是3,而無論通過3個文件名中的任何一個訪問,效果都是完全一樣的,但是如果刪除其中任意一個,都只是把計數值減1,不會刪除實際的內容的,(任何存在的文件本身就算是一個硬連接)只有計數值變成0也就是沒有任何硬鏈接指向的時候才會真實的刪除內容。
硬鏈接特性:
文件有相同的 inode 及 data block;
只能對已存在的文件進行創建;
不能交叉文件系統進行硬鏈接的創建;
不能對目錄進行創建,只可對文件創建;
刪除一個硬鏈接文件并不影響其他有相同 inode 號的文件。
軟鏈接:
符號連接(Symbolic Link),也叫鏈軟接,軟鏈接文件有類似于Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。軟鏈接不直接使用inode號作為文件指針,而是使用文件路徑名作為指針(軟鏈接:文件名 + 數據部分–>目標文件的路徑名)。軟件有自己的inode,并在磁盤上有一小片空間存放路徑名。因此,軟鏈接能夠跨文件系統,也可以和目錄鏈接!其二,軟鏈接可以對一個不存在的文件名進行鏈接,但直到這個名字對應的文件被創建后,才能打開其鏈接。
軟鏈接的特性:
軟鏈接有自己的文件屬性及權限等;
可對不存在的文件或目錄創建軟鏈接;
軟鏈接可交叉文件系統;
軟鏈接可對文件或目錄創建;
創建軟鏈接時,鏈接計數 inlink 不會增加;
硬鏈接與軟鏈接是 Linux 文件系統中的一個重要概念,其涉及文件系統中的索引節點 (index node 又稱 inode),而索引節點對象是 Linux 虛擬文件系統 (VFS) 的四個基本概念之一。通過剖析硬鏈接與軟鏈接的聯系與區別,我們可更好的了解 Linux 中 VFS 這一通用文件模型。并讓 Linux 普通用戶和系統管理員正確使用硬鏈接與軟鏈接,幫助文件系統開發者獲取 inode 的相關知識。
原創文章,作者:征(_少,如若轉載,請注明出處:http://www.www58058.com/52992