Linux—實(shí)體鏈接與符號(hào)鏈接: ln
在 Linux 下面的鏈接文件有兩種,一種是類(lèi)似 Windows 的捷徑功能的文件,可以讓你快速的鏈接到目標(biāo)文件(或目錄);另一種則是通過(guò)文件系統(tǒng)的 inode 鏈接來(lái)產(chǎn)生新文件名,而不是產(chǎn)生新文件!這種稱(chēng)為實(shí)體鏈接(hard link)。這兩種玩意兒是完全不一樣的東西呢!現(xiàn)在就分別來(lái)談?wù)劇?/p>
Hard Link (實(shí)體鏈接, 硬式鏈接或?qū)嶋H鏈接);
每個(gè)文件都會(huì)占用一個(gè) inode ,文件內(nèi)容由 inode 的記錄來(lái)指向;
想要讀取該文件,必須要經(jīng)過(guò)目錄記錄的文件名來(lái)指向到正確的 inode 號(hào)碼才能讀取。
也就是說(shuō),其實(shí)文件名只與目錄有關(guān),但是文件內(nèi)容則與 inode 有關(guān)。那么想一想,有沒(méi)有可能有多個(gè)文件名對(duì)應(yīng)到同一個(gè) inode 號(hào)碼呢?有的!那就是 hard link 的由來(lái)。所以簡(jiǎn)單的說(shuō):hard link 只是在某個(gè)目錄下新增一筆文件名鏈接到某 inode 號(hào)碼的關(guān)連記錄而已。舉個(gè)例子來(lái)說(shuō),假設(shè)我系統(tǒng)有個(gè) /root/crontab 他是 /etc/crontab 的實(shí)體鏈接,也就是說(shuō)這兩個(gè)文件名鏈接到同一個(gè) inode ,自然這兩個(gè)文件名的所有相關(guān)信息都會(huì)一模一樣(除了文件名之外)。實(shí)際的情況可以如下所示:
[[email protected] ~]# ll -i/etc/crontab
34474855 -rw-r--r--. 1 root root 451 Jun10 2014 /etc/crontab
[[email protected] ~]# ln/etc/crontab . <==創(chuàng)建實(shí)體鏈接的指令
[[email protected] ~]# ll -i/etc/crontab crontab
34474855 -rw-r--r--. 2 root root 451 Jun10 2014 crontab
34474855 -rw-r--r--. 2 root root 451 Jun10 2014 /etc/crontab
你可以發(fā)現(xiàn)兩個(gè)文件名都鏈接到 34474855 這個(gè) inode 號(hào)碼,所以您瞧瞧,是否文件的權(quán)限/屬性完全一樣呢?因?yàn)檫@兩個(gè)“文件名”其實(shí)是一模一樣的“文件”啦!而且你也會(huì)發(fā)現(xiàn)第二個(gè)字段由原本的 1 變成 2 了!那個(gè)字段稱(chēng)為“鏈接”,這個(gè)字段的意義為:“有多少個(gè)文件名鏈接到這個(gè) inode 號(hào)碼”的意思。如果將讀取到正確數(shù)據(jù)的方式畫(huà)成示意圖,就類(lèi)似如下畫(huà)面:
上圖的意思是,你可以通過(guò) 1 或 2 的目錄之 inode 指定的 block 找到兩個(gè)不同的文件名,而不管使用哪個(gè)文件名均可以指到 real 那個(gè) inode 去讀取到最終數(shù)據(jù)!那這樣有什么好處呢?最大的好處就是“安全”!如同上圖中,如果你將任何一個(gè)“文件名”刪除,其實(shí) inode 與 block 都還是存在的!此時(shí)你可以通過(guò)另一個(gè)“文件名”來(lái)讀取到正確的文件數(shù)據(jù)喔!此外,不論你使用哪個(gè)“文件名”來(lái)編輯,最終的結(jié)果都會(huì)寫(xiě)入到相同的 inode 與 block 中,因此均能進(jìn)行數(shù)據(jù)的修改哩!一般來(lái)說(shuō),使用 hard link 設(shè)置鏈接文件時(shí),磁盤(pán)的空間與 inode 的數(shù)目都不會(huì)改變!我們還是由圖 7.2.1 來(lái)看,由圖中可以知道, hard link 只是在某個(gè)目錄下的 block 多寫(xiě)入一個(gè)關(guān)連數(shù)據(jù)而已,既不會(huì)增加 inode 也不會(huì)耗用 block 數(shù)量哩!
Tips hard link 的制作中,其實(shí)還是可能會(huì)改變系統(tǒng)的 block 的,那就是當(dāng)你新增這筆數(shù)據(jù)卻剛好將目錄的 block 填滿(mǎn)時(shí),就可能會(huì)新加一個(gè) block 來(lái)記錄文件名關(guān)連性,而導(dǎo)致磁盤(pán)空間的變化!不過(guò),一般 hard link 所用掉的關(guān)連數(shù)據(jù)量很小,所以通常不會(huì)改變 inode 與磁盤(pán)空間的大小喔!
其實(shí)我們也能夠知道,事實(shí)上 hard link 應(yīng)該僅能在單一文件系統(tǒng)中進(jìn)行的,應(yīng)該是不能夠跨文件系統(tǒng)才對(duì)!因?yàn)榫褪窃谕粋(gè) filesystem 上嘛!所以 hard link 是有限制的:
不能跨 Filesystem;
不能 link 目錄。
不能跨 Filesystem 還好理解,那不能 hard link 到目錄又是怎么回事呢?這是因?yàn)槿绻褂?hard link 鏈接到目錄時(shí),鏈接的數(shù)據(jù)需要連同被鏈接目錄下面的所有數(shù)據(jù)都創(chuàng)建鏈接,舉例來(lái)說(shuō),如果你要將 /etc 使用實(shí)體鏈接創(chuàng)建一個(gè) /etc_hd 的目錄時(shí),那么在 /etc_hd 下面的所有文件名同時(shí)都與 /etc 下面的文件名要?jiǎng)?chuàng)建 hard link 的,而不是僅鏈接到 /etc_hd 與 /etc 而已。并且,未來(lái)如果需要在 /etc_hd 下面創(chuàng)建新文件時(shí),連帶的, /etc 下面的數(shù)據(jù)又得要?jiǎng)?chuàng)建一次 hard link ,因此造成環(huán)境相當(dāng)大的復(fù)雜度。所以啰,目前 hard link 對(duì)于目錄暫時(shí)還是不支持的啊!
Symbolic Link (符號(hào)鏈接,亦即是捷徑)
相對(duì)于 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在創(chuàng)建一個(gè)獨(dú)立的文件,而這個(gè)文件會(huì)讓數(shù)據(jù)的讀取指向他 link 的那個(gè)文件的文件名!由于只是利用文件來(lái)做為指向的動(dòng)作,所以,當(dāng)來(lái)源文件被刪除之后,symbolic link 的文件會(huì)“開(kāi)不了”,會(huì)一直說(shuō)“無(wú)法打開(kāi)某文件!”。實(shí)際上就是找不到原始“文件名”而已啦!
舉例來(lái)說(shuō),我們先創(chuàng)建一個(gè)符號(hào)鏈接文件鏈接到 /etc/crontab 去看看:
[[email protected] ~]# ln -s/etc/crontab crontab2
[[email protected] ~]# ll -i/etc/crontab /root/crontab2
34474855 -rw-r--r--. 2 root root 451 Jun10 2014 /etc/crontab
53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 ->/etc/crontab
由上表的結(jié)果我們可以知道兩個(gè)文件指向不同的 inode 號(hào)碼,當(dāng)然就是兩個(gè)獨(dú)立的文件存在!而且鏈接文件的重要內(nèi)容就是他會(huì)寫(xiě)上目標(biāo)文件的“文件名”,你可以發(fā)現(xiàn)為什么上表中鏈接文件的大小為 12 Bytes 呢?因?yàn)榧^(-->)右邊的文件名“/etc/crontab”總共有 12 個(gè)英文,每個(gè)英文占用 1 個(gè) Bytes ,所以文件大小就是 12Bytes了!關(guān)于上述的說(shuō)明,我們以如下圖示來(lái)解釋:
由 1 號(hào) inode 讀取到鏈接文件的內(nèi)容僅有文件名,根據(jù)文件名鏈接到正確的目錄去取得目標(biāo)文件的 inode ,最終就能夠讀取到正確的數(shù)據(jù)了。你可以發(fā)現(xiàn)的是,如果目標(biāo)文件(/etc/crontab)被刪除了,那么整個(gè)環(huán)節(jié)就會(huì)無(wú)法繼續(xù)進(jìn)行下去,所以就會(huì)發(fā)生無(wú)法通過(guò)鏈接文件讀取的問(wèn)題了!
這里還是得特別留意,這個(gè) Symbolic Link 與 Windows 的捷徑可以給他劃上等號(hào),由 Symbolic link 所創(chuàng)建的文件為一個(gè)獨(dú)立的新的文件,所以會(huì)占用掉 inode 與 block。

