鳥哥的Linux私房菜 基礎學習篇讀書筆記(9):Linux磁盤與文件系統管理(2)

上一篇文章主要從理論上分析了Linux的Ext2文件系統,這一篇主要講解如何查看Linux的文件系統的容量以及講解Linux文件系統中的連接文件。

可以通過df和du命令來查看磁盤與目錄的容量,df命令用來列出文件系統的整體磁盤容量,df命令的用法是 df  [-ahikHTm]  目錄或文件名,如果df命令不加任何參數,則默認將系統內所有的文件系統的容量以及使用情況都列出來。關於df命令還需要說明的是 df命令是查看文件系統的整體使用情況,因此是從Super block(見前一篇文章)中讀取信息,因此df命令的執行速度非常快。

以下是df命令的使用舉例:


從圖中可以看到,雖然用df命令查看/etc目錄的使用情況,但是df命令會自動分析該目錄所在的分區,然後將該分區的使用情況列舉出來。這裏不要犯迷糊,只要不進行磁盤限額,那麼/etc目錄能夠使用的容量就是該目錄所在文件系統的容量。

那如果我就是要看當前/etc目錄已佔用的文件系統容量,那就得通過 du命令,du命令主要用來查看目錄所佔的容量。不同於df命令,du命令是直接到文件系統內去查看所有的文件系統數據,因此執行時間可能會久一點。關於du命令還是多講一點,可能鳥哥書上講的不是很清楚,du命令默認會顯示該目錄下各個子目錄的容量,而顯示的總目錄容量是已經將該目錄下各個子目錄的容量加和的。

舉個例子,如圖所示:



/home目錄下總共有三個子目錄: /home/hw , /home/test_one ,/home/fuchencong ,它們的容量(已經算上子目錄)分別是4k,52k,240k,而且可以查看到 /home 目錄自己本身(不算子目錄的容量)是4k,所以最終顯示的/home目錄的容量是 4k + 52k + 240k + 4k= 300k。

另外在使用du命令時,如果加上-S參數,則顯示的目錄容量就不會加上子目錄的容量,此時只是顯示該目錄本身佔用的容量(當然還包括該目錄下的直接文件),如下圖所示: /home目錄顯示的佔用容量爲4k,這就是/home目錄本身所佔用的容量,而不包括其子目錄所佔用的容量。

接下來講解Linux中的連接文件,如果已經理解了Linux的Ext2文件系統,那麼理解連接文件就非常簡單了。

在Linux操作系統中,連接文件分爲兩種,硬連接(實際連接)和 符號連接。可以使用ln命令創建連接文件,ln命令的使用方法爲 ln [-sf] 源文件 目標文件,如果不加任何參數製作連接文件,就是默認創建硬連接,如果加上-s參數,就是代表創建符號連接文件。那硬連接和符號連接有什麼區別呢?

上一篇文章已經講過,Linux讀取一個文件時,首先要從目錄block裏找出該文件名對應的inode號碼,那如果同時有多個文件名同時對應一個inode號碼,那麼無論通過哪個文件名實際上都訪問到同一個文件,其實這就是硬連接。 簡單的說,硬鏈接只是在某個目錄下新建一條文件名關聯到某個inode號碼的關聯記錄而已。當有多個文件名關聯到同一個inode號碼,就可以通過其中的任意一個文件名來訪問該文件的數據,而且無論通過哪個文件名來修改數據,最終都會修改到實際的文件數據。類似的,當刪除一個文件時,其實只是將對應的inode裏的引用計數-1,並不會真的刪除文件數據,只有當該文件inode裏的引用計數減爲0,該文件數據纔會真的被刪除。

但是硬連接也是有限制的,因爲每個文件系統都有自己的inode編號,所以目錄項裏文件名對應的inode號碼只能是同一文件系統裏的inode號碼,因此硬連接只能針對同一文件系統創建,不能跨文件系統建立。而且硬連接也不能連接到目錄。一方面對目錄創建硬連接會增加系統環境的複雜度,另一方面對目錄創建硬連接容易造成循環。因此不支持硬連接到目錄。

Linux中還有一類連接,稱爲符號連接。不同於硬連接,符號連接是創建了一個獨立的文件,只不過對這個文件的數據讀取會被轉向爲對它指向文件的數據讀取。因此當源文件被刪除時,符號連接就會“開不了”。而且對於一個符號連接,它的文件長度就是它所引用文件的文件名長度,因爲在連接文件中,它的內容就是目標文件的“文件名”。

以下是硬連接和符號連接的一個實例:


圖中可以清晰的觀察到hard_link 和 test.file關聯到同一個inode號碼,因此這兩個文件代表的是同一個文件,而且引用計數爲2。而symbol_link文件的inode不同於test.file,因爲symbol_link是一個獨立的文件,只不過它是一個指向test.file的連接文件,而且可以觀察到symbol_link的文件長度爲9字節,其實就是test.file這個文件的文件名長度。

最後講解一下關於目錄的連接數量。每當新建一個空目錄時,該新目錄的連接數量爲2。爲什麼呢?首先目錄本身佔據一個連接,然後該目錄裏還有一個特殊目錄“.”,它也是代表該目錄,因此該目錄的連接數量爲2。 如果在該新的目錄裏創建一個子目錄,該目錄的連接數又將+1。因爲新建的子目錄裏有一個特殊目錄“..”,代表上級目錄,它也指向該目錄,因此該目錄的連接數+1。


本章Linux命令總結:

df, du, ln。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章