硬鏈結和軟連線

2021-08-08 13:35:35 字數 4296 閱讀 7475

本系列將學習過程中遇到的命令整理一下,留作備查和複習使用。

今天將重點介紹linux中硬鏈結和軟連線,其中會涉及到索引節點(inode),以及cp命令,rm命令,mv命令在執行的過程中對inode的影響。

只不過在linux 檔案系統的節點表中,不僅僅儲存了該檔案的節點資訊,同時還儲存了該檔案的元資料,也就是屬性資訊,這些資訊中包含了檔案的大小,access time ,modify time,change time,等,同時還有檔案的建立者,所有者,檔案的型別等等。這些資料都屬於檔案的元資料。

假設資料塊的大小為4k,每個指標都指向乙個資料塊。假設有10個直接指標,4個間接塊指標,2個雙重簡介塊指標,乙個3重間接指標。

這樣這個檔案系統能夠儲存的單個檔案的最資料的大小為

10×4k+4×1024×4k+2×1024×1024×4k+1×1024×1024×1024×4k

而由於指標的存在所占用的儲存空間會根據檔案系統的不同而有所不同。

執行cp命令之後,會在系統中分配乙個空閒的inode 號,在inode表中生成新的條目,在目錄中建立乙個目錄項,將名稱與inode號關聯,拷貝資料生成新的檔案。

// 執行cp 命令複製乙個檔案file1 到file1cp

cp file1 file1cp

//ls命令的 -i 選項可以檢視inode 節點號

ls -il

//67 和 68 顯示的就是inode節點號

67 -rw-r--r--. 1 root root 0 jul 19 21:33 file1

68 -rw-r--r--. 1 root root 0 jul 19 21:36 file1cp

執行rm 命令之後, 實際上刪除的是該檔案的指標,以及目錄項。

//使用ln 命令可以給file1建立乙個硬鏈結檔案  

ln file1 file1ln

ls -li

//可以看出硬鏈結檔案file1ln 與 file1 具有相同的元資料以及inode號

//他們的鏈結數為2,可以理解為有兩個指標指向了該檔案資料。

67 -rw-r--r--. 2 root root 0 jul 19 21:33 file1

68 -rw-r--r--. 1 root root 0 jul 19 21:36 file1cp

67 -rw-r--r--. 2 root root 0 jul 19 21:33 file1ln

//根據上面展示的訊息我們執行 rm 命令

rm -rf file1

//結果顯示file1ln的檔案鏈結數減為1 但是 file1ln 檢視的內容和file1是一致的。

68 -rw-r--r--. 1 root root 0 jul 19 21:36 file1cp

67 -rw-r--r--. 1 root root 0 jul 19 21:33 file1ln

如果此時我們再執行一遍rm -rf file1ln檔案系統中將不會再有指標指向 之前file1 和file1ln 所對應的資料塊。但是該資料塊不會立馬被刪除掉,如果將來有其他資料需要使用該資料塊時,它將被刪除掉。

硬鏈結 針對一段文字塊建立了兩個名字。

可以通俗的理解為 給乙個房間開了兩扇一摸一樣的門,兩扇門是平等的,關閉任何一扇門都不會對從另一扇門進入房間產生影響。

鏈結建立之後與原始檔路徑是平等的關係。

硬鏈結不能針對檔案目錄進行建立,因為硬鏈結指向的是檔案資料本身。

我們在實驗目錄中建立乙個檔案f1,同時為其建立乙個硬鏈結。

ln f1 f1ln 

//執行此命令 並觀察相關元資料

ll -i

67 -rw-r--r--. 2 root root 12 jul 20 08:45 f1

67 -rw-r--r--. 2 root root 12 jul 20 08:45 f1ln

從結果中可以看出,兩個檔案除了檔名不一樣以外,其他的全部都一樣,就連a,m,c,時間都一樣的複製過來。這時如果來檢視兩個文字檔案的話,會發現他們是一樣的。同理,我們修改了f1檔案,f1ln檔案也會發生相應的變化。

//我們使用touch 命令來重新整理檔案f1的時間 

touch f1

//執行此命令觀察元資料

