0. 시작하기전에
- 이전 포스팅까지 기초적인 쉘스크립트 사용법에 대해서 알아보았다.
- 이번 포스팅에서는 현업에서 사용할 만한 쉘 스크립트 예제를 작성해보고 이해해보자.
1. 현업 예제 - backup.sh
- 서버는 백업을 해놓는 것이 굉장히 중요하다.
- 그러므로 백업을 하는 쉘 스크립트 예제를 살펴보자.
#!/bin/bash
if [ -z $1 ] || [ -z $2 ]; then # 인자 2개가 중 하나라도 없으면
echo usage: $0 sourcedir targetdir #압축할 파일(sourcedir)과 압축된 파일이 저장될 디렉토리(targetdir)를 입력하라.
else # 인자 2개가 모두 존재하는 경우
SRCDIR=$1 # 첫번째 인자가 들어갈 변수
DSTDIR=$2 # 두번째 인자가 들어갈 변수
BACKUPFILE=backup.$(date +%y%m%d%H%M%S).tar.gz # 생성될 백업파일의 이름(backup.년월일시분초)과 형식을 정의
if [ -d $DSTDIR ]; then # 압축파일이 저장될 디렉토리가 존재하는 경우
tar -cvzf $DSTDIR/$BACKUPFILE $SRCDIR # 해당 디렉토리에 파일을 압축하여 저장
else # 압축파일이 저장될 디렉토리가 없는 경우
mkdir $DSTDIR # 해당 디렉토리를 생성
tar -cvzf $DSTDIR/$BACKUPFILE $SRCDIR # 해당 디렉토리에 파일을 압축하여 저장
fi
fi
- 위의 사진은 현재 디렉토리의 파일을 압축하여 backup이라는 아직 존재하지 않는 디렉토리에 저장하라는 명령의 결과다.
a) tar
- 파일 또는 디렉토리를 압축 및 압축해제에 사용되는 명령어다.
- tar 명령어는 다음과 같은 형식과 옵션을 갖는다.
2. 현업 예제 - 로그파일 정리
- 로그파일을 정리하기 위해서 우선 다음과 같은 규칙(=정책)을 구현한다.
▶ 2일이상 지난 로그파일은 압축한다.
▶ 이미 압축된 로그파일 중 3일 이상 경과한 경우 삭제한다.
- 위의 규칙을 가지고 로그파일을 정리하는 프로그램을 이해하기 위해서는 find 명령어를 이해해야한다.
a) find
find . -type f -name '파일명검색어' -exec bash -c "명령어1; 명령어2; 명령어3;" \;
# find . ==> 현재 디렉토리에서 검색한다는 의미
# -type f ==> 파일 타입을 지정해서 검색한다.(f는 일반파일을 의미)
# -name '파일명검색어' ==> 특정 파일명을 검색해라.(파일명검색어에는 일반적으로 정규표현식을 사용한다.)
# 나머지 부분 ==> bash 명령어를 실행시켜서 명령어1, 명령어2, 명령어3을 검색된 파일에 적용한다.
b) 실습예제
#!/bin/bash
LOGDIR=/var/log #로그가 저장되어 있는 디렉토리
GZIPDAY=1 #압축할 파일의 기한을 설정
DELDAY=2 #압축된 파일의 기한을 설정
cd $LOGDIR #위에서 정의한 로그 디렉토리로 경로이동
echo "cd $LOGDIR" #경로이동을 터미널에 출력
# 경로이동 후 실행할 명령
sudo find . -type f -name '*log.?' -mtime +$GZIPDAY -exec bass -c "gzip {}" \; 2> /dev/null
# -mtime +GZIPDAY ==>파일 생성날짜 + 변수값(1) == 2일이상 경과된 날짜(생성 당일 + 하루, 총 2일)
sudo find . -type f -name '*.gz' -mtime +$DELDAY -exec bash -c "rm -f {}" \; 2> /dev/null
# -mtime +DELDAY ==> 압축파일 생성날짜 + 변수값(2) == 3일이상 경과된 날짜
- /var/log 디렉토리로 이동해보면, 로그가 2일이상 경과되는 경우 압축파일로 보존되어 있는 것을 확인할 수 있다.
- 더불어 3일이상 경과되면 삭제되어 unattended-upgrades라는 이름으로 파일이 보이지 않는 것을 확인할 수 있다.
- 위의 사진은 예제로 작성한 로그정리 프로그램을 실행시킨 결과다.
- 지정한 규칙에 따라 보존기간이 지난 로그기록들이 깔끔하게 삭제된 것을 확인할 수 있다.
- /var/log에 존재하는 로그파일 뿐만 아니라, 해당 디렉토리에 존재하는 다른 디렉토리의 로그파일들도 정리된다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
34. 스레드 - detach와 mutex (0) | 2021.09.25 |
---|---|
33. 스레드 - 이해와 기본 (0) | 2021.09.24 |
31. 쉘 스크립트 - 조건문과 반복문 (0) | 2021.09.24 |
30. 쉘 스크립트 - 조건문 (0) | 2021.09.24 |
29. 쉘 스크립트 - 이해와 변수 (0) | 2021.09.23 |
댓글