*실습 리스트*

 

 

 

[실습6] 보고서 내용 중 일부를 추출하는 프로그램

* check_report.sh

 

[실습7] 중요한 파일의 변경 상태 확인 프로그램

* check_file.sh

* check_file2.sh

 

[실습8] 파일 자동 업로드/다운로드, 원격 명령어 자동 실행

* auto_ftp.sh

* auto_ftp2.sh

* auto_telnet.sh

* auto_telnet2.sh

* auto_telnet_ftp.sh

* auto_ftp_windows.sh

 

[실습9] 파일 확장자 자동 변환 프로그램

* move_filename.sh

* move_filename2.sh

* move_filename3.sh

 

 

 


 

 

 

 

[실습6] 보고서 내용 중 일부를 추출하는 프로그램

* check_report.sh

 

#!/bin/bash
#./check_report.sh U-1
#sed -n '/U-1/,/U-2/p' report.txt

if [ $# -ne 1 ] ; then
    echo "Usage: $0 <U-#>"
fi

RepFile=report.txt
RepNum=$1

Num1=`echo $RepNum | awk -F- '{print $2}'`
Nume2=`expr $Num1 + 1`

#echo "$Num1 : $Num2"
sed -n "/U-$Num1/,/U-$Num2/p" $RepFile | grep -v "U-$Num2"
#안에 변수를 넣을땐 싱글이 아닌 더블쿼트로 묶어줘야 한다.

 

 

 

 


 

 

 

 

 

[실습7] 중요한 파일의 변경 상태 확인 프로그램

 

 

* check_file.sh

 

#!/bin/bash

# 	# crontab -e
# 	Min Hour Day Mon Week CMD
#  	0   8    *   *   *   /root/shell/check_file.sh
#
# 	# cat /root/shell/test/.mail_contents_OK.txt
# 	Have a Good Day !!!!!
#
# 	# cat /root/shell/test/file_list.txt
# 	/etc/passwd
# 	/etc/group
# 	/etc/hosts
# 	.....

F_LIST=/root/shell/test/file_list.txt               # 점검할 파일 목록
T_FILE=/var/tmp/.tmp1                               # 임시파일
F_RESULT=/root/shell/test/result.`date +'%m%d'`     # 결과 리포트 파일
EMAIL=root                                          # 결과를 받을 이메일 주소


cp /dev/null $F_RESULT                              # 결과 파일 초기화 작업

for F_NAME in `cat $F_LIST`                         # 점검해야 하는 파일 목록 읽기
do
		 #echo $F_NAME ; read
    if [ -f $F_NAME.orig ] ; then                   # 백업파일 존재 유무 확인
        diff $F_NAME $F_NAME.orig > $T_FILE         # 원본파일<-->백업파일 비교
					# echo "==> check2" ; read
					if [ -s $T_FILE ] ; then
            echo "$F_NAME               [ WARN ]" >> $F_RESULT
        else
            echo "$F_NAME               [  OK  ]" >> $F_RESULT
        fi
					# echo "==>check3" ; read
    else
					# echo "==> check1"
        /bin/cp $F_NAME $F_NAME.orig
    fi
		 # echo "==> check4" ; read
done



if /bin/grep WARN $F_RESULT > /dev/null 2>&1 ; then
#    mailx -s "Critical Satus. Check Files" $EMAIL < $F_RESULT
     echo "WARNING"
else
#    mailx -s "OK" $EMAIL < $F_RESULT
     echo "OK"
fi
# rm T_FILE                     # tempory file delete

# 불필요한 부분 한번에 삭제하고 싶을때
#fgrep "==>" /root/scripts/check_file.sh
#fgrep -v 옵션으로  배제시키기

 

 

* check_file2.sh

 

#!/bin/bash

# 변수 설정 및 초기화
FileList=/root/scripts/work/file.list
WorkDir=/root/scripts/work/backup
ResultFile=/root/scripts/work/results.txt
TMP1=/tmp/tmp1
TMP2=/tmp/tmp2
Email=root

> $ResultFile # 레포트 파일 매번 초기화 작업


#  1.중요 파일의 변경 상태 확인 후 result 파일 생성
#  ㄱ) 파일 이름을 하나씩 받는다
#  ㄴ) 백업 파일이 없으면 백업을 한다
#  ㄷ) 백업 파일이 있으면 비교한다
#  ㄹ) 비교된 내용을 result 파일에 넣는다.
#  ㅁ) 한번 돌려보고 vi backup/passwd 들어가서 강제로 다른 부분 만들어 주고 다시 한번 돌린뒤 디른점 비교 (cat result_1021.txt)



for File in `cat $FileList`
do
	#echo $File
	FileName=`basename $File` # basename 커맨드는 줄의 마지막을 불러옴
	BackupFile=$WorkDir/$FileName
	if [ ! -f $BackupFile ] ; then  # 파일이 존재하지 않는다면
		/bin/cp $File $WorkDir/$FileName #파일은 만들고
	else #존재하는 경우
		diff $File $BackupFile > $TMP1 
		if [ -s $TMP1 ] ; then
			echo "[ WARN ] $File" >> $ResultFile
		else
			echo "[ OK ] $File" >> $ResultFile
		fi
	fi
done



# 2.result 파일을 메일로 관리자에게 전송

# ㄱ) result 파일내에  WARN 단어가 들어 있으면 관리자에게 다음과 같이 메일 전송
#   # mailx -s " [ WARN ] File is not OK." $Email < $ResultFile
# ㄴ) result 파일내에  WARN 단어가 없으면 관리자에게 다음과 같이 메일 전송
#   # mailx -s " [ OK ] File is OK." $Email < $ResultFile

/bin/grep -w WARN $ResultFile > $TMP2 2>&1 # -w 별도의 word로 되어있을 경우 
if [ $? -eq 0 ] ; then
	mailx -s " [ WARN ] File is not OK." $Email < $TMP2
	for CheckFile in `cat $TMP2 | awk '{print $4}'`
	do
		BackupFile2=$WorkDir/`basename $CheckFile`
		CheckBackupFile=$WorkDir/`basename $CheckFile`.`date +%m%d_%H%M%S`		
		/bin/cp -p $BackupFile2 $CheckBackupFile
		/bin/cp -p $CheckFile $BackupFile2		
	done
else
	[ -f $ResultFile ] && date | mailx -s "[ OK ] File is OK." $Email < $ResultFile
fi

 

 

 

 


 

 

 

 

[실습8] 파일 자동 업로드/다운로드, 원격 명령어 자동 실행

 

* auto_ftp.sh

#!/bin/bash

ftp -n 127.0.0.1 21 << EOF #here documentation명령어에 입력값으로 넣어 키보드로 치는걸 대신한다
user root soldesk1.
cd /tmp
lcd /test
bin
hash
prompt
mput testfile.txt
quit
EOF

 

 

 

* auto_ftp2.sh

#!/bin/bash


ServerListFile=/root/scripts/server.txt

for ServerIP in `cat $ServerListFile`
do
		#echo $ServerIP
		ftp -n $ServerIP 21 <<- EOF
		user root soldesk1.		
		cd /tmp
		lcd /test
		bin
		hash
		prompt
		mput linux211.txt
		quit
	EOF
done

 

 

 

* auto_telnet.sh

#!/bin/bash


cmd() {
		sleep 2 ; echo 'user01'
		sleep 1 ; echo 'user01'
		sleep 1 ; echo 'hostname'
		sleep 1 ; echo 'exit'
}

cmd | telnet localhost # 앞서 입력한 것들이 파이프 다음에 있는 곳으로 들어간다

 

 

* auto_telnet2.sh

#!/bin/bash


ServerListFile=/root/scripts/server.list

cat $ServerListFile | while read IP ID PASS
do
		cmd () {
		sleep 2 ; echo "$ID"
		sleep 1 ; echo "$PASS"
		sleep 1 ; echo 'hostname'
		sleep 1 ; echo 'exit'
		}	
		cmd | telnet $IP	
done

 

 

 

* auto_telnet_ftp.sh

#!/bin/bash

IP=172.16.6.249
ID='root'
PASS='soldesk1.'

cmd() {
		sleep 2; echo "$ID"
		sleep 1; echo "$PASS"
		sleep 1; echo "tar cvzf /tmp/linux249.tar.gz /home"
		sleep 1; echo "exit"
}

cmd | telnet $IP

ftp -n $IP << EOF
user $ID $PASS
cd /tmp
lcd /root
bin
hash
prompt
mget linux249.tar.gz
quit
EOF

ls -lh /root/linux*

 

 

* auto_ftp_windows.sh

 

#!/bin/bash

IP=172.16.6.xx
PORT=21
ID=user1
PASS=user1

ftp -n $IP $PORT << EOF
user $ID $PASS
lcd /test
cd test
bin
hash
prompt
put linux211.txt
bye
EOF

 

 

 

 

 


 

 

 

 

[실습9] 파일 확장자 자동 변환 프로그램

 

* move_filename.sh

#!/bin/bash

WorkDir=/test
TMP1=/tmp/tmp1

ls -1 $WorkDir | grep '.txt$' > $TMP1
for FileName in `cat $TMP1`
do
		mv $WorkDir/$FileName $(echo $WorkDir/$FileName | sed 's/.txt$/.els/')
done

 

 

 

 

* move_filename2.sh

#!/bin/bash

if [ $# -ne 1 ] ; then
		echo "Usage: $0 <Directory>"
		exit 1
fi

WorkDir=$1
TMP1=/tmp/tmp1
SrtExt='els'
DstExt='txt'

ls -1 $WorkDir | grep "${SrtExt}$" > $TMP1
for FileName in `cat $TMP1`
do
		mv $WorkDir/$FileName $(echo $WorkDir/$FileName \
 | sed "s/.${SrtExt}$/.${DstExt}/")
done

 

 

 

* move_filename3.sh

#!/bin/bash

if [ $# -ne 3 ] ; then
	echo "Usage: $0 <Directory> <SrcExt> <DstExt>"
	exit 1
fi

WorkDir=$1
SrcExt=$2
DstExt=$3
TMP1=/tmp/tmp1

ls -1 $WorkDir | grep "${SrcExt}$" > $TMP1
for FileName in `cat $TMP1`
do
	mv $WorkDir/$FileName $(echo $WorkDir/$FileName \
 		| sed "s/.${SrcExt}$/.${DstExt}/")
done

 

 

728x90

+ Recent posts