스크립트 장인

ShellBeginner
지금 연습하기

소개

예비 시스템 관리자 여러분, 환영합니다! 여러분은 이제 한창 바쁜 기술 회사에 Junior DevOps Engineer 로 합류했습니다. 선임 동료는 충분한 휴가를 보내고 있고, 중요한 작업이 방금 여러분의 책상에 도착했습니다. 주요 애플리케이션 서버에서 수많은 로그 파일이 생성되고 있으며, 디스크 공간을 빠르게 차지하고 있습니다. 여러분의 임무는 바로 스크립트 장인이 되는 것입니다.

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

스크립팅을 시작합니다!

중요 안내
이 챌린지에서는 Quick Start with Linux에서 다루는 내용보다 더 고급인 기술을 사용합니다. 아직 이 주제를 배우지 않았다면 지금은 건너뛰고 Linux for Noobs를 계속 진행하세요. 이 과정은 Linux 학습 경로의 다음 과정입니다.
다시 시작할 시점:
  1. Shell Scripting Fundamentals Guided Lab 을 완료한 후 이 챌린지로 돌아와 다시 시도하세요.

간단한 셸 스크립트 작성

첫 번째 작업은 기반을 마련하는 것입니다. 훌륭한 스크립트도 한 줄에서 시작합니다. 스크립트 파일을 만들고 기본 명령을 추가하여 정상적으로 작동하는지 확인하세요. 이 초기 단계에서는 환경이 올바르게 설정되었고 더 복잡한 로직을 작성할 준비가 되었는지 확인합니다.

작업

  • ~/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 엔지니어나 시스템 관리자로 성장하는 과정에서 중요한 진전입니다. 여기서 연습한 기술은 서버 관리, 애플리케이션 배포, 데이터 처리와 같은 더 복잡한 자동화 스크립트를 작성하는 기반이 됩니다. 맡은 책임을 처리하고 작동하는 해결책을 완성할 수 있음을 증명했습니다. 잘했습니다!

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