在Windows系统中,我们可以使用TreeSize工具查找一些大文件或文件夹,非常的方便高效,在Linux系统中,如何去搜索一些比较大的文件呢?下面我整理了一下在Linux系统中如何查找大文件或文件夹的方法。

1: 如何查找大文件?

[root@linus /]# pwd 
/
[root@linus /]# find . -type f -size +800M
./proc/kcore
find: ‘./proc/5334’: 没有那个文件或目录
find: ‘./proc/5335/task/5335/fdinfo/6’: 没有那个文件或目录
find: ‘./proc/5335/fdinfo/5’: 没有那个文件或目录

如上命令所示,我们仅仅能看到超过800M大小的文件的文件名称,但是对文件的信息(例如,文件大小、文件属性)一无所知,那么能否更详细显示一些文件属性或信息呢,当然可以,如下所示

[root@linus /]# find . -type f -size +800M -print0 | xargs -0 ls -l
find: ‘./proc/96718/task/96718/fdinfo/6’: 没有那个文件或目录
find: ‘./proc/96718/fdinfo/5’: 没有那个文件或目录
-r-------- 1 root root 140737486266368 2月  16 17:26 ./proc/kcore

当我们只需要查找超过800M大小文件,并显示查找出来文件的具体大小,可以使用下面命令

[root@linus /]# find . -type f -size +800M -print0 | xargs -0 du -h

如果你还需要对查找结果按照文件大小做一个排序,那么可以使用下面命令

[root@linus /]# find . -type f -size +800M -print0 | xargs -0 du -h | sort -nr

不过如上截图所示,有时候排列的顺序并不完全是按大小一致,这个是因为du命令的参数h所致,你可以统一使用使用MB来显示,这样就能解决这个问题。到这里,这个在Linux系统查找大文件的命令已经非常完美了,当然如果你还有很多的需求,那么可以在这个命令上做修改、调整.

[root@linus /]# find . -type f -size +800M -print0 | xargs -0 du -hm | sort -nr

2: 如何查找Linux下的大目录

譬如有时候磁盘空间告警了,而你平时又疏于管理、监控文件的增长,那么我需要快速的了解哪些目录变得比较大,那么此时我们可以借助du命令来帮我们解决这个问题。

[root@linus /]# du -h --max-depth=1
197M	./boot
4.0K	./dev
36K	./home
du: 无法访问"./proc/97773": 没有那个文件或目录
du: 无法访问"./proc/97774/task/97774/fd/4": 没有那个文件或目录
du: 无法访问"./proc/97774/task/97774/fdinfo/4": 没有那个文件或目录
du: 无法访问"./proc/97774/fd/3": 没有那个文件或目录
du: 无法访问"./proc/97774/fdinfo/3": 没有那个文件或目录
0	./proc
12M	./run
0	./sys
37M	./etc
200M	./root
6.8G	./var
4.0K	./tmp
6.4G	./usr
0	./media
0	./mnt
1.5G	./opt
0	./srv
1.6M	./sh
0	./sh1
16G	.

如果你想知道/opt目录下面有哪些大文件夹,那么可以将参数max-depth=2 ,如果你想对搜索出来的结果进行排序,那么可以借助于sort命令。如下所示

[root@linus /]# du -h --max-depth=2 | sort -n
du: 无法访问"./proc/98230/task/98230/fd/4": 没有那个文件或目录
du: 无法访问"./proc/98230/task/98230/fdinfo/4": 没有那个文件或目录
du: 无法访问"./proc/98230/fd/3": 没有那个文件或目录
du: 无法访问"./proc/98230/fdinfo/3": 没有那个文件或目录

