天天看點

df 和du 的差別 linux磁盤指令詳解

問題描述

兩個常用的确定檔案系統的空間配置設定的指令:df 和du 的差別

解答

df 指令:

通過檔案系統中未配置設定的空間來确定檔案系統中已配置設定空間的大小。例如:如果一個檔案系統中有 8192個512-byte 塊, 并且4096 個塊沒有被配置設定出去,那麼已配置設定的空間就是4096 個512-byte 的塊。

已配置設定空間 = 空間總數 - 未配置設定空間

因為基于檔案系統總體來計算,是以df 指令是報告檔案系統空間使用情況最可靠的指令。

du 指令

是面向檔案的指令,它計算配置設定給指定檔案或者目錄的空間。 du 指令必須跟着目的參數,而且不能隔離檔案系統。

例如:運作 # du / 指令将計算所有在 / 檔案系統下所有檔案的空間配置設定資訊。其中包括 / 檔案系統所有的檔案和安裝在 / 下面的,例如 /tmp, /var 和 /usr 下面的其他檔案系統的檔案。可以用 du 指令帶 -x 參數來限制僅在檔案系統内進行操作。但是有時候會導緻輸出結果不完全。

du 指令隻計算被檔案占用的空間。不計算檔案系統metadata 占用的空間,如inodes, inode maps, 或者disk maps。

du 指令隻計算那些可以通路的檔案所占用的存儲空間, 有下面兩種情況 du 指令不會計算已經配置設定給檔案的空間。

Case1:

檔案被隐藏了。

例如:如果一個檔案存放在 /bobby 目錄下, 接着有檔案系統安裝在 /bobby 目錄下, 那麼, du 指令将不會計算 /bobby 目錄下的檔案所占用的存儲空間。

case 2:

檔案被其他的應用的打開了,接着檔案被删除了。 在這種情況下, 檔案所占用的存儲空間将維持着被配置設定的狀态直到所有對這個檔案的通路都被關閉。

由于目錄中沒有這個檔案的相關紀錄,du 指令将不會計算這個檔案的被配置設定空間,然而df 指令将計算這部分已配置設定的空間

df指令詳細用法

a:顯示全部的檔案系統和各分割區的磁盤使用情形

i:顯示i -nodes的使用量

k:大小用k來表示 (預設值)

t:顯示某一個檔案系統的所有分割區磁盤使用量

x:顯示不是某一個檔案系統的所有分割區磁盤使用量

T:顯示每個分割區所屬的檔案系統名稱

常用指令:df -hi

操作詳解

引用 指令 df 可以顯示目前所有檔案系統的最大可用空間及使用情形,請看下列這個例子:

# df -h

Filesystem       Size      Used     Avail Capacity    Mounted on

/dev/ad0s1a      1.9G      389M      1.4G      21%      /

devfs            1.0K      1.0K        0B     100%      /dev

/dev/ad0s1d      989M       54K      910M       0%      /tmp

/dev/ad0s1f      4.8G      3.8G      657M      86%      /usr

/dev/ad0s1e      1.9G      149M      1.6G       8%      /var

/dev/ad0s1g       26G      890K       24G       0%      /volume2

/dev/da0s1d      325G      261G       38G      87%      /volume1

我們加了參數 -h 表示使用「Human-readable」的輸出,也就是在檔案系統大小使用 GB、MB 等易讀的格式。

上面的指令輸出的第一個字段及最後一個字段分别是檔案系統及其挂入點。我們可以看到 /dev/ad0s1a 這個分割區被挂在根目錄下。我們在上一小節提到過 ad 所代表的是 IDE 的硬碟,而 s1 表示第一個主要扇區。我另外有一個 SCSI 硬碟,它的代号是 da,它的容量很大,主要用來存放資料。devfs 是一個特别的檔案系統,該檔案系統并非真的磁盤,而是 FreeBSD 用來管理系統硬體裝置的虛拟檔案系統。

接下來的四個字段 Size、Used、Avail、及 Capacity 分别是該分割區的容量、已使用的大小、剩下的大小、及使用的百分比。當硬碟容量已滿時,您可能會看到已使用的百分比超過 100%,因為 FreeBSD 會留一些空間給 root,讓 root 在檔案系統滿時,還是可以寫東西到該檔案系統中,以進行管理。

另外,我們還可以使用參數 -i 來檢視目前檔案系統 inode 的使用情形。有的時候雖然檔案系統還有空間,但若沒有足夠的 inode 來存放檔案的資訊,一樣會不能增加新的檔案。

# df -ih

Filesystem       Size      Used     Avail Capacity iused      ifree %iused    Mounted on

