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