Linux下的inode記錄
檔案儲存在硬碟上。
硬碟上最小的儲存單位稱為磁區。
每個扇區儲存512位元組(相當於0.5kb)。
作業系統在讀取硬碟時,不會逐個磁區讀取,效率較低。
相反,它一次連續讀取多個磁區,即一次讀取一個區塊。
這個「區塊」由多個磁區組成,是檔案存取的最小單位。
區塊大小,最常見的是4kb,是一行八個磁區組成一個區塊。

文件資料都儲存在」區塊」中,那麼很顯然,我們還必須找到一個地方儲存文件的元信息,例如文件的創建者、文件的創建日期、文件的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為」索引節點」。
inode的內容
#inode包含檔案的元資訊,具體來說有以下內容:
* 檔案的位元組數
* 檔案擁有者的User ID
* 檔案的Group ID
* 檔案的讀取、寫入、執行權限
* 檔案的時間戳,共有三個:ctime指inode上一次變動的時間,mtime指檔案內容上一次變動的時間,atime指檔案上一次開啟的時間。
* 連結數,即有多少檔名指向這個inode
* 檔案資料block的位置
可以用stat指令,查看某個檔案的inode資訊:
stat example.txt
總之,除了檔案名稱以外的所有檔案訊息,都存在著inode之中。至於為什麼沒有檔名,下文會有詳細解釋。
#inode的大小
#inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統會自動將硬碟分成兩個區域。一個是資料區,存放檔案資料;另一個是inode區(inode table),存放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
硬連結
一 般情況下,檔案名稱和inode號碼是」一一對應」關係,每個inode號碼對應一個檔案名稱。但是,Unix/Linux系統允許,多個檔案名稱指向同一個 inode號碼。這意味著,可以用不同的文件名存取相同的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問 問。這種情況就被稱為」硬連結」(hard link)。
ln指令可以建立硬連結:
ln 源文件 目标文件
运 行上面这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做”链接数”,记录指向该inode的文 件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的”链接数”减1。当这个值减到0,表明没有文件名指向这个inode,系 统就会回收这个inode号码,以及其所对应block区域。
这里顺便说一下目录文件的”链接数”。创建目录时, 默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当 前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录),这里的 2是父目录对其的“硬链接”和当前目录下的”.硬链接“。

软链接
除了硬链接以外,还有 一种特殊情况。文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打 开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的”软链接”(soft link)或者”符号链接(symbolic link)。
这 意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:”No such file or directory”。这是软链接与硬链接最大的不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode”链接数”不会因此 发生变化。
ln -s命令可以创建软链接。
ln -s 源文文件或目录 目标文件或目录
inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象。
\1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
\2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
\3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。
第3点使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过inode号码,识别运行中的文件,不通过文件名。更新的时 候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的 inode则被回收。
实际问题
在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了66%,还有12G的剩余空间,按理说不会出现这种问题。 后来用df -i查看了一下/data分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。
查找原因:
/data/cache目录中存在数量非常多的小字节缓存文件,占用的Block不多,但是占用了大量的inode。
解决方案:
1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。
2、用软连接将空闲分区/opt中的newcache目录连接到/data/cache,使用/opt分区的inode来缓解/data分区inode不足的问题:
ln -s /opt/newcache /data/cache
以上是Linux下的inode記錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

VS Code 終端命令無法使用的原因及解決辦法:未安裝必要的工具(Windows:WSL;macOS:Xcode 命令行工具)路徑配置錯誤(添加可執行文件到 PATH 環境變量中)權限問題(以管理員身份運行 VS Code)防火牆或代理限制(檢查設置,解除限制)終端設置不正確(啟用使用外部終端)VS Code 安裝損壞(重新安裝或更新)終端配置不兼容(嘗試不同的終端類型或命令)特定環境變量缺失(設置必要的環境變量)
