Linux—實(shí)體鏈接與符號鏈接: ln
在 Linux 下面的鏈接文件有兩種,一種是類似 Windows 的捷徑功能的文件,可以讓你快速的鏈接到目標(biāo)文件(或目錄);另一種則是通過文件系統(tǒng)的 inode 鏈接來產(chǎn)生新文件名,而不是產(chǎn)生新文件!這種稱為實(shí)體鏈接(hard link)。這兩種玩意兒是完全不一樣的東西呢!現(xiàn)在就分別來談?wù)劇?/p>
Hard Link (實(shí)體鏈接, 硬式鏈接或?qū)嶋H鏈接);
每個(gè)文件都會(huì)占用一個(gè) inode ,文件內(nèi)容由 inode 的記錄來指向;
想要讀取該文件,必須要經(jīng)過目錄記錄的文件名來指向到正確的 inode 號碼才能讀取。
也就是說,其實(shí)文件名只與目錄有關(guān),但是文件內(nèi)容則與 inode 有關(guān)。那么想一想,有沒有可能有多個(gè)文件名對應(yīng)到同一個(gè) inode 號碼呢?有的!那就是 hard link 的由來。所以簡單的說:hard link 只是在某個(gè)目錄下新增一筆文件名鏈接到某 inode 號碼的關(guān)連記錄而已。舉個(gè)例子來說,假設(shè)我系統(tǒng)有個(gè) /root/crontab 他是 /etc/crontab 的實(shí)體鏈接,也就是說這兩個(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 號碼,所以您瞧瞧,是否文件的權(quán)限/屬性完全一樣呢?因?yàn)檫@兩個(gè)“文件名”其實(shí)是一模一樣的“文件”啦!而且你也會(huì)發(fā)現(xiàn)第二個(gè)字段由原本的 1 變成 2 了!那個(gè)字段稱為“鏈接”,這個(gè)字段的意義為:“有多少個(gè)文件名鏈接到這個(gè) inode 號碼”的意思。如果將讀取到正確數(shù)據(jù)的方式畫成示意圖,就類似如下畫面:

上圖的意思是,你可以通過 1 或 2 的目錄之 inode 指定的 block 找到兩個(gè)不同的文件名,而不管使用哪個(gè)文件名均可以指到 real 那個(gè) inode 去讀取到最終數(shù)據(jù)!那這樣有什么好處呢?最大的好處就是“安全”!如同上圖中,如果你將任何一個(gè)“文件名”刪除,其實(shí) inode 與 block 都還是存在的!此時(shí)你可以通過另一個(gè)“文件名”來讀取到正確的文件數(shù)據(jù)喔!此外,不論你使用哪個(gè)“文件名”來編輯,最終的結(jié)果都會(huì)寫入到相同的 inode 與 block 中,因此均能進(jìn)行數(shù)據(jù)的修改哩!一般來說,使用 hard link 設(shè)置鏈接文件時(shí),磁盤的空間與 inode 的數(shù)目都不會(huì)改變!我們還是由圖 7.2.1 來看,由圖中可以知道, hard link 只是在某個(gè)目錄下的 block 多寫入一個(gè)關(guān)連數(shù)據(jù)而已,既不會(huì)增加 inode 也不會(huì)耗用 block 數(shù)量哩!
Tips hard link 的制作中,其實(shí)還是可能會(huì)改變系統(tǒng)的 block 的,那就是當(dāng)你新增這筆數(shù)據(jù)卻剛好將目錄的 block 填滿時(shí),就可能會(huì)新加一個(gè) block 來記錄文件名關(guān)連性,而導(dǎo)致磁盤空間的變化!不過,一般 hard link 所用掉的關(guān)連數(shù)據(jù)量很小,所以通常不會(huì)改變 inode 與磁盤空間的大小喔!
其實(shí)我們也能夠知道,事實(shí)上 hard link 應(yīng)該僅能在單一文件系統(tǒng)中進(jìn)行的,應(yīng)該是不能夠跨文件系統(tǒng)才對!因?yàn)榫褪窃谕粋(gè) filesystem 上嘛!所以 hard link 是有限制的:
不能跨 Filesystem;
不能 link 目錄。
不能跨 Filesystem 還好理解,那不能 hard link 到目錄又是怎么回事呢?這是因?yàn)槿绻褂?hard link 鏈接到目錄時(shí),鏈接的數(shù)據(jù)需要連同被鏈接目錄下面的所有數(shù)據(jù)都創(chuàng)建鏈接,舉例來說,如果你要將 /etc 使用實(shí)體鏈接創(chuàng)建一個(gè) /etc_hd 的目錄時(shí),那么在 /etc_hd 下面的所有文件名同時(shí)都與 /etc 下面的文件名要?jiǎng)?chuàng)建 hard link 的,而不是僅鏈接到 /etc_hd 與 /etc 而已。并且,未來如果需要在 /etc_hd 下面創(chuàng)建新文件時(shí),連帶的, /etc 下面的數(shù)據(jù)又得要?jiǎng)?chuàng)建一次 hard link ,因此造成環(huán)境相當(dāng)大的復(fù)雜度。所以啰,目前 hard link 對于目錄暫時(shí)還是不支持的啊!
Symbolic Link (符號鏈接,亦即是捷徑)
相對于 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在創(chuàng)建一個(gè)獨(dú)立的文件,而這個(gè)文件會(huì)讓數(shù)據(jù)的讀取指向他 link 的那個(gè)文件的文件名!由于只是利用文件來做為指向的動(dòng)作,所以,當(dāng)來源文件被刪除之后,symbolic link 的文件會(huì)“開不了”,會(huì)一直說“無法打開某文件!”。實(shí)際上就是找不到原始“文件名”而已啦!
舉例來說,我們先創(chuàng)建一個(gè)符號鏈接文件鏈接到 /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 號碼,當(dāng)然就是兩個(gè)獨(dú)立的文件存在!而且鏈接文件的重要內(nèi)容就是他會(huì)寫上目標(biāo)文件的“文件名”,你可以發(fā)現(xiàn)為什么上表中鏈接文件的大小為 12 Bytes 呢?因?yàn)榧^(-->)右邊的文件名“/etc/crontab”總共有 12 個(gè)英文,每個(gè)英文占用 1 個(gè) Bytes ,所以文件大小就是 12Bytes了!關(guān)于上述的說明,我們以如下圖示來解釋:

