Linux 中的軟鏈接和硬鏈接

  1. Linux中的文件名和數據
    我們知道文件都有文件名與數據,這在 Linux 上被分成兩個部分:用戶數據 (user data) 與元數據 (metadata)。
    用戶數據,即文件數據塊 (data block),數據塊是記錄文件真實內容的地方;而元數據則是文件的附加屬性,如文件大小、創建時間、所有者等信息。
    文件名僅是爲了方便人們的記憶和使用,系統或程序通過 inode 號尋找正確的文件數據塊。下圖展示了程序通過文件名獲取文件內容的過程。
    這裏寫圖片描述
  2. 移動文件所帶來的影響
    在 Linux 系統中查看 inode 號可使用命令 stat 或 ls -i(若是 AIX 系統,則使用命令 istat)。
 # stat /home/harris/source/glibc-2.16.0.tar.xz 

  File: `/home/harris/source/glibc-2.16.0.tar.xz'
  Size: 9990512      Blocks: 19520      IO Block: 4096   regular file 
 Device: 807h/2055d      ***Inode: 2485677***     Links: 1 
 Access: (0600/-rw-------)  Uid: ( 1000/  harris)   Gid: ( 1000/  harris) 
 ... 
 ... 

 # mv /home/harris/source/glibc-2.16.0.tar.xz /home/harris/Desktop/glibc.tar.xz 

 # ls -i -F /home/harris/Desktop/glibc.tar.xz 
 ***2485677*** /home/harris/Desktop/glibc.tar.xz

代碼中使用命令 mv 移動並重命名文件 glibc-2.16.0.tar.xz,其結果不影響文件的用戶數據及 inode 號,文件移動前後 inode 號均爲:2485677。

3.硬鏈接
若一個 inode 號對應多個文件名,則稱這些文件爲硬鏈接。換言之,硬鏈接就是同一個文件使用了多個別名(見 圖 2.hard link 就是 file 的一個別名,他們有共同的 inode)。硬鏈接可由命令 link 或 ln 創建。如下是對文件 oldfile 創建硬鏈接。

 link oldfile newfile 
 ln oldfile newfile

由於硬鏈接是有着相同 inode 號僅文件名不同的文件,因此硬鏈接存在以下幾點特性:
文件有相同的 inode 及 data block;
只能對已存在的文件進行創建;
不能交叉文件系統進行硬鏈接的創建;
不能對目錄進行創建,只可對文件創建;
刪除一個硬鏈接文件並不影響其他有相同 inode 號的文件。

4.軟連接
若文件用戶數據塊中存放的內容是另一文件的路徑名的指向,則該文件就是軟連接。軟鏈接就是一個普通文件,只是數據塊內容有點特殊。軟鏈接有着自己的 inode 號以及用戶數據塊。
因此軟鏈接的創建與使用沒有類似硬鏈接的諸多限制:
軟鏈接有自己的文件屬性及權限等;
可對不存在的文件或目錄創建軟鏈接;
軟鏈接可交叉文件系統;
軟鏈接可對文件或目錄創建;
創建軟鏈接時,鏈接計數 i_nlink 不會增加;

5.一張圖看懂軟連接與硬鏈接的區別
這裏寫圖片描述

原文鏈接:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/

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