檔案系統将檔案的權限與屬性儲存在inode中,一個檔案占用一個inode,實際的資料儲存在data block塊中。inode會記錄檔案所占有用的block的号碼。每個block隻能放置一個檔案的資料,而一個檔案可以占用多個block。每個檔案系統還會有一個超級塊(super block)用于記錄此檔案系統的整體資訊,包括inode/block的總量、使用量、剩餘量、以及檔案系統的格式與相關資訊。可以使用指令dumpe2fs來檢視super block的資訊
inode中并不儲存檔案的檔案名,檔案名放置在目錄的block中。根目錄的inode号為2。
1.連結檔案
在Linux下有兩種連結檔案:硬連結和符号連結(軟連結)。
硬連結:不同檔案指向同一個inode,所有硬連結到同一個inode的檔案,它們的内容是共享的,即修改其中一個檔案的内容,其它硬連結的檔案内容也會更改。硬連結有以下特性:
1)隻能對檔案建立,不能應用于目錄;
如果對目錄建立硬連結,那麼對于目錄下的所有檔案都要建立對應的硬連結,在檔案較多的情況下則會使得情況變得相當複雜,是以不充許對目錄進行硬連結。
2)不能跨檔案系統;
inode号碼是在檔案系統中的super block中維護的,不同的檔案系統不保證提供相同的inode号碼,是以不同檔案系統之間無法創硬連結。
3)建立硬連結會增加被硬連結的次數;
在檔案屬性中會看到連結次數被增加。
4)增加inode引用計數;
同一個inode被連結了新的檔案,引用計數會增加。符号連結:類似于window中的快捷方式。符号連結檔案會占用新的inode,是以被符号連結的檔案移動或删除的話,符号連結檔案也即失效。了解了硬連結的特性後,就不難了解符号連結的特性了:
1、可以應用于目錄;
2、可以跨檔案系統;
3、不會增加被連結檔案的連結次數;
4、其大小為指定的路徑所包含的字元個數;
5、不會增加inode引用計數。
建立連結檔案
格式:ln [-sf] 源檔案 目标檔案
-s:建立符号連結,如果不加任何參數則是建立硬連結;
-f:如果目标檔案存在,就将目标檔案删除後再建立;
建立硬連結
建立前我們先來看下inode的占用情況,df -i可以檢視檔案系統的inode使用情況;
建立硬連結後,兩個檔案的硬連結數都是2;
輸入内容到檔案hard_link中,可以看到兩個檔案同時增加了大小;
将link檔案改名後,hard_link檔案依然可以通路;
再來檢視一下inode占用情況,并沒有發生變化。
建立軟連結,建立軟連結後檔案link的連結數并沒有增加
通路symbol_link檔案可以看到link檔案的内容。
使用ls指令的-i參數可以看到檔案所占用的inode号碼;可以看到硬連結與原檔案的inode号碼相同,而符号連結則使用了新的inode号碼。下面的輸出中符号連結的大小為4,其實它表示符号連結所指向的檔案名的字元數,link為4個字元,是以它的大小為4。
看下inode的使用情況,在上面建立硬連結時inode使用數量為125630,建立符号連結後變成了125631,可見符号連結會占用inode。
将檔案link改名後,符号連結已經找不到原檔案而出錯了。
另外,一個inode可以被引用多次,其有計數器;在引用次數降為0之前,不會被标記為未占用inode.
檔案被删除,inode被标記為空閑,此inode指向的磁盤地塊被标記為空閑。
如果inode被引用多次,且此次删除未使得其引用計數降低為0的話,這意味着檔案未被删除,僅删除了一個通路路徑。
檔案複制:建立一個新檔案,是原檔案中資料在新檔案指向磁盤塊中寫一次的過程。
檔案移動:
在同一分區移動: 移動檔案僅是改變了檔案通路路徑。
跨分區移動:在新分區建立檔案,把資料複制過去,删除原分區資料。
2.du和df指令
du指令:用于顯示檔案和目錄的容量。
-a:列出所有的檔案與目錄容量;
-s:列出整個目錄的容量;
-h:以人類易讀的方式顯示;
-k:以KB顯示容量;
-m:以MB顯示容量。
下面舉例來說明:
顯示/etc目錄的容量;
以易讀方式顯示;
顯示/etc目錄中每一個檔案的大小;
df指令:列出檔案系統的使用情況。
-a:列出所有的檔案系統;
-m:以MB顯示容量;
-h:以人類易讀方式顯示容量;
-H:以M=1000K替代M=1024的進位方式;
-T:顯示檔案系統的分區格式;
-i:顯示inode數量。
下面舉例說明:
列出所有檔案系統;
以易讀方式顯示容量;
顯示檔案系統的格式;
以易讀方式顯示inode數量;