SYNOPSIS
- form1:創建一個名爲LINK_NAME 的連接文件指向原文件TARGET
- form2:在當前目錄中創建一個與TARGET同名的鏈接文件(TARGET不能在當前目錄,目標可以是絕對路徑,也可以是相對路徑)
- form3 | form4:在指定的目錄DIRECTORY中,爲每一個原文件TARGET創建一個鏈接文件。
硬鏈接與軟鏈接(-s)的聯繫與區別(默認是建立硬鏈接)
我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。在 Linux 中,元數據中的 inode 號(inode 是文件元數據的一部分但其並不包含文件名,inode 號即索引節點號)纔是文件的唯一標識而非文件名。文件名僅是爲了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。圖 1.展示了程序通過文件名獲取文件內容的過程。
圖 1. 通過文件名打開文件
由於硬鏈接是有着相同 inode 號僅文件名不同的文件,因此硬鏈接存在以下幾點特性:
- 文件有相同的 inode 及 data block;
- 只能對已存在的文件進行創建;
- 不能交叉文件系統進行硬鏈接的創建;
- 不能對目錄進行創建,只可對文件創建;
- 刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。
軟鏈接與硬鏈接不同,若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有着自己的 inode 號以及用戶數據塊(見 圖 2.)。因此軟鏈接的創建與使用沒有類似硬鏈接的諸多限制,軟鏈接有以下屬性:
- 軟鏈接有自己的文件屬性及權限等;
- 可對不存在的文件或目錄創建軟鏈接;(目標文件不存在則是無效鏈接)
- 目標文件是相對路徑的時候,移動軟鏈接會失效,若是絕對路徑則無影響,所以儘量使用絕對路徑。
- 軟鏈接可交叉文件系統;
- 軟鏈接可對文件或目錄創建;
- 創建軟鏈接時,硬鏈接計數 i_nlink 不會增加;
- 刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱爲死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復爲正常的軟鏈接)。
圖 2. 軟鏈接的訪問
注意:使用相對路徑建立軟鏈接時候,原文件相對的不是執行命令時的路徑而是相對於軟鏈接所在目錄的路徑,而軟鏈接的位置纔是相對於當前命令的相對路徑。
例如:Desktop目錄下面有A,B 兩個目錄,如果要把A 目錄中文件tem的軟鏈接建立到B 目錄中,在Desktop上層目錄執行命令如下ln -s ../A/tem B
可選參數如下
--backup[=CONTROL]
make a backup of each existing destination file
查看文件是否是硬鏈接
結果的第二列數字就是指向該文件的硬鏈接數. 注意, 硬鏈接和原文件是無法區分的. 所以 file3 是 file1 的硬鏈接也可以看作 file1 是 file3 的硬鏈接. 所以該數字大於 2 即說明該文件是硬鏈接.
查看文件的 inode number
這時結果的第一列就是文件的 inode number, 可以看出由於 file1 和 file3 互爲硬鏈接, 所以他們的 inode number 相同.
如何找出所有硬鏈接到某個文件的文件?
首先使用
1ls -i
查看文件的 inode number
然後使用find -inum
查找所有指向該 inode 的文件
例子:
ref :https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links