linux文件存取 inode解讀

Inode的結構圖

linux文件存取 inode解讀

https://www.cnblogs.com/xiexj/p/7214502.html

一、inode的內容
inode包含文件的元信息,具體來說有以下內容:

  • 文件的字節數
  • 文件擁有者的User ID
  • 文件的Group ID
  • 文件的讀、寫、執行權限
  • 文件的時間戳
    access time(atime): 訪問時間,當文件被讀取時才更新
    modify time(mtime): 數據修改時間,當文件的數據被修改時才更新
    change time(ctime): 元數據修改時間,當文件的元數據(權限,大小,owner,group,mtime等)更新時則更新
    ctime指inode上一次變動的時間,mtime指文件內容上一次變動的時間,atime指文件上一次打開的時間。
  • 鏈接數,即有多少文件名指向這個inode
  • 文件數據block的位置
    可以用stat命令,查看某個文件的inode信息:

文件儲存方式
文件在磁盤上分兩部分存儲,即文件元信息、 文件數據
硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存512字節(相當於0.5KB)。

操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是4KB,即連續八個扇區( sector)組成一個 block。

操作系統格式化硬盤的時候,自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

二、inode 大小
文件數據都儲存在"塊"中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,儲存文件元信息的區域就叫做inode,中文譯名爲"索引節點"。 每一個文件都有對應的inode,裏面包含了與該文件有關的一些信息

總之,除了文件名以外的所有文件信息,都存在inode之中。至於爲什麼沒有文件名,下文會有詳細解釋。
每個inode節點的大小,一般是128字節或256字節。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。
假定在一塊1GB的硬盤中,每個inode節點的大小爲128字節,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,佔整塊硬盤的12.8%。
查看每個硬盤分區的inode總數和已經使用的數量,可以使用df命令。
df -i
查看每個inode節點的大小,可以用如下命令:
sudo dumpe2fs -h /dev/hda | grep "Inode size"
由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬盤還未存滿的情況。這時,就無法在硬盤上創建新文件。

三、inode號
每個inode都有一個號,操作系統用inode號來識別不同的文件。
這裏值得重複一遍,Unix/linux系統內部不使用文件名,而使用inode號來識別文件。對於系統來說,文件名只是inode號便於識別的別稱或者綽號。
表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首先,系統找到這個文件名對應的inode號;其次,通過inode號,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據
使用ls -i命令,可以看到文件名對應的inode號:
ls -i example.txt
四、目錄文件
Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。
目錄文件的結構非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼
ls命令只列出目錄文件中的所有文件名:
ls /etc
ls -i命令列出整個目錄文件,即文件名和inode號碼:
ls -i /etc
如果要查看文件的詳細信息,就必須根據inode號碼,訪問inode節點,讀取信息。ls -l命令列出文件的詳細信息。
ls -l /etc
理解了上面這些知識,就能理解目錄的權限。目錄文件的讀權限(r)和寫權限(w),都是針對目錄文件本身(即不同用戶能以什麼權限訪問操作對該目錄文件,例如這裏不同用戶對tmp目錄文件(d可以查出tmp是目錄文件,d表示directory,即目錄)分別爲rwxr-xr-x,第一組的三個字符,即rwx,表示文件擁有者用戶的對該文件的讀寫權限,第二組的三個字符,即r-x,表示文件擁有者用戶所在的用戶組裏的其他用戶對該文件的讀寫權限,第三組的三個字符,即r-x,表示文件擁有者用戶所在的用戶組以外的用戶對該文件的讀寫權限。一個某個用戶下運行的進程訪問操作該目錄文件只能以該用戶所具有的對該目錄文件的權限進行操作)。由於目錄文件內只有文件名和inode號碼,所以如果只有讀權限,只能獲取文件名,無法獲取其他信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章