1. 程式人生 > >Linux/Unix檔案系統索引節點淺析

Linux/Unix檔案系統索引節點淺析

索引節點,其英文為 Inode,是 Index Node 的縮寫。索引節點是整個 Linux 檔案系統的基礎。儲存於檔案系統上的任何檔案都可以用索引節點來表示。舉一個例子來說,假設有一個老圖書館裡面有一本登記簿,上面記錄著館內的書名及存放 位置,比如在哪一間的第幾排存放著哪一本書,以及書的作者是誰。在這裡,記錄著一本書的那一行就是索引節點。索引節點以同樣的方式來儲存物件,我們會在下 面學習。

在 Linux 系統中,檔案系統主要分為兩部分,一部分為元資料(metadata),另一部分為資料本身。元資料,換句話說,就是“包含了與資料有關資訊的資料”。索引節點就管理著檔案系統中元資料的部分。


索引節點基礎知識

如上所述,檔案系統中的任何一個檔案或目錄都與一個索引節點相對應。每個索引節點都是一個數據結構,儲存著目標資料的如下資訊:


檔案大小(以位元組為單位)
(存放檔案的)裝置識別符號
(檔案所有者的)使用者識別符號
使用者組識別符號
檔案模式(所有者、使用者組及其他人對於檔案的讀取有怎樣的許可權)
擴充套件屬性(如 ACL)
檔案讀取或修改的時間戳
連結數量(指向該檔案的硬連結數,記住,軟連結不計算在內)
指向儲存該內容的磁碟區塊的指標
檔案分類(是普通檔案、目錄還是特殊區塊裝置)
檔案佔用的區塊數量


Linux 檔案系統從來不儲存檔案建立時間,許多人都不清楚這一點。

一個典型的索引資料看起來會是像下面這樣:
# stat 01
Size:923383Blocks:1816IO Block:4096regular file
Device:803h/2051dInode:12684895Links:1
Access:(0644/-rw-r--r--)Uid:(0/root)Gid:(0/root)
Access:2012-09-0701:46:54.000000000-0500
Modify:2012-04-2706:22:02.000000000-0500
Change:2012-04-2706:22:02.000000000-0500


索引節點是在何時並以怎樣的方式建立的?

索引節點的建立與正在使用的檔案系統有關。一些檔案系統在建立時就建立了索引節點,故其索引節點的數量有限。而一些如 JFS 和 XFS 等系統也在檔案系統建立時建立索引節點,但使用動態節點分配,並按需擴大索引節點的數量,因此可以避免所有索引節點用完的情況。
當讀取檔案時都發生了什麼?

當用戶試圖讀取檔案或與該檔案相關的資訊時,他會使用檔名稱。但是,實質上這個檔名稱首先對映為儲存於目錄表中的索引點節號碼。通過該索引節點號碼又讀取到相對應的索引節點。索引節點號碼及相對應的索引節點存放於對映表(Inode table)中。


索引節點指標結構

上面已經解釋過,索引節點只儲存元資料資訊,其中包括真正的資料儲存的區塊的資訊。下面就來解釋一下索引節點指標結構。
如這篇維基百科上面的文章解釋的那樣,這個結構可能會有 11 到 13 個指標,但大多數檔案系統會以 15 個指標的形式來儲存資料結構。這 15 個指標包括:

直接指向檔案資料區塊的 12 個指標,稱為直接指標(direct pointer)。
一個單獨非直接指標(singly indirect pointer),指向一個由多個指標構成的區塊,後者的指標又指向檔案資料區塊。
一個雙重非直接指標(doubly indirect pointer),指向一個由多個指標構成的區塊,後者的指標又指向一個由多個指標構成的區塊,這一區塊的指標又指向檔案資料的區塊。
一個三重非直接指標(triply indirect pointer),指向一個由多個指標構成的區塊,後者的指標又指向一個由多個指標構成的區塊,其指標又指向另一個由多個指標構成的區塊,這一區塊的指標又指向檔案資料的區塊。


常見問題集解

問:請用一句話來說明一下索引節點是什麼?
答:索引節點是傳統類 Unix 檔案系統上的資料結構,儲存了常規檔案、目錄或其他檔案系統目標的基本資訊。

