【學(xué)了就忘Linux常用命令】— 4.硬鏈接和軟鏈接

一侠驯、文件和目錄的基本存儲說明

之前說過分區(qū),每個分區(qū)都可以理解為分成兩部分,一小部分里邊是存放文件的i節(jié)點咖刃,大部分放的是Block文件塊。

在文件的i節(jié)點當(dāng)中保存的信息有:i節(jié)點號私蕾,時間僵缺,權(quán)限,保存位置踩叭。而Block塊中保存的是文件中的數(shù)據(jù)磕潮。

每個文件夾中都會有i節(jié)點和對應(yīng)的Block文件。

  • 但是有一個問題容贝,一個文件的文件名是存放哪里自脯?

我們就以在文件夾root中有一個文件abc為例。/root/abc斤富。

在root目錄中膏潮,所有的文件都有i節(jié)點名和對應(yīng)的Block塊,而root目錄也有自己的i節(jié)點信息的满力。有i節(jié)點信息焕参,就有與之對應(yīng)的Block塊,root目錄的Block塊中存放的數(shù)據(jù)是root目錄下所有的子文件和子目錄的文件名油额,和它對應(yīng)的i節(jié)點號叠纷。
也就是說,root目錄下文件的文件名潦嘶,沒有寫在該文件的i節(jié)點里涩嚣。而是寫在上級目錄的Block塊中。
如果我要查找abc文件的文件名掂僵,要先找到root文件夾的i節(jié)點航厚,然后在root目錄的Block塊中找到abc的文件名和對應(yīng)的i節(jié)點號才能找到。通過abc文件的i節(jié)點號最終讀取到abc文件中的數(shù)據(jù)锰蓬。

  • 那root目錄的文件名或者說是i節(jié)點存儲在哪里幔睬?

那root目錄是在根目錄下的,根目錄會有自己的i節(jié)點信息芹扭,也會有自己的Block麻顶,綜上所述,那root目錄的文件名和i節(jié)點號的信息是放在根目錄的Block塊中的冯勉。
那根的i節(jié)點號怎么獲瘸喊觥摹芙?根的i節(jié)點號是固定的灼狰,根的i節(jié)點號為2。(因為編號1在系統(tǒng)內(nèi)核加載的時候被占用了)

[root@192 ~]# ls -ild /
2 dr-xr-xr-x. 25 root root 4096 12月 27 22:27 /
第一位顯示的就是i節(jié)點號浮禾。
  • 總結(jié)

綜上所訴交胚,要查看abc文件的內(nèi)容份汗,就先用通過根的i節(jié)點號,讀取根的Block塊中數(shù)據(jù)蝴簇,找到root目錄的i節(jié)點信息杯活,讀取root目錄的Block塊中數(shù)據(jù),找到abc文件的i節(jié)點信息熬词,讀取abc文件的Block塊中數(shù)據(jù)旁钧。
以上就是文件和目錄的基本存儲。

二互拾、In命令

1歪今、我們來看看ln命令的基本信息。

  • 命令名稱:ln颜矿。
  • 英文原意:make links between file寄猩。
  • 所在路徑:/bin/ln。
  • 執(zhí)行權(quán)限:所有用戶骑疆。
  • 功能描述:在文件之間建立鏈接田篇。

2、ln命令的基本格式如下:

[root@localhost ~ ] # ln [選項] 源文件 目標(biāo)文件
選項:
-s:建立軟鏈接文件箍铭。如果不加“-s”選項泊柬,則建立硬鏈接文件
-f:強制。如果目標(biāo)文件已經(jīng)存在坡疼,則刪除目標(biāo)文件后再建立鏈接文件

3彬呻、如何創(chuàng)建硬鏈接:

[root@localhost ~] # touch cangls
[root@localhost ~ ]# ln /root/cangls /tmp/
建立硬鏈接文件,目標(biāo)文件沒有寫文件名柄瑰,會和原合一致
也就是/root/cangls和/tmp/cangls 是硬鏈接文件

說明ln命令應(yīng)用

新創(chuàng)建一個文件abc闸氮,查看abc文件的硬連接數(shù)
[root@192 ~]# touch abc
[root@192 ~]# ls -il abc 
1043285 -rw-r--r--. 1 root root 0 12月 29 18:18 abc
可以看到abc文件的硬連接數(shù)為1。

在tmp目錄中給abc文件創(chuàng)建一個硬連接文件教沾,然后查看這兩個文件硬連接數(shù)蒲跨。
[root@192 ~]# ln abc /tmp/abc_h
[root@192 ~]# ls -il abc /tmp/abc_h 
1043285 -rw-r--r--. 2 root root 0 12月 29 18:18 abc
1043285 -rw-r--r--. 2 root root 0 12月 29 18:18 /tmp/abc_h
可以看到abc文件的引用計數(shù)(硬連接數(shù))增加了1。
同時還可以看到授翻,上邊的兩個文件的i節(jié)點號是一樣的或悲。
硬鏈接特征:
  • 源文件和硬鏈接文件擁有相同的Inode和Block。
  • 修改任意一個文件堪唐,另一個都改變巡语。
  • 刪除任意一個文件,另一個都能使用淮菠。
  • 硬鏈接標(biāo)記不清男公,很難確認(rèn)硬鏈接文件位置(很難確定這是一個硬連接文件,自己創(chuàng)建的還可能記住合陵,要是別人創(chuàng)建的枢赔,我根本無法判定一個文件是硬連接文件)澄阳,不建議使用。
  • 硬鏈接不能鏈接目錄踏拜。
  • 硬鏈接不能跨分區(qū)(因為兩個文件需要同一個分區(qū)的同一個i節(jié)點號碎赢。所以跨分區(qū)找不到)。
