在linux系統中,內核為每一個新創建的文件分配一個Inode(索引結點),每個文件都有一個惟一的inode號。
文件屬性保存在索引結點里,在訪問文件時,索引結點被復制到內存在,從而實現文件的快速訪問。
鏈接是一種在共享文件和訪問它的用戶的若干目錄項之間建立聯系的一種方法。
Linux中的兩種鏈接Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。
硬鏈接硬鏈接是文件的別名。從技術上講,他們公用一個inode(inode中包含了一個文件的所有必要的信息,說inode就是文件也是沒有問題的)。
由于linux下的文件是通過索引節點(Inode)來識別文件,硬鏈接也可以認為是一個指向文件索引節點的指針,系統并不為它重新分配inode,
每添加一個一個硬鏈接,文件的鏈接數就加1, 刪除一個則鏈接數減1。
大多數系統不允許創建一個目錄的硬鏈接。在允許創建目錄硬鏈接的系統上,只有超級用戶才能才能這樣做。
不能創建跨文件系統(分區)的硬鏈接(這些限制在POSIX中都不是強制性的)。
硬鏈接的創建語法 : ln 存在的文件 新的文件
[root@localhost link]# touch SingleFile ;新建一個空文件[root@localhost link]# ls -ltotal 0-rw-r--r-- 1 root root 0 Mar 30 17:48 SingleFile ;空文件的鏈接數為1[root@localhost link]# ln SingleFile HardLinkFile[root@localhost link]# ls -ltotal 0-rw-r--r-- 2 root root 0 Mar 30 17:48 HardLinkFile ;新文件的鏈接數為2-rw-r--r-- 2 root root 0 Mar 30 17:48 SingleFile ;舊文件的鏈接數為2[root@localhost link]# echo "Hello" > SingleFile ;向舊文件中寫入6個Bytes的字符串[root@localhost link]# ls -ltotal 8-rw-r--r-- 2 root root 6 Mar 30 17:49 HardLinkFile ;新文件的大小變為6個Bytes-rw-r--r-- 2 root root 6 Mar 30 17:49 SingleFile ;舊文件的大小變為6個Bytes[root@localhost link]# cat HardLinkFile ;顯示新文件中的內容 Hello ;結果與向舊文件中寫入的內容相同[root@localhost link]# rm -f HardLinkFile ;刪除新文件(刪除舊文件也是相同的)[root@localhost link]# ls -ltotal 4-rw-r--r-- 1 root root 6 Mar 30 17:49 SingleFile ;舊文件的鏈接數為1軟鏈接(符號鏈接)
軟鏈接是一種特殊的文件類型,其中包含對另一個 文件/目錄 以 絕對/相對 路徑形式的引用.
軟鏈接可以看做是對一個文件的間接指針,相當于windows下的快捷方式。
軟鏈接沒有任何文件系統的限制,任何用戶可以創建指向 文件/目錄 的符號鏈接。甚至可以跨越不同機器、不同網絡對文件進行鏈接。
創建文件的軟鏈接時,軟鏈接會使用一個新的inode,所以軟鏈接的inode號和文件的inode號不同(表明他們是兩個不同的文件),
軟鏈接的inode里存放著指向文件的路徑,刪除源文件,軟鏈接也無法使用了,因為文件的路徑不存在了;刪除軟鏈接對原文件沒有任何影響。
當我們再次創建這個文件時(文件名與之前的相同),軟鏈接又會重新指向這個文件(inode號與之前的不同了),而硬鏈接不會受其影響.當然軟鏈接也有硬鏈接沒有的缺點,因為鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統就找不到了,
而硬鏈接就沒有這個缺陷,你想怎么移就怎么移;還有它要系統分配額外的空間用于建立新的索引節點和保存原文件的路徑。
軟鏈接的創建語法 : ln -s 存在的文件 新的文件
[root@localhost link]# touch SingleFile ;新建一個空文件[root@localhost link]# ln -s SingleFile SoftLinkFile ;創建一個軟鏈接[root@localhost link]# ls -ltotal 0-rw-r--r-- 1 root root 0 Mar 30 18:28 SingleFile ;源文件的鏈接數不變lrwxrwxrwx 1 root root 10 Mar 30 18:28 SoftLinkFile -> SingleFile ;最前面的"l"表明此文件是一個軟鏈接,后面的提示說明指向的源文件[root@localhost link]# rm -f SingleFile ;刪除源文件(或者移動到別的位置)[root@localhost link]# ls -ltotal 0lrwxrwxrwx 1 root root 10 Mar 30 18:28 SoftLinkFile -> SingleFile ;"SingleFile" 高亮閃爍,提示文件找不到[root@localhost link]# echo "World" > SoftLinkFile ;向軟鏈接中寫入字符串[root@localhost link]# ls -ltotal 4-rw-r--r-- 1 root root 6 Mar 30 18:29 SingleFile ;SingleFile 被重新創建lrwxrwxrwx 1 root root 10 Mar 30 18:28 SoftLinkFile -> SingleFile[root@localhost link]# cat SingleFile World[root@localhost link]#硬鏈接 和 軟鏈接 的區別
1、硬鏈接 和 源文件 是同一個文件;軟鏈接 和 源文件 是2個不同的文件。
2、大部分系統不能創建 目錄 的硬鏈接,軟鏈接沒有這個限制。
3、硬鏈接不能跨文件系統(分區),軟鏈接沒有這個限制。
-------------------------------------------------------------------------------------------------------------------------------------------------------------
參考資料:
http://blog.chinaunix.net/uid-23208702-id-75180.html
http://blog.csdn.net/zengmuansha/article/details/7814496
http://en.wikipedia.org/wiki/Soft_link
http://blog.sina.com.cn/u/2827812045
新聞熱點
疑難解答