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/