Linux 系統(tǒng)下每創(chuàng)建一個(gè)文件,系統(tǒng)都會(huì)為此文件生成一個(gè) index node 簡(jiǎn)稱(inode) ,而每一個(gè)文件都包含用戶數(shù)據(jù)(user data) 與 元數(shù)據(jù)(metadata)
用戶數(shù)據(jù)里記錄了文件的真正內(nèi)容.
元數(shù)據(jù)里記錄的是文件的附加屬性,如 文件大小,創(chuàng)建時(shí)間,所有者等,其中 上面提到的 index node 就保存在元數(shù)據(jù)中.在linux 中文件名并不是文件的唯一標(biāo)識(shí),index onde 才是唯一標(biāo)示,系統(tǒng)查找文件也是通過 index node 來查找內(nèi)容數(shù)據(jù)塊.
如何查看文件的 index node:
/Users/zhangzhi >ls -i
31615656 AndroidStudioProjects 30836545 go
1152719 Applications 49115578 images
31827389 CNode 13208576 ktsgs.zip
595399 Desktop 44722768 pandoc_demo
595275 Documents 49218456 pgadmin.log
595277 Downloads 15078624 pomelo
7094352 LevelTest 1009499 project
7098493 LevelTest.zip 1011801 qdb
595388 Library 5901898 qdb.zip
595439 Movies 23150187 test
595441 Music 1010768 tmp
595443 Pictures 17956310 trunk
595445 Public 17970255 trunk.zip
32072972 app 41999857 webwork
1009500 code 13208610 游戲配置
22509232 databak
我們看到的前面的數(shù)字序列就是 index node
如何理解呢,你可以想象成 windows 操作系統(tǒng)里的快捷鍵.對(duì)同一個(gè)文件的訪問提供了多個(gè)入口.
指令:
ln [option] link_file source_file
(link_file是待建立鏈接文件的文件,source_file是新創(chuàng)建的鏈接文件)
-f 建立時(shí),將同檔案名刪除.
-i 刪除前進(jìn)行詢問.
示例:
ln -s myfile mylink
建立myfile 文件的軟鏈接 mylink
ln myfile mylink
建立myfile 的硬鏈接 mylink
軟鏈接
ln -s myfile mylink
軟鏈接創(chuàng)建后,用戶數(shù)據(jù)中存儲(chǔ)的并不是文件本身的記錄,而是一個(gè)指向 原文件路徑的一個(gè)指針.但是它有自己的 index node 序列.
所以 ,軟鏈接其實(shí)就是一個(gè)新的文件,但是這個(gè)文件很特殊,因?yàn)樗挠脩魯?shù)據(jù)中放的不是文件內(nèi)容,而是一個(gè)指向其他文件的指針.
軟鏈接有下面幾個(gè)特點(diǎn):
1.多個(gè)軟鏈接有多個(gè)不同的 index node
2.不僅可以對(duì)文件創(chuàng)建,還可以對(duì)目錄創(chuàng)建軟鏈接
3.軟鏈接可以交叉文件系統(tǒng)
4.刪除軟鏈接 并不會(huì)影響原文件,但是原文件被刪除,這個(gè)軟鏈接就成了一個(gè)死鏈接.
硬鏈接
ln myfile mylink
硬鏈接創(chuàng)建后,用戶數(shù)據(jù)中存儲(chǔ)的是文件本身記錄,其他他的用戶數(shù)據(jù)和元數(shù)據(jù)都和 myfile 一樣,唯一不同的是文件名.
所以硬鏈接就是同一個(gè)文件有了多個(gè)文件名, 但是多個(gè)文件名都指向了 同一個(gè) index node
這樣看來,硬鏈接就是有多個(gè)別名的同一個(gè)文件.
硬鏈接有下面幾個(gè)特別:
1.他們有相同的 index node
2.有相同的數(shù)據(jù)記錄
3.只能在已經(jīng)存在文件上創(chuàng)建 硬鏈接
4.刪除其中任何一個(gè),其他硬鏈接不受影響.
5.只能對(duì)文件做硬鏈接