0	./proc/913
0	./proc/914
0	./proc/915
0	./proc/917
0	./proc/918
0	./proc/919
0	./proc/920
0	./proc/921
0	./proc/922
0	./proc/94760
0	./proc/965
0	./proc/97115
0	./proc/98150
0	./proc/98186
0	./proc/98208
0	./proc/98209
0	./proc/98210
0	./proc/98229
0	./proc/98230
0	./proc/98231
0	./proc/997
0	./proc/998
0	./proc/999
0	./proc/acpi
0	./proc/asound
0	./proc/bus
0	./proc/driver
0	./proc/fs
0	./proc/irq
0	./proc/mpt
0	./proc/scsi
0	./proc/sys
0	./proc/sysvipc
0	./proc/tty
0	./root/.pki
0	./run/console
0	./run/criu
0	./run/cryptsetup
0	./run/dbus
0	./run/faillock
0	./run/gitlab
0	./run/httpd
0	./run/lock
0	./run/lvm
0	./run/mount
0	./run/netreport
0	./run/plymouth
0	./run/sepermit
0	./run/setrans
0	./run/sudo
0	./run/svnserve
0	./run/user
0	./run/vmware
0	./sh1
0	./srv
0	./sys
0	./sys/block
0	./sys/bus
0	./sys/class
0	./sys/dev
0	./sys/devices
0	./sys/firmware
0	./sys/fs
0	./sys/hypervisor
0	./sys/kernel
0	./sys/module
0	./sys/power
0	./tmp/.font-unix
0	./tmp/gitaly-ruby762264615
0	./tmp/.ICE-unix
0	./tmp/systemd-private-0bb7c867bd534616a8b14a1ea1fb9ba7-chronyd.service-ITZcIi
0	./tmp/systemd-private-0bb7c867bd534616a8b14a1ea1fb9ba7-mariadb.service-XGTvhM
0	./tmp/.Test-unix
0	./tmp/vmware-root_845-4021653450
0	./tmp/vmware-root_982-2965972296
0	./tmp/.X11-unix
0	./tmp/.XIM-unix
0	./usr/etc
0	./usr/games
0	./var/adm
0	./var/crash
0	./var/cvs
0	./var/empty
0	./var/games
0	./var/gopher
0	./var/kerberos
0	./var/local
0	./var/nis
0	./var/preserve
0	./var/tmp
0	./var/yp
1.1G	./usr/bin
1.1G	./usr/lib
1.1M	./etc/pki
1.2G	./opt/gitlab
1.5G	./opt
1.6M	./sh
3.2G	./usr/local
3.4M	./run/udev
4.0K	./boot/grub
4.0K	./dev
4.0K	./dev/shm
4.0K	./etc/alternatives
4.0K	./etc/containerd
4.0K	./etc/cron.hourly
4.0K	./etc/depmod.d
4.0K	./etc/etcd
4.0K	./etc/gdbinit.d
4.0K	./etc/kernel
4.0K	./etc/kubernetes
4.0K	./etc/plymouth
4.0K	./etc/python
4.0K	./etc/rsyslog.d
4.0K	./etc/rwtab.d
4.0K	./etc/sasl2
4.0K	./etc/wpa_supplicant
4.0K	./etc/X11
4.0K	./root/.docker
4.0K	./run/chrony
4.0K	./run/initramfs
4.0K	./run/mariadb
4.0K	./run/tmpfiles.d
4.0K	./run/tuned
4.0K	./tmp
6.1G	./var/lib
6.4G	./usr
6.8G	./var
6.9M	./root/.cache
7.9M	./etc/udev
8.0K	./etc/cron.d
8.0K	./etc/groff
8.0K	./etc/libnl
8.0K	./etc/polkit-1
8.0K	./var/db
8.0M	./boot/grub2
8.0M	./run/log
12K	./etc/audisp
12K	./etc/dhcp
12K	./etc/docker
12K	./etc/mercurial
12K	./etc/modprobe.d
12K	./etc/my.cnf.d
12K	./etc/ntp
12K	./etc/supervisor
12K	./run/NetworkManager
12K	./sh/logs
12M	./run
16G	.
16K	./etc/audit
16K	./etc/conntrackd
16K	./etc/containers
16K	./etc/cron.daily
16K	./etc/dconf
16K	./etc/default
16K	./etc/firewalld
16K	./etc/fonts
16K	./etc/NetworkManager
16K	./etc/prelink.conf.d
16K	./etc/rpm
16K	./etc/skel
16K	./etc/tuned
16K	./home/linus
16K	./sh/log
20K	./home/postgres
23M	./etc/selinux
24K	./etc/ld.so.conf.d
26M	./usr/include
28K	./etc/ppp
28K	./etc/yum
32K	./etc/logrotate.d
32K	./etc/xdg
32K	./var/spool
36K	./etc/iproute2
36K	./home
36M	./opt/cni
37M	./etc
40K	./etc/systemd
44K	./etc/php.d
44K	./etc/rc.d
47M	./usr/sbin
60K	./etc/security
60K	./etc/yum.repos.d
60M	./usr/src
68K	./etc/openldap
72K	./etc/grub.d
76K	./etc/profile.d
76M	./var/log
84K	./etc/gitlab
86M	./opt/pgsql
96K	./etc/bash_completion.d
100K	./etc/dbus-1
100K	./etc/httpd
108K	./etc/pam.d
134M	./root/.debug
136K	./etc/lvm
148K	./etc/postfix
153M	./usr/libexec
172K	./run/systemd
190M	./opt/cat
197M	./boot
200M	./root
236M	./var/opt
244K	./etc/vmware-tools
312K	./var/www
337M	./usr/lib64
384K	./etc/sysconfig
384M	./var/cache
532M	./usr/share
572K	./sh/TEST
604K	./etc/ssh
[root@linus /]# du -hm --max-depth=2 | sort -n
du: 无法访问"./proc/98489/task/98489/fd/4": 没有那个文件或目录
du: 无法访问"./proc/98489/task/98489/fdinfo/4": 没有那个文件或目录
du: 无法访问"./proc/98489/fd/3": 没有那个文件或目录
du: 无法访问"./proc/98489/fdinfo/3": 没有那个文件或目录

