初窺Linux 之 區分硬連線和軟連線

2022-04-10 23:25:13 字數 2714 閱讀 4771

一、linux下的兩種連線檔案及建立方式

在linux下面的連線檔案有兩種——軟連線和硬連線,雖然都是連線檔案,但兩者卻有很大的區別。一種是類似於windows的快捷方式功能的檔案(或目錄),這種連線稱為軟連線;另一種則是通過檔案系統的inode連線來產生新檔名,而不是產生新檔案,這種稱為硬連線。

建立連線檔案的方法非常簡單,就是使用ln命令,ln file1 file2,則建立硬連線,file2為file1的硬連線,ln -s file1 file2,則建立軟連線,file2為file1的軟連線。

二、詳述硬連線

為了讓大家更好地了解這兩種連線的差別,這裡先說說硬連線吧,因為它比軟連線要難理解一些。

我們知道,在linux下,每個檔案都會占用乙個inode,檔案內容由inode的記錄來指向,而想要讀取檔案,必須要經過目錄記錄的檔名來指向正確的inode號碼才能讀取,也就是說,其實檔名只與目錄有關,但是檔案的內容則與inode有關。

那什麼硬連線呢?就是在某個目錄下新建一條檔名連線到某inode號碼的關聯記錄而已,簡單來說,就是有多個檔名對應到同乙個inode號碼,注意,是多個檔名,不是多個檔案。

看到這裡可能你也是一頭霧水,那麼請看下面的例子吧

在這裡我建立了乙個硬連線,並檢視了相關檔案的inode,從結果可以看出,這兩個檔案的inode是完全相同的(394220),而檔案連線數則不是1而是2,而且crontab的檔案型別是「-」而不是「l」,即它不是乙個連線檔案,這是因因為有兩個檔案連線到了同乙個檔案/etc/crontab啊。為什麼會如此神奇,就用下面的圖來解釋一下吧

從圖中可以看到,你可以通過1或2的目錄inode所指定的block找到兩個不同的檔名,而不管使用哪個檔名均可以找到real這個inode,並通過這個inode去讀取到最終的資料。

一般來說,使用硬連線(hard link)設定連線檔案,磁碟的空間與inode的數目是不會變的,它只是在某個目錄下的block多寫入乙個關聯資料而已,既不會耗用inode也不會耗用block數量。

可能你會反駁說,不對,建立/root/crontab的那個檔案不也需要乙個inode和blocks嗎?如圖中的inode1不就是建立這個連線所要用的乙個inode嗎?其實不是這樣理解的,因為/root這個目錄早已在,而它裡面的內容也早已記錄在這個block中,即無論你新增還是不新增乙個硬連線inode1和它所指向的那個目錄的block都已經存在了,你建立的硬連線只是在這個inode1所指向的block中新增一條檔名的記錄而已,在這個例子中,就是新增/root/crontab這條記錄。所以沒有增加inode和block的耗用。

三、詳述軟連線

相對於硬連線,軟連線(symbolic link)就更好理解了,基本上軟連線就是在建立乙個獨立的檔案,而這個檔案會讓資料的讀取指向指向它連線的那個檔案的檔名。即只是利用檔案來作為指向的操作,所以,當原始檔被刪除後,軟連線會「打不開」,出現的情況就像大家熟悉的windows中那樣,提示「無法開啟某個檔案」。

請看下面的例子

我建立了乙個軟連線,從輸出的結果中,我們可以看出它與硬連線的確是非常的不同。首先,這兩個檔案的inode號碼並不相同,再者在檔案型別方面,/etc/crontab為「-」,即普通的檔案,而/root/crontab_sl則為「l」,即連線檔案。

那軟連線檔案,即此例子中的crontab_sl檔案裡面的內容是什麼呢?大家可以看到它的大小只12b,其實它的內容就是「/etc/crontab」這12個字元而已。

還不是很明白?那就用下面的圖來說明吧

上圖表示,由inode1讀取到連線檔案的內容僅有檔名,根據檔名連線到正確的目錄去取得目標檔案的inode,最終就能夠讀取到正確的資料了。

從上面的輸出結果中,大家應該已經看到軟連線是要耗用inode和block的(因為inode號與原始檔的inode不相同),對應上圖就是耗用了inode1和它所指向的block,它與硬連線的不同之處在於,inode1在建立這個軟體檔案之前是沒有被使用的inode,它不指任何的block,也是說圖中它所指向的block也不沒有被利用的。當要建立軟連線時,inode1和它所指向的block才被利用了。而且這個block不是用來記錄檔名的,而是真真正正的乙個檔案,用來記錄檔案資訊,例如這裡它的資訊是「/etc/crontab」這12個字,它是放在目錄/root下的檔案。

四、軟連線與硬連線優缺點分析

1、硬連線

硬連線比較安全,因為即使某乙個目錄下的關聯資料被刪除了也沒有關係,只要有任何乙個目錄下存在著關聯資料,那麼該檔案就不會被刪除,而且硬連線還不需要耗用inode和block,但是硬連線也有其限制,就是不能跨檔案系統也不能連線到目錄。

注:在硬連線中,刪除檔案時,只有當連線數為0時,才能檔案真正刪除,否則只會把檔案的連線數減1。

2、軟連線

軟體連線比較靈活,可以連線到檔案和目錄,但是它會耗用inode和block,不過這對於系統來說其實不算什麼,但是如果目標檔案被刪除了,從最後一幅圖可以看出,整個環節就會無法繼續下去,會發生無法通過連線檔案讀取的問題。其實軟連線就你windows中的快捷方式一樣。

總之:本人覺得硬連線與軟連線的一大區別就是硬連線不會建立乙個新的檔案,而軟連線則會建立乙個新的檔案來,這個檔案用來記錄它所連線的檔案的檔名。

linux軟連線和硬連線

1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...

linux 硬連線和軟連線

系統如何通過檔名訪問磁碟資料 每個檔案都對應了乙個inode物件 inode物件指出該檔案在物理磁碟上的位置,訪問檔案時,作業系統通過檔案找到乙個檔案的 inode 索引 找到對應的inode 硬連線和軟連線的區別 軟連線和硬鏈結都是產生檔案快捷方式的操作 類似於win下的快捷方式 只是底層索引方式...

Linux軟連線和硬連線

將可執行檔案複製或者軟連線,即可直接執行。cp pipework master pipework usr local bin chmod x usr local bin pipework軟連線 命令 ln s 原檔案 目標檔案 特徵 1.相當於windows的快捷方式 2.只是乙個符號連線,所以軟連...