1. 程式人生 > >LINUX系統中,軟/硬鏈接和inode的一些關系。

LINUX系統中,軟/硬鏈接和inode的一些關系。

tex log windows app 發的 查看 文件名 並不是 存儲

前言:
眾所周知硬盤是計算機不可缺少的一部分,不管這個計算機上運行著的是什麽系統,但是存儲設備,都是必不可少的,而inode則是磁盤存儲時無法替代的一部分。所以我想談一下在linux系統中關於inode和軟/硬鏈接的一些個人見解。

  目錄:
  1. 什麽是inode

  2. 什麽是硬鏈接

  3. 什麽是軟鏈接

  4. 軟/硬鏈接在linux上的基本使用方法

  5. 軟/硬鏈接和inode的聯系

一,什麽是inode

  • 理解inode,要從文件儲存說起。
    文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當於0.5KB),而文件在存儲時並不是一定在連續的扇區上存儲直到整個文件被存儲完畢。所以當計算機需要某個文件的時候,它就必須
    得在不同的扇區跳來跳去,從而讀取完一個完整文件的所有內容。可想而知這樣的讀取數據方式是多麽的緩慢,因此人們就發明的新的方法,找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小,

文件被分布到了哪些扇區等等。這種儲存文件元信息的區域就叫做inode,中文譯名為"索引節點"。

  • inode一般占硬盤1/10的大小或者更小,在我們常用的存儲方式中每個不同的分區都有一群自己的inode,每個inode都對應自己分區至少一個存儲單元如下圖所示:
    技術分享圖片
  • 所以當有了inode以後,計算機每次先從inode裏提取信息然後再去存儲單元尋找。這樣就少了很多冤枉路,從而加快了讀取時間。

二 ,什麽是硬鏈接

  • 硬鏈接(hard link, 也稱鏈接)就是一個文件的一個或多個文件名。再說白點,所謂鏈接無非是把文件名和計算機文件系統使用的節點號鏈接起來。因此我們可以用多個文件名與同一個文件進行鏈接,這些文件名可以在同一目錄或不同目錄。
  • Linux 文件系統最重要的特點之一是它的文件鏈接。鏈接是對文件的引用,這樣您可以讓文件在文件系統中多處被看到。不過,在 Linux 中,鏈接可以如同原始文件一樣來對待。鏈接可以與普通的文件一樣被執行、編輯和訪問。對系統中的其他應用程序而言,鏈接就是它所對應的原始文件。當您通過鏈接對文件進行編輯時,您編輯的實際上是原始文件。鏈接不是副本。
  • 硬鏈接只能引用同一文件系統中的文件。它引用的是文件在文件系統中的物理索引(也稱為 inode)。當您移動或刪除原始文件時,硬鏈接不會被破壞,因為它所引用的是文件的物理數據而不是文件在文件結構中的位置。硬鏈接的文件不需要用戶有訪問原始文件的權限,也不會顯示原始文件的位置,這樣有助於文件的安全。如果您刪除的文件有相應的硬鏈接,那麽這個文件依然會保留,直到所有對它的引用都被刪除。
  • 硬鏈接不能跨文件系統。
    三,什麽是軟鏈接
  • 軟鏈接又叫符號鏈接,這個文件包含了另一個文件的路徑名。可以是任意文件或目錄,可以鏈接不同文件系統的文件。跟Windows系統上的快捷方式基本上毫無差別。
  • 軟鏈接文件只是其源文件的一個標記,當刪除了源文件後,鏈接文件不能獨立存在,雖然仍保留文件名,但卻不能查看軟鏈接文件的內容了。
  • 在linux上軟鏈接可以跨文件系統,就類似於你可以創建一個在C:盤上的軟鏈接但是鏈接的指向目標卻是D:上的某個文件!
    四,軟/硬鏈接在linux上的基本使用方法
  • 如圖所示:
    技術分享圖片
  • test文件裏存的是“hello”,現在我們要去b3文件夾裏創建一個軟鏈接,當我們cat 這個鏈接時看看會不會顯示“hello”技術分享圖片
  • 現在我們看一下這個軟鏈接的本質
    技術分享圖片
  • 所以軟鏈接我們可以把它當作一個獨立的文件,而文件裏記載的就是路徑,如果源文件被刪除那麽這個軟鏈接將沒有任何意義!
  • 下面我們看一下硬鏈接,硬鏈接創建方法為: ln 要被鏈接文件的絕對路徑 鏈接名稱 還以剛剛的文件舉例,命令為: ln app/a/a2/a3/test lianjie 這裏就不圖示了。
  • 硬鏈接所顯示的效果,或者說達到的用處跟軟鏈接基本上沒有任何區別,被硬鏈接的文件inode 數會加1 如果查看所有的硬鏈接我們會發現他們的大小,inode,完全一致! 而如果我們刪除源文件,這個鏈接也不受任何影響。
    五,軟/硬鏈接和inode的聯系
  • 對於軟鏈接來說,這個軟鏈接擁有自己獨立的inode。 而這個軟鏈接也是一個文件,從磁盤的存儲層面上來看,我們要顯示的那個文件其實和軟鏈接沒有任何聯系。 我們的鏈接當找到這個路徑的文件後就完成了他的使命,而顯示的東西或者達到的效果完全是由我們找到的那個文件自己達成的。或者說我們的軟鏈接就是一個觸發的作用!
  • 對於硬鏈接來說則完全不同,硬鏈接不能跨分區。 被硬鏈接的文件就像是玩遊戲時多了一次復活機會。只要inode計數不為0,無論怎麽刪除文件,那個文件依然堅挺!!!
  • 總的來說,軟鏈接的inode和源文件沒有關系,軟鏈接就是一個完整的個體!硬鏈接雖然不會使源文件被再次復制,但是所有的鏈接同一文件的硬鏈接inode是一樣的,大小也是一樣的。由於每個硬鏈接的inode一樣,也就導致了每個硬鏈接是實打實的關聯這個源文件!

後記:
第一次寫博客,以後應該也會繼續。寫的不好的地方大家多多包涵! 以後我也會繼續和大家分享自己在linux學習上的理解,只為分享。 雖然你不愛聽,但是我愛說啊!!!

LINUX系統中,軟/硬鏈接和inode的一些關系。