0Pricing
Linux Command Line & Bash Scripting Mastery · 강의

고급 스크립팅 프로젝트

명령줄 도구부터 고급 Bash 스크립팅 기법까지 지금까지 배운 모든 개념을 통합하는 종합 프로젝트를 진행합니다.

고급 스크립팅 프로젝트은(는) CoddyKit의 무료 Linux Command Line & Bash Scripting Mastery 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Linux Command Line & Bash Scripting Mastery 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Linux Command Line & Bash Scripting Mastery 강의에는 총 4개의 강의가 포함되어 있습니다.

프로젝트 시작: 도전 과제

최종 프로젝트에 오신 것을 환영합니다! 이 과정에서 강력한 Linux 명령과 Bash 스크립트 작성 기법을 많이 배웠습니다. 이제 이 모든 내용을 하나로 모을 시간입니다.

이 레슨에서는 실용적인 고급 Bash 스크립트를 처음부터 작성합니다. 이 프로젝트를 통해 지금까지 배운 모든 내용을 하나의 작동하는 해결책에 통합해 보게 됩니다.

프로젝트 목표 정의하기

우리의 목표는 파일 모니터링 및 보관 스크립트를 만드는 것입니다. 로그 파일을 생성하는 서버가 있고, 수동 개입 없이 정기적으로 파일을 처리해야 하는 상황을 생각해 보십시오.

스크립트는 다음 작업을 수행합니다.

  • 특정 디렉터리를 계속 모니터링하여 새 텍스트 파일을 찾습니다.
  • 새 파일을 하나씩 처리합니다(예: 줄 수 세기).
  • 처리한 파일을 보관 디렉터리로 이동합니다.
  • 타임스탬프와 모든 오류를 포함한 활동 내역을 기록합니다.

스크립트 기반 다지기: Shebang과 변수

좋은 스크립트는 명확한 기반에서 시작합니다. 먼저 셰뱅을 정의하고 주요 변수를 설정하겠습니다. 이러한 변수 덕분에 스크립트를 유연하고 쉽게 구성할 수 있습니다.

모니터링 디렉터리, 보관 디렉터리, 로그 파일의 경로를 정의하겠습니다.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

디렉터리가 존재하는지 확인하기

스크립트가 모니터링이나 보관을 수행하기 전에 필요한 디렉터리가 존재하는지 확인해야 합니다. 여기서 mkdir -p를 사용하는 것이 중요합니다. 이 명령은 디렉터리가 아직 없을 때만 만들며, 디렉터리가 이미 있어도 오류를 발생시키지 않습니다.

또한 디렉터리 생성에 실패하면 안전하게 종료하도록 기본적인 오류 처리를 추가하겠습니다.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

모니터링 반복문

새 파일을 모니터링하려면 스크립트가 계속 실행되어야 합니다. 이를 위해 while true 반복문이 적합합니다. 반복문 안에서는 sleep을 사용해 검사 사이에 몇 초간 일시 중지하여 리소스를 지나치게 사용하지 않도록 하겠습니다.

활동을 추적할 수 있도록 각 검사도 기록하겠습니다.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  # File processing will go here
  sleep 5 # Check every 5 seconds
done

파일 찾기 및 처리

반복문 안에서 새 텍스트 파일을 찾아야 합니다. find 명령은 이 작업에 적합하며, 발견한 각 파일을 처리하기 위해 for 반복문과 함께 사용할 수 있습니다. 처리 단계로 각 파일의 줄 수를 세기 위해 wc -l을 사용하겠습니다.

이 과정에서는 스크립트 안에서 명령줄 도구를 조합하는 방법을 보여 줍니다.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  # Find new .txt files and process them
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then # Double-check if it's a regular file
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      # Archiving will go here
    fi
  done
  sleep 5 # Check every 5 seconds
done

처리한 파일 보관하기

파일을 처리한 후에는 보관 디렉터리로 이동해야 합니다. 이 작업에는 mv 명령을 사용합니다. 또한 mv의 종료 상태를 확인하는 if 문을 추가하여 이동이 성공했는지 확인하고 실패한 경우를 기록하겠습니다.

이렇게 하면 스크립트의 안정성이 향상됩니다.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      
      mv "$file" "$ARCHIVE_DIR/"
      if [ $? -eq 0 ]; then
        echo "$(date): Moved '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      else
        echo "$(date): ERROR: Failed to move '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      fi
    fi
  done
  sleep 5
done

트랩으로 정상 종료 추가하기

오랫동안 실행되는 스크립트에는 정상적으로 중지할 방법이 필요합니다. trap 명령을 사용하면 SIGINT(Ctrl+C를 누르면 발생)와 같은 신호를 포착하고, 종료하기 전에 정리 함수를 실행할 수 있습니다. 이를 통해 스크립트가 종료 과정을 기록하도록 할 수 있습니다.

이는 운영 환경에서 사용할 수 있는 스크립트를 만드는 데 매우 중요한 단계입니다.

#!/bin/bash

# --- Configuration Variables ---
MONITOR_DIR="/tmp/coddykit_monitor"
ARCHIVE_DIR="/tmp/coddykit_archive"
LOG_FILE="/tmp/coddykit_script.log"

# --- Functions ---
cleanup() {
  echo "$(date): Script received stop signal. Exiting gracefully." >> "$LOG_FILE"
  exit 0 # Exit with success status
}

# --- Trap Signals ---
# Trap SIGINT (Ctrl+C) and call the cleanup function
trap cleanup SIGINT

