카테고리 없음
리눅스 쉘프로그래밍
오스카리
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
반응형