1	./etc/plymouth
1	./etc/polkit-1
1	./etc/postfix
1	./etc/ppp
1	./etc/prelink.conf.d
1	./etc/profile.d
1	./etc/python
1	./etc/rc.d
1	./etc/rpm
1	./etc/rsyslog.d
1	./etc/rwtab.d
1	./etc/sasl2
1	./etc/security
1	./etc/skel
1	./etc/ssh
1	./etc/supervisor
1	./etc/sysconfig
1	./etc/systemd
1	./etc/tuned
1	./etc/vmware-tools
1	./etc/wpa_supplicant
1	./etc/X11
1	./etc/xdg
1	./etc/yum
1	./etc/yum.repos.d
1	./home
1	./home/linus
1	./home/postgres
1	./root/.docker
1	./run/chrony
1	./run/initramfs
1	./run/mariadb
1	./run/NetworkManager
1	./run/systemd
1	./run/tmpfiles.d
1	./run/tuned
1	./sh/log
1	./sh/logs
1	./sh/TEST
1	./tmp
1	./var/db
1	./var/spool
1	./var/www
2	./etc/pki
2	./sh
4	./run/udev
7	./root/.cache
8	./boot/grub2
8	./etc/udev
8	./run/log
12	./run
23	./etc/selinux
26	./usr/include
36	./opt/cni
37	./etc
47	./usr/sbin
60	./usr/src
76	./var/log
86	./opt/pgsql
134	./root/.debug
153	./usr/libexec
190	./opt/cat
197	./boot
200	./root
236	./var/opt
337	./usr/lib64
384	./var/cache
532	./usr/share
1050	./usr/bin
1065	./usr/lib
1193	./opt/gitlab
1504	./opt
3261	./usr/local
6216	./var/lib
6526	./usr
6911	./var
15386	.

有时候搜索出来的结果太多了(譬如,我从根目录开始搜索),一直在刷屏,如果我只想查出最大的12个文件夹,怎么办呢?此时就要借助head命令来显示了

[root@linus /]#  du -hm --max-depth=2 | sort -nr | head -12
du: 无法访问"./proc/99664/task/99664/fd/4": 没有那个文件或目录
du: 无法访问"./proc/99664/task/99664/fdinfo/4": 没有那个文件或目录
du: 无法访问"./proc/99664/fd/3": 没有那个文件或目录
du: 无法访问"./proc/99664/fdinfo/3": 没有那个文件或目录
15386	.
6911	./var
6526	./usr
6216	./var/lib
3261	./usr/local
1504	./opt
1193	./opt/gitlab
1065	./usr/lib
1050	./usr/bin
532	./usr/share
384	./var/cache
337	./usr/lib64