檔案儲存在硬碟上,硬碟的最小儲存單位叫做「扇區」(sector)。每個扇區儲存512位元組(相當於0.5kb)。
作業系統讀取硬碟的時候,不會乙個個扇區的讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個「塊」(block)。
這種由多個扇區組成的「塊」,是檔案訪問的最小單位。
「塊」的大小,最常見的是4kb,即連續八個sector組成乙個block。
總結來說:
扇區是裝置的最小定址單元,也叫 "硬扇區" 或 "裝置塊"。
塊是作業系統中檔案系統的最小定址單元,也叫 "檔案塊" 或 "i/o 塊"。
什麼是inode:
檔案資料都儲存在「塊」中,那麼很顯然,我們還必須找到乙個地方儲存檔案的「元資訊」。
比如檔案的建立者、檔案的建立日期、檔案的大小等等。這種儲存檔案元資訊的區域就叫做inode,中文譯名為"索引節點"。
每乙個檔案都有對應的inode,裡面包含了與該檔案有關的一些資訊。
inode也會消耗硬碟空間,所以硬碟格式化的時候,作業系統自動將硬碟分成兩個區域。
乙個是資料區,存放檔案資料;
另乙個是inode區(inode table),存放inode所包含的資訊。
inode節點的總數,在格式化時就給定,一般是每1kb或每2kb就設定乙個inode。//inode個數在格式化時就確定下來了,不會變;
每個inode節點的大小,一般是128位元組或256位元組。
假定在一塊1gb的硬碟中,每個inode節點的大小為128位元組,每1kb就設定乙個inode,
那麼inode table的大小就會達到128mb,佔整塊硬碟的12.8%。
每個inode都有乙個號碼,作業系統用inode號碼來識別不同的檔案。
//inode號碼->inode資訊->檔案資料
表面上,使用者通過檔名,開啟檔案。
實際上,系統內部這個過程分成三步:首先,系統找到這個檔名對應的inode號碼;
其次,通過inode號碼,獲取inode資訊;
最後,根據inode資訊,找到檔案資料所在的block,讀出資料。
結合檔案描述符來理解:
inode特性:
由於inode號碼與檔名分離,這種機制導致了一些unix/linux系統特有的現象。
有時,檔名包含特殊字元,無法正常刪除。這時,直接刪除inode節點,就能起到刪除檔案的作用。
移動檔案或重新命名檔案,只是改變檔名,不影響inode號碼。
開啟乙個檔案以後,系統就以inode號碼來識別這個檔案,不再考慮檔名。因此,通常來說,系統無法從inode號碼得知檔名。
inode使得軟體更新變得簡單,可以在不關閉軟體的情況下進行更新,不需要重啟。
因為系統通過inode號碼,識別執行中的檔案,不通過檔名。
更新的時候,新版檔案以同樣的檔名,生成乙個新的inode,不會影響到執行中的檔案。
等到下一次執行這個軟體的時候,檔名就自動指向新版檔案,舊版檔案的inode則被**。
linux的inode的理解:
檔名 -> inode號碼是"多對一"關係;
unix/linux系統允許,多個檔名指向同乙個inode號碼。
可以用不同的檔名訪問同樣的內容;對檔案內容進行修改,會影響到所有檔名;
但是,刪除乙個檔名,不影響另乙個檔名的訪問。這種情況就被稱為"硬鏈結"(hard link)。
檔案a和檔案b的inode號碼雖然不一樣,但是檔案a的內容是檔案b的路徑。
讀取檔案a時,系統會自動將訪問者導向檔案b。
因此,無論開啟哪乙個檔案,最終讀取的都是檔案b。
這時,檔案a就稱為檔案b的"軟鏈結"(soft link)或者"符號鏈結(symbolic link)。
這意味著,檔案a依賴於檔案b而存在,如果刪除了檔案b,開啟檔案a就會報錯:「no such file or directory」。
目錄檔案與inode:
目錄檔案的結構非常簡單,就是一系列目錄項的列表。
每個目錄項,由兩部分組成:所包含檔案的檔名,以及該檔名對應的inode號碼。
如果要檢視檔案的詳細資訊,就必須根據inode號碼,訪問inode節點讀取資訊。
目錄檔案的讀許可權(r)和寫許可權(w),都是針對目錄檔案本身。
由於目錄檔案內只有檔名和inode號碼,所以如果只有讀許可權,只能獲取檔名,無法獲取其他資訊,
因為其他資訊都儲存在inode節點中,而讀取inode節點內的資訊需要目錄檔案的執行許可權(x)。
stat命令,檢視某個檔案的inode資訊
stat example.txt
df -i //檢視每個硬碟分割槽的inode總數和已經使用的數量,可以使用df命令。
Linux 系統程式設計
1 i o操作 2 檔案和目錄管理 3 記憶體管理 1 建立匿名記憶體對映 2 對映 dev zero檔案 類unix 作業系統中,dev zero是乙個特殊的檔案,當你讀它的時候,它會提供無限的空字元 null,ascii nul,0x00 其中的乙個典型用法是用它提供的字元流來覆蓋資訊,另乙個常...
Linux系統程式設計
1.linux程序 守護程序 脫離終端的後台程序 2.linux程序 殭屍程序 3.linux 下程序通訊 其中setsockopt server sockfd,sol socket,so reuseaddr,on,sizeof on 因為每乙個連線都由本地位址和遠端位址的組合唯一確定,所以只要遠端...
Linux系統程式設計 Linux系統呼叫
linux 系統呼叫 庫函式 目錄 系統呼叫概述 系統呼叫的實現 系統呼叫和庫函式的區別 系統呼叫,顧名思義,說的是作業系統提供給使用者程式呼叫的一組 特殊 介面。使用者程式可以通過這組 特殊 介面來獲得作業系統核心提供的服務,比如使用者可以通過檔案系統相關的呼叫請求系統開啟檔案 關閉檔案或讀寫檔案...