日期:2014-05-16  浏览次数:20716 次

Linux下查看文件和文件夹大小

有些时候总想了解下文件和目录大小和总空间大小,在linux下,熟练使用如下几个命令可以非常清楚的知道期望知道的内容哦!

?

1. df

?

df --help
用法:df [选项]... [文件]...
显示每个文件所在的文件系统的信息,默认是显示所有文件系统。
?

?

2. du

?

?

du --help
用法:du [选项]... [文件]...
 或:du [选项]... --files0-from=F
计算每个文件的磁盘用量,目录则取总用量。

?

?

3. 知道了这两个命令后,看完help,差不多就很清楚了,下面举几个例子:

?

$: df
文件系统           1K-块      已用      可用 已用% 挂载点
/dev/sda5            118105420  27662504  84443456  25% /
none                   2018980       676   2018304   1% /dev
none                   2025608      2108   2023500   1% /dev/shm
none                   2025608       100   2025508   1% /var/run
none                   2025608         0   2025608   0% /var/lock

?

?看出来我的文件系统布局是不合理的,竟然有四个是none……

?

$ df -h
文件系统            容量  已用  可用 已用%% 挂载点
/dev/sda5             113G   27G   81G  25% /
none                  2.0G  676K  2.0G   1% /dev
none                  2.0G  2.1M  2.0G   1% /dev/shm
none                  2.0G  100K  2.0G   1% /var/run
none                  2.0G     0  2.0G   0% /var/lock

?

?加了-h后,显示结果更加符合我们的习惯,来瞧瞧help里的-h代表什么:

?

-h, --human-readable	以可读性较好的格式显示尺寸(例如:1K 234M 2G)

?

? ? ?此处发现,此处的短选项-h并不是很多命令熟知的--help的同义词,而是一个新含义的同义词,这个选项对于查看非常有帮助,后面细看。

?

继续看du的例子,此处我查看我httpd下面的内容:

?

~/httpd$ du 
4580	./modules
2716	./lib
1284	./include
264	./icons/small
912	./icons
148	./htdocs
1108	./bin
12	./cgi-bin
12	./logs
188	./conf
16	./error/include
208	./error
268	./manual/platform
172	./manual/images
8	./manual/style/xsl/util

?使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!如下,注意使用“*”,可以得到文件的使用空间大小.

~/httpd$ du -h --max-depth=1
4.5M	./modules
2.7M	./lib
1.3M	./include
912K	./icons
148K	./htdocs
1.1M	./bin
12K	./cgi-bin
12K	./logs
188K	./conf
208K	./error
9.9M	./manual
84K	./man
280K	./build
22M	.


~/httpd$ du -h --max-depth=1 ./*
1.1M	./bin
280K	./build
12K	./cgi-bin
188K	./conf
16K	./error/include
208K	./error
148K	./htdocs
264K	./icons/small
912K	./icons
1.3M	./include
2.7M	./lib
12K	./logs
32K	./man/man1
48K	./man/man8
84K	./man
268K	./manual/platform
172K	./manual/images
456K	./manual/style
128K	./manual/rewrite
220K	./manual/developer
84K	./manual/faq
4.7M	./manual/mod
196K	./manual/ssl
392K	./manual/howto
464K	./manual/misc
360K	./manual/vhosts
428K	./manual/programs
9.9M	./manual
4.5M	./modules

?

注意,-h作为--human-readable在ls下也是有效的:如ls -lh等;

?

其他例子:

统计总数大小

??? 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:多少字

?

附:

http://www.diybl.com/course/6_system/linux/Linuxjs/2008716/133217.html中提到个例子:

# df -k

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/cciss/c0d0p2     10080520   9112968    455484  96% /
none                   1977584         0   1977584   0% /dev/shm
/dev/cciss/c0d0p5     28842748   6706924  20670700  25% /u01
/dev/cciss/c0d0p6     26850172    683148  24803108   3% /u02

但是使用du -kxs 检查,根目录使用率是80%

du 统计文件大小相加
df  统计数据块使用情况

如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。

我们碰到的问题是,我们在定期删除 /var/spool/clientmqueue下面的文件,但是没有杀掉其进程,所以空间一直没有释放。

使用下面的命令杀掉进程之后,系统恢复。
fuser -u /var/spool/clientmqueue

?

其他参考:

http://www.yayu