硬連接原理

我上邊在root目錄下創(chuàng)建了一個abc文件速梗,然后在/tmp/目錄下創(chuàng)建一個abc文件硬連接文件abc_h肮塞。

root目錄、abc文件姻锁、tmp目錄峦嗤,每個都有自己的i節(jié)點號和對應(yīng)的Block塊。通過root目錄的i節(jié)點號屋摔,找到對應(yīng)的Block塊烁设。Block塊中記錄著abc文件的名稱和i節(jié)點號,就可以找到abc文件钓试。而硬連接文件abc_h的i節(jié)點號和文件名是記錄在tmp目錄的Block塊中的装黑。并且上邊查詢到abc文件和abc_h硬連接文件的i節(jié)點號是相同的嗦随,所以通過tmp的Block塊中的abc_h信息砂碉,也可以找到abc文件的i節(jié)點號。

所以root目錄中記錄的abc文件信息和tmp目錄記錄的abc_h文件信息漓踢,都指向了root目錄下的abc文件挽鞠【渭眨看下圖。

所以上圖證明了:
修改任意一個文件信认,另一個都改變
刪除任意一個文件材义,另一個都能使用

4、如何創(chuàng)建軟鏈接:

軟連接可以直接看作為windows系統(tǒng)中的快捷方式嫁赏。

[root@localhost ~]# touch abc
[root@localhost ~ ]# ln -s /root/abc /tmp/
建立軟鏈接文件
在root目錄下cde文件其掂,然后創(chuàng)建軟連接/tmp/cde_s文件,查看這兩個文件
[root@localhost ~ ] # touch cde
[root@localhost ~ ] # ln -s /root/cde /tmp/cde_s
[root@localhost ~ ] # ls -il /root/cde /tmp/cde_s
1055972-rw-r--r--1 root root 0 2月1715:30 /root/cde
261634 1rwxrwxrwx 1root root 9 2月1715:30 /tmp/cde_s->/root/cde

第一潦蝇、可以看到創(chuàng)建的軟連接文件有明確的提示這個一個軟鏈接文件款熬,和它的源文件的位置在哪里。 /tmp/cde_s->/root/cde攘乒。這也就是為什么說硬連接標(biāo)記不清的原因贤牛。
第二、文件的引用鏈接數(shù)沒有增加则酝。
第三殉簸、兩個文件的i節(jié)點號完全不同。
第四、源文件abc是0字節(jié)喂链,空的。而軟連接的文件大小為9個字節(jié)妥泉。
軟鏈接特征:
  • 軟鏈接和源文件擁有不同的Inode和Block椭微。
  • 兩個文件修改任意一個,另一個都改變盲链。
  • 刪除軟鏈接蝇率,源文件不受影響;刪除源文件刽沾,軟鏈接不能使用本慕,因為軟鏈接沒有實際數(shù)據(jù),只保存源文件的Inode侧漓,不論源文件多大锅尘,軟鏈接文件大小不變。
  • 軟鏈接的權(quán)限是最大權(quán)限lrwxrwxrwx.布蔗,但是由于沒有實際數(shù)據(jù)藤违,最終訪問時需要參考源文件權(quán)限
  • 軟鏈接可以鏈接目錄纵揍,軟鏈接可以跨分區(qū)顿乒。
  • 軟鏈接特征明顯,建議使用軟連接泽谨。
軟連接原理

在root目錄下有一個cde文件璧榄,在tmp目錄創(chuàng)建一個cde文件的軟鏈接文件cde_s。通過root目錄的i節(jié)點號吧雹,可以找到root目錄的block塊骨杂,root目錄的block塊中記錄了cde文件的文件名和i節(jié)點號。查到cde文件的i節(jié)點號就找到了cde文件的block塊雄卷,就能讀取里邊的數(shù)據(jù)腊脱。

tmp目錄有自己的i節(jié)點號,與之對應(yīng)的block塊龙亲,tmp目錄的block塊中有cde_s文件的文件名和i節(jié)點號陕凹,(之前說硬連接這兩個i節(jié)點號是相同的,所以指向的同一個文件)鳄炉,而軟連接文件和源文件的i節(jié)點號是不相同的杜耙。說明cde_s文件有自己的i節(jié)點號,并且cde_s文件有自己的block塊拂盯。

現(xiàn)在的關(guān)鍵是佑女,cde_s文件的block塊中存放的是什么?
如果里邊存放的是數(shù)據(jù),那cde文件和cde_s文件就不是鏈接的關(guān)系了团驱,就完全是復(fù)制關(guān)系了摸吠,這樣就不會出現(xiàn)修改源文件時軟鏈接文件也變,修改軟鏈接文件后源文件也改變的情況嚎花。

