閱讀734 返回首頁    go 阿裏雲 go 技術社區[雲棲]


linux查看文件夾大小、文件個數的方法

linux 下查看文件個數及大小

ls -l |grep "^-"|wc -l

find ./company -type f | wc -l
查看某文件夾下文件的個數,包括子文件夾裏的。
ls -lR|grep "^-"|wc -l
查看某文件夾下文件夾的個數,包括子文件夾裏的。
ls -lR|grep "^d"|wc -l
說明:
ls -l
長列表輸出該目錄下文件信息(注意這裏的文件,不同於一般的文件,可能是目錄、鏈接、設備文件等)
grep "^-"
這裏將長列表輸出信息過濾一部分,隻保留一般文件,如果隻保留目錄就是 ^d
wc -l
統計輸出信息的行數,因為已經過濾得隻剩一般文件了,所以統計結果就是一般文件信息的行數,又由於
一行信息對應一個文件,所以也就是文件的個數。
 
Linux查看文件夾大小
du -sh 查看當前文件夾大小
du -sh * | sort -n 統計當前文件夾(目錄)大小,並按文件大小排序
du -sk filename 查看指定文件大小



當磁盤大小超過標準時會有報警提示,這時如果掌握df和du命令是非常明智的選擇。

    df可以查看一級文件夾大小、使用比例、檔案係統及其掛入點,但對文件卻無能為力。
    du可以查看文件及文件夾的大小。

    兩者配合使用,非常有效。比如用df查看哪個一級目錄過大,然後用df查看文件夾或文件的大小,如此便可迅速確定症結。

    下麵分別簡要介紹

    df命令可以顯示目前所有文件係統的可用空間及使用情形,請看下列這個例子:

 

以下是代碼片段:

[yayug@yayu ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3.9G  300M  3.4G   8% /
/dev/sda7             100G  188M   95G   1% /data0
/dev/sdb1             133G   80G   47G  64% /data1
/dev/sda6             7.8G  218M  7.2G   3% /var
/dev/sda5             7.8G  166M  7.2G   3% /tmp
/dev/sda3             9.7G  2.5G  6.8G  27% /usr
tmpfs                 2.0G     0  2.0G   0% /dev/shm

 

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

    上麵的命令輸出的第一個字段(Filesystem)及最後一個字段(Mounted on)分別是檔案係統及其掛入點。我們可以看到 /dev/sda1 這個分割區被掛在根目錄下。

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

    du:查詢文件或文件夾的磁盤使用空間

    如果當前目錄下文件和文件夾很多,使用不帶參數du的命令,可以循環列出所有文件和文件夾所使用的空間。這對查看究竟是那個地方過大是不利的,所以得指定深入目錄的層數,參數:--max-depth=,這是個極為有用的參數!如下,注意使用“*”,可以得到文件的使用空間大小.

    提醒:一向命令比linux複雜的FreeBSD,它的du命令指定深入目錄的層數卻是比linux簡化,為 -d。

 

以下是代碼片段:

[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

 

    值得注意的是,看見一個針對du和df命令異同的文章:《du df 差異導致文件係統誤報解決》。

    du 統計文件大小相加 
    df  統計數據塊使用情況

    如果有一個進程在打開一個大文件的時候,這個大文件直接被rm 或者mv掉,則du會更新統計數值,df不會更新統計數值,還是認為空間沒有釋放。直到這個打開大文件的進程被Kill掉。

    如此一來在定期刪除 /var/spool/clientmqueue下麵的文件時,如果沒有殺掉其進程,那麼空間一直沒有釋放。

    使用下麵的命令殺掉進程之後,係統恢複。
    fuser -u /var/spool/clientmqueue


 

查看linux文件目錄的大小和文件夾包含的文件數

    統計總數大小

    du -sh xmldb/

    du -sm * | sort -n //統計當前目錄大小 並安大小 排序

    du -sk * | sort -n

    du -sk * | grep guojf //看一個人的大小

    du -m | cut -d "/" -f 2 //看第二個/ 字符前的文字

    查看此文件夾有多少文件 /*/*/* 有多少文件

    du xmldb/

    du xmldb/*/*/* |wc -l

    40752

    解釋:

    wc [-lmw]

    參數說明:

    -l :多少行

    -m:多少字符

    -w:多少字

 


Linux:ls以K、M、G為單位查看文件大小

#man ls

……

-h, --human-readable

                print sizes in human readable format (e.g., 1K 234M 2G)

……

# ls

cuss.war    nohup.out

# ls -l

total 30372

-rw-r--r--    1 root root 31051909 May 24 10:07 cuss.war

-rw-------    1 root root          0 Mar 20 13:52 nohup.out

# ls -lh

total 30M

-rw-r--r--    1 root root 30M May 24 10:07 cuss.war

-rw-------    1 root root     0 Mar 20 13:52 nohup.out

# ll -h

total 30M

-rw-r--r--    1 root root 30M May 24 10:07 cuss.war

-rw-------    1 root root     0 Mar 20 13:52 nohup.out


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:隻顯示各檔案大小的總合 (summarize) 
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 等字樣,會造成排序不正確。

最後更新:2017-04-04 07:36:11

  上一篇:go 線程間共享數據
  下一篇:go xmpp即時通訊二