您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“l(fā)inux中的軟連接和硬連接怎么理解”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“l(fā)inux中的軟連接和硬連接怎么理解”吧!
提示:先來說明一下在Linux系統(tǒng)中文件和目錄的基本存儲,這樣更方便我們理解和學(xué)習(xí)Linux系統(tǒng)中的硬鏈接和軟鏈接。
之前說過分區(qū),每個(gè)分區(qū)都可以理解為分成兩部分,一小部分里邊是存放文件的i
節(jié)點(diǎn)信息,大部分放的是Block
文件塊。
在文件的i節(jié)點(diǎn)當(dāng)中保存的信息有:i
節(jié)點(diǎn)號,時(shí)間,權(quán)限,保存位置。而Block
塊中保存的是文件中的數(shù)據(jù)。
每個(gè)文件夾中都會有i
節(jié)點(diǎn)和對應(yīng)的Block
文件。
但是有一個(gè)問題,一個(gè)文件的文件名是存放哪里?
我們就以在文件夾root
中有一個(gè)文件abc
為例。文件路徑為/root/abc
。
在root
目錄中,所有的文件都有i
節(jié)點(diǎn)名和對應(yīng)的Block
塊,而root
目錄也有自己的i
節(jié)點(diǎn)信息。有i
節(jié)點(diǎn)信息,就有與之對應(yīng)的Block
塊,root
目錄的Block
塊中存放的數(shù)據(jù)是root
目錄下所有的子文件和子目錄的文件名,和它對應(yīng)的i
節(jié)點(diǎn)號。
也就是說,root
目錄下文件的文件名,沒有寫在該文件的i
節(jié)點(diǎn)里。而是寫在上級目錄的Block
塊中。
如果我要查找abc
文件的文件名,要先找到root
文件夾的i
節(jié)點(diǎn),然后在root
目錄的Block
塊中找到abc
的文件名和對應(yīng)的i
節(jié)點(diǎn)號才能找到。通過abc
文件的i
節(jié)點(diǎn)號最終讀取到abc
文件中的數(shù)據(jù)。
那root
目錄的文件名或者說是i
節(jié)點(diǎn)存儲在哪里?
那root
目錄是在根目錄下的,根目錄會有自己的i
節(jié)點(diǎn)信息,也會有自己的Block
,綜上所述,那root
目錄的文件名和i
節(jié)點(diǎn)號的信息是放在根目錄的Block
塊中的。
那根的i
節(jié)點(diǎn)號怎么獲取?
根的i
節(jié)點(diǎn)號是固定的,根的i
節(jié)點(diǎn)號為2。(因?yàn)榫幪?在系統(tǒng)內(nèi)核加載的時(shí)候被占用了)
[root@192 ~]# ls -ild / 2 dr-xr-xr-x. 25 root root 4096 12月 27 22:27 / 第一位顯示的就是i節(jié)點(diǎn)號。
總結(jié)
綜上所訴,要查看abc
文件的內(nèi)容,就先用通過根的i
節(jié)點(diǎn)號,讀取根的Block
塊中數(shù)據(jù),找到root
目錄的i
節(jié)點(diǎn)信息,讀取root
目錄的Block
塊中數(shù)據(jù),找到abc
文件的i節(jié)點(diǎn)信息,讀取abc
文件的Block
塊中數(shù)據(jù)。
以上就是文件和目錄的基本存儲。
ln
英文原意:make links between file
所在路徑:/bin/ln
執(zhí)行權(quán)限:所有用戶。功能描述:在文件之間建立鏈接。
[root@localhost ~ ] # ln [選項(xiàng)] 源文件 目標(biāo)文件 選項(xiàng): -s:建立軟鏈接文件。如果不加“-s”選項(xiàng),則建立硬鏈接文件 -f:強(qiáng)制。如果目標(biāo)文件已經(jīng)存在,則刪除目標(biāo)文件后再建立鏈接文件
示例如下:
[root@localhost ~] # touch cangls [root@localhost ~ ]# ln /root/cangls /tmp/ # 建立硬鏈接文件,目標(biāo)文件沒有寫文件名,會和原合一致 # 也就是/root/cangls和/tmp/cangls 是硬鏈接文件
說明ln
命令應(yīng)用:
# 新創(chuàng)建一個(gè)文件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)建一個(gè)硬連接文件,然后查看這兩個(gè)文件硬連接數(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文件的引用計(jì)數(shù)(硬連接數(shù))增加了1。 # 同時(shí)還可以看到,上邊的兩個(gè)文件的i節(jié)點(diǎn)號是一樣的。
源文件和硬鏈接文件擁有相同的Inode
和Block
。修改任意一個(gè)文件,另一個(gè)都改變。刪除任意一個(gè)文件,另一個(gè)都能使用。硬鏈接標(biāo)記不清,很難確認(rèn)硬鏈接文件位置(很難確定這是一個(gè)硬連接文件,自己創(chuàng)建的還可能記住,要是別人創(chuàng)建的,我根本無法判定一個(gè)文件是硬連接文件),不建議使用。硬鏈接不能鏈接目錄。硬鏈接不能跨分區(qū)(因?yàn)閮蓚€(gè)文件需要同一個(gè)分區(qū)的同一個(gè)i
節(jié)點(diǎn)號。所以跨分區(qū)找不到)。
我上邊在root
目錄下創(chuàng)建了一個(gè)abc
文件,然后在/tmp/
目錄下創(chuàng)建一個(gè)abc
文件硬連接文件abc_h
。
root
目錄、abc
文件、tmp
目錄,每個(gè)都有自己的i
節(jié)點(diǎn)號和對應(yīng)的Block
塊。通過root
目錄的i節(jié)點(diǎn)號,找到對應(yīng)的Block
塊。Block
塊中記錄著abc
文件的名稱和i
節(jié)點(diǎn)號,就可以找到abc
文件。而硬連接文件abc_h
的i
節(jié)點(diǎn)號和文件名是記錄在tmp
目錄的Block
塊中的。并且上邊查詢到abc
文件和abc_h
硬連接文件的i
節(jié)點(diǎn)號是相同的,所以通過tmp
的Block
塊中的abc_h
信息,也可以找到abc
文件的i
節(jié)點(diǎn)號。
所以root
目錄中記錄的abc
文件信息和tmp
目錄記錄的abc_h
文件信息,都指向了root
目錄下的abc
文件。
看下圖:
所以上圖證明了:
修改任意一個(gè)文件,另一個(gè)都改變。
刪除任意一個(gè)文件,另一個(gè)都能使用。
軟連接可以直接看作為Windows系統(tǒng)中的快捷方式。
建立軟鏈接文件,如下:
[root@localhost ~]# touch abc [root@localhost ~]# ln -s /root/abc /tmp/
root
目錄中cde
文件,然后創(chuàng)建軟連接/tmp/cde_s
文件,查看這兩個(gè)文件。
如下圖所示:
[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)建的軟連接文件有明確的提示這個(gè)一個(gè)軟鏈接文件,和它的源文件的位置在哪里。/tmp/cde_s->/root/cde
。這也就是為什么說硬連接標(biāo)記不清的原因。
第二:文件的引用鏈接數(shù)沒有增加。
第三:兩個(gè)文件的i節(jié)點(diǎn)號完全不同。
第四:源文件abc
是0字節(jié),空的。而軟連接的文件大小為9個(gè)字節(jié)。
軟鏈接和源文件擁有不同的Inode
和Block
。兩個(gè)文件修改任意一個(gè),另一個(gè)都改變。刪除軟鏈接,源文件不受影響;刪除源文件,軟鏈接不能使用,因?yàn)檐涙溄記]有實(shí)際數(shù)據(jù),只保存源文件的Inode
,不論源文件多大,軟鏈接文件大小不變。軟鏈接的權(quán)限是最大權(quán)限lrwxrwxrwx
.,但是由于沒有實(shí)際數(shù)據(jù),最終訪問時(shí)需要參考源文件權(quán)限。軟鏈接可以鏈接目錄,軟鏈接可以跨分區(qū)。軟鏈接特征明顯,建議使用軟連接。
在root
目錄下有一個(gè)cde
文件,在tmp
目錄創(chuàng)建一個(gè)cde
文件的軟鏈接文件cde_s
。通過root
目錄的i
節(jié)點(diǎn)號,可以找到root
目錄的block
塊,root
目錄的block
塊中記錄了cde
文件的文件名和i
節(jié)點(diǎn)號。查到cde
文件的i
節(jié)點(diǎn)號就找到了cde
文件的block
塊,就能讀取里邊的數(shù)據(jù)。
tmp
目錄有自己的i
節(jié)點(diǎn)號,與之對應(yīng)的block
塊,tmp
目錄的block
塊中有cde_s
文件的文件名和i
節(jié)點(diǎn)號,(之前說硬連接這兩個(gè)i
節(jié)點(diǎn)號是相同的,所以指向的同一個(gè)文件),而軟連接文件和源文件的i
節(jié)點(diǎn)號是不相同的。說明cde_s
文件有自己的i
節(jié)點(diǎn)號,并且cde_s
文件有自己的block
塊。
現(xiàn)在的關(guān)鍵是,cde_s
文件的block
塊中存放的是什么?
如果里邊存放的是數(shù)據(jù),那cde
文件和cde_s
文件就不是鏈接的關(guān)系了,就完全是復(fù)制關(guān)系了,這樣就不會出現(xiàn)修改源文件時(shí)軟鏈接文件也變,修改軟鏈接文件后源文件也改變的情況。
其實(shí)在cde_s
文件的block
塊中存放的是源文件的i
節(jié)點(diǎn)號。
如下圖:
這也就說明了為什么新創(chuàng)建的軟連接文件創(chuàng)建完成后就有數(shù)據(jù),并且數(shù)據(jù)大小不隨源文件的改變而改變。
還有一點(diǎn)要注意,軟鏈接文件的權(quán)限是最大的,但這個(gè)權(quán)限是針對軟鏈接文件的,軟鏈接文件的block
塊中并不存放數(shù)據(jù),如果要操作源文件,還是要看源文件權(quán)限,這里需要注意。
Windows系統(tǒng)中創(chuàng)建快捷方式是為了軟件安裝位置太深,不好找,所以在桌面創(chuàng)建一個(gè)快捷方式,那Linux系統(tǒng)創(chuàng)建軟鏈接的作用是什么,反正都是通過目錄訪問?
在Linux系統(tǒng)中,軟鏈接最主要的作用是照顧管理員的使用習(xí)慣。
如下圖:
在老式的Linux系統(tǒng)中,/etc/rc.local
文件的位置我們用著已經(jīng)習(xí)慣了,系統(tǒng)更新之后,為了升級的需要,/etc/rc.local
文件的位置改變了。我們在找這個(gè)文件就很麻煩了。解決這個(gè)問題的方法就是給這兩個(gè)文件創(chuàng)建一個(gè)軟鏈接來解決上邊問題,既照顧了升級需要,也照顧了使用習(xí)慣。
還要注意一個(gè)情況,用相對路徑創(chuàng)建def
文件的軟鏈接,用絕對路徑創(chuàng)建anaconda-ks.cfg
文件的軟鏈接。
從上圖中可以看到用相對路徑創(chuàng)建的軟鏈接出現(xiàn)了報(bào)錯(cuò)。
提示:創(chuàng)建軟鏈接時(shí)一定要使用絕對路徑,硬連接沒有要求。
到此,相信大家對“l(fā)inux中的軟連接和硬連接怎么理解”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。