其實在cde_s文件的block塊中存放的是源文件的i節(jié)點號寸痢。如下圖

這也就說明了為什么新創(chuàng)建的軟連接文件創(chuàng)建完成后就有數(shù)據(jù),并且數(shù)據(jù)大小不隨源文件的改變而改變紊选。

還有一點要注意啼止,軟鏈接文件的權(quán)限是最大的,但這個權(quán)限是針對軟鏈接文件的兵罢,軟鏈接文件的block塊中并不存放數(shù)據(jù)献烦,如果要操作源文件,還是要看源文件權(quán)限卖词,這里需要注意巩那。

windows系統(tǒng)中創(chuàng)建快捷方式是為了軟件安裝位置太深,不好找此蜈,所以在桌面創(chuàng)建一個快捷方式拢操,那Linux系統(tǒng)創(chuàng)建軟鏈接的作用是什么,反正都是通過目錄訪問?

在Linux系統(tǒng)中舶替,軟鏈接最主要的作用是照顧管理員的使用習(xí)慣令境。如下圖:

在老式的Linux系統(tǒng)中,/etc/rc.local文件的位置我們用著已經(jīng)習(xí)慣了顾瞪,系統(tǒng)更新之后舔庶,為了升級的需要,/etc/rc.local文件的位置改變了陈醒。我們在找這個文件就很麻煩了惕橙。解決這個問題的方法就是給這兩個文件創(chuàng)建一個軟鏈接來解決上邊問題,既照顧了升級需要钉跷,也照顧了使用習(xí)慣弥鹦。

還要注意一個情況,用相對路徑創(chuàng)建def文件的軟鏈接爷辙,用絕對路徑創(chuàng)建anaconda-ks.cfg文件的軟鏈接彬坏。

從上圖中可以看到用相對路徑創(chuàng)建的軟鏈接出現(xiàn)了報錯。

提示:創(chuàng)建軟鏈接時一定要使用絕對路徑膝晾,硬連接沒有要求栓始。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市血当,隨后出現(xiàn)的幾起案子幻赚,更是在濱河造成了極大的恐慌禀忆,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件落恼,死亡現(xiàn)場離奇詭異箩退,居然都是意外死亡,警方通過查閱死者的電腦和手機佳谦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門戴涝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吠昭,你說我怎么就攤上這事‰使希” “怎么了矢棚?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長府喳。 經(jīng)常有香客問我蒲肋,道長,這世上最難降的妖魔是什么钝满? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任兜粘,我火速辦了婚禮,結(jié)果婚禮上弯蚜,老公的妹妹穿的比我還像新娘孔轴。我一直安慰自己,他們只是感情好碎捺,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布路鹰。 她就那樣靜靜地躺著,像睡著了一般收厨。 火紅的嫁衣襯著肌膚如雪晋柱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天诵叁,我揣著相機與錄音雁竞,去河邊找鬼。 笑死拧额,一個胖子當(dāng)著我的面吹牛碑诉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侥锦,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼联贩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捎拯?” 一聲冷哼從身側(cè)響起泪幌,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盲厌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祸泪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吗浩,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年没隘,在試婚紗的時候發(fā)現(xiàn)自己被綠了懂扼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡右蒲,死狀恐怖阀湿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瑰妄,我是刑警寧澤陷嘴,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站间坐,受9級特大地震影響灾挨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竹宋,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一劳澄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜈七,春花似錦秒拔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狡相,卻和暖如春梯轻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尽棕。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工喳挑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滔悉。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓伊诵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親回官。 傳聞我的和親對象是個殘疾皇子曹宴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 被時間揉碎的光陰,在安靜的夜重新拾起歉提。 你的音容笑貌穿起來笛坦,就是一串永不褪色的珍珠区转,在我心里閃閃發(fā)光。 山間的蟲鳴...
    被眷顧的約拿閱讀 224評論 0 1
  • 先說自己喜歡的東西版扩。 養(yǎng)魚是我一直都喜歡的废离,看著魚游泳的姿態(tài)感覺特別美。再就是養(yǎng)魚簡單礁芦,有事的時候可以幾天不管蜻韭。 ...
    祖國的花花閱讀 181評論 0 0
  • 秦樓月 照離千年傷離別 傷離別 馬蹄聲脆 短笛聲歇 破曉彤云亦重疊 夜露晨霜草沾貼 草沾貼 梧桐庭院 葉落空階
    晨曦_c503閱讀 230評論 0 1
  • 11.線程池 先看一個簡單的實例 上面我們就是創(chuàng)建和銷毀了三個線程實例,這樣不斷的創(chuàng)建和銷毀柿扣,就會消耗資源肖方,于是就...
    Waldeinsamkeit4閱讀 336評論 0 4
  • 早晨原本是美好的開始,而我卻撫過前日自殘的左手腕上的傷疤未状。也許在你們看來不過是發(fā)泄而不理智的舉動俯画。可我那時很理智娩践。...
    公子勛閱讀 238評論 0 1