區(qū)別:1、硬鏈接時文件重命名或文件移動不會改變鏈接指向,符號鏈接時文件重命名或文件移動則使鏈接斷開;2、硬鏈接只能鏈接文件,符號鏈接可以鏈接文件和文件夾;3、符號鏈接可以跨不同的文件系統(tǒng)創(chuàng)建,硬鏈接則不可以跨不同的文件系統(tǒng)創(chuàng)建。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
linux中符號鏈接與硬鏈接的區(qū)別是什么
linux存在2眾不同類型的鏈接,軟鏈接和硬鏈接,修改其中一個,硬鏈接指向的是節(jié)點(inode),軟鏈接指向的是路徑(path)
軟連接文件也叫符號連接,這個文件包含了另一個文件的路徑名,類似于win下的快捷方式
區(qū)別:
文件重命名或文件移動
文件重命名和文件移動對于Linux系統(tǒng)來說都是文件絕對路徑的更改。對硬鏈接來說,文件重命名或文件移動不會改變鏈接指向,而對軟鏈接來說,文件重命名或文件移動則使鏈接斷開,這時通過軟鏈接修改文件內(nèi)容時會重新創(chuàng)建一個新的inode,跟原文件名和文件數(shù)據(jù)塊關(guān)聯(lián)。
文件刪除
rm命令或者nodejs的unlink其實是將inode的鏈接數(shù)減1。對于前文的硬鏈接,刪除test_hard.txt使得inode1的鏈接數(shù)變成1,當鏈接數(shù)變成0時,系統(tǒng)就會釋放掉這個inode,之后再創(chuàng)建的新文件就可以使用該inode的inode number了。這時沒有inode指向文件數(shù)據(jù)block,所以文件找不到了。但實際上文件數(shù)據(jù)還存在硬盤中,所以經(jīng)常能看到網(wǎng)上有一些幫助恢復(fù)誤刪的文件的工具。軟鏈接inode鏈接數(shù)為1,刪除軟鏈接則系統(tǒng)釋放該inode。
鏈接文件和文件夾
軟鏈接可以鏈接文件和文件夾,但硬鏈接只能鏈接文件。
不同文件系統(tǒng)創(chuàng)建鏈接
軟鏈接可以跨不同的文件系統(tǒng)創(chuàng)建,但是硬鏈接不行,因為硬鏈接是共用一個inode,而不同的文件系統(tǒng)有不同的inode table。
應(yīng)用場景
硬鏈接
文件備份:為了防止重要的文件被誤刪,文件備份是一種好的辦法,但拷貝文件會帶來磁盤空間的消耗。硬鏈接能不占用磁盤空間實現(xiàn)文件備份。
文件共享:多人共同維護同一份文件時,可以通過硬鏈接的方式,在私人目錄里創(chuàng)建硬鏈接,每個人的修改都能同步到源文件,但又避免某個人誤刪就丟掉了文件的問題。
文件分類:不同的文件資源需要分類,比如某個電影即是的分類是外國、懸疑,那我們可以在外國的文件夾和懸疑的文件夾里分別創(chuàng)建硬鏈接,這樣可以避免重復(fù)拷貝電影浪費磁盤空間。有人可能說,使用軟鏈接不也可以嗎?是的,但不太好。因為一旦源文件移動位置或者重命名,軟鏈接就失效了。
軟鏈接
快捷方式:對于路徑很深的文件,查找起來不太方便。利用軟鏈接在桌面創(chuàng)建快捷方式,可以迅速打開并編輯文件。
靈活切換程序版本:對于機器上同時存在多個版本的程序,可以通過更改軟鏈接的指向,從而迅速切換程序版本。這里提到了python版本的切換可以這么做。
動態(tài)庫版本管理:不是很懂,具體可以看這里。
總結(jié)
Linux系統(tǒng)通過inode管理文件,inode存儲著文件字節(jié)數(shù)、文件權(quán)限、鏈接數(shù)、數(shù)據(jù)block位置等信息。
硬鏈接與源文件共用inode,除了文件名不同,其他與源文件一樣。不能對文件夾創(chuàng)建硬鏈接,不能對不同的文件系統(tǒng)的文件創(chuàng)建硬鏈接。
軟鏈接類似于windows的快捷方式,有獨立的inode??梢詫ξ募A或不同文件系統(tǒng)的文件創(chuàng)建軟鏈接。
硬鏈接和軟鏈接修改文件內(nèi)容都會同步到源文件,因為本質(zhì)上它們都是指向源文件的數(shù)據(jù)block。