天天看點

linux du df 指令詳解

  du和df的差別:

du 統計檔案大小相加,df  統計資料塊使用情況,如果有一個程序在打開一個大檔案的時候,這個大檔案直接被rm 或者mv掉,則du會更新統計數值,df不會更新統計數值,還是認為空間沒有釋放。直到這個打開大檔案的程序被kill掉。我們碰到的問 題是,我們在定期删除 /var/spool/clientmqueue下面的檔案,但是沒有殺掉其程序,是以空間一直沒有釋放。使用下 面的指令殺掉程序之後,系統恢複。

fuser -u /var/spool/clientmqueue

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

在檢視目錄的使用情形時,我們可以将輸出結果導到 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 等字樣,會造成排序不正确

ls –lh 可以看出目前目錄檔案的大小(不含目錄), 比如下面的的322m。

[root@ls-svr-18 ~]# ls -lh

total 322m

-rw-r–r–  1 root root 312m aug  1 23:35 10.50.86.18.tar.z

-rw-r–r–  1 root root 1.3k aug  1 17:41 anaconda-ks.cfg

drwxr-xr-x  2 root root 4.0k aug  1 21:44 desktop

-rw-r–r–  1 root root  62k aug  1 17:41 install.log

-rw-r–r–  1 root root 5.2k aug  1 17:41 install.log.syslog

-rw-r–r–  1 root root 8.9m sep 28 15:29 install_msn_messenger_zhcn.exe

-rwxr-xr-x  1 root root 9.2k aug 16 11:20 m64

-rw-r–r–  1 root root 1.1k aug 16 11:20 m64.c

-rw-r–r–  1 root root 1.1k aug  8 04:33 m64.o

drwxr-xr-x  2 root root 4.0k oct  9 15:45 mca

drwxr-xr-x  2 root root 4.0k oct  9 15:41 mgm

drwxr-xr-x  2 root root 4.0k oct  9 15:45 mysql

-rw——-  1 root root   95 sep  5 10:34 nohup.out

使用du -ssh 也是同樣的結果

[root@ls-svr-18 ~]# du -ssh

322m

使用du -sh 則包含了子目錄的内容

[root@ls-svr-18 ~]# du -sh

451m    .

檢視每個檔案和目錄的大小

[root@ls-svr-18 ~]# du -sh *

313m    10.50.86.18.tar.z

8.0k    anaconda-ks.cfg

8.0k    desktop

72k     install.log

12k     install.log.syslog

8.9m    install_msn_messenger_zhcn.exe

16k     m64

8.0k    m64.c

8.0k    m64.o

476k    mca

65m     mgm

65m     mysql

8.0k    nohup.out

繼續閱讀