# Log script start
echo "$(date): Script initialized." >> "$LOG_FILE"

# Ensure monitoring and archive directories exist
mkdir -p "$MONITOR_DIR" || { echo "$(date): ERROR: Cannot create $MONITOR_DIR. Exiting." >> "$LOG_FILE"; exit 1; }
mkdir -p "$ARCHIVE_DIR" || { echo "$(date): ERROR: Cannot create $ARCHIVE_DIR. Exiting." >> "$LOG_FILE"; exit 1; }

echo "$(date): Directories checked/created." >> "$LOG_FILE"

# --- Main Monitoring Loop ---
while true; do
  echo "$(date): Checking for new files in $MONITOR_DIR..." >> "$LOG_FILE"
  for file in $(find "$MONITOR_DIR" -maxdepth 1 -type f -name "*.txt"); do
    if [ -f "$file" ]; then
      LINE_COUNT=$(wc -l < "$file")
      echo "$(date): Found '$file'. Lines: $LINE_COUNT." >> "$LOG_FILE"
      
      mv "$file" "$ARCHIVE_DIR/"
      if [ $? -eq 0 ]; then
        echo "$(date): Moved '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      else
        echo "$(date): ERROR: Failed to move '$file' to '$ARCHIVE_DIR'." >> "$LOG_FILE"
      fi
    fi
  done
  sleep 5
done

고급 스크립트 테스트하기

이제 스크립트가 완성되었으므로 테스트해 보겠습니다! 일반적으로 스크립트를 백그라운드에서 실행한 다음(예: ./monitor.sh &), $MONITOR_DIR에 테스트 파일을 만들고 $LOG_FILE과 $ARCHIVE_DIR을 관찰합니다.

모니터링 스크립트용 테스트 파일을 쉽게 만들 수 있는 간단한 스크립트도 실행해 보겠습니다.

#!/bin/bash
# create_test_file.sh

MONITOR_DIR="/tmp/coddykit_monitor"
mkdir -p "$MONITOR_DIR" # Ensure dir exists for this test script

# Create a unique test file
TEST_FILE="$MONITOR_DIR/test_log_$(date +%Y%m%d_%H%M%S).txt"
echo "This is a test entry." > "$TEST_FILE"
echo "Another line for testing." >> "$TEST_FILE"
echo "Created new test file: $TEST_FILE"

스크립트 로직 검토

고급 스크립트에서는 여러 개념을 함께 사용합니다. 사용한 핵심 명령과 구조를 간단히 검토해 보겠습니다.

각 명령이 프로젝트 목표를 달성하는 데 어떤 역할을 하는지 생각해 보세요.

한 단계 더 나아가기: 예약 실행 및 사용자 지정

이 스크립트는 계속 실행되도록 설계되었습니다. 실제 환경에서는 nohup ./script.sh &를 사용해 백그라운드에서 실행하거나, 더 일반적으로 Cron을 사용해 주기적으로 실행하도록 예약할 수 있습니다.

Cron은 이와 같은 작업을 자동화하는 데 적합합니다. 몇 분마다 실행하여 디렉터리를 확인하고 필요에 따라 파일을 처리하도록 예약할 수 있습니다.

다음과 같이 사용자 지정해 보세요.

  • 다른 파일 형식을 처리합니다.
  • 다른 작업을 수행합니다(예: 파일 압축, 클라우드 업로드).
  • 더 고급 오류 보고 기능을 추가합니다(예: 이메일 알림).

프로젝트 정리 및 다음 단계

축하합니다! 다양한 Linux 명령과 스크립팅 기법을 결합한 고급 Bash 스크립팅 프로젝트를 완료하셨습니다.

다음 방법을 배웠습니다.

  • 안정적으로 오랫동안 실행되는 스크립트를 구성합니다.
  • 구성에 변수를 사용합니다.
  • 지속적인 모니터링을 위해 반복문을 구현합니다.
  • find, wc, mv와 같은 명령을 조합합니다.
  • trap으로 오류를 처리하고 정상적으로 종료합니다.

이 프로젝트는 더 복잡한 자동화 솔루션을 구축하는 데 탄탄한 기반이 됩니다. 계속 실험하고 만들어 보세요!

자주 묻는 질문

“고급 스크립팅 프로젝트” 강의는 무료인가요?

네 — “고급 스크립팅 프로젝트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Linux Command Line & Bash Scripting Mastery 강의 전체를 잠금 해제할 수 있습니다. Linux Command Line & Bash Scripting Mastery 강의에는 총 4개의 강의가 포함되어 있습니다.

“고급 스크립팅 프로젝트”에서 뭘 배우나요?

명령줄 도구부터 고급 Bash 스크립팅 기법까지 지금까지 배운 모든 개념을 통합하는 종합 프로젝트를 진행합니다. 브라우저에서 직접 실행하는 실습 코드로 Linux Command Line & Bash Scripting Mastery을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Linux Command Line & Bash Scripting Mastery을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Linux Command Line & Bash Scripting Mastery은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“고급 스크립팅 프로젝트” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Linux Command Line & Bash Scripting Mastery 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Linux Command Line & Bash Scripting Mastery 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Cron으로 작업 예약하기
  2. 시스템 관리 자동화
  3. 고급 스크립팅 프로젝트
  4. 자동 로그 순환 및 정리
← Linux Command Line & Bash Scripting Mastery(으)로 돌아가기