硬連接和軟連接,第一感覺就像是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信息
- 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不一樣
然後這個軟連接文件的文件名會指向源文件
可以看到,軟連接的inode和源文件的inode不一樣
軟連接文件的大小爲4bytes,這剛好就是源文件文件名(demo)的大小,一個字幕一個byte
訪問一個軟連接
訪問一個軟連接文件的時候,會根據文件名找到源文件,然後就跟直接訪問源文件一樣了
注意
- 軟連接的inode和源文件的inode不一樣
- 軟連接不會增加links,所以刪除源文件(links=2)的時候,軟連接就訪問不了了
- 軟連接文件的size=源文件的文件名的size