시스템/Shell-Script

시스템 정보 수집 스크립트

달빛궁전- 2021. 7. 9. 09:39

- 만든계기 : 

시스템 정보를 확인하고, 수집하기 위해 생성

단일 시스템 확인용이며, 다수 원격시스템은 ssh로 해서 차 후 또 수정예정

 

- 내용 :

1. 계정정보

2. 디스크 사용량 확인

3. CPU사용량

4. 메모리 사용량

5. 볼륨그룹 정보

6. 시스템 Gateway확인

7. hosts 정보 확인

8. crontab 정보 확인

9. 프로세스 검색

10. 시스템 가상화 여부 

11. 전체 결과 값 파일로 저장

 

Redhat6기준으로 테스트 했고,  ubuntu나 다른버전에서는 다 동작 안될 수도 있다. ㅠ

ubuntu같은 경우 sudo를 추가 및 기타 명령어 (virt-what)설치가 필요

결국 명령어 옵션이 좀 다르던가 하는것이니 적절히 수정해서 쓰면 문제없음

 

- shell-script내용

#!/bin/bash
set -e
#스크립트 실패시 바로 종료처리

#환경설정
set_env() {
datenum=$(date '+%Y%m%d')
data="/root/$datenum"
mkdir -p $data
}
set_env

# 스크립트 목표 번호를 눌러 각 시스템 정보를 확인하기
# 해당 정보를 정리하여 문서화하기

echo "##########Select Menu##########"
echo "1) 사용자 계정정보"
echo "2) 디스크 사용량(80%이상 사용)"
echo "3) CPU 사용량"
echo "4) 메모리 사용량"
echo "5) 볼륨그룹 정보"
echo "6) 네트워크 GateWay"
echo "7) HOST정보 "
echo "8) Crontab(예약된작업)"
echo "9) 프로세스 검색"
echo "10 시스템 가상화여부"
echo "11) 전체 결과 값 파일저장"

read input

case $input in 

1) echo -e Check Time "$datenum\n""`cat /etc/passwd | egrep -v "/sbin/nologin" | awk -F : '{print $1}'`" ;;
2) echo -e Check Time "$datenum\n""`df -hP | awk -F " " '{if ( $5 >=10 ) print ("디렉토리"$6, " 사용량"$5) }' | awk 'NR >=2' | sort -h`" ;;
3) echo -e Check Time "$datenum\n""`mpstat | tail -1 | awk '{print 100 - $NF}'`" ;;
4) echo -e Check Time "$datenum\n"
MEM_TOTAL=`free | grep -i Mem | awk '{print $2}'`
MEM_USED=`free | grep -i Mem | awk '{print $7}'`
MEM_ACT=$((100* (MEM_TOTAL-MEM_USED)/MEM_TOTAL))
echo "$MEM_ACT"% ;;

5) echo -e Check Time "$datenum\n""`vgs`" ;;
6) echo -e Check Time "$datenum\n""`netstat -rn | awk -F " " '{print $2}' | awk 'NR==3'`" ;;
7) echo -e Check Time "$datenum\n""`cat /etc/hosts`" ;;
8) echo -e Check Time "$datenum\n""`crontab -l`" ;;
9) echo " 프로세스 명을 입력하세요." 
read input2 
echo -e Check Time "$datenum\n""`ps -ef | grep -i $input2`" ;;

10) if [ "vm=$(virt-what)" $vm ] ; then
echo "가상화 장비 입니다."
else
echo "물리 장비 입니다."
fi ;;
# 결과 값이 있으면 1 없으면0으로 출력

11) echo -e "위 모든 결과를 파일로 저장합니다. 저장할 파일명을 입력하세요."
read file1

echo -e "\n###사용자계정정보###\n""`cat /etc/passwd | egrep -v "/sbin/nologin" | awk -F : '{print $1}'`"  >> $data/$file1
echo -e "\n###디스크사용량###\n""`df -hP | awk -F " " '{if ( $5 >=10 ) print ("디렉토리"$6, " 사용량"$5) }' | awk 'NR >=2' | sort -h`" >> $data/$file1
echo -e "\n###CPU사용량###\n""`mpstat | tail -1 | awk '{print 100 - $NF}'`" >> $data/$file1
echo -e 
MEM_TOTAL=`free | grep -i Mem | awk '{print $2}'`
MEM_USED=`free | grep -i Mem | awk '{print $7}'`
MEM_ACT=$((100* (MEM_TOTAL-MEM_USED)/MEM_TOTAL))
echo -e "\n###메모리사용률###\n""$MEM_ACT"% >> $data/$file1
echo -e "\n###볼륨그룹사용량###\n""`vgs`" >> $data/$file1
echo -e "\n###GateWay정보###\n""`netstat -rn | awk -F " " '{print $2}' | awk 'NR==3'`" >> $data/$file1
echo -e "\n###HOSTS정보###\n""`cat /etc/hosts`" >> $data/$file1
echo -e "\n###CRONTAB정보###\n""`crontab -l`" >> $data/$file1
echo -e "\n###가상화여부###\n""`virt-what`" >> $data/$file1 ;;

*) echo "잘못된 입력 입니다."
esac

- 실행시 결과

1-10번까지 case문이라 캡쳐를 일일히 올릴지는 생각 좀 ㅠ

 

 

- 실행 했을때 결과 값

애도 고민인게.. sh-x 로 돌려버리면 너무 지저분하게 나올 것 같아 잠시보류

'시스템 > Shell-Script' 카테고리의 다른 글

여러 서버에 스크립트 실행  (0) 2022.11.20
ORACLE 사용자 리스트 확인 스크립트  (0) 2021.07.10
사용자 계정 조회  (0) 2021.06.21