본문 바로가기

Script/Search Info 관련

Info - 서버 정보 읽어오는 스크립트 ver.2

스크립트 동작 테스트 해본 리눅스 OS

CentOS 6.9 , 7.0, 7.1

UbuntuOS 16.04 / 18.04 LTS 

 

주석이 처리된 부분은 제외하고 사용하셔도 됩니다.

*추가적으로 업데이트 및 수정 사항이 생길때마다 수정할 예정

*추가 여러분들의 댓글 의견도 바로 반영하겠습니다.

 

#!/bin/bash

#SVR_INFO_COMMAND_CHECK
#dmidecodeCMD=`CMDck "dmidecode"`
#topCMD=`CMDck "top"`
#dmesgCMD=`CMDck "dmesg"`
#
#lspciCMD=`CMDck "lspci"`
#lscpuCMD=`CMDck "lscpu"`
#unameCMD=`CMDck "uname"`

CMDlist="dmidecode
top
dmesg
lspci
lscpu
uname
hostname
ifconfig"

exCMDlist="net-tools
util-linux
"

#함수 보기 리스트
SVRDname=`dmidecode | grep "Product Name" | head -n1 | awk -F ":" '{print $2}'`
SVRHname=`hostname`
SVRNETdev=`ip addr | grep "LOWER_UP" | grep -v "state UNKNOWN" | awk '{print $2}' | sed "s/://g"`
#SVRip=`ip add show ${1} | grep "inet" | awk '{print $2}'`
SVRipv4=`ip add show ${list} | grep "inet" | grep -v "inet6"| awk '{print $2}'`
SVRipv6=`ip add show ${list} | grep "inet6" | awk '{print $2}'`
OSname=`cat /etc/*release | grep "^NAME" | sed -e 's/=/ /g' -e 's/"//g' | awk '{print $2}'`
OSversion=`cat /etc/*release | grep "VERSION_ID" | sed -e 's/=/ /g' -e 's/"//g' | awk '{print $2}'`
CPUname=`lscpu | grep "Model name" | awk '{$1=$2=""; print $n}'`
CPUs=`lscpu | grep "^Socket(s)" | sed "s/ //g" | awk -F ":" '{print $2}'`
CPUcores=`lscpu | grep "^Core(s) per" | sed "s/ //g" | awk -F ":" '{print $2}'`
CPUthread=`lscpu | grep "^Thread(s) per" | sed "s/ //g" | awk -F ":" '{print $2}'`
CPUTck=`
if [ "${CPUthread}" -gt 1 ]; then
echo "actvie"
else
echo "desirable"
fi`

#MEMname=""
MEMs=`dmidecode -t 17 | grep "Size" | grep -v "No" | wc -l`
#MEMTsize=`expr (cat /proc/meminfo | grep "MemTotal" | sed -e 's/ //g' -e 's/kB//g' | awk -F ":" '{print $2}') / 1024`
MEMTsize=`cat /proc/meminfo | grep "MemTotal" | sed -e 's/ //g' -e 's/kB//g' | awk -F ":" '{printf "%.2f", ($2 / 1024) / 1024}'`

DISKs=`fdisk -l | grep "Disk" | grep -v "Disklabel\|Disk identifier" | wc -l`
#DISKszie=""

PARTITIONinfo=`df -k | grep "^/dev" | sort`
#PARTITIONs=`mount | grep "^/dev" | awk '{print $1}' | sort | wc -l`
#PARTITIONmout=`mount | grep "^/dev" | awk '{print $1}' | sort | head -n ${i} | tail -n 1`


#커맨드 체크
function CMDck {
for list in ${CMDlist}; do

/usr/bin/which ${list} > /dev/null
if [ $? -eq 0 ]; then
echo "${list} : OK"
else
echo "${list} : Not Command"
NOTlist=${list}
fi
done

echo "${NOTlist}"

#설치되지 않은 커맨드를 가지고 설치 허가 여부 판단
if [ -n "${NOTlist}" ]; then
echo "${NOTlist} Install Start?"
echo "*(All pakcage -y option) ${NOTlist} Install Start?"
read INPUT

case ${INPUT} in
y | Y )
for setlist in ${NOTlist}; do

apt --version > /dev/null

if [ $? -eq 0 ]; then
apt -y install ${setlist}
echo "Install complete"
else
rpm -y install ${setllist}
echo "Install complete"
fi
done
;;
* )
echo "Script [read INPUT: Error]."
;;
esac
else
echo "Command check complete"
fi
}

#서버 정보 출력
function INFOck {

echo "===============Standard Info==================="
echo "DEVICE Name :${SVRDname}"
echo "HOST Name: ${SVRHname}"
echo "OS Name : ${OSname}"
echo "OS Version : ${OSversion}"
echo ""

echo "Active Network Port List"
for list in ${SVRNETdev}; do
echo "Port Name : ${list}"
SVRipv4=`ip add show ${list} | grep "inet" | grep -v "inet6"| awk '{print $2}'`
SVRipv6=`ip add show ${list} | grep "inet6" | awk '{print $2}'`
echo "IPv4 Address : ${SVRipv4}"
echo "IPv6 Address : ${SVRipv6}"
echo ""
done

echo "===============HardWare Info==================="
echo "CPU Name :${CPUname}"
echo "CPU : ${CPUs}"
if [ "${CPUTck}" == "active" ]; then
echo "CPU Thread status : ${CPUTck}"
echo "CPU(s) cores(+HyperThreading) : ${CPUcores}"
else
echo "CPU Thread status : ${CPUTck}"
echo "CPU(s) cores : ${CPUcores}"
fi
echo ""

echo "Memory Name : 공사중"
echo "Memory(s) : ${MEMs}"
echo "Memory Total Size : ${MEMTsize} GB"
echo ""

echo "Disks : ${DISKs}"
for (( i=1 ; i<=${DISKs} ; i++ )); do
   DISKsize=`fdisk -l | grep "Disk" | grep -v "Disklabel\|Disk identifier" | awk '{printf $2 " " "%.2f GB\n",($5 / (1024) / (1024) /(1024))}' | head -n ${i} | tail -n1`
echo "${i} Disk size : ${DISKsize}"
done
echo ""

echo "Partition info"
echo "Filesystem       Type      Size  Used Avail Use% Mounted on"
echo "${PARTITIONinfo}"
}


echo "SVR_INFO Version 2"
echo "Check Menu"
echo "1. Command Checking"
echo "2. Info Checking"

read INPUT_NUM
case ${INPUT_NUM} in
1 )
CMDck
;;
2 )
INFOck
;;
esac