原文鏈接:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html
1. inode號
文件有文件名與數(shù)據(jù),這在 Linux 上被分成兩個部分:用戶數(shù)據(jù) (user data) 與元數(shù)據(jù) (metadata)科侈。
用戶數(shù)據(jù)即文件數(shù)據(jù)塊 (data block)允跑,數(shù)據(jù)塊是記錄文件真實內(nèi)容的地方。
元數(shù)據(jù)則是文件的附加屬性,如文件大小、創(chuàng)建時間、所有者等信息敛纲。
在Linux中,元數(shù)據(jù)中的 inode號(inode是文件元數(shù)據(jù)的一部分但其并不包含文件名还棱,inode號即索引節(jié)點號)才是文件的 唯一標(biāo)識 而非文件名载慈。文件名僅是為了方便人們的記憶和使用,系統(tǒng)或程序通過inode號尋找正確的文件數(shù)據(jù)塊珍手。
2. 查看inode號
在Linux系統(tǒng)中查看inode號可使用命令 stat 或 ls -i(若是AIX系統(tǒng),則使用命令istat)
# stat a.txt
# ll -i
3. 鏈接
為解決文件的共享使用辞做,Linux系統(tǒng)引入了兩種鏈接:硬鏈接 (hard link) 與軟鏈接(又稱符號鏈接琳要,即 soft link 或 symbolic link)。鏈接為 Linux 系統(tǒng)解決了文件的共享使用秤茅,還帶來了隱藏文件路徑稚补、增加權(quán)限安全及節(jié)省存儲等好處。若一個 inode 號對應(yīng)多個文件名框喳,則稱這些文件為硬鏈接课幕。軟鏈接與硬鏈接不同,若文件用戶數(shù)據(jù)塊中存放的內(nèi)容是另一文件的路徑名的指向五垮,則該文件就是軟連接乍惊。軟鏈接就是一個普通文件,只是數(shù)據(jù)塊內(nèi)容有點特殊放仗。軟鏈接有著自己的 inode 號以及用戶數(shù)據(jù)塊润绎。
4. 硬鏈接
創(chuàng)建硬鏈接:
# link old.file hard.link
硬鏈接具有以下特點:
- 文件有相同的 inode 及 data block;
- 只能對已存在的文件進行創(chuàng)建诞挨;
- 不能交叉文件系統(tǒng)進行硬鏈接的創(chuàng)建莉撇;
- 不能對目錄進行創(chuàng)建,只可對文件創(chuàng)建惶傻;
- 刪除一個硬鏈接文件并不影響其他有相同 inode 號的文件棍郎。
硬鏈接穩(wěn)定性高。軟鏈接類似windows的快捷方式银室,硬鏈接不是涂佃。當(dāng)你刪除時励翼,在利用軟鏈接去讀取這個文件,會出現(xiàn)錯誤巡李。硬鏈接就不會抚笔,他依舊可以讀取到這個文件。
5. 軟鏈接
軟連接就相當(dāng)于windows的快捷方式侨拦,目的是:在不改變原目錄/文件的前提下殊橙,起一個方便訪問的別名。
軟鏈接的創(chuàng)建:
# ln -s /developer/maven/mvn /usr/bin/mvn
以上命令通過軟鏈接方式在環(huán)境變量中添加了maven的mvn命令狱从。
- 軟鏈接具有以下特點:
- 軟鏈接有自己的文件屬性及權(quán)限等膨蛮;
- 可對不存在的文件或目錄創(chuàng)建軟鏈接;
- 軟鏈接可交叉文件系統(tǒng)季研;
- 軟鏈接可對文件或目錄創(chuàng)建敞葛;
- 創(chuàng)建軟鏈接時,鏈接計數(shù) i_nlink 不會增加与涡;
- 刪除軟鏈接并不影響被指向的文件惹谐,但若被指向的原文件被刪除,則相關(guān)軟連接被稱為死鏈接(即 dangling link驼卖,若被指向路徑文件被重新創(chuàng)建氨肌,死鏈接可恢復(fù)為正常的軟鏈接)。