前言
關(guān)于Linux中軟硬鏈接的概念之前一直沒有很好地理解,今天結(jié)合實際例子和網(wǎng)上的文章汤踏,寫一篇文章來進(jìn)行這個知識點的總結(jié)溪胶,希望對各位讀者有所幫助稳诚。
在Linux系統(tǒng)中,連接一共可以分為2種才避,硬連接和軟連接。按我自己理解棘劣,無論是哪種連接肢娘,本質(zhì)上都是為了創(chuàng)建文件副本這個功能服務(wù)的
一舆驶、硬連接
硬連接指通過索引節(jié)點來進(jìn)行連接沙廉。在Linux的文件系統(tǒng)中,保存在磁盤分區(qū)中的文件都會有一個唯一的節(jié)點值珊皿,稱為索引節(jié)點號(Inode Index
)巨税。出于文件備份考慮,我們有時候會希望在磁盤中多拷貝一份文件的副本驶兜,基于cp
命令直接復(fù)制一份當(dāng)然是一個可行的方案远寸,不過cp
命令創(chuàng)建出來的文件屬于新文件驰后,會占用磁盤空間,而硬連接則可以讓我們在不多占用磁盤空間的前提下對文件進(jìn)行備份郑原,原因是通過硬連接創(chuàng)建出來的文件和原文件指向了同一個node節(jié)點夜涕。只刪除一個連接并不影響索引節(jié)點本身和其它的連接,只有當(dāng)最后一個連接被刪除后栖秕,文件的數(shù)據(jù)塊及目錄的連接才會被釋放晓避。也就是說,文件真正刪除的條件是與之相關(guān)的所有硬連接文件均被刪除暑塑。
我們不妨用下面的例子來了解一下上文的含義事格,創(chuàng)建文件a.txt
后再利用ln
和cp
命令分別創(chuàng)建文件的硬連接和副本
echo {1..1000} > a.txt
ln a.txt b.txt # 為文件a創(chuàng)建硬連接
cp a.txt c.txt # 復(fù)制文件a的副本文件c
從圖中我們可以看到驹愚,硬連接
b.txt
文件大小、節(jié)點id都和a.txt
文件一樣谁鳍,而副本c.txt
節(jié)點id和a.txt
文件不同劫瞳,文件大小相同。且使用du -sh *
命令進(jìn)行統(tǒng)計的時候涮因,我們會發(fā)現(xiàn)硬連接創(chuàng)建的b.txt
文件并不會被統(tǒng)計在內(nèi)伺绽,也就是其實磁盤空間只占用一份內(nèi)存憔恳。
二、軟連接
軟連接有點類似于我們window系統(tǒng)的快捷方式输硝,比如我們常常會將訪問比較頻繁的文件創(chuàng)建快捷方式后放到桌面上程梦,方便我們后續(xù)訪問。Linux系統(tǒng)的軟連接也是這個道理郎逃,我們可以通過ln -s sourceFile targetFile
的方式來創(chuàng)建原文件的快捷方式褒翰。
需要注意的是,創(chuàng)建出來的快捷方式會有屬于自己的節(jié)點id朵你,且?guī)缀醪徽加么疟P空間揣非,畢竟人家就是一個快捷方式而已。
ln -s a.txt d.txt # 為文件a創(chuàng)建軟連接
三忌傻、關(guān)于ls命令顯示的硬連接數(shù)
相信不少讀者會使用ls -l
命令來查看目錄下面的文件水孩,也知道第一列表示的是文件或者文件夾對應(yīng)的文件類型和權(quán)限腺逛,那么第二列的數(shù)字表示什么呢棍矛?其實這個數(shù)字表示的就是文件的硬連接數(shù)抛杨,一般情況下普通文件的硬連接數(shù)都是1,假如說我們使用ln
命令對文件A創(chuàng)建了兩個硬連接茁帽,那么這三個文件的硬連接數(shù)就都會變成3屈嗤,表示這個node節(jié)點目前一共映射有有3個文件饶号。
文件的硬連接數(shù)還比較好理解茫船,但是文件夾的硬連接數(shù)又怎么解釋呢?
ln
命令明明不支持對目錄類型的文件來創(chuàng)建硬連接事實上涩禀,目錄類型的文件確實比較特殊然眼,我們可以簡單把目錄類型文件的硬連接數(shù)簡單理解為目錄中的子目錄數(shù),我們知道新建一個目錄后屿岂,目錄里面會自動生成
.
和..
這兩個子目錄,對應(yīng)當(dāng)前目錄和上一級目錄浴井。所以默認(rèn)情況下目錄對應(yīng)的硬連接數(shù)就是2磺浙,如果在這個目錄下面多建了3個子目錄徒坡,那么這個父目錄對應(yīng)的硬連接數(shù)就是5。這里有一個小細(xì)節(jié)伦泥,目錄的硬連接數(shù)統(tǒng)計只會追溯到1層锦溪,不會往下繼續(xù)追溯。比如子目錄aa里面又有一個子目錄bb刻诊,那么統(tǒng)計的時候不會把bb目錄頁統(tǒng)計進(jìn)去则涯。
小結(jié)
總的來說,硬連接是提供了一種文件備份(復(fù)制)的方案亿昏,軟連接則是通過創(chuàng)建快捷方式的手段來實現(xiàn)文件復(fù)制的效果档礁,但后者本質(zhì)上相當(dāng)于是一個文件快速入口而已(或者理解為是文件別名)事秀,一旦原文件被刪除,那么軟連接也就會隨之失效宰衙,但硬連接創(chuàng)建的文件卻能依靠原文件的節(jié)點id而保存下來睹欲。
參考文章
Linux軟連接和硬鏈接 https://zhuanlan.zhihu.com/p/67366919