我對Linux裏的符號鏈接(軟鏈接)和硬鏈接的認識

1.創建鏈接

首先ln --help 可以看到默認創建的鏈接是硬鏈接。若是要創建符號鏈接則需要使用-s 參數

格式是: ln 源文件 鏈接文件  或者 ln -s  源文件 鏈接文件

2.區別

首先我創建了a和b文件。 然後又分別建立了a的硬鏈接a2,b的符號鏈接b2

由圖中即可看出區別:

1.a和a2的 inode號相同,b和b2的inode號卻不同

2.a和a2均是普通文件 ,即以 -打頭,而b2則是以l打頭,說明它是一個符號鏈接。

3.每建立一個硬鏈接,文件的鏈接數量就會+1,而符號鏈接則不會

簡單理解inode,當系統分區設置完成之後,設置了文件系統就會產生inode,inode會記錄文件的屬性和block的位置,block則是

具體存放我們文件內容在磁盤的地方。 

觀察上圖,標記處,由此可以得知:硬鏈接文件的inode實際上是和源文件的inode一模一樣,可以得知,它們都指向了磁盤的同一個地方。類似於Java裏的2個個字符串a和b,它們的值都是“abc”,均指向常量池的同一個地方。所以每當建立一個硬鏈接時候文件的鏈接數都會加1。

而同樣的:我們也建立了第三個符號鏈接,可以看到b b2 b3的鏈接數都是1.,以及它們的inode均不同,由此可以得知符號鏈接是單獨的一個文件,它裏面存放的內容如下圖維基百科:即它文件裏存放着源文件的路徑,所以inode不同,新建符號鏈接數時候鏈接數也不會+1

4.創建硬鏈接時候源文件必須存在,而創建軟鏈接時候,源文件可以不存在。

創建c 和c1時候發現創建失敗,而符號鏈接則可以創建成功。只是不生效。

5.刪除硬鏈接的源文件和符號鏈接的源文件

刪除硬鏈接的源文件,對硬鏈接無影響,只要它們的鏈接數不爲0,磁盤上就不會清空文件的內容,文件內容還在,當文件的鏈接數爲0時候,纔會被清空。

刪除符號鏈接的源文件之後,符號鏈接仍然還在,只是失效了(因爲所指的的路徑的文件已經被刪除了)。

如下圖1和2:

刪除硬鏈接源文件a和1個硬鏈接a2,再cat a3發現,仍然正常。只是鏈接數-2。

可以看到刪除b之後,b2和b3均已經失效了,且在屏幕上,它們所指的源文件因爲被刪除,所以在閃爍。

 

6.相同點;修改文件則會同步源文件和鏈接文件

這是當然的,硬鏈接指的是同一塊磁盤區域,符號鏈接記錄的是路徑。所以不管修改哪個文件,源文件或者鏈接文件,文件裏的內容都會同步

 

國外一個參考鏈接:https://linuxhandbook.com/inode-linux/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章