스크립트 장인

ShellBeginner
지금 연습하기

소개

예비 시스템 관리자 여러분, 환영합니다! 여러분은 이제 빠르게 성장하는 기술 회사에 주니어 DevOps 엔지니어로 합류했습니다. 선임 동료는 заслуж은 휴가를 떠났고, 마침 중요한 업무가 여러분에게 맡겨졌습니다. 주 애플리케이션 서버에서 수많은 로그 파일이 생성되고 있으며, 디스크 공간을 빠르게 차지하고 있습니다. 여러분의 임무는 바로 스크립트 장인이 되는 것입니다.

이러한 로그 파일을 관리할 자동화된 셸 스크립트를 만들어야 합니다. 단순히 몇 가지 명령을 실행하는 것이 아니라, 견고하고 재사용 가능한 도구를 구축하는 것이 목표입니다. 먼저 간단한 스크립트로 시작한 뒤 변수, 사용자 입력, 오류 검사, 반복문과 같은 기능을 단계적으로 추가하게 됩니다. 이 챌린지를 마치면 파일을 백업하고 관리할 수 있는 스크립트를 완성하여 팀에 꼭 필요한 인재임을 증명하고 문제를 해결하게 됩니다!

이제 스크립팅을 시작해 봅시다!

중요 안내
이어지는 챌린지는 Linux 빠른 시작 과정의 범위를 넘어설 수 있습니다.
챌린지 진행 중 어려움이 있다면:
  1. 챌린지를 잠시 건너뛰고 Linux 학습 경로의 이후 Guided Lab을 계속 진행하세요.
  2. Labby와 상담하거나 풀이를 확인하세요.

간단한 셸 스크립트 작성

첫 번째 과제는 기초를 다지는 것입니다. 훌륭한 스크립트도 처음에는 한 줄에서 시작합니다. 스크립트 파일을 만들고 정상적으로 동작하는지 확인할 수 있는 기본 명령을 추가해야 합니다. 이 초기 단계에서는 환경 설정이 올바른지 확인하고, 더 복잡한 로직을 구축할 준비가 되었는지 점검합니다.

