카테고리 없음

리눅스 쉘프로그래밍

오스카리 2025. 5. 20. 01:52

리눅스 쉘 프로그래밍은 셸(Shell) 이라는 텍스트 기반 명령어 인터페이스를 이용하여 명령어의 조합, 자동화, 반복 작업 등을 스크립트로 작성하는 기법입니다.
이것은 시스템 관리, 데이터 처리, 배치 작업 등에 필수적으로 활용됩니다.


1. 셸(Shell) 이란?

  • 사용자가 리눅스 시스템과 명령어로 소통하는 인터페이스
  • 명령어 입력 → 커널이 실행 → 결과 출력 구조
  • 가장 대표적인 셸: Bash (Bourne Again Shell)

2. 쉘 스크립트란?

  • 여러 명령어를 파일에 저장하고, 이를 한꺼번에 실행할 수 있도록 구성한 스크립트 파일
  • 파일 확장자: .sh (표준 관례)
  • 실행 방법:
  • bash script.sh 또는 chmod +x script.sh ./script.sh

3. 쉘 스크립트 기본 구조

#!/bin/bash        # 인터프리터 선언 (필수)

echo "Hello, world"   # 출력

4. 기본 문법

1) 변수

name="홍길동"
echo "이름은 $name"

변수 이름 앞에는 $를 붙여 접근
등호(=) 좌우에는 공백이 없어야 함


2) 조건문

if [ "$name" = "홍길동" ]; then
    echo "이름이 홍길동입니다"
else
    echo "다른 사람입니다"
fi

[ ] 안에는 조건식을 쓰며, 공백이 반드시 있어야 함
문자열 비교는 =, 정수는 -eq, -gt, -lt 등 사용


3) 반복문

for i in 1 2 3
do
    echo "반복: $i"
done

또는

i=1
while [ $i -le 3 ]
do
    echo "i: $i"
    i=$((i+1))
done

4) 함수

greet() {
    echo "안녕하세요"
}
greet

5) 인자(argument) 처리

echo "첫 번째 인자: $1"
echo "전체 인자: $@"

쉘 실행 시:

./script.sh A B

출력:

첫 번째 인자: A
전체 인자: A B

5. 자주 쓰이는 명령어와 용도

명령어 설명 예시

echo 문자열 출력 echo "Hello"
read 사용자 입력 받기 read name
if 조건 분기 [ "$a" -gt 5 ]
for 반복 처리 for i in ...
cut 문자열 분할 cut -d':' -f1 /etc/passwd
awk 텍스트 필드 분석 및 처리 awk '{print $1}' file
sed 텍스트 치환, 편집 sed 's/old/new/g' file
grep 문자열 검색 grep "ERROR" log.txt
date 날짜/시간 출력 date +"%Y-%m-%d"
cron 예약 실행 설정 (crontab) crontab -e

6. 예제 스크립트

예제 1: 백업 자동화 스크립트

#!/bin/bash

today=$(date +"%Y%m%d")
backup_file="backup_$today.tar.gz"
tar -czf $backup_file /home/user/data

echo "백업 완료: $backup_file"

예제 2: 에러 로그 감지

#!/bin/bash

logfile="/var/log/syslog"
grep "error" $logfile > error_only.log

echo "에러 로그 저장 완료"

7. 실행 권한 설정 및 실행

chmod +x script.sh   # 실행 권한 부여
./script.sh          # 실행

8. 스크립트 디버깅

bash -x script.sh   # 명령 실행 단계별로 확인 가능

9. 실무 활용 사례

분야 예시 스크립트

시스템 관리 사용자 추가, 로그 정리, 디스크 공간 감시
네트워크 점검 ping 자동화, 포트 체크
보안 감시 로그인 실패 알림, 파일 권한 변경 감지
자동화 배치 데이터 정리, 리포트 이메일 전송
서비스 감시 ps, netstat, systemctl 상태 점검 자동화

한 줄 요약

리눅스 쉘 프로그래밍은 명령어를 자동화하고 반복 작업을 효율적으로 처리하기 위한 필수 스킬이며, 시스템 관리, 백업, 로그 분석 등에 널리 활용된다.


요약 표

항목 설명 예시

기본 파일형태 .sh 확장자, #!/bin/bash 포함 script.sh
변수 사용 $변수명 name="홍길동"
조건문 if [ 조건 ]; then ... fi [ "$a" = "yes" ]
반복문 for, while for i in 1 2 3
인자 처리 $1, $2, $@ 등 ./script.sh arg1 arg2
자동화 기능 cron 예약 실행, 로그 감시, 백업 crontab -e, grep error
핵심 명령어 echo, grep, awk, sed grep "fail" log.txt

