多角度理解linux下的鏈接 軟連接 硬鏈接,以及軟鏈接和硬鏈接的創建 檢驗

在 linux 中,一切皆文件,每一個文件名對應一個 inode 編號。每個文件名叫目錄項,每個名字到 inode 的映射叫鏈接。(inode爲文件的索引號,類似與進程中的PID)

我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息(通過inode與用戶數據建立鏈接)。

使用命令 ls -al查看文件信息   (紅色框子內的號碼便是inode)

硬鏈接可以理解爲windows下的快捷方式,硬鏈接的個數可以有多個。硬鏈接的文件inode相同,如上圖的link.c文件與linktest文件。

和硬鏈接對應的是軟鏈接,也可以叫symlinks,軟連接不是文件系統的文件名和 inode 的映射,而是一種指針,在運行的時候解釋。

可能大家看了之後還是有點不太清楚二者的區別,那麼接下來講一講二者的區別:

由於硬鏈接是有着相同 inode 號僅文件名不同的文件,因此硬鏈接存在以下幾點特性:

  • 文件有相同的 inode 及 data block;
  • 只能對已存在的文件進行創建;
  • 不能對目錄進行創建,只可對文件創建;
  • 刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。

軟鏈接與硬鏈接不同,若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有着自己的 inode 號以及用戶數據塊。

因此軟鏈接有如下特點:

  • 軟鏈接有自己的文件屬性及權限等;
  • 可對不存在的文件或目錄創建軟鏈接;
  • 軟鏈接可對文件或目錄創建;
  • 刪除軟鏈接並不影響被指向的文件,但若被指向的原文件被刪除,則相關軟連接被稱爲死鏈接(即 dangling link,若被指向路徑文件被重新創建,死鏈接可恢復爲正常的軟鏈接)。

接下來講一講硬鏈接創建函數與軟連接創建函數

硬鏈接創建使用 link函數   打開終端  使用命令  man 2 link  查看使用方法

主要看 DESCRIPTION(描述)   和  RETURN VALUE(返回值)

創建一個新的鏈接到已存在的文件,如果要創建的鏈接存在則不能重寫。創建成功返回 0,失敗返回-1(如下圖實我已經創好的硬鏈接)

現在我們再執行一下硬鏈接,它會提示創建失敗(如下圖),因爲現在linktest是存在的(linktest爲上圖函數中的newpath)

link1爲link.c通過交叉編譯(- static選項)生成的,link2是採用加載動態庫的交叉編譯生成的(無 - static選項),link.c源文件如下圖

 

軟連接創建使用  symlink函數   在終端中使用命令  man 2 symlink 查看使用手冊

源碼如下:

開發板的運行情況如下(inode不同

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章