linux 硬鏈接和符號鏈接

硬鏈接:

       硬鏈接和符號鏈接比起來,硬鏈接是最初 Unix 創建鏈接的方式,而符號鏈接更加現代。在默認情況下,每個文件都有一個硬鏈接,這個硬鏈接給文件起名字。當我們創建一個硬鏈接以後,就爲文件創建了一個額外的目錄條目。硬鏈接有兩個重要侷限性:

1. 一個硬鏈接不能關聯它所在文件系統之外的文件。這是說一個鏈接不能關聯與鏈接本身不在同一個磁盤分區上的文件。
2. 一個硬鏈接不能關聯一個目錄。

一個硬鏈接和文件本身沒有什麼區別。不像符號鏈接,當你列出一個包含硬鏈接的目錄內容時,你會看到沒有特殊的鏈接指示說明。當一個硬鏈接被刪除時,這個鏈接被刪除,但是文件本身的內容仍然存在(這是說,它所佔的磁盤空間不會被重新分配),直到所有關聯這個文件的鏈接都刪除掉。

符號鏈接:

       創建符號鏈接是爲了克服硬鏈接的侷限性。符號鏈接生效,是通過創建一個特殊類型的文件,這個文件包含一個關聯文件或目錄的文本指針。

       一個符號鏈接指向一個文件,而且這個符號鏈接本身與其它的符號鏈接幾乎沒有區別。例如,如果你往一個符號鏈接裏面寫入東西,那麼相關聯的文件也被寫入。然而,當你刪除一個符號鏈接時,只有這個鏈接被刪除,而不是文件自身。如果先於符號鏈接刪除文件,這個鏈接仍然存在,但是不指向任何東西。在這種情況下,這個鏈接被稱爲壞鏈接。在許多實現中,ls命令會以不同的顏色展示壞鏈接,比如說紅色,來顯示它們的存在。

測試:

如何確定硬鏈接和源文件是一樣的?

注意到一件事,列表中,文件 fun 和 fun-hard 的第二個字段是 “4”,這個數字是文件 “fun”的硬鏈接數目。你要記得一個文件至少有一個硬鏈接,因爲文件名就是由鏈接創建的。所以,我們怎樣知道實際上 fun 和 fun-hard 是一樣的文件呢?在這個例子裏,ls 不是很有用。雖然我們能夠看到 fun 和 fun-hard 文件大小一樣(第五字段),但我們的列表沒有提供可靠的信息來確定(這兩個文件一樣)。爲了解決這個問題,我們更深入的研究一下。

當考慮到硬鏈接的時候,我們可以假設文件由兩部分組成:包含文件內容的數據部分和持有文件名的名字部分,這將有助於我們理解這個概念。當我們創建文件硬鏈接的時候,實際上是爲文件創建了額外的名字部分,並且這些名字都關係到相同的數據部分。這時系統會分配一連串的磁盤給所謂的索引節點,然後索引節點與文件名字部分相關聯。因此每一個硬鏈接都關係到一個具體的包含文件內容的索引節點。
The ls command has a way to reveal this information. It is invoked with the “-i”option:
ls 命令有一種方法,來展示(文件索引節點)的信息。在命令中加上 “-i” 選項:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章