天天看點

Linux檔案系統管理

檔案系統将檔案的權限與屬性儲存在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數量;

繼續閱讀