Linux下面的串連檔案有2種:一種是類似與Windows的捷徑功能的檔案,可以讓我們快速串連到目標檔案,稱為符號串連(symbolic link);另一種則是通過檔案系統的inode串連產生新檔案名稱,而不是產生新檔案,稱為硬串連(hard link)。
一、hard link(硬串連或實際串連)
在linux檔案系統中,每個檔案都會佔用一個inode,檔案內容由inode的記錄來指向(block)。想要讀取該檔案,必須要通過目錄記錄的檔案名稱來指向正確的inode號碼才能讀取。也即:檔案名稱只與目錄有關,檔案內容與inode有關。hard link就是有多個檔案名稱對應到同一個inode號碼,它只是在某個目錄下面建立一條檔案名稱串連到某inode號碼的關聯記錄而已。
實際串連的檔案讀取如下:
根據,我們可以通過1或2的目錄inode指定的block找到兩個不同的檔案名稱,而不管使用哪個檔案名稱都可以指到real那個inode去讀取到最終的資料。這樣做的最大的好處就是安全。如果使用者將任何一個檔案名稱刪除,其實inode和block都還是存在的。此時可以通過另一個“檔案名稱”來讀取到正確的檔案資料。此外,不論使用那個檔案名稱來編輯都可以將結果寫入到相同的inode和block中。
一般來說,使用hard link設定串連檔案時,磁碟的空間與inode數目都不會改變。它只是在某個目錄下的block多寫入一個關聯資料而已。特殊情況就是,將要添加這條資料到某個block時它剛好滿了,這樣會導致磁碟空間的變化。不過,一般hard link用掉的關聯資料都很小,所以通常不會改變inode與磁碟空間的大小。
注意:hard link僅能在單一檔案系統裡進行。
而且:不可以串連到目錄。因為串連到目錄的時候,串連的資料需要連同被串連的目錄下面的所有資料都建立串連。
二、symbolic link(符號串連,即捷徑)
它也叫軟串連,是建立一個獨立的檔案,而這個檔案會讓資料的讀取指向它串連的那個檔案的檔案名稱。當源檔案被刪除之後,symbolic link會開啟不了。
符號串連檔案讀取如下:
由1號inode讀取到串連檔案的內容僅有檔案名稱,根據檔案名稱串連到正確的目錄去取得目標檔案的inode。最終讀取到正確的資料。
symbolic link會佔用inode和block。
需要注意的是,改動symbolic link檔案時,其實改動的就是源檔案。
軟串連可以跨檔案系統,也可以和目錄串連。
執行個體:
分別建立檔案linktest的硬串連link1和軟串連link2.ln命令不加任何參數時,預設建立硬串連。
可以看出,硬串連檔案和源檔案的屬性完全相同,包括inode號碼。
下面刪除源檔案,發現硬串連仍然可以讀取,而軟串連不能讀取。