작업

  • ~/project 디렉터리에 log_manager.sh라는 새 셸 스크립트 파일을 만드세요.
  • 스크립트 맨 위에 "shebang" 줄(#!/bin/bash)을 추가하세요. 이 줄은 시스템에 사용할 인터프리터를 알려 줍니다.
  • 화면에 "Log Manager Initialized." 메시지를 출력하는 명령을 추가하세요.
  • chmod +x 명령을 사용하여 스크립트를 실행 가능하게 만드세요.

요구 사항

  • 스크립트 이름은 log_manager.sh여야 합니다.
  • 스크립트는 ~/project 디렉터리에 있어야 합니다.
  • 첫 번째 줄은 #!/bin/bash여야 합니다.
  • 스크립트는 필요한 메시지를 표시하기 위해 echo 명령을 사용해야 합니다.
  • 스크립트에 실행 권한이 있어야 합니다(chmod +x log_manager.sh 사용).

예시

스크립트를 만들고 실행 권한을 부여한 뒤의 전체 과정은 다음과 같습니다.

먼저 스크립트 파일이 존재하는지 확인합니다.

ls ~/project/
log_manager.sh

스크립트에 실행 권한을 설정합니다.

chmod +x ~/project/log_manager.sh

이제 스크립트를 실행합니다.

./log_manager.sh

스크립트에는 다음과 같이 표시되어야 합니다.

Log Manager Initialized.

스크립트 내용이 올바른지도 확인할 수 있습니다.

cat ~/project/log_manager.sh

파일에는 다음 내용이 들어 있어야 합니다.

#!/bin/bash

echo "Log Manager Initialized."

힌트

  • nano와 같은 명령줄 텍스트 편집기를 사용하여 파일을 만들고 편집할 수 있습니다. 예: nano log_manager.sh
  • echo 명령은 텍스트 한 줄을 표시할 때 사용합니다.
  • chmod +x filename을 사용하면 스크립트를 실행 가능하게 만들 수 있습니다. +x는 파일 소유자에게 실행 권한을 추가합니다.

변수와 사용자 입력 추가

값이 스크립트에 직접 고정되어 있으면 유연성이 떨어집니다. 스크립트를 더욱 동적이고 재사용 가능하게 만들기 위해 이제 변수를 사용해 보겠습니다. 로그 디렉터리를 변수로 정의하고, 사용자에게 백업 실행 레이블을 입력받습니다. 이렇게 하면 코드 자체를 수정하지 않고도 다양한 상황에 맞게 스크립트를 사용할 수 있습니다.

작업

  • log_manager.sh 스크립트를 수정하세요.
  • LOG_DIR이라는 변수를 정의하고 /home/labex/project/app_logs 경로를 할당하세요.
  • 사용자에게 입력을 요청하는 "Enter the backup filename: " 출력 줄을 추가하세요.
  • read 명령을 사용하여 사용자 입력을 BACKUP_FILENAME이라는 새 변수에 저장하세요.
  • "Backing up logs to: [filename]"과 같은 메시지를 표시하는 마지막 echo 명령을 추가하세요. 여기서 [filename]은 사용자가 입력한 값입니다.

요구 사항

  • 스크립트에 /home/labex/project/app_logs로 설정된 LOG_DIR 변수가 있어야 합니다.
  • 스크립트는 사용자 입력을 받기 위해 read 명령을 사용해야 합니다.
  • 사용자 입력은 BACKUP_FILENAME 변수에 저장되어야 합니다.
  • 마지막 출력에서는 $BACKUP_FILENAME 변수를 사용해야 합니다.

예시

수정한 스크립트를 실행하면 사용자 입력을 요청한 뒤 확인 메시지를 표시해야 합니다. 상호 작용은 다음과 같습니다.

./log_manager.sh
Log Manager Initialized.
Enter the backup filename: daily_backup
Backing up logs to: daily_backup

스크립트는 "Enter the backup filename:" 프롬프트에서 일시 중지되고, 사용자가 이름을 입력한 후 Enter를 누를 때까지 기다립니다. 입력이 제공되면 입력한 값을 사용하여 확인 메시지를 표시합니다. 이 챌린지에서 해당 값은 출력에 표시되는 실행 레이블이며, 실제 백업 작업은 4단계에서 .log 파일을 ~/project/backups로 복사하는 방식으로 구현합니다.

힌트

  • 변수는 VARIABLE_NAME="value" 형식으로 정의합니다. = 기호 앞뒤에 공백을 넣지 마세요.
  • 변수의 값은 이름 앞에 $ 기호를 붙여 사용합니다. 예: $MY_VARIABLE
  • read 명령은 스크립트를 일시 중지하고 사용자가 값을 입력한 후 Enter를 누를 때까지 기다립니다.

조건부 논리 구현

좋은 스크립트는 문제를 미리 예상합니다. 지정한 로그 디렉터리가 존재하지 않으면 어떻게 될까요? 스크립트는 오류와 함께 중단될 것입니다. 스크립트를 더욱 견고하게 만들려면 조건부 논리를 추가해야 합니다. if 문을 사용하여 작업을 수행하기 전에 로그 디렉터리가 존재하는지 확인합니다.

작업

  • log_manager.sh 스크립트를 수정하세요.
  • $LOG_DIR 변수로 지정한 디렉터리가 존재하는지 확인하는 if 문을 추가하세요.
  • 디렉터리가 존재하면 이전과 동일하게 계속 진행하세요(파일명 입력 요청 등).
  • 디렉터리가 존재하지 않으면 "Error: Log directory not found." 오류 메시지를 출력하고 0이 아닌 상태 코드로 즉시 종료하세요.

요구 사항

  • 스크립트는 if 문을 사용해야 합니다.
  • 조건에서는 -d 테스트 연산자를 사용하여 디렉터리의 존재 여부를 확인해야 합니다.
  • 디렉터리가 존재하지 않으면 지정된 오류 메시지를 echo로 출력해야 합니다.
  • 디렉터리가 존재하지 않으면 exit 1을 사용하여 스크립트를 종료해야 합니다.

예시

로그 디렉터리가 존재하면 스크립트는 정상적으로 실행됩니다.

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: test_backup.tar.gz
Backing up logs to: test_backup.tar.gz

로그 디렉터리가 존재하지 않으면 오류를 표시하고 종료합니다.

./log_manager.sh
Log Manager Initialized.
Error: Log directory not found.

이 경우 스크립트는 오류 메시지를 표시한 직후 종료되며, 사용자 입력을 요청하거나 백업 작업을 진행하지 않습니다.

힌트

  • 기본적인 if 문 구문은 if [ condition ]; then ... else ... fi입니다.
  • 테스트식 [ -d "$DIRECTORY_PATH" ]$DIRECTORY_PATH가 존재하고 디렉터리일 때 참을 반환합니다.
  • exit 1은 스크립트가 오류와 함께 종료되었음을 나타내는 일반적인 방법입니다.

파일 작업 반복 처리

이제 자동화의 핵심 단계입니다! 로그 디렉터리 안의 파일을 처리해야 합니다. for 반복문을 사용하여 app_logs 디렉터리에서 .log로 끝나는 모든 파일을 순회합니다. 이 챌린지에서는 해당 파일을 새 백업 디렉터리로 복사하기만 하면 됩니다. BACKUP_FILENAME 입력값은 스크립트가 생성하는 압축 파일 이름이 아니라 출력에 표시되는 실행 레이블로 사용됩니다.

작업

  • 먼저 로그 파일을 복사할 backups 디렉터리를 ~/project 안에 만드세요.
  • log_manager.sh 스크립트를 수정하세요.
  • 디렉터리가 존재하는 것이 확인된 if 블록 안에 for 반복문을 추가하세요.
  • 반복문은 $LOG_DIR 디렉터리 안의 .log로 끝나는 모든 파일을 순회해야 합니다.
  • 반복문 안에서 cp 명령을 사용하여 각 로그 파일을 ~/project/backups 디렉터리로 복사하세요.
  • 파일을 복사할 때마다 "Copied [filename]"과 같은 메시지를 출력하세요.

요구 사항

  • 먼저 명령줄에서 ~/project/backups 디렉터리를 만들어야 합니다.
  • 스크립트는 for 반복문을 사용해야 합니다.
  • 반복문은 $LOG_DIR에서 *.log 패턴과 일치하는 파일을 순회해야 합니다.
  • 반복문 안에서 cp 명령을 사용하여 파일을 ~/project/backups로 복사해야 합니다.
  • 각 파일이 복사될 때 파일 이름을 알리는 echo 문이 있어야 합니다.

예시

이 단계를 완료한 후 백업 파일명을 입력하여 스크립트를 실행하면 모든 로그 파일을 처리하고 다음과 비슷한 출력을 표시합니다.

./log_manager.sh
Log Manager Initialized.
Log directory found. Proceeding...
Enter the backup filename: daily_backup
Backing up logs to: daily_backup
Copied /home/labex/project/app_logs/access.log
Copied /home/labex/project/app_logs/debug.log
Copied /home/labex/project/app_logs/error.log
Backup complete.

스크립트는 디렉터리의 각 .log 파일을 순회하면서 파일마다 "Copied" 메시지를 출력해야 합니다. 실제 파일 이름은 app_logs 디렉터리에 있는 로그 파일에 따라 달라집니다.

스크립트가 완료된 후 backups 디렉터리를 확인하여 파일이 복사되었는지 검증할 수 있습니다.

ls ~/project/backups/
access.log  debug.log  error.log

힌트

  • mkdir 명령으로 디렉터리를 만들 수 있습니다.
  • 파일을 순회하는 for 반복문은 for file in /path/to/*.log; do ... done 형식으로 작성할 수 있습니다.
  • cp 명령의 구문은 cp <source> <destination>입니다.
  • 반복문 변수(예: file)에는 각 반복에서 파일의 전체 경로가 저장됩니다.

요약

축하합니다, 스크립트 장인 여러분! 처음부터 완전하고 실제로 동작하는 셸 스크립트를 성공적으로 완성했습니다. 로그 파일 관리라는 현실적인 문제를 자동화의 힘으로 해결했습니다.

이번 챌린지에서는 셸 스크립팅의 다음과 같은 핵심 개념을 익혔습니다.

  • shebang으로 스크립트를 만들고 구조화하기
  • 변수를 사용하여 스크립트를 동적으로 구성하기
  • read로 사용자 입력 받기
  • if 문으로 견고한 오류 검사 구현하기
  • for 반복문으로 반복 작업 자동화하기
  • 파일 권한 관리 및 스크립트 실행하기

이제 스크립트는 로그 디렉터리의 존재 여부를 자동으로 확인하고, 모든 로그 파일을 처리한 뒤 백업 위치로 복사할 수 있습니다. 이는 DevOps 엔지니어나 시스템 관리자로 성장하는 여정에서 매우 중요한 진전입니다. 이번에 연습한 기술은 서버 관리, 애플리케이션 배포, 데이터 처리 등 훨씬 복잡한 자동화 스크립트를 작성하는 기반이 됩니다. 책임을 맡아 실제로 동작하는 해결책을 제공할 수 있다는 것을 증명했습니다. 정말 잘했습니다!

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습