軟連接和硬鏈接是面試Linux方面的時候,比較容易問到的一個問題,雖然比較簡單,但是總是容易搞不清楚二者之間真正的區別在哪裏,下面就來詳細的解釋一下二者之間的異同:
windows中的快捷方式,大家都比較熟悉,就像我們最常作的一個操作就是安裝了一個windows軟件,將軟件的啓動文件複製,然後以快捷方式的格式粘貼到桌面,這時候我們只需要雙擊桌面上的圖標就可以啓動這個軟件了。同樣,Linux中的快捷方式就是連接文件
**
首先我們介紹一下什麼是連接文件:
**
向上面這種使用ll命令查看文件的長格式的時候,在文件權限的最前面第一個字符就表示了,這個文件屬於什麼類型的文件。
如何判斷一個文件是連接文件?
- l 開頭的文件就是連接文件
- 向上圖中其他的 - 短橫線這種的就是普通文件
- 並且上面的長格式文件名中有一個箭頭,表示的就是這個連接文件的源文件的名稱和位置
- 我們運行這個連接文件就相當於運行後面的passwd文件
同樣下面圖中的連接文件也是一樣的,只不過上圖是給普通文件創建的連接文件,下圖是給一個目錄創建的文件。
那麼我們查看sxjy目錄中的內容和/home/ss目錄下的內容是一致的
軟連接和硬鏈接的創建方式:
硬鏈接:
-
命令格式:ln 源文件… 鏈接文件
-
實質:一個文件對應多個文件名
硬鏈接:一個inode號對應多個文件名
軟連接:
-
命令格式:ln -s 源文件…鏈接文件
-
文件類型和權限肯定是lrwxrwxrwx
-
實質:軟連接是創建了一個新的文件,並且擁有自己的Inode號,通過這個Inode號找到另外一個文件名,
再通過這個文件名找到其Inode號,再通過Inode號找到文件內容(數據)軟連接兩個文件的Inode號不同
區別:
除了上面創建軟連接、硬鏈接時候的區別之外,其二者之間最大的區別就是刪除原文件後,連接文件是否仍然生效的問題。
因爲Linux系統查看文件內容的過程就是通過文件名找到其inode,然後再從block中找到對應inode的數據塊,從而輸出數據到屏幕上
硬鏈接
硬鏈接是一個inode對應多個文件,也就是多個鏈接文件的inode都是相同的,那麼當我們不論刪除源文件還是其中的連接文件的時候,通過剩下的連接文件就可以訪問到原來的數據,因爲inode都是一樣的。
軟連接
軟連接獲取源文件內容(數據)的過程是:
-
軟連接是創建了一個新的文件,並且擁有自己的Inode號,通過這個Inode號找到另外一個文件名,
再通過這個文件名找到其Inode號,再通過Inode號找到文件內容(數據) -
所以當我們將原文件刪除之後,軟連接文件就不能通過自己的inode找到源文件的文件名,也就獲取不到源文件中的數據了
異常的現象就是下面這樣:
其實上面的區別只要懂了Linux是如何讀取文件內容的過程就很好理解了
最後補充一點,軟連接、硬鏈接都不要文件系統,也就是說,連接文件和源文件最好都在同一個文件系統中;目錄只能創建軟連接,不能創建硬鏈接。
附:
查詢文件inode的方法:
- ls -i 命令
- stat 命令