linux中的軟連接和硬連接詳解
提示:先來說明一下在Linux系統(tǒng)中文件和目錄的基本存儲,這樣更方便我們理解和學(xué)習(xí)Linux系統(tǒng)中的硬鏈接和軟鏈接。
1、文件和目錄的基本存儲
之前說過分區(qū),每個分區(qū)都可以理解為分成兩部分,一小部分里邊是存放文件的i
節(jié)點(diǎn)信息,大部分放的是Block
文件塊。
在文件的i節(jié)點(diǎn)當(dāng)中保存的信息有:i
節(jié)點(diǎn)號,時間,權(quán)限,保存位置。而Block
塊中保存的是文件中的數(shù)據(jù)。
每個文件夾中都會有i
節(jié)點(diǎn)和對應(yīng)的Block
文件。
但是有一個問題,一個文件的文件名是存放哪里?
我們就以在文件夾root
中有一個文件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)核加載的時候被占用了)
[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ù)。
以上就是文件和目錄的基本存儲。
2、In命令介紹
(1)我們來看看ln命令的基本信息命令名稱:
ln
英文原意:make links between file
所在路徑:/bin/ln
執(zhí)行權(quán)限:所有用戶。功能描述:在文件之間建立鏈接。
(2)ln命令的基本格式
[root@localhost ~ ] # ln [選項(xiàng)] 源文件 目標(biāo)文件 選項(xiàng): -s:建立軟鏈接文件。如果不加“-s”選項(xiàng),則建立硬鏈接文件 -f:強(qiáng)制。如果目標(biāo)文件已經(jīng)存在,則刪除目標(biāo)文件后再建立鏈接文件
3、創(chuàng)建硬鏈接
(1)如何創(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文件的引用計(jì)數(shù)(硬連接數(shù))增加了1。 # 同時還可以看到,上邊的兩個文件的i節(jié)點(diǎn)號是一樣的。
(2)硬鏈接特征
源文件和硬鏈接文件擁有相同的Inode
和Block
。修改任意一個文件,另一個都改變。刪除任意一個文件,另一個都能使用。硬鏈接標(biāo)記不清,很難確認(rèn)硬鏈接文件位置(很難確定這是一個硬連接文件,自己創(chuàng)建的還可能記住,要是別人創(chuàng)建的,我根本無法判定一個文件是硬連接文件),不建議使用。硬鏈接不能鏈接目錄。硬鏈接不能跨分區(qū)(因?yàn)閮蓚€文件需要同一個分區(qū)的同一個i
節(jié)點(diǎn)號。所以跨分區(qū)找不到)。
(3)硬連接原理
我上邊在root
目錄下創(chuàng)建了一個abc
文件,然后在/tmp/
目錄下創(chuàng)建一個abc
文件硬連接文件abc_h
。
root
目錄、abc
文件、tmp
目錄,每個都有自己的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
文件。
看下圖:
所以上圖證明了:
修改任意一個文件,另一個都改變。
刪除任意一個文件,另一個都能使用。
4、創(chuàng)建軟鏈接
(1)如何創(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é)點(diǎn)號完全不同。
第四:源文件abc
是0字節(jié),空的。而軟連接的文件大小為9個字節(jié)。
(2)軟鏈接特征
軟鏈接和源文件擁有不同的Inode
和Block
。兩個文件修改任意一個,另一個都改變。刪除軟鏈接,源文件不受影響;刪除源文件,軟鏈接不能使用,因?yàn)檐涙溄記]有實(shí)際數(shù)據(jù),只保存源文件的Inode
,不論源文件多大,軟鏈接文件大小不變。軟鏈接的權(quán)限是最大權(quán)限lrwxrwxrwx
.,但是由于沒有實(shí)際數(shù)據(jù),最終訪問時需要參考源文件權(quán)限。軟鏈接可以鏈接目錄,軟鏈接可以跨分區(qū)。軟鏈接特征明顯,建議使用軟連接。
(3)軟連接原理
在root
目錄下有一個cde
文件,在tmp
目錄創(chuàng)建一個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)號,(之前說硬連接這兩個i
節(jié)點(diǎn)號是相同的,所以指向的同一個文件),而軟連接文件和源文件的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í)在cde_s
文件的block
塊中存放的是源文件的i
節(jié)點(diǎn)號。
如下圖:
這也就說明了為什么新創(chuàng)建的軟連接文件創(chuàng)建完成后就有數(shù)據(jù),并且數(shù)據(jù)大小不隨源文件的改變而改變。
還有一點(diǎn)要注意,軟鏈接文件的權(quán)限是最大的,但這個權(quán)限是針對軟鏈接文件的,軟鏈接文件的block
塊中并不存放數(shù)據(jù),如果要操作源文件,還是要看源文件權(quán)限,這里需要注意。
(4)說明
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)建軟鏈接時一定要使用絕對路徑,硬連接沒有要求。
到此這篇關(guān)于linux中的軟連接和硬連接詳解的文章就介紹到這了,更多相關(guān)linux軟連接和硬連接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux下yum安裝時出現(xiàn)Loaded plugins: fastestmirror的解決辦法
這篇文章主要給大家介紹了linux下yum安裝時出現(xiàn)Loaded plugins: fastestmirror,使用 yum 出現(xiàn) Loaded plugins: fastestmirror,文中有詳細(xì)的解決方法,通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11關(guān)于將Web項(xiàng)目部署到阿里云服務(wù)器(5個步驟搞定)
這篇文章主要介紹了關(guān)于將Web項(xiàng)目部署到阿里云服務(wù)器(5個步驟搞定),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07