天天看點

linux下硬連接配接與軟連接配接

linux下的檔案管理是通過inode和block來儲存的,一個檔案内的實際内容是儲存在block中的,而檔案的屬性,權限之類以及該檔案的block都在在inode當中,一個檔案會占用一個inode,而當一個檔案過大時,它是會占用多個block的,而這些block都在inode當中記錄着。

有了上面這個認識之後,就具體來看看兩種連接配接究竟是什麼樣子。

硬連接配接(hard link)

ln [-參數] 源檔案 目标檔案
-s :符号連接配接(symbolic link)即所謂的軟連接配接,就是windows下的快捷方式
-f :如果目标檔案存在,則直接删除後再建立
           

預設不加參數情況下,是建立硬連接配接。

硬連接配接的實作機理呢,其實就是讓多個檔案指向同一個inode号碼而已。簡單來了解,就是你建立的連接配接隻是在該目錄下建立了一個連接配接到某inode号的關聯記錄而已。

下面直接用執行個體來說明:

ln /etc/crontab .
ll -i /etc/crontab /root/crontab
           
linux下硬連接配接與軟連接配接

這裡看到,在/root目錄下建立了一個crontab檔案的連接配接。檢視這兩個檔案的inode号竟然是一樣的,并且它的第三個字段都為2,這裡說一下第三個字段為連接配接數,即有多個連接配接指向該檔案,這裡就更好說明這兩個檔案其實是指向同一個檔案。

竟然知道了硬連接配接其實是增加一個連接配接數,那麼它的作用就顯而易見了,就是防止誤删,當你在删除一個檔案時,其實是在減少該檔案的連接配接數,這裡等介紹完軟連接配接後再具體說這個問題。

局限性:

不能跨檔案系統

不能連接配接到目錄

軟連接配接(symbolic link)

軟連接配接是建立一個新的檔案,而該檔案的内容就是它所指向檔案的檔案名,當源檔案被删除後,該連接配接檔案會打開失敗,因為已經找不到源檔案的“檔案名”了。

同樣是剛才的例子

ln -s /etc/crontab crontab2
ll -i /etc/crontab /root/crontab2
           
linux下硬連接配接與軟連接配接

看到兩個檔案的inode是不一樣的,這裡的crontab檔案的連接配接數為2,因為我們剛才建立了一個硬連接配接還在呢,是以是2,但是新建立的軟連接配接這個檔案的連接配接數卻是1,這裡足可見,軟連接配接是重新建立了一個檔案,而且細心的話,你可以發現這個新檔案的大小為12個bytes,因為/etc/crontab是12個bytes,就是上面提到的,該檔案的内容是它所指向的檔案名。

<執行個體測試>

最後來通過一系列的執行個體來具體感受下兩種連接配接的不同。

由于是測試,我們就在/tmp目錄下進行

cp -a /etc/passwd .
du -sb ; df -i . //這裡的du是評估檔案系統的磁盤使用量(一般用來檢視目錄的使用情況,df是列出檔案系統整體磁盤使用量)
           

這裡還是給出兩個指令的參數吧

du:
-a:列出所有檔案及目錄的容量
-h:以常見的容量機關呈現(G/M)
-s:列出總量,不細給出每個目錄的用量
-S:不包括子目錄下的
-k:以KB為機關
-m:以MB為機關
           
df:
-a:列出所有的檔案系統,包括特殊的/proc
-k:以KB為機關
m:以MB為機關
h:以較為容易閱讀的GB,MB,KB來顯示
H:用M=K來代替M=K的進位
T:連同檔案系統名也顯示
i:不用硬碟容量,而使用inode的數量來顯示
           

下來就具體建立軟硬連接配接來檢視:

ln passwd passwd-hd
du -sb ; df -i .
           
linux下硬連接配接與軟連接配接

看到,在建立硬連接配接前後,/tmp目錄下的總磁盤用量和inode量沒有發生變化,盡管多了一個passwd-hd檔案。

linux下硬連接配接與軟連接配接

passwd和passwd-hd兩個檔案一模一樣,且inode号一樣。

ln -s passwd passwd-so
ls -il passwd*
           
linux下硬連接配接與軟連接配接

passwd-so和passwd檔案的inode号明顯不同,連接配接數為1,大小為6個bytes,即passwd的大小。

linux下硬連接配接與軟連接配接

建立軟連接配接檔案後,整個磁盤的使用總量增加了,inode号的使用多了一個1,即新建立了一個檔案。

當删除passwd檔案後,我們看下硬連接配接和軟連接配接是否還有效。

linux下硬連接配接與軟連接配接

硬連接配接扔能正确檢視

linux下硬連接配接與軟連接配接

軟連接配接顯示沒有該目錄

linux下硬連接配接與軟連接配接

再來看一下,passwd-hd的檔案連接配接數由2變為1了。

綜上,就是關于硬連接配接和軟連接配接問題。

繼續閱讀