본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

32. 쉘 스크립트 - 현업 예제(backup, log, tar, find)

by devraphy 2021. 9. 24.

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에 존재하는 로그파일 뿐만 아니라, 해당 디렉토리에 존재하는 다른 디렉토리의 로그파일들도 정리된다. 

댓글