centos7下使用find命令查找占用inode占用较高的目录

- linux系统管理

收到告警服务器磁盘只读了,登上去看发现是 inode 被耗尽了,这里记录下查找方法。

脚本如下

[root@imzcy ~]# cat zcy_find_inode.sh
#!/bin/bash
# auther: imzcy
# site: https://www.imzcy.cn

zcy_path="$1"

for i in $(find $zcy_path -type d -maxdepth 1 2>/dev/null |grep -v '^'"$zcy_path"'$')
do

    echo $i
    find $i -type f |wc -l

done |awk '{if(NR%2!=0)ORS=" ";else ORS="\n"}1' |awk  '{printf "%-20s %s\n",$1,$2}' |sort -k 2 -nr
[root@imzcy ~]#  


使用方法

第一次查找时指定 $1 的值为从 / 开始查找,后续看输出中哪个一级目录的占用高,就调整为哪个子目录。

[root@imzcy ~]# chmod u+x zcy_find_inode.sh
[root@imzcy ~]# ./zcy_find_inode.sh /
/usr                 236073
/var                 95098
/proc                45938
/sys                 42408
/www                 36179
/root                13560
/data                5131
/etc                 1748
/opt                 1556
/run                 640
/boot                316
/home                34
/tmp                 9
/dev                 4
/.Recycle_bin        1
/patch               1
/srv                 0
/mnt                 0
/media               0
[root@imzcy ~]#
[root@imzcy ~]# ./zcy_find_inode.sh /usr
/usr/local           161046
/usr/lib             26464
/usr/share           23901
/usr/src             11945
/usr/lib64           7781
/usr/include         3419
/usr/bin             858
/usr/sbin            352
/usr/libexec         307
/usr/games           0
/usr/etc             0
[root@imzcy ~]#
[root@imzcy ~]# ./zcy_find_inode.sh /usr/local
/usr/local/lib       147646
/usr/local/mysql-5.6.28-linux-glibc2.5-x86_64 10049
/usr/local/jdk1.8.0_112 1623
/usr/local/openssl   477
/usr/local/curl      451
/usr/local/include   311
/usr/local/share     209
/usr/local/groovy-3.0.7 133
/usr/local/bin       73
/usr/local/libiconv  60
/usr/local/insightface 13
/usr/local/man       1
/usr/local/src       0
/usr/local/sbin      0
/usr/local/nginx     0
/usr/local/libexec   0
/usr/local/lib64     0
/usr/local/games     0
/usr/local/etc       0
/usr/local/bttomcat  0
/usr/local/btjdk     0
[root@imzcy ~]#


单行命令查找

zcy_path=/ && for i in $(find $zcy_path -type d -maxdepth 1 2>/dev/null |grep -v '^'"$zcy_path"'$') ; do echo $i && find $i -type f |wc -l ; done |awk '{if(NR%2!=0)ORS=" ";else ORS="\n"}1' |awk  '{printf "%-20s %s\n",$1,$2}' |sort -k 2 -nr