记一次磁盘容量报警的排查心得。
收到磁盘报警提示某个目录下已占用85%的存储空间,对于开发来说这个时候就会要去看下具体是些什么文件占用了磁盘空间,在排查的过程中用到的相关命令记录在此。
1、文件系统空间使用情况
df -h
查看所有的文件系统空间使用情况。
2、确定是目录下哪些文件占用的空间比较多
find /data -type f -size +800M -print0 | xargs -0 ls -lh
查看占用空间大于800M的文件列表。 xargs从stdin读入数据,而|
管道操作符是将前一个命令的输出作为后一个命令的输入。
echo "--help" | catecho "--help"| xargs cat
通过这两个命令就能看出xargs和管道操作命令的区别了。
这里需要说明下-print0和xargs -0这两个参数:
默认情况下-print会对每个文件进行换行输出,
xargs默认会将空白符、换行符转化为空白符,所以上面的"file 1.xml"就会被解析成为file、1.xml两个文件了。
而为了避免这种问题就提供了自定'\0'来替换find命令的默认换行符,xargs在解析的时候同样通过'\0'来进行反解析所以就能得到正常的输出
当然在进行大文件查找的时候可能会有非常多的文件,而需要结合sort head
等命令来进行排序.
这里用到了du(disk usage)其实最主要是利用他的-m参数来使文件大小更易读的方式进行排序(单位为1M)。
3、du
上面提到du
这个命令,其实主要是查看文件夹占用的容量大小,加上-a参数也能查看文件占用的容量。具体可以在使用的过程中查看帮助文档。 4、代码行数统计
我们经常会好奇写了多少行的代码,这时find xargs
命令就派上用场了find . -type f -name "*.xml" -print0 | xargs -0 wc -l | awk -F " " '{sum+=$0};END {print sum}'
"file 1.xml"文件中有5行数据
用上面命令统计结果。将*.xml
换成*.java
不就统计出来java代码的行数了嘛。