df 和 du命令比較:
df命令用來查看磁盤的使用狀況。經常使用df -ah 或者 df -h;能夠查看一級文件夾大小、使用比例、檔案系統及其掛入點,但對文件卻無能爲力
du能夠查看文件及文件夾的大小,統計文件大小相加。du命令用來查詢檔案或目錄的磁盤使用空間,經常使用:du -sh 目錄 或者 du -h 目錄
df 統計數據塊使用狀況
若是有一個進程在打開一個大文件的時候,這個大文件直接被rm 或者mv掉,則du會更新統計數值,df不會更新統計數值,仍是認爲空間沒有釋放。直到這個打開大文件的進程被Kill掉。
如此一來在按期刪除 /var/spool/clientmqueue下面的文件時,若是沒有殺掉其進程,那麼空間一直沒有釋放。
使用下面的命令殺掉進程以後,系統恢復。
二者配合使用,很是有效。好比用df查看哪一個一級目錄過大,而後用du查看文件夾或文件的大小,如此即可迅速肯定癥結。
下面分別簡要介紹
df命令參數:
- -a:顯示所有的檔案系統和各分割區的磁盤使用情形
- -i:顯示i -nodes的使用量
- -k:大小用k來表示 (默認值)
- -t:顯示某一個檔案系統的全部分割區磁盤使用量
- -x:顯示不是某一個檔案系統的全部分割區磁盤使用量
- -T:顯示每一個分割區所屬的檔案系統名稱
- -h :以 MB、GB爲單位顯示檔案系統大小,使用易讀的格式,可是計算式,1K=1000,而不是1K=1024
經常使用命令:df -ah
使用實例:
# 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
咱們加了。
上面的指令輸出的第一個字段及最後一個字段分別是檔案系統及其掛入點。
咱們能夠看到 /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 是用來存放檔案及目錄的基本信息 (metadata),包含時間、檔名、使用者及羣組等。在分割扇區時,系統會先作出一堆 inode 以供之後使用,inode 的數量關係着系統中能夠創建的檔案及目錄總數。若是要存的檔案大部分都很小,則一樣大小的硬盤中會有較多的檔案,也就是說須要較多的 inode 來掛檔案及目錄。
du:查詢檔案或目錄的磁盤使用空間 (定位哪一個文件佔用的空間多,消耗磁盤空間)
- -a:顯示所有目錄和其次目錄下的每一個檔案所佔的磁盤空間
- -b:顯示目錄或文件大小時,以byte爲單位
- -c:最後再加上總計 (默認值) ,除了顯示每一個目錄或文件的大小外,同時也顯示全部目錄或文件的總和。
- -s:只顯示各檔案大小的總合 (summarize),僅顯示總計,只列出最後加總的值
- -x:只計算同屬同一個檔案系統的檔案
- -L:計算全部的檔案大小
- -h :以K,M,G爲單位顯示檔案系統大小,提升信息的可讀性。
- -k :以KB(1024bytes)爲單位輸出
- -m: 以MB爲單位輸出
- -X:-X<文件>或--exclude-from=<文件> 在<文件>指定目錄或文件。
- --exclude=<目錄或文件> 略過指定的目錄或文件。
- -H:-H與-h參數相同,可是K,M,G是以1000爲換算單位。
經常使用命令: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
在應用時,咱們可使用 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 等字樣,會形成排序不正確。
1> 要顯示一個目錄樹及其每一個子樹的磁盤使用狀況
#du /home
這在/home目錄及其每一個子目錄中顯示了磁盤塊數。只顯示目錄,不顯示文件
2> 要經過以1024字節爲單位顯示一個目錄樹及其每一個子樹的磁盤使用狀況
#du -k /home/
這在/home目錄及其每一個子目錄中顯示了 1024 字節磁盤塊數。
3> 以MB爲單位顯示一個目錄樹及其每一個子樹的磁盤使用狀況
#du -m /home/
這在/home/linux目錄及其每一個子目錄中顯示了 MB 磁盤塊數。
4>查看當前目錄下全部目錄以及子目錄的大小:
#du -h /home //經常使用
「.」表明當前目錄下。
也能夠換成一個明確的路徑 -h表示用K、M、G的人性化形式顯示
5>查看當前目錄下user目錄的大小,並不想看其餘目錄以及其子目錄:
#du -sh /home 經常使用到的方式
-s表示總結的意思,即只列出一個總結的值,
6>查看當前目錄下每一個目錄/文件的大小,不顯示子目錄中的文件的大小
若是當前目錄下文件和文件夾不少,使用不帶參數du的命令,能夠循環列出全部文件和文件夾所使用的空間。這對查看到底是那個地方過大是不利的,因此得指定 深刻目錄的層數,參數:--max-depth=,這是個極爲有用的參數!以下,注意使用「*」,能夠獲得文件的使用空間大小.
#du -h –-max-depth=1 . //--max-depth=n表示只深刻到第n層目錄,此處設置爲1,即表示不深刻到子目錄。輸出當前目錄下各個子目錄所使用的空間
#du -h –-max-depth=0 /home //表示統計home文件夾的大小
7>列出user目錄及其子目錄下全部目錄和文件的大小:
#du -ah /home -a表示包括目錄和文件
8>列出當前目錄中的目錄名不包括xyz字符串的目錄的大小:
du -h --exclude=’*xyz*’
[root@bsso yayu]# du -h --max-depth=1 work/testing
27M work/testing/logs
35M work/testing
[root@bsso yayu]# du -h --max-depth=1 work/testing/*
8.0K work/testing/func.php
27M work/testing/logs
8.1M work/testing/nohup.out
8.0K work/testing/testing_c.php
12K work/testing/testing_func_reg.php
8.0K work/testing/testing_get.php
8.0K work/testing/testing_g.php
8.0K work/testing/var.php
[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/
27M work/testing/logs/
[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/*
24K work/testing/logs/errdate.log_show.log
8.0K work/testing/logs/pertime_show.log
27M work/testing/logs/show.log
完