谷动谷力

 找回密码
 立即注册
查看: 1522|回复: 1
打印 上一主题 下一主题
收起左侧

Linux查找大文件、大目录 - 解决磁盘空间不足的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2023-11-4 15:26:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Linux查找大文件、大目录 - 解决磁盘空间不足的问题

df
Linux df(英文全拼:disk free) 命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计。

一般/dev/vda1为系统盘,像vdb、vdc为数据盘。

1、-h
我们发现df输出的格式没有单位,可读性太低了。使用-h参数可解决。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。


du
Linux du (英文全拼:disk usage)命令用于显示目录或文件的大小。
-h:以人类可读的方式显示

  -a:显示目录占用的磁盘空间大小,还要显示其下目录和文件占用磁盘空间的大小

  -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小

  -c:显示几个目录或文件占用的磁盘空间大小,还要统计它们的总和

  --apparent-size:显示目录或文件自身的大小

  -l :统计硬链接占用磁盘空间的大小

  -L:统计符号链接所指向的文件占用的磁盘空间大小

  1、du -h:这个就不多说了。
1、-h
du -h

从输出可以看出du是显示所有目录和子目录所占用的磁盘空间。
du -sh显示当前目录大小
  1. du -sh
  2. 28G .
复制代码
du -h .git 显示.git目录下面的所有目录和子目录的大小


2、-a
du -ah .git
-a显示所有目录(包括隐藏目录)


3、–max-depth=<目录层数>
上面的命令都是显示所有目录,如果我只想显示指定层数目录呢?
使用--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。

比如最多显示1层:
  1. du -h --max-depth=1
  2. 17M     ./iot
  3. 38M     ./omj
  4. 2.2M    ./TIOTSmartSpeaker
  5. 183M    ./fzd
  6. 116M    ./nodeServer
  7. 1.5G    ./apache-cassandra-3.0.28
  8. 4.0K    ./live
  9. 18M     ./project
  10. 2.0G    ./wss
  11. 512K    ./sql
  12. 23G     ./manager
  13. 12M     ./bi_n
  14. 80M     ./bi
  15. 212M    ./omj588
  16. 106M    ./kafka_2.12-3.4.0
  17. 28G     .
复制代码
显示多了不方便查看,太乱多,如果再多点,还很难查到,哪个目录或文件大,就要用到排序。

4、sort
你有没有发现上一条命令文件列表的目录大小并不是按照从大到小或从小到大的排序。
使用sort命令即可排序。
使用|来分隔不同的命令。

从上图可以看出,只是输入sort是不行的,文件大小并没有排序。
是的,必须加入sort参数才行。
下面说下本文会用到的sort参数:
-r(--reverse) 以相反的顺序来排序
-h( --human-numeric-sort):使用易读性数字(例如:2K、1G),默认从小到大排序
-s -s或–summarize 仅显示总计。只显示指定目录或当前目录的大小。

我们只显示一层目录大小并排序,就能很多找出最大的目录或文件。
  1. du -ah --max-depth=1  | sort -hr
  2. 28G     .
  3. 23G     ./manager
  4. 2.0G    ./wss
  5. 1.5G    ./apache-cassandra-3.0.28
  6. 212M    ./omj588
  7. 183M    ./fzd
  8. 171M    ./root@172.24.132.110
  9. 171M    ./jdk-8u231-linux-x64.rpm
  10. 132M    ./event-0.0.1-SNAPSHOT.jar
  11. 116M    ./nodeServer
  12. 106M    ./kafka_2.12-3.4.0
  13. 102M    ./kafka_2.12-3.4.0.tgz
  14. 80M     ./bi
  15. 58M     ./0414_2.log
  16. 38M     ./omj
  17. 29M     ./0414.log
  18. 18M     ./project
  19. 17M     ./iot
  20. 16M     ./tmp.tar.gz
  21. 12M     ./bi_n
  22. 11M     ./3.4.0.tar.gz
  23. 8.2M    ./06.log
  24. 2.2M    ./TIOTSmartSpeaker
  25. 512K    ./sql
  26. 16K     ./history.sql
  27. 4.0K    ./live
  28. 4.0K    ./extern_device.sql
复制代码

也可以用find来查找

find
find用于查找到的子目录和文件全部进行显示(包括隐藏目录和文件)。
-name
使用-name查找当前目录及子目录所有文件后缀为.sh的文件。

查找当前目录,.可以省略掉;
查找其他目录,将.替换为路径

-type c
-type c : 文件类型是 c 的文件。

-type f:查找普通文件
-type d:查找目录
例如将目前目录其其下子目录中所有一般文件列出:

find . -type f

-ctime
-ctime n : 在过去n天内被修改过的文件
将当前目录及其子目录下所有最近 30 天内更新过的文件列出:

有关find时间相关的参数-atime、-ctime、-mtime,我在Linux使用一条命令删除指定时间的文件
中有介绍。

-size
-size:查找指定大小的文件

查找大于100M的文件:

查找大于100M小于200M的文件:

快速查找大目录
查找系统根目录下的大目录
sudo du -h --max-depth=1 / | sort -hr

注意:系统根目录使用du命令,需要root权限。

如果小目录过多的话,会显示过多,导致需要滑动查看。
我们使用head命令,来显示列表前几个,默认显示前10个。
要查看前5个,请使用head -5:


可以看到根目录下`ktt`目录,占用空间很大。

接着查看ktt目录下面的大目录
这里我们将目录层次设置为8,以便减少查询次数。

du -h --max-depth=8 /ktt/ | sort -hr  | head -40
按照此方法,直至查询到可以删除的目录。

快速查找大文件
例如查找用户目录下面大于100M的文件、需包含文件属性、以及从大到小排序:

find ~ -type f -size +100M | xargs ls -lhS

那如果我只想显示文件大小和文件路径呢?

find ~ -type f -size +100M | xargs du -h | sort -hr

xargs:find命令的输出通过管道xargs执行。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

微信图片_20231107230419.png (57.46 KB, 下载次数: 121)

微信图片_20231107230419.png
+10
回复

使用道具 举报

沙发
 楼主| 发表于 2023-11-6 18:12:59 | 只看该作者
删除日志
  1. rm *.log
复制代码


再查看硬盘空间并没释放
  1. df -h
复制代码


当由于文件删除,发现空间没有被释放,即df和du命令不一致时:
使用
  1. lsof -n | grep deleted
复制代码
命令查看处于deleted状态的文件,即表示文件被删除,但仍有进程使用这个文件,导致内存空间没有被释放。
重启此服务(程序)就能释放空间了
+10
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-11-18 05:43 , Processed in 0.407276 second(s), 41 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表