由 1 號 inode 讀取到鏈接文件的內(nèi)容僅有文件名,根據(jù)文件名鏈接到正確的目錄去取得目標(biāo)文件的 inode ,最終就能夠讀取到正確的數(shù)據(jù)了。你可以發(fā)現(xiàn)的是,如果目標(biāo)文件(/etc/crontab)被刪除了,那么整個(gè)環(huán)節(jié)就會(huì)無法繼續(xù)進(jìn)行下去,所以就會(huì)發(fā)生無法通過鏈接文件讀取的問題了!
這里還是得特別留意,這個(gè) Symbolic Link 與 Windows 的捷徑可以給他劃上等號,由 Symbolic link 所創(chuàng)建的文件為一個(gè)獨(dú)立的新的文件,所以會(huì)占用掉 inode 與 block。
發(fā)表評論
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
圖片新聞
-

落地?zé)o錫!京東首個(gè)物流機(jī)器人超級工廠來了
-

OpenAI發(fā)布的AI瀏覽器,市場為何反應(yīng)強(qiáng)烈?
-

馬云重返一線督戰(zhàn),阿里重啟創(chuàng)始人模式
-

機(jī)器人奧運(yùn)會(huì)戰(zhàn)報(bào):宇樹機(jī)器人摘下首金,天工Ultra搶走首位“百米飛人”
-

存儲圈掐架!江波龍起訴佰維,索賠121萬
-

長安汽車母公司突然更名:從“中國長安”到“辰致科技”
-

豆包前負(fù)責(zé)人喬木出軌BP后續(xù):均被辭退
-

字節(jié)AI Lab負(fù)責(zé)人李航卸任后返聘,Seed進(jìn)入調(diào)整期
最新活動(dòng)更多
-
即日-5.20立即下載>> 【限時(shí)免費(fèi)】物理場仿真助力生物醫(yī)學(xué)領(lǐng)域技術(shù)創(chuàng)新
-
精彩回顧立即查看>> 【直播】 智測未來·2026海克斯康春季產(chǎn)品創(chuàng)新日
-
精彩回顧立即查看>> 【線下論壇】新唐科技×芯唐南京 2026 年度研討會(huì)
-
精彩回顧立即查看>> OFweek 2026(第十五屆)中國機(jī)器人產(chǎn)業(yè)大會(huì)
-
精彩回顧立即查看>> 維科杯· OFweek 2025中國機(jī)器人行業(yè)年度評選
-
精彩回顧立即查看>> 【在線會(huì)議】液冷服務(wù)器信號完整性及冷卻液關(guān)鍵電參數(shù)測試
推薦專題
- 1 特斯拉Optimus Gen3量產(chǎn)在即,哪些環(huán)節(jié)最具確定性?
- 2 OpenAI深夜王炸!ChatGPT Images 2.0實(shí)測:中文穩(wěn)、細(xì)節(jié)炸,設(shè)計(jì)師慌了
- 3 AI狂歡遇上油價(jià)破百,全球股市還能漲多久? | 產(chǎn)聯(lián)看全球
- 4 6000億美元估值錨定:字節(jié)跳動(dòng)的“去單一化”突圍與估值重構(gòu)
- 5 Tesla AI5芯片最新進(jìn)展總結(jié)
- 6 連夜測了一波DeepSeek-V4,我發(fā)現(xiàn)它可能只剩“審美”這個(gè)短板了
- 7 熱點(diǎn)丨AI“瑜亮之爭”:既生OpenClaw,何生Hermes?
- 8 2026,人形機(jī)器人只贏了面子
- 9 AI界的殺豬盤:9秒刪庫跑路,全員被封號,還繼續(xù)扣錢!
- 10 AI Infra產(chǎn)業(yè)鏈卡在哪里了?
- 高級軟件工程師 廣東省/深圳市
- 自動(dòng)化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市


分享





