Infra/Server

Linux - Bash 스크립트로 사용량을 조회하자

쵸비냥냥 2023. 12. 1. 15:13
반응형

 

평상시 우리가 서버를 점검하거나 사용량을 확인하려할때

 

CPU는 top 

메모리는 free -m

Disk 사용량은 df -h 

등으로 많이 활용한다.

 

하지만... 횟수가 많이 반복될수록 너무 너무 귀찮다 일일히 메모리 계산하는것도

df -h 치는것 조차도 귀찮아진다

 

bashrc 를 사용하여 스크립트파일을 명령어로 등록 후 편안하게 활용하자.

 

vi ~/.mem.sh


#!/bin/bash
#이 스크립트는 CPU,MEMORY,DISK 사용량을 확인하기 위해 만들어진 스크립트 입니다.

# CPU 사용량
cpuUsage=$(top -bn1 | awk '/Cpu/ { print $2}')

# 메모리 사용량
memUsage=$(free -m | awk '/Mem/{print $3*100/$2}')

# Cash 메모리 사용량
freemem=$(free -m | awk '/Mem/{print $8*100/$7}')

# Disk 사용량
DISK_TOTAL=$(df -P | grep -v ^Filesystem | awk '{sum += $2} END { print sum; }')
DISK_USED=$(df -P | grep -v ^Filesystem | awk '{sum += $3} END { print sum; }')
DISK_PERCENT=$((100*$DISK_USED/$DISK_TOTAL))

echo "CPU 사용률: $cpuUsage%"
echo "Memory 사용률: $memUsage%"
echo "Cash 사용률: $freemem%"
echo "Total Disk 사용률: $DISK_PERCENT%"

# 특정 디렉토리만 출력
root="/"
home="/home"

root_usage=$(df -h "$root" | awk 'NR==2 {print substr($5, 1, length($5)-1)}')
home_usage=$(df -h "$home" | awk 'NR==2 {print substr($5, 1, length($5)-1)}')

echo "${root} 디렉토리의 사용률: ${root_usage}%"
echo "${home} 디렉토리의 사용률: ${home_usage}%"

#10% 이상 사용 디렉토리 출력
mount_used=( $(df -h) )
cnt=0
found=false

for mount_used_item in "${mount_used[@]}"
do
    if [[ "$mount_used_item" =~ ([1-9][0-9])% ]]; then
        cnt3=$((cnt))
        cnt2=$((cnt + 1))
        usage=${BASH_REMATCH[1]}

        if ((usage >= 10)); then
            if ! $found; then
                echo "10% 이상 사용 디렉토리"
                found=true
            fi
            echo "디렉토리: ${mount_used[cnt2]}, 사용률: ${mount_used[cnt3]}"
        fi
    fi

    cnt=$((cnt + 1))
done

 

이후 

chmod -x .mem.sh

 

꼭 스크립트에 실행권한을 줘야한다.

vi ~/.bashrc

alias mem='./mem.sh'

 

bashrc를 수정 후 

source ~/.bashrc

 

로그아웃했다가 다시 로그인하면 자동으로 적용되나

 

그마저도 귀찮으니 소스를 바로 적용해준다.

 

결과물

편안하다

 

이제 일일히 다 확인하러 다니지 않아도 된다.

반응형