問:如何檢視檔案或目錄的索引節點號碼?
答:可使用“stat”命令來檢視該資訊,也可以使用“ls”命令加上其“-i”引數來檢視一檔案的索引節點號碼。

問:如何檢視檔案系統上的索引節點的總數和已用數?
答:“df -i”命令會顯示索引節點總數、已用數和未使用數的統計資料。

問:為什麼索引節點資訊不包含檔名稱?
答:索引節點會儲存對於其自身唯一的資訊。對於一個硬連結,一個索引節點可能會含有指向同一索引節點的兩個不同的檔名。故檔名稱沒有儲存於索引節點之內。

問:如果索引節點不包含連結會怎麼樣?
答:不包含連結的索引節點就會從檔案系統上移除,並且其資源就會釋放出來供重新分配。但直到所有開啟它的程序對它讀取完成後才可以刪除它。

問:在移動檔案時索引節點會發生變化嗎?
答:即使將檔案從一處移動到另一處,索引節點號碼還是會保持不變,但前提是在同一檔案系統之下。如果在不同的檔案系統之間移動,索引節點號碼就會發生變化。

問:在建立新檔案或目錄時會建立新的索引節點嗎?
答:不會。當建立新檔案或目錄時,它只會使用一個已經建立的索引節點的空間並更新其資訊,但不會建立新的索引節點。索引節點只會在檔案系統建立時建立(有一些檔案系統存在例外,上面已解釋)。

問:可以通過索引節點號碼找到檔案嗎?
答:可以。使用如下命令(其中 inode-number 為索引節點號碼):

# find / -inum inode-number -exec ls -l {} \;

將上面的一行命令中的“ls”換為“rm”,也可以根據索引節點號碼刪除檔案。

# find / -inum inode-number -exec rm -f {} \;

更多精彩linux視訊教程,盡在51CTO學院: wKioL1PE_n3z629yAACXIHScsJM092.jpg

相關推薦

Linux/Unix檔案系統索引節點淺析

索引節點,其英文為 Inode,是 Index Node 的縮寫。索引節點是整個 Linux 檔案系統的基礎。儲存於檔案系統上的任何檔案都可以用索引節點來表示。舉一個例子來說,假設有一個老圖書館裡面有一本登記簿,上面記錄著館內的書名及存放 位置,比如在哪一間的第幾排存放著哪

Linux 記憶體檔案系統

Linux記憶體檔案系統:可滿足高IO的要求 ramdisk: 基於虛擬在記憶體中的其他檔案系統(ex2fs)。 掛載方式:mount /dev/ram /mnt/ramdisk ramfs: 實體記憶體檔案系統,只存在於實體記憶體中。其大小也不是固定的,而是隨著所需要的

Linux.ext4檔案系統 .inode和extent

最近在看相關內容,不過總是不是很系統,今日看到此部落格,感覺恍然大悟,作者寫的非常棒:轉載: https://blog.csdn.net/stringNewName/article/details/73740155 為表示對作者的尊敬,一字不動的敲擊! 最近在看ext4

linux 檢視檔案系統型別

linux 檢視檔案系統型別 Linux 檢視檔案系統的方式有多種,列舉如下: mount :~$ mount /dev/sda1 on / type ext4 (rw,errors=remount-ro,user_xattr) proc on /proc type pr

linux檔案系統以及使用者組等概念

一、Linux檔案結構及基本資料夾 目錄 描述 / 根目錄 /bin 做為基礎系統所需要的最基礎的命令就是放在這裡。比如 ls、cp、mkdir等命令;功能和

Linux EXT檔案系統恢復誤刪檔案的方法

我們在管理資料庫和系統的時候,經常需要做rm 刪除檔案的操作。由於Linux是沒有回收站的,rm刪除了檔案或者目錄以後,資料是無法從Windows所謂的回收站中找到並恢復的。這樣的話,資料被誤刪除了以後,想要恢復我們一般需要從備份中,或者找資料恢復公司來恢復資料。但是,在某些比較特殊的情況下,使用了

[Linux] ARM檔案系統移植記錄

#arm-cotex-A9 M6708 檔案系統移植記錄 本文的主要內容是:記錄在移植檔案系統時所遇到的問題。 ##工具 * ubuntu 16.04.2 server i386(開啟ssh、samba功能) * buildroot-2017.02.3 (藉助buildroot工

