歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下的硬鏈接和符號鏈接

Linux下的硬鏈接和符號鏈接

日期:2017/2/28 15:53:26   编辑:Linux教程

硬鏈接和符號鏈接(軟鏈接):

Linux 文件系統最重要的特點之一是它的文件鏈接。鏈接是對文件的引用,這樣您可以讓文件在文件系統中多處被看到。保存在磁盤分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號inode 。在 Linux 中,鏈接可以如同原始文件一樣來對。鏈接可以與普通的文件一樣被執行、編輯和訪問。對系統中的其他應用程序而言,鏈接就是它所對應的原始文件。當您通過鏈接對文件進行編輯時,您編輯的實際上是原始文件。鏈接不是副本。有兩種類型的鏈接:硬鏈接和符號鏈接(軟鏈接)。

  硬鏈接只能引用同一文件系統中的文件。它引用的是文件在文件系統中的物理索引(也稱為 inode)。當您移動或刪除原始文件時,硬鏈接不會被破壞,因為它所引用的是文件的物理數據而不是文件在文件結構中的位置。硬鏈接的文件不需要用戶有訪問原始文件的權限,也不會顯示原始文件的位置,這樣有助於文件的安全。如果您刪除的文件有相應的硬鏈接,那麼這個文件依然會保留,直到所有對它的引用都被刪除。

軟連接,其實就是新建立一個文件,這個文件就是專門用來指向別的文件的(那就和windows 下的快捷方式的那個文件有很接近的意味)。軟連接產生的是一個新的文件,但這個文件的作用就是專門指向某個文件的,刪了這個軟連接文件,那就等於不需要這個連接,和原來的存在的實體原文件沒有任何關系,但刪除原來的文件,則相應的軟連接不可用(cat那個軟鏈接文件,則提示“沒有該文件或目錄“)。

硬鏈接與軟鏈接的區別;

硬連接是不會建立inode的,他只是在文件原來的inode link count域再增加1而已,也因此硬鏈接是不可以跨越文件系統的。相反都是軟連接會重新建立一個inode,當然inode的結構跟其他的不一樣,他只是一個指明源文件的字符串信息。一旦刪除源文件,那麼軟連接將變得毫無意義。而硬鏈接刪除的時候,系統調用會檢查inode link count的數值,如果他大於等於1,那麼inode不會被回收。因此文件的內容不會被刪除。

  硬鏈接實際上是為文件建一個別名,鏈接文件和原文件實際上是同一個文件。可以通過ls -i來查看一下,這兩個文件的inode號是同一個,說明它們是同一個文件;而軟鏈接建立的是一個指向,即鏈接文件內的內容是指向原文件的指針,它們是兩個文件。

  軟鏈接可以跨文件系統,硬鏈接不可以;軟鏈接可以對一個不存在的文件名(filename)進行鏈接(當然此時如果你vi這個軟鏈接文件,linux會自動新建一個文件名為filename的文件),硬鏈接不可以(其文件必須存在,inode必須存在);軟鏈接可以對目錄進行連接,硬鏈接不可以。兩種鏈接都可以通過命令 ln 來創建。ln 默認創建的是硬鏈接。使用 -s 開關可以創建軟鏈接。

現在研究一下硬鏈接和符號鏈接的創建和性質

首先用cp和ln命令都可以創建硬鏈接和符號鏈接。

創建硬鏈接及其性質:

  1. [www.linuxidc.com @linuxidc ~]$ cp -l link link.back
  2. [www.linuxidc.com @linuxidc ~]$ln link link.back1
  3. [www.linuxidc.com @linuxidc ~]$ ls -al |grep 'link*'
  4. -rw-rw-r-- 3 guo guo 38 4月 8 20:24 link
  5. -rw-rw-r-- 3 guo guo 38 4月 8 20:24 link.back
  6. -rw-rw-r-- 1 guo guo 38 4月 8 20:26 link.back1

創建的硬鏈接文件與原文件的文件大小相同,文件屬性為普通文件。

當修改任意個文件內容均可是三個文件內容同時改變。

  1. [www.linuxidc.com @linuxidc ~]$ cat link
  2. shell
  3. [www.linuxidc.com @linuxidc ~]$ cat link.back*
  4. shell
  5. shell
  6. [www.linuxidc.com @linuxidc ~]$ cat link
  7. shell
  8. [www.linuxidc.com @linuxidc ~]$ cat link.back
  9. shell
  10. [www.linuxidc.com @linuxidc ~]$ cat link.back1
  11. shell
  12. [www.linuxidc.com @linuxidc ~]$ echo "shell" >>link.back
  13. [www.linuxidc.com @linuxidc ~]$ cat link.back
  14. shell
  15. shell
  16. [www.linuxidc.com @linuxidc ~]$ cat link.back1
  17. shell
  18. shell
  19. [www.linuxidc.com @linuxidc ~]$ cat link
  20. shell
  21. shell
Copyright © Linux教程網 All Rights Reserved