Linux中inode用法教程
這篇文章主要為大家介紹了在Linux中關於inode的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
背景
最近在複習Linux指令,到df的時候發現了一個之前忽略的東西。也就是 -i 這個選項,列出檔案系統分割區的inode資訊。這個inode,是個什麼東西?
inode是用來做什麼的
#inode是用來儲存檔案元資訊的區域。中文譯名叫做「索引節點」。
關於inode的背景知識
#我們先複習下文件儲存的一些內容。我們知道,檔案儲存在硬碟上,硬碟的最小儲存單元呢,又被稱為磁區,磁區的大小是512位元組。
作業系統在硬碟上讀取資訊時,是依照一次讀取多個磁區的方式來的,而這多個磁區也叫塊。通常,塊的大小是4KB,大概有8個扇區的大小。需要注意的是,讀取的區塊是連續的空間。
這個時候我們能知道,檔案是儲存在「區塊」中的,就像我們寫C語言程式的時候,我們知道,當我們宣告一個陣列的時候,不只儲存放在數組裡面的值,還會儲存對應的數組信息,比如數組的首地址、文件類型和數組長度等等,同樣的,需要找一個地方存儲文件的元信息,類似於文件的創建相關的信息、文件的長度等等。而這個地方,我們稱做inode。
inode中儲存的內容
#inode包含著所儲存檔案的元訊息,包含這些內容:
檔案的位元組數。
檔案創建者的ID。
檔案的Group ID。
檔案的讀寫等權限。
檔案的相關時間戳記。具體的有三個:ctime-->inode上一次變動的時間;mtime-->文件內容上一次變動的時間;atime-->文件上一次開啟的時間。
連結數
檔案資料的區塊位置
inode號碼
第一次看到上面的儲存內容後,我想大家多少會有相同的疑問,既然inode是儲存檔案相關資訊的,為什麼不儲存文件名呢。理由就是,檔案名稱並不是Unix/Linux作業系統辨識不同檔案的標準。
作業系統是透過inode號碼來辨識不同檔案的。
在Unix/Linux系統中,使用者層名是透過檔案名稱來開啟檔案的,系統層面主要是透過了三個步驟來開啟檔案:
-
根據檔案名稱找到對應的inode號碼。
透過inode號碼取得inode資訊。
根據inode訊息,找到檔案資料所存的區塊,並獨處資料。
inode的特殊作用
#Unix/Linux系統中inode號碼和檔案名稱分離,這導致了系統中一些特別的現象:
刪除inode節點,即是刪除檔案。有些檔案可能無法正確刪除,這時我們直接刪掉對應的inode節點,就可以起到刪除檔案的作用。
移動文件或重新命名文件,不改變inode號碼,只是改變文件名。
通常來說,系統是無法透過inode號碼得到檔案名稱的,當開啟一個文件,系統往後就透過inode來辨識該文件,不再考慮檔案名稱。
因為inode號碼的存在,系統可以在軟體不關閉的情況下進行更新。系統透過inode號碼,識別運行中的文件,更新過程中,文件以相同的文件名,新的inode存在,而不會影響到目前運行中的文件。而原舊版的inode會在軟體下次開啟時被回收,檔案名稱會自動指向新的inode號碼。
inode空間佔用問題
#既然同樣是儲存在硬碟裡的數據,inode必然也是會佔用硬碟空間的,當格式化硬碟的時候,作業系統會自動將硬碟分成兩個區域:
資料區
- ##inode table
目錄檔案#
我們知道,在Unix/Linux中,任何資源都是以檔案的形式存在的。目錄也是。我們打開目錄,實際上就是打開目錄檔。目錄檔案的結構就是一個列表。
目錄項目 = 所包含檔案檔案名稱 + 對應inode號碼。
硬鏈接和軟鏈接
#關於具體什麼是硬鏈接什麼是軟鏈接,我就不在這篇博文裡贅述了,只從inode角度去考慮。
從inode號碼的角度考慮,Unix/Linux系統中,是允許多個檔案名稱指向同一個inode號碼的。這個時候,如果刪除掉其中一個文件名,不影響另一個文件名的訪問,同時,如果通過一個文件名打開文件並作出修改,其他文件名打開時可以共享到該修改。那麼就稱這種為「硬連結」。在Linux中,我們可以透過ln指令來建立硬連結。
上面總結到,在inode中,有一個儲存項目叫做“連結數”,記錄只想該inode的總檔名。如果透過硬連結方式建立一個文件名指向某文件,那麼該文件對應的inode資料域中連結數部分就會 + 1,反之 - 1 。當這個值為0時,系統就會預設沒有檔案名稱指向該inode,此時,就會回收該inode號碼,並且回收對應的區塊區域。
而對應的軟鏈接,假設有檔案A和檔案B,B是A的軟鏈接。這時候,A和B的inode號碼是不同的,因為它們是不同的文件,但是! B的內容是A的路徑,讀取B的時候,系統會自動存取A,所以無論開啟哪個文件,存取的都是文件A。這時候,檔案B就被稱為檔案A的「軟連結」或「符號連結」。
在Unix/Linux系統中,我們可以透過ln -s 指令來建立軟連結。
總結和小補充
透過上面的敘述,我們知道inode就像C語言中的指標域,指標域記錄著多種訊息,並把我們導向正確的文件位置,讀取所需的資訊。 (當然也不是完全像。)
Unix/Linux系統中建立目錄時,會自動產生兩個目錄項目:
- ##.目錄
- ..目錄
以上是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提供可視化交互,應用程序利用這些組件實現功能。

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

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

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

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

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

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。
