#!/bin/bash
outDir=/home/NETSTAT
if [ ! -d ${outDir} ]; then // outDir 변수로 지정한 디렉토리가 존재하지 않을 경우, 디렉토리를 생성한다.
mkdir -p ${outDir}
fi
idx=1
outFile=${outDir}/netstat_`hostname`_`date +%y%m%d`.log
if [ ! -f ${outFile} ]; then // outFile 변수로 지정한 파일이 존재하지 않을 경우, 컬럼명을 탭 간격을 주고 outFile 에 프린팅한다.
printf "CLOSED\\tCLOSING\\tCLOSE_WAIT\\tESTABLISHED\\tFIN_WAIT1\\tFIN_WAIT2\\tLAST_ACK\\tLISTEN\\tSYN_SENT\\tSYN_RECEIVED\\tTIME_WAIT\\n" > ${outFile}
fi
while [ 1 ]; do
CLOSED=0
CLOSING=0
CLOSE_WAIT=0
ESTABLISHED=0
FIN_WAIT1=0
FIN_WAIT2=0
LAST_ACK=0
LISTEN=0
SYN_SENT=0
SYN_RECEIVED=0
TIME_WAIT=0 // netstat 상태값들을 기본 0 으로 모두 초기화
netState=`netstat -na | grep tcp | awk '{print $6}' | sort | uniq -c` // 이 명령에 의해 뿌려지는 값들을
* netstat 명령 수행 결과 예시
# netstat -na | grep tcp | awk '{print $6}' | sort | uniq -c
1 CLOSE_WAIT
31 CLOSING
234 ESTABLISHED
15 FIN_WAIT1
59 FIN_WAIT2
21 LAST_ACK
10 LISTEN
33 SYN_RECV
1109 TIME_WAIT
--> 첫 번째 열은 명령 수행 시점의 netstat 상태값의 개수, 두 번째 열은 netstat 상태값
for tmp in ${netState} ; do // 하나씩 tmp 변수에 담아
remNum=`expr ${idx} % 2` // idx 변수값을 2로 나눈 나머지(remNum)가
if [ ${remNum} -ne 0 ]; then // 0 이 아니면(for문이 홀수번째로 수행된 거라면.. 즉, netstat 상태값의 개수가 tmp 변수에 넘어온 거라면)
sockNum=${tmp} // netstat 상태값의 개수를 sockNum 변수에 담고
else // 그렇지 않으면(for문이 짝수번째로 수행된 거라면.. 즉, netstat 상태값이 tmp 변수에 넘어온 거라면)
state=${tmp} // netstat 상태값을 state 변수에 담고
case ${state} in // state 변수의 값에 따라 앞서 홀수번째에 세팅되었던 sockNum 값을 각 상태값에 맞게 할당
"CLOSED")
CLOSED=${sockNum}
;;
"CLOSING")
CLOSING=${sockNum}
;;
"CLOSE_WAIT")
CLOSE_WAIT=${sockNum}
;;
"ESTABLISHED")
ESTABLISHED=${sockNum}
;;
"FIN_WAIT1")
FIN_WAIT1=${sockNum}
;;
"FIN_WAIT2")
FIN_WAIT2=${sockNum}
;;
"LAST_ACK")
LAST_ACK=${sockNum}
;;
"LISTEN")
LISTEN=${sockNum}
;;
"SYN_SENT")
SYN_SENT=${sockNum}
;;
"SYN_RECEIVED")
SYN_RECEIVED=${sockNum}
;;
"TIME_WAIT")
TIME_WAIT=${sockNum}
;;
esac
fi
idx=$((idx+1))
done
printf "${CLOSED}\\t${CLOSING}\\t${CLOSE_WAIT}\\t\\t${ESTABLISHED}\\t\\t${FIN_WAIT1}\\t\\t${FIN_WAIT2}\\t\\t${LAST_ACK}\\t\\t${LISTEN}\\t${SYN_SENT}\\t\\t${SYN_RECEIVED}\\t\\t${TIME_WAIT}\\n" >> ${outFile} // while 문의 결과에 따라 할당된 변수들을 outFile 에 프린트
sleep 10
done
위와 같이 Shell Script 를 작성한 후, crontab에 아래와 같이 설정합니다.
# crontab -l
* * * * * /home/mon_netstat.sh >& /dev/null
감사합니다.
'3. OS이야기 > 03. Shell Script' 카테고리의 다른 글
시스템에서 사용중인 PCI Slot 할당 내역 조회 스크립트 (0) | 2014.07.17 |
---|---|
[UNIX/LINUX] File Size 체크 스크립트 (0) | 2014.07.01 |
linux 전체 파일시스템 용량 및 사용량 확인 스크립트 (2) | 2014.06.18 |
[UNIX/LINUX] 파일시스템 사용량 체크 스크립트 (0) | 2014.06.05 |
History에 날짜 넣기 !!! (0) | 2014.05.29 |