查找大文件使用du和df命令定位大文件:

  1. # 先确定是哪个文件夹占用较多
  2. # 如果文件较多命令执行可能很慢,在知道大概位置的情况下不建议直接对根目录操作
  3. # du的--max-depth=1表示只展示第一个层级的目录和文件
  4. # sort的-h选项和du的-h选项一个意思,-r表示倒叙,默认升序
  5. du -h / --max-depth=1 | sort -hr | head -n 10
  6. #output>>>>>>>>>>>>>>>>>>>>>>>>>>
  7. 50G /
  8. 28G /var
  9. 6.0G /dfs
  10. 4.0G /opt
  11. 3.0G /root
  12. 2.3G /usr
  13. 148M /lib
  14. 39M /log
  15. 30M /etc
  16. 29M /boot
  17. #output>>>>>>>>>>>>>>>>>>>>>>>>>>
  18. # 定位到/var目录占用超过50%(磁盘总量50G)
  19. # 继续往下层目录找
  20. du -h /var --max-depth=1 | sort -hr | head -n 10
  21. #output>>>>>>>>>>>>>>>>>>>>>>>>>>
  22. 28G /var
  23. 24G /var/lib
  24. 3.8G /var/log
  25. 371M /var/cache
  26. ...
  27. #output>>>>>>>>>>>>>>>>>>>>>>>>>>
  28. # 继续/var/lib
  29. du -h /var/lib --max-depth=1 | sort -hr | head -n 10
  30. #output>>>>>>>>>>>>>>>>>>>>>>>>>>
  31. 24G /var/lib
  32. 10G /var/lib/mongo
  33. 8.4G /var/lib/cloudera-service-monitor
  34. 4.5G /var/lib/cloudera-host-monitor
  35. 319M /var/lib/mysql
  36. ...
  37. #output>>>>>>>>>>>>>>>>>>>>>>>>>>
  38. # 最后发现是mongo 数据量太多以及cdh集群健康数据太多
  39. # 可以设置mongo journal使用smallfile,否则文件到达1G并且文件所记载的写操作都被使用过了才会删除
  40. # cdh日志默认在文件达到10G的时候才会回滚,这里也可以做文章

删除大文件

假设找到了对应的文件夹或文件并且可以删除,可以直接使用rm删除,也可以按照时间删除,比如一些日志文件,需要删除靠前的日志,较新的日志暂时还不能删除。

按文件大小删除

比如需要删除超过500M的文件,而不是删除整个文件夹:

  1. # 建一个临时文件夹做测试
  2. cd /tmp
  3. mkdir test
  4. cd test
  5. # 建几个大文件试试
  6. # seek表示跳过文件中指定大小的部分,实际上并没有写入任何数据
  7. # 生成1000G的文件
  8. dd if=/dev/zero of=test-big1 bs=1G count=0 seek=1000
  9. # 生成1000M的文件
  10. dd if=/dev/zero of=test-big2 bs=1M count=0 seek=1000
  11. #查找 -size参数值中+表示> -表示< 不写表示等于
  12. find /tmp/test -type f -size +200M
  13. #output>>>>>>>>>>>>>>>
  14. /tmp/test/test-big2
  15. /tmp/test/test-big1
  16. #output>>>>>>>>>>>>>>>
  17. find /tmp/test -type f -size +2000M
  18. #output>>>>>>>>>>>>>>>
  19. /tmp/test/test-big1
  20. #output>>>>>>>>>>>>>>>
  21. find /tmp/test -type f -size -2000M
  22. #output>>>>>>>>>>>>>>>
  23. /tmp/test/test-big2
  24. #output>>>>>>>>>>>>>>>
  25. # 删除
  26. # {} \;不能丢
  27. find /tmp/test -type f -size +2000M -exec rm -rf {} \;
  28. ls
  29. #output>>>>>>>>>>>>>>>
  30. test-big2
  31. #output>>>>>>>>>>>>>>>

按时间和名称删除

  1. # 删除修改时间距今超过10天的以.gz结尾的文件
  2. # -mtime参数值中 0表示修改时间在24小时内 +x表示修改时间距今超过x天 -x表示距今少于x天 不写正负号表示等于
  3. find tmp/test/* -mtime +10 -name "*.gz" -exec rm -rf {} \;

-exec 表示执行的意思 execute 和 rwx中的 x是一个意思,都是执行
{} \ 是固定写法,意思是把前面找到的文件交给 rm -rf 来删除