Linux 檔案系統最重要的特點之一是它的檔案連結。連結是對檔案的引用,這樣可以讓檔案在檔案系統中多處被看到。在 Linux 中,連結可以如同原始檔案一樣來對待,即連結可以與普通的檔案一樣被執行、編輯和通路。對系統中的其他應用程式而言,連結就是它所對應的原始檔案。當通過連結對檔案進行編輯時,編輯的實際上是原始檔案。連結不是副本。
在Linux中,有兩種類型的連結:實體連結(hard link,硬連結)和符号連結(symbolic link軟連結)。
實體連結
我們知道,在Linux中,檔案名其實是存在檔案所屬目錄的block裡的,且該block裡存放了檔案的inode号。根據此inode号碼,我們可以找到檔案的block,進而讀取檔案内容。那麼,如果我們在其它目錄的block裡添加一條記錄,引用另一個檔案名(或者同名),該檔案對應的inode号和上一個檔案的inode号碼一緻。這樣的話,不同目錄裡的不同檔案,其實對應的是同一個inode号碼,對應的也就是同一個檔案。這就是實體連結的概念。

從示意圖可以看出,實體連結是不會建立新的inode的,它隻是在某目錄的block區增加了一條記錄而已,也是以實體連結是不可以跨越檔案系統的。也可以說,實體連結實際上是為檔案建了一個别名,連結檔案和原檔案實際上是同一個檔案。無論對哪個檔案的操作,都是對同一個檔案的操作。
實體連結的好處是安全。當移動或删除某檔案時,實體連結不會被破壞,因為它所引用的是檔案的實體資料而不是檔案在檔案結構中的位置。同時如果删除了某檔案,而該檔案有相應的實體連結,那麼這個檔案依然會保留,直到所有對它的引用都被删除。
符号連結
符号連結相當于Windows下的快捷方式。符号連結會産生的一個新的檔案,但這個檔案的作用就是專門指向某個檔案的,當删除連結檔案時,那就等于不需要這個連結,和原來的存在的實體原檔案沒有任何關系。但删除原來的檔案,則相應的符号連結不可用。
由于會産生新的檔案,是以當建立符号連結時,會占用新的inode編号。
ln指令
建立連結的指令是ln,預設情況下建立的實體連結,當加上-s選項時,則建立符号連結。
ln的用法如下:
建立一個實體連結:
上圖中,對于新建立的檔案file1,添加了一個在目前目錄下的實體連結檔案file1-hardlink,當使用ll指令檢視時,會發現此兩個檔案完全一樣。同時,由于建立了連結檔案,是以,檔案的連結數目都是2.
再針對file1建立一個符号連結:
上圖中可以看到,建立的符号連結檔案file1-symlink和原檔案并不相同,并且當我們ll時,可以看到系統會标明符号連結所連結到的原檔案。
當删除檔案時:
上圖可以看到,當删除原檔案file1時,實體連結檔案不會報錯,而符号連結檔案則會提示找不到檔案。
關于目錄