Linux中inode詳解,硬鏈接和軟鏈接介紹
在Linux中,我們經常會做一些關於數據的操作(備份、傳輸、壓縮等)或是要在後臺持續的運行一些程序。由於,工作的數據量很大或者工作要持續很長的時間,我們就必須保證這個終端的啟動,一旦終端關閉了,它所運行的進程也會關閉,我們所做的工作就可能前功盡棄。但是,即使我們不主動的關閉終端,終端有的時候也會應為一些原因(網絡、鎖屏等)而中斷,導致我們的工作進度清零。
1.inode 定義
inode是用來存儲文件元信息的區域。中文譯名叫做“索引節點”。
簡單來說,inode 指示了一個文件的基本信息,如inode編號、修改時間、文件的位置等,就如同一本書的目錄,會直接告訴你想看的章節是在第幾頁。不同的是,書是以頁為單位的,而 linux 文件存取是以“塊”為單位的。
每個文件都有對應的inode,存儲著關於這個文件的基本信息。linux 系統不使用文件名,而使用 inode 號來識別文件。對於使用者,我們是通過文件名打開的文件;但是對於系統內部,是分為三步的:
- 系統找到這個文件名對應的 inode 號
- 通過 inode 號,獲取 inode 信息
- 根據 inode 信息,找到文件數據所在的 block,讀取內容
2.inode 內容
inode 包含了文件的以下基本信息:
- 文件的字節數
- inode 編號
- 文件擁有者的 Uid
- 文件所屬group的 Gid
- 文件的讀、寫、執行權限
- 文件的時間戳,共有三個:
change:inode 上一次變動的時間
modify:文件內容上一次變動的時間
access:文件上一次打開的時間 - 鏈接數,即有多少文件名指向這個 inode
- 文件數據 block 的位置
查看inode內容可以使用命令:stat -i 和 ls -i
3.目錄原理
要理解文件的操作對 inode 的影響,先要理解目錄的原理。目錄對外表現是一個容器,存放著子文件和子目錄,實際上在系統內部,目錄本身也是一個文件,目錄文件的內容即是該目錄下的文件名與 inode 號的映射表
4.文件操作原理
cp命令
- 分配一個空閑的inode號,inode表中新增一條索引記錄
- 在目錄中新建一個目錄項,並指向步驟一中的inode號關聯
- 將數據復制到block中
rm命令
- 減少要刪除文件鏈接數,如果鏈接數變為0,則釋放inode號
- 數據block放到空閑列表中
- 刪除目錄項
(數據文件不會馬上刪除,當新的文件覆蓋數據塊,則數據刪除,若沒有覆蓋,則還可以恢復)
mv命令
如果源文件和目標文件在一個文件系統
- 目標文件目錄中新建目錄項
- 源文件目錄中的目錄項
-
目標文件名指向inode記錄
(inode記錄沒有影響(除時間戳),數據位置沒有變化)如果目標文件和源文件屬於不同文件系統,則相當於 cp + rm。
ln命令
硬鏈接
一般情況下,文件名和 inode 號是一一對應,但是也有可能多個文件名指向同一個 inode 號,即硬鏈接。硬鏈接可以實現用不同的文件名訪問同一個文件。
軟鏈接
軟鏈接也可以通過不同的文件名訪問同一塊數據,但是與硬鏈接不同的是,兩個文件名的 inode 是不一樣的。那如何訪問同一塊區域呢?比如文件 A 是文件 B 的軟連接,那麽文件 A 的內容存放的是文件 B 的路徑名(可以通過這個找到文件 B 的目錄項)。因此訪問 A 時,會讀取文件 B 的路徑,進而讀取文件 B 的內容。這樣,對外表現來看,文件 A 和文件 B 的內容就相同了。類似於 windows 系統下的快捷方式。
創建軟鏈接語法:
ln -s [source file] [new file]
在生產環境中,創建軟鏈接一般選擇相對路徑,這樣在數據整體遷移中,軟鏈接保持相對關系不受根目錄影響。特殊需要強調的是:源文件路徑是相對於新鏈接文件的相對路徑,不是相對當前工作目錄的相對路徑
例如:
硬鏈接與軟鏈接的區別
- 本質不同,硬鏈接指向同一個文件,軟鏈接指向文件不同
- 跨分區,硬鏈接不支持跨分區,軟鏈接可以跨分區
- inode編號,硬鏈接inode編號相同,軟鏈接inode編號不同
- 目錄,硬鏈接不支持目錄,軟鏈接可以對目錄創建
- 創建硬鏈接時,鏈接數加1,創建軟鏈接時,鏈接數不變
- 硬鏈接屬於平等關系,軟鏈接屬於依賴關系,刪除原文件效果不同
本文參考文章
作者:HappyRocking
來源:CSDN
原文:https://blog.csdn.net/HappyRocking/article/details/80671997
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
Linux中inode詳解,硬鏈接和軟鏈接介紹