發(fā)表評(píng)論
登錄
手機(jī)
驗(yàn)證碼
立即登錄即可訪(fǎng)問(wèn)所有OFweek服務(wù)
還不是會(huì)員?免費(fèi)注冊(cè)
忘記密碼請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
您提交的評(píng)論過(guò)于頻繁,請(qǐng)輸入驗(yàn)證碼繼續(xù)
圖片新聞
-
馬云重返一線(xiàn)督戰(zhàn),阿里重啟創(chuàng)始人模式
-
機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹(shù)機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-
存儲(chǔ)圈掐架!江波龍起訴佰維,索賠121萬(wàn)
-
長(zhǎng)安汽車(chē)母公司突然更名:從“中國(guó)長(zhǎng)安”到“辰致科技”
-
豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-
字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
-
員工持股爆雷?廣汽埃安緊急回應(yīng)
-
中國(guó)“智造”背后的「關(guān)鍵力量」
最新活動(dòng)更多
-
10月23日火熱報(bào)名中>> 2025是德科技創(chuàng)新技術(shù)峰會(huì)
-
10月23日立即報(bào)名>> Works With 開(kāi)發(fā)者大會(huì)深圳站
-
10月24日立即參評(píng)>> 【評(píng)選】維科杯·OFweek 2025(第十屆)物聯(lián)網(wǎng)行業(yè)年度評(píng)選
-
即日-11.25立即下載>>> 費(fèi)斯托白皮書(shū)《柔性:汽車(chē)生產(chǎn)未來(lái)的關(guān)鍵》
-
11月27日立即報(bào)名>> 【工程師系列】汽車(chē)電子技術(shù)在線(xiàn)大會(huì)
-
12月18日立即報(bào)名>> 【線(xiàn)下會(huì)議】OFweek 2025(第十屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
推薦專(zhuān)題
- 1 特斯拉工人被故障機(jī)器人打成重傷,索賠3.6億
- 2 【行業(yè)深度研究】退居幕后四年后,張一鳴終于把算法公司變成AI公司?
- 3 人形機(jī)器人廠(chǎng)商,正在批量復(fù)刻宇樹(shù)G1
- 4 AI 時(shí)代,阿里云想當(dāng)“安卓” ,那誰(shuí)是“蘋(píng)果”?
- 5 華為公布昇騰芯片三年計(jì)劃,自研HBM曝光
- 6 硬剛英偉達(dá)!華為發(fā)布全球最強(qiáng)算力超節(jié)點(diǎn)和集群
- 7 機(jī)器人9月大事件|3家國(guó)產(chǎn)機(jī)器人沖刺IPO,行業(yè)交付與融資再創(chuàng)新高!
- 8 谷歌“香蕉”爆火啟示:國(guó)產(chǎn)垂類(lèi)AI的危機(jī)還是轉(zhuǎn)機(jī)?
- 9 00后華裔女生靠?jī)刹緼I電影狂賺7.8億人民幣,AI正式進(jìn)軍好萊塢
- 10 美光:AI Capex瘋投不止,終于要拉起存儲(chǔ)超級(jí)周期了?