要理解軟硬鏈接,就先要從ext文件系統的存儲原理說起
硬盤上最小的存儲單位是sector, 大小爲512bytes.
因爲數據往往都大於512bytes所以我們把多個sector連起來存儲數據, 這樣做的目的是減少磁盤I/O的負擔
這個多個連起來的sector叫做block。Block的大小是2的n次方倍512bytes
存儲空間分爲:數據區和元數據區
數據區:block存儲真實數據,一般大小爲1kb 2kb, 4kb
元數據區: inode存儲元數據,包括inode索引,名稱,大小,修改時間等,inode爲128bytes
ls –i可以查看文件對應的索引編號
stat 可以查看文件的inode信息
inode信息裏面的索引標號應該和擦看文件信息的索引編號相對應的,如下圖,a文件的索引編號都爲1052822
這裏需要說明下,目錄和文件在block存儲的內容性質不一樣
文件存儲的是文件內容本身
目錄要存儲目錄下所有文件的inode index和文件名,它的目的是幫助查找文件或其他目錄
圖詳細描述了訪問文件的過程
理解上圖後我們來說說硬鏈接
我們考慮下如果/tmp目錄下還有個b文件,它的inode index和a一樣也是指向同一個inode
這是我們就是a,b是彼此的硬鏈接
查看方式是ls –l a 或ls–l b, 屬主前有個2,就是說有另外一個硬鏈接
命令:ln被鏈接文件鏈接文件例如ln a b
軟鏈接
b的inode指向的內容是a文件的路徑,再通過這個路徑查找inode
查看方式是
這裏的b是指向a的,而大小就是1個字節大小.也就是a這個相對路徑
命令:ln–s被鏈接文件鏈接文件例如ln –s a b
軟硬鏈接的區別
軟鏈接:
· 可以跨分區鏈接-因爲指向的只是路徑
· 可以鏈接文件或目錄
· 刪除不影響源文件-和windows的快捷鍵類似
硬鏈接
· 不可以跨分區鏈接-應爲inode只能被本區的文件指向
· 不可以鏈接目錄-目錄下的目錄可能指向父目錄,產生死循環
· 刪除使inode的鏈接數降低爲0在整個文件刪除