硬連接與軟連接,inode與links

硬連接和軟連接,第一感覺就像是window的快捷方式,實則不然

要說硬連接和軟連接,那就必須瞭解inode和block以及分區了

EXT文件系統在創建分區的時候,就劃分了兩塊區域,inode table和date block

INODE

inode – index node ,索引節點

每一個inode固定分配了128bytes的空間

一個文件和目錄對應着一個inode

多個文件可以對應一個inode

當訪問一個文件的時候,發生了什麼

首先會找到這個文件名對應的inode number,然後拿着inode number 找到inode,獲取inode中的信息,inode中記錄了文件的數據在哪些個block中儲存,然後會根據着inode中的block順序,依次取出數據

INODE的內容

用sata命令取出文件名對應的inode信息

inode

  • size :該文件的大小
  • block : block的信息
  • links :有多少個連接數,有多少個文件名連接上這個inode
  • inode: inode number
  • Access:mode 權限
  • uid、gid
  • atime、mtime、ctime

刪除

刪除一個文件的時候發生了什麼?

當這個文件的links>1的時候,先links-1,不刪除block中的數據,不刪除inode

如果links=1,那就刪除inode,而且刪除block,這樣的話,那文件真的是刪除了

刪除目錄的軟連接,對實際目錄沒有影響,刪除實際目錄那就是真的刪除了

硬連接

ln source destination

用上面的指令可以新建一個硬連接

建一個硬連接發生了什麼?

先新建一個文件名,文件名的inode number 指向源文件的inode number,然後把links+1,這就完成啦

所以硬連接文件的所有信息(權限、owner、size、time….)都和源文件一模一樣

訪問硬連接的過程

找出硬連接的inode number,然後讀取這個inode的信息和bolck位置,接着讀取block中的數據

注意

  • 源文件和硬連接文件共用一個inode
  • 建立硬連接,inode中的links會加一
  • 所以刪除硬連接對源文件不會有影響

軟連接

ln -s source destination

用上面的指令可以建立一個軟連接

建一個軟連接發生了什麼?

先建立一個文件,這個過程就會新建一個inode,軟連接的inode和源文件的inode不一樣

然後這個軟連接文件的文件名會指向源文件

ln-s

可以看到,軟連接的inode和源文件的inode不一樣

軟連接文件的大小爲4bytes,這剛好就是源文件文件名(demo)的大小,一個字幕一個byte

訪問一個軟連接

訪問一個軟連接文件的時候,會根據文件名找到源文件,然後就跟直接訪問源文件一樣了

注意

  • 軟連接的inode和源文件的inode不一樣
  • 軟連接不會增加links,所以刪除源文件(links=2)的時候,軟連接就訪問不了了
  • 軟連接文件的size=源文件的文件名的size
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章