[Linux技术]du_命令可以像find_命令那样列出最大的文件吗

2024-01-09 13:22:07

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系!

?

工作中系统管理员会使用du命令或者ncdu等工具来查找/分析文件系统中存在的大文件。
通常系统管理员会使用du命令来查看文件或目录,或者直接用 du 命令对目录大小进行排列
如下所示:查找最大的5个目录

[root@localhost ~]#du -h /* 2>/dev/null | sort -rh | head -5
1.5G? /usr

878M? /usr/lib

677M? /usr/lib/firmware

276M? /usr/share

255M? /var

[root@localhost ~]


使用这种方法,可以快速定位到/usr目录是最占用空间的,然后再使用相同的方法(切换到
/usr目录)一层一层的往下检查。这种方法可以定位到哪个目录最占用空间,但是无法定位到哪个文件最占用空间


想象一下test目录下有2个子目录 a 和 b,其中 a 大小500M,b 大小200M
a 目录下有 500个1MB的文件,而 b 目录下只有一个200MB的文件。

此时使用du方法只能知道 a 目录占用空间大,但不意味着最大的文件就在 a 目录下,因为其实最大的文件在 b 目录中

[root@localhost ~]#du -h ~/* | sort -rh
701M? /root/test
501M? /root/test/a

200M/root/test/b

[root@localhost ~]#

重要的
du命令默认输出只会显示目录。如果要显示文件大小,需要加上-a选项?

?使用du -a选项列出目录下所有文件的大小,此时可以看到test/b/file才是最大的文件,占用 200M?

[root@localhost ~]#du -ah test/* | tail -10
1.0M? ?test/a/file

931.0? Mtest/a/file

941.0M? test/a/file

951.0M? test/a/file

961.0M? test/a/file

971.0M? test/a/file

981.0M? test/a/file

99501M test/a

200M? test/b/file

200M? test/b

[root@localhost ~]#

但是如果文件很多,这样输出的结果还是有点杂乱无章,主要原因是不太容易区分目录和文件。
find命令可以很好的解决这个问题,如果要找到系统上最大的文件,可以执行:

[root@localhost ~]#find / -type f | xargs du -sh 2>/dev/null | sort -rh | head -3
200M? /root/test/b/file

121M? /var/lib/rpm/Packages

83M? /boot/initramfs-0-rescue-0f1f1093c97f4c6895bec08ebbe382e0.img

[root@localhost ~]#

使用 du 命令列出最大的3个文件

如果非要使用 du 命令来完成这件事,也可以,思路如下:
1. 使用du -a列出所有文件的大小
2. 在所有目录后面手动添加 / 目录符用以区分目录
3. 使用grep -v命令过滤掉目录条目即可?

[root@localhost ~]
# du -aSh /* 2>/dev/null | sort -rh | \
>while IFS=$'\t' read -r size line; \

> do printf "%s\t%s" $size "$line"; \

> [[ -d $line ]] && printf "/"; echo; done | \

> grep -v /$ | head -3
200M? ? /root/test/b/file
121M? ? /var/lib/rpm/Packages
83M? ? ? /boot/initramfs-0-rescue-0f1f1093c97f4c6895bec08ebbe382e0.img

文章来源:https://blog.csdn.net/yy123cisco/article/details/135475346
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。