리눅스에서 서버 헬스 체크 자동화 스크립트는 시스템 자원 상태(CPU, 메모리, 디스크, 네트워크, 프로세스 등)를 정기적으로 점검하고, 이상이 있을 경우 관리자에게 알림(Slack, 이메일 등)을 전송하는 용도로 사용됩니다.
이 기능은 운영 서버의 안정성 유지, 모니터링 자동화에 핵심적입니다.


1. 서버 헬스 체크 기본 항목

체크 항목 점검 내용 명령어 예시

CPU 사용률 CPU 점유율 과다 여부 top, mpstat, uptime
메모리 사용량 사용량이 90% 이상인지 free -m, vmstat
디스크 사용량 특정 마운트의 사용량이 임계치 초과 여부 df -h, du -sh /경로
네트워크 상태 ping 응답, 연결 확인 ping, netstat, ss
프로세스 확인 특정 서비스가 실행 중인지 ps, systemctl, pgrep
로그 점검 오류 로그 발생 여부 grep "error" /var/log/syslog

2. 헬스 체크 쉘 스크립트 예제

예제: 기본 점검 + Slack 알림 포함

#!/bin/bash

# Slack Webhook 설정
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/여기에_URL_입력"

# CPU 체크 (load average)
cpu_load=$(uptime | awk -F 'load average: ' '{ print $2 }' | cut -d',' -f1)
cpu_threshold=2.0

# 메모리 체크
mem_used=$(free -m | awk '/Mem:/ {print $3}')
mem_total=$(free -m | awk '/Mem:/ {print $2}')
mem_ratio=$(( 100 * mem_used / mem_total ))

# 디스크 체크
disk_usage=$(df / | grep / | awk '{print $5}' | sed 's/%//')
disk_threshold=90

# 경고 누적
warn_msg=""

# CPU 부하 경고
cpu_check=$(echo "$cpu_load > $cpu_threshold" | bc)
if [ "$cpu_check" -eq 1 ]; then
    warn_msg+="⚠️ CPU Load 높음: 현재 $cpu_load (임계값 $cpu_threshold)\n"
fi

# 메모리 경고
if [ "$mem_ratio" -gt 85 ]; then
    warn_msg+="⚠️ 메모리 사용률 과다: ${mem_ratio}% 사용 중\n"
fi

# 디스크 경고
if [ "$disk_usage" -gt "$disk_threshold" ]; then
    warn_msg+="⚠️ 디스크 사용량 과다: ${disk_usage}% 사용 중\n"
fi

# 알림 전송
if [ -n "$warn_msg" ]; then
    payload="{\"text\": \"🚨 서버 헬스체크 경고\n$warn_msg\"}"
    curl -X POST -H 'Content-type: application/json' --data "$payload" "$SLACK_WEBHOOK_URL"
else
    echo "정상 상태"
fi

3. crontab에 등록하여 정기 실행

crontab -e
*/10 * * * * /home/user/scripts/server_health.sh

→ 10분마다 스크립트를 자동 실행


4. 주요 확장 기능

확장 기능 구현 방식

Slack 외 이메일 알림 mail, ssmtp, sendmail 사용
로그 파일 저장 >> /var/log/healthcheck.log로 출력 저장
여러 서버 모니터링 for server in ...; do ssh ... done 사용
JSON 포맷 응답 전송 Slack 메시지에 block-kit 구조 사용
웹서버 상태 확인 `curl -Is http://localhost:80

5. 서버 헬스 리포트 샘플 출력

🚨 서버 헬스체크 경고
⚠️ CPU Load 높음: 현재 3.15 (임계값 2.0)
⚠️ 메모리 사용률 과다: 87% 사용 중
⚠️ 디스크 사용량 과다: 92% 사용 중

한 줄 요약

서버 헬스 체크 스크립트는 CPU, 메모리, 디스크 등 시스템 상태를 주기적으로 점검하고, 임계치를 초과하면 Slack 등으로 자동 경고를 보내는 실시간 모니터링 도구다.


요약 표

항목 내용 명령 예시

CPU 점검 load average 확인 uptime
메모리 점검 사용률 계산 (used/total) free -m
디스크 점검 퍼센트 초과 여부 확인 df -h
경고 메시지 Slack에 JSON 포맷으로 전송 curl -X POST ...
자동 실행 crontab에 등록 */5 * * * * script.sh
확장 옵션 로그 저장, JSON 응답, 이메일 연동 등 가능 mail, tee, ssmtp, logger 등

leeoscar.tistory.com

 

반응형