有些时候总想了解下文件和目录大小和总空间大小,在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.org/look.php?id=162
http://linux.chinaitlab.com/command/734706.html
http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html