首页 > 技术文章 > shell脚本:统计分析 /home/ 目录用户磁盘使用情况

lemonu 2018-12-13 22:04 原文

 一、统计单台机器 /home/ 目录下磁盘空间使用 top3 的用户

common.sh 脚本用于统计 /home/* 目录下存储空间 top3 的用户。

du -sb /home/* |sort -nr |head -n 3  #单位为B

二、统计分析多台分布式机器上 /home/ 目录用户磁盘使用情况

#!/bin/sh
# set -x # 打印执行过程

SUBMIT_NODES="submit_nodes.txt"
RESULT="result.txt"
RESULT_TMP="result_tmp.txt"
RESULT_SORTED="result_sorted.txt"
>$RESULT>$RESULT_TMP
>$RESULT_SORTED

# 获取机器存储资源占用top3的用户
while read node
do
    echo $node
    ip=`echo $node | awk '{print $2}'`
    hostname=`echo $node | awk '{print $1}'`
    # du -sb /home/* |sort -nr |head -n 3 | awk '{print $2}' |awk -F '/' '{print $3}' 
    sshpass -p GHlsgj123fkjg ssh -p 22 root@$ip ~/common.sh < /dev/null > $RESULT_TMP
    # 文本后面追加主机名
    sed "s/$/ $hostname/g" $RESULT_TMP >> $RESULT
done < $SUBMIT_NODES

while read detail
do
    size=`echo $detail | awk '{print $1}'`
    user=`echo $detail | awk '{print $2}' | awk -F '/' '{print $3}'`
    host=`echo $detail | awk '{print $3}'`

    # size >20G 则提示存储空间过大
    # 10737418240 = 1024*1024*1024
    base=21474836480
    point=1073741824
    if [ $size -gt $base ]
    then
        ret=""
        # 判断用户名是否是纯数字
        if echo $user | grep -q '.*[a-zA-Z].*\+$'   #user中包含字母,则不是纯数字
        then
            echo "用户名中包含数字"
        else
            echo "用户名为纯数字"
        fi
        # 将size的单位B转换为GB
        size_gb=`awk 'BEGIN{printf "%.2f\n",'$size'/'$point'}'`
    fi
done < $RESULT_SORTED

三、脚本中各文本存储的内容

submit_nodes.txt 文本为分布式的多台机器的主机名和ip映射关系:

bj01-prd-hdcm12.vivo.lan 10.20.8.44
bj01-prd-hdcm11.vivo.lan 10.20.8.43
bj01-prd-hdcm10.vivo.lan 10.20.8.42
bj01-prd-hdcm09.vivo.lan 10.20.8.41
bj01-prd-hdcm08.vivo.lan 10.20.8.40

result_tmp.txt 文本统计中common.sh 脚本的结果:

88259711304    /home/lzjiang
15340678542    /home/bchan
7084957806    /home/lshen

result.txt 则在 result_tmp.txt 的基础上添加用户所在的主机,内容为:

6711597524     /home/yi bjthq-dm-submit003.vivo.lan
3199003459     /home/zqe bjthq-dm-submit003.vivo.lan
134720196     /home/lsen bjthq-dm-submit003.vivo.lan
34021727588    /home/xye bjthq-dm-submit002.vivo.lan
27209081303    /home/lmie bjthq-dm-submit002.vivo.lan
19496212317    /home/lpliu bjthq-dm-submit002.vivo.lan
88259711304    /home/lzjiang bjthq-dm-submit001.vivo.lan
15340678542    /home/bchn bjthq-dm-submit001.vivo.lan
7084957806     /home/lhen bjthq-dm-submit001.vivo.lan

result_sorted.txt 文本为根据空间大小降序排序后的结果:

183747980482    /home/hbxie bjthq-dm-submit024.vivo.lan
126803753630    /home/bhuag bjthq-dm-submit025.vivo.lan
88259711304    /home/lzjang bjthq-dm-submit001.vivo.lan
87781082370    /home/lmxie bjthq-dm-submit015.vivo.lan
83735626868    /home/mxzhao bj01-prd-hdcm01.vivo.lan

 

推荐阅读