/dev/ad0s1a      1.9G      389M      1.4G      21%     20495     262127      7%     /

devfs            1.0K      1.0K        0B     100%         0          0    100%     /dev

/dev/ad0s1d      989M       62K      910M       0%        24     141286      0%     /tmp

/dev/ad0s1f      4.8G      3.8G      657M      86%    311439     348015     47%     /usr

/dev/ad0s1e      1.9G      149M      1.6G       8%      1758     280864      1%     /var

/dev/ad0s1g       26G      890K       24G       0%        12    3532786      0%     /volume2

/dev/da0s1d      325G      261G       38G      87%    707277 43311409      2%     /volume1

我們可以看到根目錄的已經用掉的 inode 數量為 20495,還有 262127 的可用 inode。

小提示

還記得什麼是 inode 嗎?所謂的 inode 是用來存放檔案及目錄的基本資訊 (metadata),包含時間、檔名、使用者及群組等。在分割扇區時,系統會先做出一堆 inode 以供以後使用,inode 的數量關系着系統中可以建立的檔案及目錄總數。如果要存的檔案大部分都很小,則同樣大小的硬碟中會有較多的檔案,也就是說需要較多的 inode 來挂檔案及目錄。

du:查詢檔案或目錄的磁盤使用空間

a:顯示全部目錄和其次目錄下的每個檔案所占的磁盤空間

b:大小用bytes來表示 (預設值為k bytes)

c:最後再加上總計 (預設值)

s:隻顯示各檔案大小的總合

x:隻計算同屬同一個檔案系統的檔案

L:計算所有的檔案大小

常用指令:du -a

操作詳解

引用 指令 du 能以指定的目錄下的子目錄為機關,顯示每個目錄内所有檔案所占用的磁盤空間大小。例如:

# du -h /etc

104K /etc/defaults

6.0K /etc/X11

8.0K /etc/bluetooth

4.0K /etc/gnats

52K /etc/isdn

388K /etc/mail

68K /etc/mtree

2.0K /etc/ntp

38K /etc/pam.d

44K /etc/periodic/daily

6.0K /etc/periodic/monthly

42K /etc/periodic/security

16K /etc/periodic/weekly

110K /etc/periodic

6.0K /etc/ppp

318K /etc/rc.d

2.0K /etc/skel

130K /etc/ssh

10K /etc/ssl

1.7M /etc

我們目樣使用 -h 參數來顯示 human-readable 的格式。在應用時,我們可以使用 du 這個指令來檢視哪個目錄占用最多的空間。不過,du 的輸出結果通常很長,我們可以加上 -s 參數來省略指定目錄下的子目錄,而隻顯示該目錄的總合即可:

# du -sh /etc

1.7M       /etc

在檢視目錄的使用情形時,我們可以将輸出結果導到 sort 指令進行排序,以了解哪個檔案用了最多的空間:

# du /etc | sort -nr | more

1746 /etc

388 /etc/mail

318 /etc/rc.d

130 /etc/ssh

110 /etc/periodic

104 /etc/defaults

68 /etc/mtree

52 /etc/isdn

44 /etc/periodic/daily

42 /etc/periodic/security

38 /etc/pam.d

16 /etc/periodic/weekly

10 /etc/ssl

8 /etc/bluetooth

6 /etc/ppp

6 /etc/periodic/monthly

6 /etc/X11

4 /etc/gnats

2 /etc/skel

2 /etc/ntp

sort 的參數 -nr 表示要以數字排序法進行反向排序,因為我們要對目錄大小做排序,是以不可以使用 human-readable 的大小輸出,不然目錄大小中會有 K、M 等字樣,會造成排序不正确。   關鍵詞:linux,df

使用df指令檢視linux磁盤剩餘空間

[root]# df -hl 

檔案系統              容量  已用  可用 已用% 挂載點 

/dev/hda5             487M  120M  342M  27% /

/dev/hda1             981M   21M  911M   3% /boot

none                  125M     0  125M   0% /dev/shm

/dev/hda2              29G  4.9G   23G  18% /home

/dev/hda3              20G  4.8G   14G  27% /usr

/dev/hda7              24G  510M   22G   3% /var

/dev/hdb2              75G    75G    0 100% /

df是以磁盤分區為機關來檢視檔案系統。 

/dev/hdb2 75G 75G 0 100% /, 以此為例。 

表示HD硬碟接口的第二個硬碟(b),第二個分區(2),容量是75G,用了75G,可用是0,是以使用率是100%, 被挂載到根分區目錄上(/) 

    另外簡單的一個辦法就是滑鼠右鍵檢視磁盤、檔案夾屬性,就能了解到已用多少,剩餘多少空間。

繼續閱讀