區分Linux硬鏈結與軟鏈結

2022-09-26 13:27:25 字數 2463 閱讀 5895

在linux中,連線檔案有兩種,一種類似於windows的快捷方式,可以讓你快速地鏈結到目標檔案(或目錄),這種稱為軟鏈結(soft link),也叫作符號鏈結(symbolic link);另一種則是通過檔案系統的 inode 連線來產生新檔名,而不是產生新檔案。這種稱為硬鏈結(hard link),也叫作實體鏈結。 軟鏈結與硬鏈結是兩種完全不一樣的東西。

1.硬鏈結(hard link)

1.1簡介

一般情況下,檔名和inode號碼是一一對應關係,每個inode號碼對應乙個檔名。但是,unix/linux系統,允許多個檔名指向同乙個inode號碼。這意味著,可以用不同的檔名訪問同樣的內容;對檔案內容進行修改,會影響到所有檔名;但是,刪除乙個檔名,不影響另乙個檔名的訪問。這種情況就被稱為"硬鏈結"(hard link)。

ln命令可以建立硬鏈結:

ln 原始檔》 硬鏈結》

執行上面這條命令以後,原始檔與目標檔案的inode號碼相同,都指向同乙個inode。inode資訊中有一項叫做"鏈結數",記錄指向該inode的檔名總數,這時就會增加1。反過來,刪除乙個檔名,就會使得inode節點中的"鏈結數"減1。當這個值減到0,表明沒有檔名指向這個inode,系www.cppcns.com統就會**這個inode號碼,以及其所對應block區域。

這裡順便說一下目錄檔案的"鏈結數"。建立目錄時,缺省會生成兩個目錄項:".「和」…"。前者的inowww.cppcns.comde號碼就是當前目錄的inode號碼,等同於當前目錄的"硬鏈結";後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於zzmej父目錄的"硬鏈結"。所以,任何乙個目錄的"硬鏈結"總數,總是等於2加上它的子目錄總數(含隱藏目錄),這裡的2是本身目錄名對其的「硬鏈結」和當前目錄下的「.」對其的硬鏈結「。

1.2硬鏈結與inode的關係

硬鏈結本質上是檔案的別名,與原始檔對映到相同的inode。下面分別在/etc和/root目錄下建立原始檔lvlv.txt和硬鏈結lvlv_hd.txt,並檢視檔案屬性。

#建立硬鏈結

ln /etc/lvlv.txt /root/lvlv_hd.txt

#列出檔案屬性

ll -i /etc/lvlv.txt

7792474 -rw---x--x 2 b3335 b3335 22 nov 9 21:05 lvlv.txt

ll -i /root/lvlv_hd.txt

7792474 -rw---x--x 2 b3335 b3335 22 nov 9 21:05 lvlv_hd.txt

從上面可以看出硬鏈結/etc/lvlv_hd.txt的inode與原始檔lvlv.txt相同,其它資訊完全相同。儲存示意圖如下:

圖示的內容表示目錄/root下的硬鏈結lvlv_hd.txt在與/etc下檔案lvlv.txt通過相同的inode指向同乙個檔案內容。目錄的資料實體中記錄著每乙個檔名與該檔案的inode號。可見,硬鏈結本質上是檔案的乙個別名。

1.3硬鏈結注意事項

硬鏈結有兩個限制:

(1)不能跨檔案系統;硬鏈結只是檔案的別名,而非獨立的檔案,因此僅能在單一檔案系統上面進行,所以不能跨檔案系統。

(2)不能連線到目錄。因為硬鏈結連線到目錄可會導致目錄的inode與實體block形成環狀。此時,如果刪除目錄,會導致目錄實體block無法被系統訪問,產生孤立的目錄(從根目錄無法再訪問)。如果要刪除孤立的目錄inode與實體block,需要執行標記和清理,這在磁碟上操作是非常耗時的。軟鏈結不會導致此問題,因為它們不會增加目標目錄的鏈結數。

比如對目錄/etc在其目錄或其子目錄中建立乙個硬鏈結/etc/etc_hd,此時就會形成環狀,如下圖所示:

此時,如果執行rm -r /etc刪除目錄/etc,實際上目錄/etc並沒有被真正刪除,因為/etc的inode和block仍然殘留,程式設計孤立的目錄,此時從根目錄無法訪問/etc。

2.軟鏈結(soft link)

與硬鏈結不zzmej同的是軟鏈結會程式設計客棧創立乙個獨立的檔案,該檔案有自己的inode,但這個檔案會讓資料的讀取指向它連線的那個檔案。由於只是利用了檔案來作為指向的操作,所以當原始檔被刪除後軟鏈結檔案就會提示「打不開」,實際是找不到被刪除的原始檔了。

下面建立軟鏈結並檢視軟鏈結的屬性:

#建立軟鏈結

$ ln -s /etc/lvlv.txt lvlv_sb.txt

#檢視檔案屬性

$ ll -i

7792474 -rw---x--x 2 b3335 b3335 22 nov 9 21:05 lvlv.txt

[b3335@mic root]$ ll -i

7792478 lrwxrwxrwx 1 b3335 b3335 13 nov 10 15:23 lvlv_sb.txt -> /etc/lvlv.txt

可以看出,軟鏈結的inode節點與原始檔lvlv.txt不同,且軟鏈結的大小剛好等於字串」/etc/lvlv.txt」的長度13,可見軟鏈結是單獨的乙個新的檔案,檔案的內容就是指向的檔案的路徑。

下面給出軟鏈結的示意圖,同樣以檔案lvlv.txt為例。

linux硬鏈結與軟鏈結

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

Linux 硬鏈結與軟鏈結

原貼 2007 08 05 10 19 49 linux硬鏈結與軟鏈結 2006 12 01 15 03 首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實...

linux硬鏈結與軟鏈結

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