67 -rw-r--r--. 2 root root 12 jul 20 08:50 f1

67 -rw-r--r--. 2 root root 12 jul 20 08:50 f1ln

可以看出兩個檔案的時間都發生變化。當然,如果修改了f1檔案的內容結果還是一樣。

//追加文字  

echo "hellotest" >> f1ln

ll -i

//檔案的大小發生了變化

67 -rw-r--r--. 2 root root 22 jul 20 08:54 f1

67 -rw-r--r--. 2 root root 22 jul 20 08:54 f1ln

下面我們畫乙個示意圖來理解一下

現在我們來執行下面的命令

//我們刪除掉檔案f1

rm -rf f1

根據圖示我們可以看出雖然刪除了f1(實際上刪除的是檔案資料塊上的名字叫做f1的位址),但是我們仍然能夠使用f1ln 檔案來訪問到該檔案資料塊。

這就是硬鏈結的特點。

從另乙個角度上說,如果我們把f1 和 f1ln都刪除掉之後,表面上我們是刪除掉了該檔案,但實際上我們只是刪除掉了該檔案資料塊的兩個硬鏈結,該檔案資料塊實際上還儲存在硬碟上,直到有新的資料檔案占用該儲存空間後,原來的資料才會被擦除掉。

也正是因為這個原因,我們刪除掉的資料,在有限的時間範圍內還是有可能被恢復回來的。

linux 系統中的軟連線可以理解為win 系統中的快捷方式。

* 乙個符號鏈結指向另乙個檔案

* ls - l的 顯示鏈結的名稱和引用的檔案

* 乙個符號鏈結的內容是它引用檔案的名稱

* 可以對目錄進行

* 可以跨分割槽

* 指向的是另乙個檔案的路徑;其大小為指向的路徑字串的長度;不增加或減少目標檔案inode的引用計數;

使用命令
硬鏈結

ls 原始檔 目標檔案
軟連線

ls -n 原始檔路徑(最好是相對路徑) 目標檔案
我們在f1所在的目錄下建立乙個路徑檔案並進入到該目錄下

然後我們建立乙個軟連線指向f1

這裡所說的 相對路徑指的是 相對於軟連線的路徑,而不是當前工作目錄的路徑。

ln -s ../f1 lnsfile  

//下面我們建立乙個軟鏈結,鏈結到/etc/issue檔案

ln -s ../../etc/issue lnsfile2

//ll -i

lrwxrwxrwx. 1 root root 15 jul 20 10:03 lnsfile2 -> ../../etc/issue

從上面的結果中可以看出,軟連線的檔案型別為 l 也就是鏈結檔案。軟連線的大寫與其指向的路徑字串長度有關,與原始檔無關。

如果刪除了原始檔,該軟連線失效.

硬鏈結的本質是同乙個檔案多個檔名,軟連線相當於快捷方式或者說指標

軟連線和硬鏈結

硬鏈結 軟連線 1.使用限制 硬鏈結必須是在同乙個檔案系統下,不能對目錄進行鏈結 軟鏈結可以跨檔案系統 可以對不存在的檔案進行鏈結 可以對目錄進行鏈結 2.磁碟利用率 硬鏈結使用的是同乙個i節點,指向同乙個資料塊,並不會複製檔案,所以硬鏈結是不占用磁碟空間,類似語言中的引用 3.檔案刪除 硬鏈結建立...

軟連線和硬鏈結

軟連線和硬鏈結是面試linux方面的時候,比較容易問到的乙個問題,雖然比較簡單,但是總是容易搞不清楚二者之間真正的區別在 下面就來詳細的解釋一下二者之間的異同 windows中的快捷方式,大家都比較熟悉,就像我們最常作的乙個操作就是安裝了乙個windows軟體,將軟體的啟動檔案複製,然後以快捷方式的...

軟連線和硬鏈結

1 類似建立windows的快捷方式 2 建立軟連線 ln s 3 檔案和目錄都可以做軟連線 4 刪除軟連線不影響原始檔 5 刪除原始檔軟連線失效 6 inode號碼不同 7 檔案的型別不同 和l 8 最好使用絕對路徑 root oldboy lnb ln s etc hosts test.host...