linux 網路檔案系統NFS伺服器配置

NFS(網路檔案系統)服務可以將遠端Linux系統上的檔案共享資源掛載到本地主機的目錄上,從而使得本地主機(Linux客戶端)基於TCP/IP協議,像使用本地主機上的資源那樣讀寫遠端Linux系統上的共享檔案。 1.配置NFS伺服器,先安裝兩個必要的軟體包,通常是預設安裝的 yum in

Linux檔案系統介紹

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux檔案系統基本介紹

Linux及檔案系統基本介紹 1   網際網路行業現狀 在伺服器端市場: 超級計算機

如何將HDFS檔案系統掛載到Linux本地檔案系統

本文轉自https://cloud.tencent.com/developer/article/1078538,如果侵權請聯絡我刪除。 1.文件編寫目的 Hadoop支援通過NFSv3掛載HDFS檔案系統到本地目錄,允許使用者像訪問本地檔案系統一樣訪問HDFS,對於普通使用者來說大大的簡

LINUX學習—檔案系統及管理類命令

Windows: PE Linux: ELF 檔案系統: rootfs:根檔案系統 FHS:規定Linux應該建立哪些目錄和檔案 ls / 可檢視根目錄下一級子目錄, 也可以ls /目錄名:可以檢視該目錄下一級子目錄 /boot: 系統啟動相關的檔案, 如核心、initrd

Linux ext4檔案系統下 extundelete 恢復 誤刪除的檔案

1、檔案基本操作 1.1 檢視檔案 # ls   1.2 建立 1.2.1 建立檔案 # touch {file_name} # vim {file_name}   1.2.2 建立目錄 # mkdir -p {dir}   1.3 複製 1.3.1 複

Linux檔案系統製作與各種掛載方式的實現

Linux根檔案系統的製作 什麼是檔案系統 計算機的檔案系統是一種儲存和組織計算機資料的方法,它使得對其訪問和查詢變得容易,檔案系統使用檔案和樹形目錄的抽象邏輯概念代替了硬碟和光碟等物理裝置使用資料塊的概念,使用者使用檔案系統來儲存資料不必關心資料實際儲存在硬碟(或者光碟)的地址為多少的資料

關於 inode 瞭解 UNIX 檔案系統如何管理檔案

轉載:https://www.ibm.com/developerworks/cn/aix/library/au-speakingunix14/ 對話 UNIX 關於 inode 瞭解 UNIX 檔案系統如何管理檔案 Adam Cormany 2008 年 8 月 11 日釋出 i

linux檔案系統 /etc/resolv.conf 檔案詳解

大家好,今天51開源給大家介紹一個在配置檔案,那就是/etc/resolv.conf。很多網友對此檔案的用處不太瞭解。其實並不複雜,它是DNS客戶機配置檔案,用於設定DNS伺服器的IP地址及DNS域名,還包含了主機的域名搜尋順序。該檔案是由域名解析器(resol

Linux裝置檔案系統

Linux檔案系統目錄結構 /bin----存放著最經常使用的基本命令,如ls、cp、mkdir 等,這個目錄中的檔案都是可執行的。 /boot----啟動Linux時使用的一些核心檔案,包括一些連線檔案以及映象檔案,如vmlinuz、initrd.img  /de

Linux檔案系統中的比較常見的目錄結構

/bin 存放二進位制可執行命令的目錄 /dev 存放裝置檔案的目錄 /etc 存放系統管理和配置檔案的目錄 /home 使用者主目錄,比如使用者user的主目錄就是/home/user,可以用~user表示 /lib 存放動態連結共享庫的目錄 /sbin存放系

關於 inode 瞭解 UNIX 檔案系統如何管理檔案

對話 UNIX 關於 inode 瞭解 UNIX 檔案系統如何管理檔案 Adam Cormany 2008 年 8 月 11 日釋出 inode 是 UNIX 作業系統中的一種資料結構,它包含了與檔案系統中各個檔案相關的一些重要資訊。在 UNIX 中建立檔案系

構建linux檔案系統

核心 啟動後回去呼叫第一個程式init、給使用者提供操作介面的shell程式 、應用程式所依賴的庫檔案。這些必須的基本的檔案合起來稱為根檔案系統,他們存放在一個分割槽中,Linux系統啟動之後首先掛載