분류 전체보기 (248)
2025-09-18 23:03:46
반응형

🚀 배포, 프로비저닝 및 자동화 (Deployment, Provisioning & Automation)

1. 도메인 개요

  • 비중: 시험 점수의 약 18%
  • 핵심 테마
    1. 클라우드 리소스의 프로비저닝 및 유지 관리
    2. 반복 가능한 프로세스 자동화

2. 주요 학습 주제

(1) 리소스 프로비저닝 및 유지 관리

  • EC2 AMI: AMI 생성·관리 (Image Builder 활용 포함)
  • CloudFormation: IaC(Infrastructure as Code)로 스택 생성·관리, 문제 해결
  • 리전·계정 간 리소스 관리
    • Resource Access Manager (RAM)
    • CloudFormation StackSets
    • IAM Cross-Account Role
  • 배포 전략
    • Blue-Green
    • Rolling Update
    • Canary Deployment
  • 서비스 할당량(Service Quotas)
    • 자원 제한 이유 (안정성·보안)
    • 제한 상향 요청 방법
  • 오류 대응
    • VPC/서브넷 크기 설정
    • CloudFormation 템플릿 오류
    • OpsWorks 에러 처리

(2) 수동 또는 반복 가능한 프로세스 자동화

  • 자동화 도구
    • CloudFormation (IaC)
    • AWS OpsWorks (Chef, Puppet)
    • Elastic Beanstalk (애플리케이션 배포 자동화)
    • AWS Systems Manager (패치 관리, Run Command, Automation Runbooks)
  • 이벤트 기반 자동화
    • Amazon EventBridge → 일정·이벤트 기반 작업 트리거
    • AWS Config → 규정 위반 시 자동 조치
  • 자동화 시나리오
    • 정기 패치 관리
    • 인스턴스 자동 시작·중지
    • 리소스 정책 자동 수정

3. 시험에서 나올 수 있는 예시 포인트

  • AMI 생성·배포 프로세스에 대한 질문
  • CloudFormation 스택 오류 원인 분석
  • 서비스 할당량 초과 → 해결 방법? (Quotas 변경 요청)
  • Blue-Green/Canary 배포 전략 비교
  • Systems Manager Automation으로 패치 관리 자동화
  • EventBridge 규칙으로 특정 이벤트 발생 시 Lambda 실행

4. 실무 적용 인사이트

  • 운영자가 직접 리소스를 생성·변경하는 대신 IaC 및 자동화로 표준화된 환경 제공
  • 반복 작업 최소화 → 인적 오류 감소
  • 배포 전략(Blue-Green 등)을 통해 무중단 배포 가능
  • 서비스 할당량 관리로 장애 예방
  • 자동화 도구 조합 (CloudFormation + Systems Manager + EventBridge)으로 운영 효율성 극대화

핵심 요약
배포, 프로비저닝 및 자동화는 AWS 인프라를 표준화·자동화하여 운영 효율성을 극대화하는 영역입니다.
시험에서는 AMI, CloudFormation, 배포 전략, 자동화 서비스(EventBridge, Systems Manager, Config) 관련 문제가 자주 출제되며,
실무에서는 반복 작업 자동화 + 무중단 배포 전략이 가장 중요한 포인트입니다.


🚀 배포, 프로비저닝 및 자동화에 대한 이해

1. 개념 정리

  • 배포(Deployment)
    애플리케이션과 인프라를 특정 환경(개발, 테스트, 운영)에 올려 실행하는 과정
    → 예: Blue-Green, Rolling, Canary 배포 전략
  • 프로비저닝(Provisioning)
    클라우드 자원(EC2, VPC, DB 등)을 생성·구성하여 애플리케이션이 실행될 기반을 마련하는 것
    → 예: EC2 인스턴스 생성, VPC 서브넷 설정
  • 자동화(Automation)
    반복되는 작업(패치, 업데이트, 백업 등)을 스크립트·도구로 자동 실행하는 것
    → 예: Systems Manager Run Command, EventBridge 스케줄링

2. CloudFormation의 핵심 이점

  • 인프라를 코드(IaC) 로 관리
    • JSON/YAML 템플릿으로 전체 아키텍처 정의
    • 버전 관리 및 검토 가능 → GitOps 적용
  • 표준화와 재사용성
    • 동일한 아키텍처를 여러 리전·계정에 손쉽게 배포
  • 업데이트 및 복구 용이
    • 스택 업데이트, 롤백 기능 → 장애 시 빠른 복원
  • 자동화된 배포 파이프라인과 연계
    • CodePipeline + CloudFormation → CI/CD 자동화

3. Systems Manager와 운영 자동화

  • Run Command: 여러 EC2 인스턴스에 동시에 명령 실행
  • Patch Manager: 자동 패치 적용 및 관리
  • Automation Runbook: 미리 정의된 운영 절차 자동 실행
  • State Manager: 서버 설정 자동 유지

👉 장점: 수십·수백 대 서버 운영 시 인적 오류 최소화, 반복 작업 자동화


4. 자동화 사례

  • 자동 패치 관리: 새벽 시간대에 OS 업데이트 예약
  • 트래픽 비활성 시간 업데이트: 피크 시간대 피해서 배포
  • 로그 집계 및 보관: 월 1회 자동 실행
  • 자동 시작·중지: 비용 최적화를 위해 업무 시간 외 인스턴스 종료

5. 정리

  • CloudFormation → 인프라 표준화 & 코드 기반 관리
  • Systems Manager → 대규모 서버 운영 효율화
  • 자동화 → 인적 오류 줄이고, 비용·운영 효율성 향상

💡 핵심 요약
배포·프로비저닝·자동화를 이해하면 AWS를 더 쉽고 안전하게 운영할 수 있고,
시험에서도 CloudFormation, Systems Manager, 배포 전략, 자동화 도구(EventBridge, Config)가 자주 출제됩니다.


 

반응형

'AWS > Skill Builder_AWS SOA-C02' 카테고리의 다른 글

AWS SOA-C02 Domain 1 Review  (0) 2025.09.18
2025-09-18 22:38:41
반응형

☁️ AWS 모니터링 · 로깅 · 문제 해결 정리

1. 왜 중요한가?

  • 운영 환경에서 발생하는 성능 저하, 장애, 보안 위협을 빠르게 감지하고 대응할 수 있음
  • 비용 최적화, 자동화, 보안 강화와도 직결
  • AWS 자격증 시험 비중이 약 20%로 매우 큼
  • 실제 실무에서도 트러블슈팅 경험을 가장 많이 쌓을 수 있는 영역

2. 주요 영역

(1) 로그와 지표 데이터 수집·분석

  • CloudWatch Metrics: 지표 수집 (CPU, 메모리, 네트워크 등)
  • CloudWatch Logs: 애플리케이션·시스템 로그 저장
  • CloudWatch Logs Insights: 로그 검색·쿼리
  • CloudTrail: API 호출 기록 추적 (보안·컴플라이언스 핵심)
  • CloudWatch 대시보드: 지표 시각화
  • 경보(Alarm): 특정 임계값 초과 시 알림(SNS 연계)

(2) 문제 탐지 및 대응

  • Amazon EventBridge: 이벤트 기반 자동화
  • AWS Systems Manager: 자동화된 운영/패치/런북 실행
  • AWS Config: 리소스 형상 추적 및 규정 준수 확인
  • AWS Health Dashboard: AWS 서비스 장애/점검 알림
  • Service Quotas: 리소스 제한 모니터링

3. 문제 해결 절차 (Troubleshooting Flow)

  1. 이상 감지 → CloudWatch 지표/알람
  2. 원인 분석 → CloudWatch Logs / Logs Insights
  3. 보안 이벤트 확인 → CloudTrail, GuardDuty
  4. 자동화 대응 → EventBridge + Systems Manager Automation
  5. 사후 점검 → AWS Config 규칙·리포트, Cost Explorer 비용 확인

4. 시험과 실무 적용

  • 시험 포인트
    • CloudWatch, CloudTrail, SNS, EventBridge, Systems Manager, AWS Config 간의 상호작용 이해
    • “장애 발생 → 로그 분석 → 알림 → 자동화 대응” 시나리오 문제 자주 출제
  • 실무 포인트
    • 경보(Alert) → Slack/MS Teams 알림 연계
    • 로그 분석 → 문제 재현/재발 방지
    • 비용 관리 → 비정상 리소스 탐지 및 종료

💡 핵심 요약

AWS 모니터링·로깅·문제 해결은 단순한 문제 감지를 넘어서,
보안·비용 최적화·자동화 운영까지 연결되는 영역이며,
CloudWatch + CloudTrail + Config + Systems Manager를 중심으로 학습하는 것이 가장 효과적입니다.


☁️ 모니터링 · 로깅 · 수정 (Monitoring, Logging & Remediation)

1. 왜 중요한가?

  • 문제를 빠르게 감지하고 고객 피해를 최소화
  • 환경의 최적 상태와 성능 유지
  • 보안·자동화·비용 최적화에도 직결
  • 시험 비중도 높고, 실무 활용도가 매우 큼

2. 실제 사례: 소매 업체 웹사이트

  • 상황: 상품 카탈로그와 실제 재고를 비교하는 앱이 다운됨
    • 모니터링 없음 → 고객이 재고 없는 상품을 구매 가능, 주문 지연 → 고객 불만 ↑
    • 모니터링 있음 → CloudWatch 지표·로그 → 알람 발생 → SNS로 담당자 알림 → 문제 조기 해결 가능

👉 장점: 고객 경험 개선, 피해 최소화
👉 단점: 담당자가 새벽에도 대응해야 할 수도 있음


3. AWS 모니터링·로깅 구성 요소

  • Amazon CloudWatch
    • 지표 수집 (Metrics)
    • 로그 수집 (Logs, Logs Insights)
    • 경보 (Alarms)
    • 대시보드 (Dashboards)
  • Amazon SNS
    • 경보/이벤트 알림 발송
  • AWS CloudTrail
    • API 호출 추적 (보안/컴플라이언스)
  • AWS Config
    • 리소스 변경 추적, 규정 준수 확인
  • AWS Systems Manager
    • 런북 기반 자동화된 수정(Remediation)
  • Amazon EventBridge
    • 이벤트 기반 자동화

4. 운영 인사이트 활용

  • 상태 점검: 장기 지표·로그 데이터 축적 → 추세 분석
  • 벤치마크 테스트: 성능 및 안정성 기준 측정
  • 자동화: 반복되는 수정 작업을 EventBridge + Systems Manager로 자동화
  • 비용 최적화: 모니터링 데이터로 리소스 크기·종류 조정

5. 아키텍처 다이어그램 (예시)

 

핵심 요약

모니터링·로깅·수정은 단순히 “문제 발생 시 확인” 수준을 넘어,
신뢰성, 비용 효율성, 보안, 자동화를 모두 뒷받침하는 AWS 운영의 필수 기술입니다.
CloudWatch·CloudTrail·SNS·Config·Systems Manager·EventBridge를 중심으로 학습하고,
실제 아키텍처 시나리오에 적용해 보는 것이 가장 효과적인 학습 방법입니다.

반응형

'AWS > Skill Builder_AWS SOA-C02' 카테고리의 다른 글

AWS SOA-C02 Domain 3 Review  (0) 2025.09.18
2025-09-18 11:31:50
반응형
# openjdk 검색
docker search openjdk

 

# docker mysql
docker search mysql

 

# 실행 중인 컨테이너만 표시
docker container ls

# 컨테이너 전체 목록 표시 (실행 중 및 정지 상태)
docker container ls -a

반응형

'Cloud Engineering Bootcamp > 6. Docker' 카테고리의 다른 글

03. 도커(Docker) 설치하기  (0) 2025.09.18
02. 도커(Docker) 사용하기  (0) 2025.09.18
01. 도커(Docker) 이해하기  (0) 2025.09.17
2025-09-18 01:12:03
반응형

🐳 리눅스(Ubuntu)에서 Docker 설치하기

1. 사전 준비 사항

필요한 패키지 설치

sudo apt-get update  
# 패키지 목록을 최신으로 갱신

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
# 도커 설치에 필요한 기본 도구 설치
# - ca-certificates : 보안 인증서 관련
# - curl : 인터넷에서 파일 다운로드
# - gnupg : 보안 키 관리
# - lsb-release : Ubuntu 버전 확인용

2. GPG 키 추가

sudo mkdir -m 0755 -p /etc/apt/keyrings
# 도커 키를 저장할 폴더 생성 (권한 0755)

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
    sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 도커 공식 GPG 키를 다운로드 후 변환하여 저장


3. Docker 리포지토리 추가

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 도커 소프트웨어를 받을 수 있는 저장소(repository)를 시스템에 등록
 
 
 
 

4. Docker 엔진 설치

sudo apt-get update
# 저장소 등록 후 다시 패키지 목록 업데이트

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 도커 본체와 관련 도구 설치
# - docker-ce : 도커 엔진 (Community Edition)
# - docker-ce-cli : 도커 명령어 도구
# - containerd.io : 컨테이너 관리 런타임
# - docker-buildx-plugin : 확장 빌드 도구
# - docker-compose-plugin : 여러 컨테이너 실행 도구
 

💡 설치 중 Y 를 입력해야 설치가 진행됩니다.


5. 설치 확인

docker # 도커 명령어 실행 → 사용 가능한 옵션이 나오면 정상 설치


6. 도커 서비스 상태 확인

systemctl status docker # 도커 서비스가 실행 중인지 확인 # active (running) 이 나오면 정상 실행 중


7. 일반 사용자도 도커 사용 가능하게 설정

sudo usermod -aG docker $USER
# 현재 사용자를 docker 그룹에 추가 → sudo 없이 사용 가능

exit
# 세션 종료 후 다시 로그인해야 반영됨


8. 도커 버전 확인

docker version # 도커 클라이언트/서버 버전 확인


9. 샘플 실행 (Hello World)

docker run hello-world 

# 도커 허브에서 hello-world 이미지 다운로드 후 실행 
# 정상 설치 시 안내 메시지 출력


📊 설치 과정 시각화 (Mermaid)

 

 


🔧 현업에서 도커 설치 후 하는 일

  1. 개발 환경 구축
    • 팀원이 같은 환경에서 개발 → 환경 차이 줄임
  2. 테스트 서버 운영
    • docker-compose 로 웹 서버, DB, 캐시 서버 쉽게 띄움
  3. 자동 배포 파이프라인 구축 (CI/CD)
    • 깃허브 푸시 → 도커 이미지 빌드 → 서버 자동 배포
  4. 클라우드 서비스 연계
    • AWS ECS, EKS, GCP GKE 등에서 컨테이너 기반 운영

✅ 정리

  • Docker 설치는 패키지 준비 → 키 등록 → 저장소 추가 → 엔진 설치 순서
  • 설치 후 docker run hello-world 로 정상 동작 여부 확인
  • 현업에서는 개발환경 통일, 테스트 자동화, 마이크로서비스 운영에 필수

 

더보기

🐳 Ubuntu에서 Docker 설치 요약

1. 사전 준비

sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release

2. GPG 키 추가

sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
 

3. 리포지토리 등록

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. Docker 설치

sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5. 설치 확인

docker # 명령어 확인 
systemctl status docker # 실행 상태 확인 
docker version # 버전 확인

6. 일반 사용자 권한 추가

sudo usermod -aG docker $USER 
exit # 로그아웃 후 다시 로그인

7. 샘플 실행

docker run hello-world

📊 설치 흐름 (Mermaid)

 
 

✅ 현업 활용

  • 팀원 모두 같은 개발환경 공유
  • 테스트/운영 서버에 빠른 배포
  • CI/CD 자동화 (GitHub, Jenkins와 연동)
  • 클라우드 연계 (AWS ECS/EKS, GCP GKE 등)

 

반응형
2025-09-18 00:59:19
반응형

# 🐳 Docker 사용 가이드

## 1. 도커 구성 요소

### 📌 주요 구성요소

- **Docker Client (docker-cli)**  
    사용자가 터미널에서 명령어 입력 (예: `docker run`)
    
- **Docker Daemon (dockerd)**  
    백그라운드에서 실행, 컨테이너/이미지 관리
    
- **containerd**  
    컨테이너의 전체 생애주기 관리 (생성, 실행, 중지, 삭제)
    
- **runc**  
    실제 컨테이너 실행 담당
    
- **containerd-shim**  
    containerd ↔ runc 중간 연결자, 실행 조정
    

---

### 📊 도커 구성요소 다이어그램

```mermaid
flowchart TD
    A["사용자 (Docker CLI)"] --> B["Docker Daemon (dockerd)"]
    B --> C["containerd (컨테이너 생애주기 관리)"]
    C --> D["runc (컨테이너 실행)"]
    C --> E["containerd-shim (중개자)"]
```


---

## 2. 도커 실행 환경

- **리눅스**: 바로 설치 가능 (CLI 환경 위주)
    
- **윈도우 / macOS**:
    
    - Docker Desktop 패키지 사용 (내부적으로 리눅스 VM 실행)
        
    - 사용자는 VM 신경 안 쓰고 일반 프로그램처럼 실행 가능
        

---

### 📋 도커 Desktop 요구사항

- **윈도우**
    
    - Windows 10 64bit (Pro, Enterprise, Education) / Build 16299 이후
        
    - Home 버전은 WSL2 필요
        
    - CPU 가상화(SLAT) 지원, 메모리 4GB 이상
        
- **macOS**
    
    - 2010년 이후 모델
        
    - macOS 10.13 이후, 메모리 4GB 이상
        
- **리눅스**
    
    - Ubuntu 16.04 이후 등 주요 배포판 지원
        

---

## 3. 도커 동작 방식

### 📊 동작 흐름

```mermaid
sequenceDiagram
    participant U as 사용자 (docker run)
    participant C as Docker Client
    participant D as Docker Daemon
    participant H as Docker Hub
    participant N as Container

    U->>C: docker run hello-world
    C->>D: 명령 전달
    D->>H: 이미지 요청 (hello-world)
    H-->>D: 이미지 다운로드
    D->>N: 컨테이너 생성 및 실행
    N-->>U: 실행 결과 출력
```



---

### 📦 이미지와 컨테이너

- **이미지(Image)**
    
    - 프로그램 + 라이브러리 + 설정을 묶은 패키지
        
    - "빵틀" 같은 역할
        
    - 여러 개의 "레이어(Layer)"로 구성
        
- **컨테이너(Container)**
    
    - 이미지를 실행한 인스턴스
        
    - 실행/중지/삭제 가능
        
    - 독립된 파일 시스템과 환경을 가짐
        

---

## 4. 도커 첫 실행 (Hello World)

### 🚀 명령어

`# 도커 "hello-world" 컨테이너 실행 docker run hello-world`  

### 📝 한 줄씩 설명

- `docker` → 도커 명령어 실행
    
- `run` → 새로운 컨테이너를 실행하겠다는 의미
    
- `hello-world` → Docker Hub에서 제공하는 기본 테스트 이미지
    

---

### ⚡ 실행 과정

1. 사용자가 `docker run hello-world` 입력
    
2. Docker Client → Docker Daemon에 명령 전달
    
3. Daemon이 Docker Hub에서 이미지 다운로드
    
4. Daemon이 컨테이너 생성 및 실행
    
5. 실행 결과를 사용자 터미널에 출력
    

---

## 5. 컨테이너가 가벼운 이유

- 운영체제를 하나씩 포함하는 VM과 달리,  
    **호스트 OS 커널을 공유**해서 불필요한 리소스 사용이 없음.
    
- 따라서 실행 속도도 빠르고, 메모리/디스크 효율도 좋음.
    

---

## 6. 현업에서 도커 활용 사례

- **개발 환경 공유**
    
    - 팀원 모두 같은 개발 환경 사용 (환경 차이로 인한 문제 방지)
        
- **테스트 및 배포 자동화 (CI/CD)**
    
    - GitHub Actions, Jenkins, GitLab CI/CD와 연계해 자동 배포
        
- **마이크로서비스 운영**
    
    - 여러 개의 독립적인 컨테이너로 서비스 운영 (예: 웹, DB, 캐시 분리)
        
- **클라우드 환경과 결합**
    
    - AWS ECS, EKS / GCP GKE / Azure AKS 등과 함께 사용
        

---

# ✅ 정리

- 도커는 **이미지 → 컨테이너 실행 구조**
    
- **Docker CLI → Daemon → containerd → runc** 흐름
    
- 현업에서는 **개발환경 통일, 자동화 배포, 마이크로서비스 운영**에 필수
    

---

👉 여기까지 하면 **도커 사용 구조 + 설치 + 동작 원리 + Hello World 실습**을 전체적으로 이해할 수 있어요.

반응형
2025-09-17 13:51:45
반응형

# 🐳 Docker 가상화 및 컨테이너 관리

## 1. 도커(Docker) 이해하기

### 📌 도커란?

- **도커(Docker)** 는 **프로그램을 격리해서 실행**시켜주는 도구예요.
    
- "내 컴퓨터에서는 되는데, 다른 컴퓨터에서는 안 돼!" 👉 이런 문제를 해결해줘요.
    
- **컨테이너(Container)** 라는 상자 안에 프로그램을 넣고 실행합니다.
    
- 가상머신(VM)보다 **가볍고 빠르다**는 장점이 있어요.
    

---

## 2. 가상화 vs 컨테이너


```mermaid
flowchart LR
    A["물리 서버<br/>💻"] --> B["가상화 (VM)<br/>🗂️"]
    A --> C["컨테이너 (Docker)<br/>📦"]

    B --> B1["운영체제 포함<br/>⚙️"]
    B --> B2["리소스 사용 많음<br/>📈"]

    C --> C1["공유 OS 위 실행<br/>⚡"]
    C --> C2["리소스 사용 적음<br/>💡"]
```



- **가상화(VM)**: 운영체제(OS)를 여러 개 띄워서 무거움.
    
- **컨테이너(Docker)**: 운영체제를 공유하므로 가볍고 빠름.
    

---

## 3. 도커의 기본 개념

- **이미지(Image)**: 프로그램을 찍어낼 수 있는 "빵틀" 같은 것.
    
- **컨테이너(Container)**: 이미지를 실행해서 만들어진 "빵" 같은 것.
    
- **도커 엔진(Docker Engine)**: 컨테이너를 만들고 실행시키는 프로그램.
    
- **도커 허브(Docker Hub)**: 전 세계 사람들이 만든 이미지를 공유하는 "앱스토어" 같은 곳.
    

---

## 4. 도커 컨테이너 생애주기

```mermaid
flowchart TD
    A[📦 이미지] --> B[▶️ 컨테이너 생성]
    B --> C[⏸️ 실행 중]
    C --> D[⏹️ 중지]
    D --> E[🗑️ 삭제]
    C --> F[🔄 새로운 버전으로 교체]
```



- 컨테이너는 **일회용품**처럼 쓰고 버리는 게 기본.
    
- 데이터는 **호스트 서버 디스크**에 따로 저장해두어야 안전해요.
    

---

## 5. 도커의 장점과 단점

|✅ 장점|⚠️ 단점|
|---|---|
|한 대의 서버에 여러 개 실행 가능|리눅스 프로그램만 지원|
|관리하기 쉽다|서버가 죽으면 컨테이너도 영향|
|개발환경 통일|컨테이너 1개만 쓰면 비효율|

---

## 6. 도커 기본 명령어 예시 (한 줄씩 주석 포함)


```bash
# 도커 허브에서 nginx(웹 서버) 이미지 다운로드
docker pull nginx  

# nginx 이미지를 이용해 컨테이너 실행 (이름을 myweb으로 지정)
docker run --name myweb -d -p 8080:80 nginx  

# 현재 실행 중인 컨테이너 확인
docker ps  

# 컨테이너 중지
docker stop myweb  

# 컨테이너 삭제
docker rm myweb  

# 이미지 삭제
docker rmi nginx  
```


📝 **설명**


- `docker pull nginx` → "nginx라는 빵틀을 가져온다"
    
- `docker run` → "그 빵틀로 빵(컨테이너)을 굽는다"
    
- `docker ps` → "지금 오븐에서 굽고 있는 빵들 확인"
    
- `docker stop` → "빵 굽는 거 멈추기"
    
- `docker rm` → "빵 버리기"
    
- `docker rmi` → "빵틀 버리기"
    

---

## 7. 현업에서 도커 활용 사례

- **개발 환경 통일**
    
    - 팀원 모두 같은 환경에서 개발 가능
        
    - "내 컴퓨터에서는 되는데?" 문제 해결
        
- **테스트 환경**
    
    - 새 버전 프로그램을 쉽게 테스트 가능
        
    - 예: 개발 → 테스트 → 운영 배포
        
- **마이크로서비스**
    
    - 여러 개의 작은 서버(웹, DB, API)를 컨테이너로 각각 실행
        
    - 서로 독립적이라 관리가 쉬움
        
- **CI/CD 자동화**
    
    - 깃허브 → 도커 빌드 → 서버 배포 자동화
        
    - 실무에서 **Jenkins, GitHub Actions, GitLab CI** 등과 자주 같이 씀
        

---

## 🚀 정리

- 도커는 **가볍고 빠른 가상화 기술**
    
- **이미지 → 컨테이너** 구조
    
- **현업에서는 개발환경 공유, 배포 자동화, 마이크로서비스 운영**에 필수

반응형
2025-09-17 11:44:34
반응형
login.sh: 6: [: admin: unexpected operator
#!/bin/bash
read -p "Enter your name: " NAME

if [ "$NAME" == "admin" ]; then
    echo "Welcome Administrator"
else
    echo "Welcome $NAME"
fi

🔎 왜 이런 에러가 뜰까?

  • == 비교 연산자는 bash에서만 지원됩니다.
  • 만약 스크립트를 sh login.sh 로 실행하면, sh 는 보통 dash라는 셸을 사용해요.
  • dash는 == 연산자를 모르는 셸 → 그래서 unexpected operator 에러가 나는 거예요.

✅ 해결 방법

방법 1: 무조건 bash로 실행

 
bash login.sh

방법 2: 스크립트 첫 줄 확인

첫 줄이 꼭 아래처럼 되어 있어야 해요 👇

 
#!/bin/bash

방법 3: POSIX 호환 코드로 바꾸기

== 대신 = 사용하면 sh에서도 동작합니다.

if [ "$NAME" = "admin" ]; then
#!/bin/bash
read -p "Enter your name: " NAME

if [ "$NAME" = "admin" ]; then
    echo "Welcome Administrator"
else
    echo "Welcome $NAME"
fi

🎯 정리

  • 원인: sh에서는 == 연산자를 지원하지 않아서 발생
  • 해결:
    • bash login.sh 로 실행하거나
    • 코드에서 == → = 로 바꾸면 됨
반응형

'Error > Linux' 카테고리의 다른 글

mail spool not found  (0) 2025.09.17
2025-09-17 11:03:35
반응형
userdel: projectx mail spool (/var/mail/projectx) not found

 

📌 왜 이런 메시지가 나올까?

리눅스에서 사용자를 만들면, 예전부터 메일 박스(메일 스풀) 디렉토리를 자동으로 같이 만들도록 되어 있었어요.

  • 위치: /var/mail/사용자이름 (또는 /var/spool/mail/사용자이름)
  • 용도: 서버가 내부에서 주고받는 시스템 메일 저장소

예시:

/var/mail/root
/var/mail/ubuntu
 
 

그런데 projectx 계정을 삭제하려고 할 때, 해당 메일 파일이 없으니까 경고성 메시지를 보여준 거예요.


📊 중요한 점

  • 이건 오류(error) 가 아니라 **알림(warning)**입니다.
  • “메일 저장소를 못 찾았지만 어차피 계정 삭제에는 문제없다”는 뜻이에요.
  • 즉, userdel 은 정상적으로 실행됐고, 계정도 삭제 완료 ✅

✅ 정리

  • /var/mail/projectx → 사용자용 메일 저장 폴더
  • not found 메시지 → 메일 박스가 아예 안 만들어져 있어서 못 지운다는 뜻
  • 계정 삭제는 정상 완료된 상태, 걱정 안 해도 됨
반응형

'Error > Linux' 카테고리의 다른 글

unexpected operator  (0) 2025.09.17
2025-09-17 09:24:21
반응형

1. 디렉토리 & 파일 관리

  1. 홈 디렉토리에 prac_final 디렉토리를 만들고 그 안에서 실습하세요.
  2. prac_final 안에 alpha, beta, gamma 세 디렉토리를 동시에 생성하세요.
  3. alpha 안에 src/config/log 디렉토리를 만들되 p 옵션을 사용하세요.
  4. /etc/passwd 파일을 alpha 로 복사하고, 이름을 passwd.txt 로 변경하세요.
  5. /etc/services 와 /etc/hosts 파일을 beta 디렉토리로 한꺼번에 복사하세요.
  6. passwd.txt 를 gamma 로 이동하면서 파일명을 passwd_backup.txt 로 변경하세요.
  7. alpha/src 디렉토리 전체를 beta 밑으로 복사하세요. (재귀 옵션 사용)
  8. gamma 디렉토리를 삭제하려고 시도한 후 실패 원인을 확인하세요.
  9. rm -r 옵션을 사용하여 gamma 디렉토리를 삭제하세요.
  10. 현재 디렉토리 구조를 확인하세요.
mkdir ~/prac_final                           # 1. prac_final 디렉토리 생성
cd ~/prac_final

mkdir alpha beta gamma                       # 2. alpha, beta, gamma 동시 생성

mkdir -p alpha/src/config/log                # 3. -p 옵션으로 중간 경로까지 생성

cp /etc/passwd alpha/passwd.txt              # 4. passwd 파일 복사 & 이름 변경

cp /etc/services /etc/hosts beta/            # 5. services, hosts 동시 복사

mv alpha/passwd.txt gamma/passwd_backup.txt  # 6. 이동하면서 이름 변경

cp -r alpha/src beta/                        # 7. 재귀 옵션으로 src 전체 복사

rmdir gamma                                  # 8. 실패 (디렉토리 비어있지 않음)

rm -r gamma                                  # 9. -r 옵션으로 디렉토리 삭제

tree                                         # 10. 디렉토리 구조 확인


2. vi + 권한 관리

  1. 홈 디렉토리에 project_final 디렉토리를 만들고 그 안으로 이동하세요.
  2. doc, src, backup 세 개의 하위 디렉토리를 만드세요.
  3. doc/guide.txt 파일을 생성한 후, vi 편집기를 이용해 다음 내용을 입력, 저장 후 종료하세요.
Linux Practice Project This is a final practice for vi editor and permission Only the owner can edit this file Team members can only read

     4. guide.txt 내용을 확인하세요.

     5. 다시 vi로 guide.txt를 열어,

  • 줄 번호 표시
  • 3번째 줄로 이동 후 해당 줄을 삭제
  • Project 라는 단어 검색
  • 저장 후 종료하세요.

 

       6.guide.txt 파일 권한을 다음과 같이 설정하세요.

  • 소유자(user): 읽기/쓰기 가능
  • 그룹(group), 기타(other): 읽기만 가능

       7. src 디렉토리에 run.sh 파일을 만든 뒤, vi로 열어 아래 내용을 입력, 저장 후 종료하세요.

#!/bin/bash echo
"Project script executed"

     8. run.sh 파일에 실행 권한을 부여하세요.

  • 소유자만 실행할 수 있도록

     9. backup 디렉토리에 guide.txt 파일을 복사하세요. 파일명은 guide.bak 으로 하세요.

    10. project_final 전체 디렉토리 구조와 권한을 확인하세요.

 

mkdir ~/project_final && cd ~/project_final    # 1. 디렉토리 생성 후 이동
mkdir doc src backup                           # 2. 하위 디렉토리 생성

vi doc/guide.txt                               # 3. 파일 작성 (vi 편집기)
# 내용 입력 후 저장:
# Linux Practice Project
# This is a final practice for vi editor and permission
# Only the owner can edit this file
# Team members can only read

cat doc/guide.txt                              # 4. 내용 확인

vi doc/guide.txt                               # 5. vi에서:
# :set nu        (줄 번호 표시)
# :3             (3번째 줄로 이동)
# dd             (줄 삭제)
# /Project       (단어 검색)
# :wq            (저장 후 종료)

chmod 644 doc/guide.txt                        # 6. 권한 설정 (u=rw, g=r, o=r)

vi src/run.sh                                  # 7. 실행 스크립트 작성
# 내용:
# !/bin/bash
# echo "Project script executed"

chmod 700 src/run.sh                           # 8. 소유자만 실행 가능

cp doc/guide.txt backup/guide.bak              # 9. guide.txt → guide.bak 복사

ls -lR                                         # 10. 전체 구조와 권한 확인


3. 프로세스 관리

  1. 현재 로그인한 셸(bash)의 프로세스 ID(PID)를 확인하세요.
  2. sleep 500 프로세스를 백그라운드로 실행하고, ps 명령으로 PID를 확인하세요.
  3. jobs 명령으로 현재 작업 목록을 확인하세요.
  4. 백그라운드에서 실행 중인 sleep 500 프로세스를 fg 명령으로 포그라운드로 전환해 보세요. (종료하지 말 것)
  5. 포그라운드에 있는 sleep 500 프로세스를 Ctrl+Z로 중지한 뒤, 다시 bg로 백그라운드에서 실행해 보세요.
  6. pgrep을 이용해서 실행 중인 sleep 프로세스의 PID를 출력하세요.
  7. kill -15 명령으로 해당 sleep 프로세스를 정상 종료하세요. 종료됐는지 ps 로 확인하세요.
  8. sleep 1000 프로세스를 실행한 뒤, kill -9 옵션으로 강제 종료하세요.
  9. top 명령을 실행해서 CPU 사용량 기준으로 정렬하세요. (P 키)
  10. top 안에서 PID를 직접 입력해 프로세스를 종료하는 방법을 실습해 보세요.


4. 사용자 관리

  1. 현재 시스템에 존재하는 사용자 계정 중 UID가 1000 이상인 일반 사용자 계정을 찾아보세요.
  2. projectx 라는 새 사용자를 홈 디렉토리와 함께 생성하고 암호를 설정하세요.
  3. projectx 의 기본 셸을 /bin/sh 로 변경하세요.
  4. devops 라는 그룹을 만들고, projectx를 해당 그룹에 추가하세요.
  5. projectx 의 UID를 2500 으로 변경하세요.
  6. devops 그룹에 임시로 암호를 설정한 뒤, 다시 해제하세요.
  7. who, w 명령으로 현재 로그인한 사용자 세션을 확인하세요.
  8. id projectx 를 실행하여 UID, GID, 소속 그룹을 확인하세요.
  9. /etc/passwd 와 /etc/shadow 파일을 열어 projectx 계정 항목이 어떻게 기록되는지 확인하세요.
  10. 마지막으로 projectx 계정을 홈 디렉토리와 함께 삭제하세요.
awk -F: '$3 >= 1000 {print $1,$3}' /etc/passwd   # 1. UID>=1000 사용자 확인

sudo useradd -m projectx                         # 2. 사용자 생성
sudo passwd projectx

sudo chsh -s /bin/sh projectx                    # 3. 기본 셸 변경

sudo groupadd devops                             # 4. 그룹 생성
sudo usermod -aG devops projectx

sudo usermod -u 2500 projectx                    # 5. UID 변경

sudo gpasswd devops                              # 6. 그룹 암호 설정
sudo gpasswd -r devops                           # 해제

who                                              # 7. 로그인 사용자 확인
w

id projectx                                      # 8. UID/GID 확인

grep projectx /etc/passwd /etc/shadow            # 9. 계정 정보 확인

sudo userdel -r projectx                         # 10. 사용자 삭제 (홈 포함)


5. 셸 사용

  1. 현재 로그인한 사용자의 셸이 무엇인지 /etc/passwd 파일에서 확인하세요.
  2. subshell_test 디렉토리를 만들고 그 안으로 이동한 뒤, ( cd /tmp; pwd ) 를 실행하고 다시 pwd 를 실행했을 때 결과 차이를 확인하세요.
  3. printf 를 이용해서 3 x 5 = 15 라는 문장을 출력하세요.
  4. 변수 COURSE 에 "Linux Practice" 라는 값을 넣고, 작은따옴표와 큰따옴표로 출력했을 때 차이를 확인하세요.
  5. 현재 디렉토리에 a1.txt, a2.txt, b1.txt 파일을 만들고, ls a* 와 ls ?1.txt 실행 결과의 차이를 확인하세요.
  6. /etc/passwd 파일을 passwd_copy.txt 로 복사하고, cat 과 리다이렉션(<) 을 이용해 파일 내용을 출력하세요.
  7. 존재하지 않는 파일을 ls 해서, 오류 메시지를 err.log 로 저장하고, 표준 출력과 오류를 합쳐서 all.log 로 저장해 보세요.
  8. 환경 변수 TESTVAR=hello 를 export 해서 서브셸에서도 보이게 한 뒤, export -n 으로 환경 변수 속성을 해제하세요.
  9. alias ll='ls -l' 을 설정하고 실행해 본 뒤, unalias ll 로 해제하세요.
  10. 현재 프롬프트(PS1)를 [사용자명:디렉토리]$ 형태로 변경해 보세요.
grep $USER /etc/passwd                 # 1. 내 로그인 셸 확인

mkdir subshell_test && cd subshell_test
( cd /tmp; pwd )                       # 2. 서브셸 → /tmp 출력
pwd                                    # 원래 디렉토리 그대로

printf "3 x 5 = %d\n" $((3*5))         # 3. printf 사용

COURSE="Linux Practice"                # 4. 변수 설정
echo '$COURSE'                         # 작은따옴표: 그대로 출력
echo "$COURSE"                         # 큰따옴표: 값 출력

touch a1.txt a2.txt b1.txt             # 5. 샘플 파일
ls a*                                  # a로 시작하는 파일
ls ?1.txt                              # 두 번째 글자 1인 파일

cp /etc/passwd passwd_copy.txt         # 6. 복사
cat < passwd_copy.txt                  # 리다이렉션으로 출력

ls nofile 2> err.log                   # 7. 오류 메시지만 저장
ls nofile > all.log 2>&1               # 표준+에러 합쳐 저장

export TESTVAR=hello                   # 8. 환경 변수 등록
bash -c 'echo $TESTVAR'                # 서브셸 확인
export -n TESTVAR                      # 환경 변수 속성 해제

alias ll='ls -l'                       # 9. alias 등록
ll
unalias ll                             # alias 해제

PS1='[\u:\w]\$ '                       # 10. 프롬프트 변경

프롬프트 원복 방법 : 터미널 껐다가 키거나 아래와 같이 설정
PS1='\u@\h:\w\$ '

👉 기본 프롬프트(예: user@hostname:/home/user$)로 복구됩니다.


6. 쉘 스크립트

1. 사용자 입력 & 조건문

  • login.sh 라는 스크립트를 작성하세요.
  • 기능:
    1. 사용자에게 이름을 입력받는다.
    2. 입력값이 "admin" 이면 "Welcome Administrator" 출력
    3. 그렇지 않으면 "Welcome $이름" 출력

login.sh: 6: [: admin: unexpected operator
https://deeprun.tistory.com/256

2. 반복문 & 합계

  • sum.sh 라는 스크립트를 작성하세요.
  • 기능:
    1. while 문을 사용한다.
    2. 1부터 100까지 합을 계산하고 "The sum is: 5050" 형태로 출력한다.

👉 출력: The sum is: 5050


3. 함수 & 파일 조건

  • checkfile.sh 라는 스크립트를 작성하세요.
  • 기능:
    1. 함수 check_file() 을 정의한다.
    2. 매개변수로 파일명을 받는다.
    3. 해당 파일이 존재하고 크기가 0보다 크면 "File exists and not empty" 출력
    4. 그렇지 않으면 "File missing or empty" 출력
    5. 스크립트 실행 시, check_file /etc/passwd 와 같이 호출해 본다.

 

반응형

'Cloud Engineering Bootcamp > 5. Linux' 카테고리의 다른 글

09. Linux Shell Script Programming  (0) 2025.09.16
08. 리눅스 쉘 사용하기  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
2025-09-16 14:52:51
반응형

🐚 9. 셸 스크립트 프로그래밍

 

1️⃣ 스크립트 작성 & 실행 방법

  • 스크립트 시작은 항상 #!/bin/bash
  • 실행 방법
 
sh script.sh # sh로 실행
chmod +x script.sh && ./script.sh # 실행 권한 주고 직접 실행 
 
flowchart LR A[사용자 입력] --> B[Shell Script] B --> C[리눅스 커널 실행] C --> D[결과 출력]

2️⃣ 자주 사용하는 셸 스크립트

📌 로그 백업 & 정리 스크립트

#!/bin/bash
# log_backup.sh

LOG_DIR=
"/var/log/myapp"# 로그가 있는 폴더
BACKUP_DIR=
"/var/backups/myapp"# 백업 저장 폴더
DATE=$(
date +%Y%m%d) # 오늘 날짜 (예: 20250916)
mkdir -p "$BACKUP_DIR" # 백업 폴더 없으면 생성

# 7일 지난 .log 파일 찾아서 백업하고 내용 비움 find "$LOG_DIR" -type f -name "*.log" -mtime +7 | whileread file; do       tar -czf "$BACKUP_DIR/$(basename $file).$DATE.tar.gz" "$file" # 압축 백업
      >
"$file" # 원본 로그는 지우지 않고 내용만 삭제done

👉 현업에서 매우 많이 씀 (로그 용량이 차서 서버가 죽는 걸 방지)


📌 프로세스 모니터링 & 재시작

 
#!/bin/bash
# monitor.sh

PROCESS="myapp"                                           # 감시할 프로세스 이름
if ! pgrep -x "$PROCESS" > /dev/null; then                # 실행 중인지 확인
    echo "$(date): $PROCESS not running. Restarting..." >> /var/log/monitor.log
    systemctl start "$PROCESS"                            # 안 돌아가면 재시작
fi

👉 운영팀 필수 (서비스가 죽었을 때 자동 복구)


📌 서버 헬스체크

 
#!/bin/bash
# healthcheck.sh

echo "===== $(hostname) ====="      # 서버 이름
echo "Uptime:"                     # 서버 켜진 시간
uptime
echo

echo "Disk usage:"                 # 디스크 사용량
df -h | grep -v tmpfs
echo

echo "Top 5 memory-consuming processes:" # 메모리 많이 쓰는 상위 5개
ps aux --sort=-%mem | head -n 6

👉 운영팀 기본 (서버 상태를 빠르게 확인할 때)


📌 대량 파일 이름 변경

 
#!/bin/bash# rename.shfor file in *.txt; do# 모든 .txt 파일에 대해mv"$file" "${file%.txt}.bak" # 확장자 .txt → .bak 로 변경done

👉 파일 대량 처리할 때 개발자들이 자주 활용


📌 배포 자동화 (단순 버전)


#!/bin/bash
 
# deploy.sh
 APP_DIR=
"/opt/myapp"
 
# 앱 코드 경로
 BACKUP_DIR=
"/opt/backup"
 
# 백업 저장 경로
 DATE=$(
date
 +%Y%m%d%H%M) 
# 현재 시간
 tar -czf 
"$BACKUP_DIR
/myapp_
$DATE
.tar.gz" 
"$APP_DIR

# 현재 버전 백업
 git -C 
"$APP_DIR
" pull origin main 
# 최신 코드 받기
 systemctl restart myapp.service 
# 서비스 재시작
 

👉 스타트업/중소기업에서 직접 서버 운영 시 자주 사용


3️⃣ 실습 예제: .txt → .bak 변환하기

① 연습 디렉토리 만들기

 
mkdir ~/rename-test # 테스트용 폴더 만들기 cd ~/rename-test

② 샘플 파일 생성

 
touch file1.txt file2.txt file3.txt # 빈 텍스트 파일 3개 생성 ls

③ 스크립트 작성

 
vi rename.sh

내용:


#!/bin/bash
 
for
 file 
in
 *.txt; 
do
 
# 모든 .txt 파일에 대해
 
mv
 
"$file

"${file%.txt}
.bak" 
# 확장자를 .bak으로 변경
 
done
 

④ 실행 권한 부여

chmod +x rename.sh

⑤ 실행

 
./rename.sh ls

👉 결과: file1.bak file2.bak file3.bak


❓ Quiz : 되돌리기

.bak → .txt 로 다시 복원하려면?

 
#!/bin/bashfor
file
in *.bak;
do# 모든 .bak 파일에 대해
mv"$file" "${file%.bak}.txt" # 확장자를 .txt로 변경
done

⊡ 기본if문

if1.sh
if [ 조건]
then
   참일경우실행
fi
#!/bin/bash
if [ "KIM" = "KIM" ]
then
        echo "It's true."
fi
exit 0


⊡ if-else문

if2.sh
if [ 조건]
then
    참일경우실행
else
    거짓일경우실행
fi
#!/bin/bash
if [ "KIM" = "LEE" ]
then
       echo "It's true."
else
       echo "It's false."
fi
exit 0

⊡ 조건문에들어가는비교연산자

if3.sh
#!/bin/bash
if [ 100 -eq 200 ]
then
       echo "100 and 200 are the same."
else
       echo "100 and 200 are different"
fi
exit 0

⊡ 파일과 관련된 조건

if4.sh
#!/bin/bash
fname=/lib/systemd/system/httpd.service
if [ -f $fname]
then
        head -5 $fname
else
        echo "Web server is not installed."
fi
exit 0


⊡ case~esac문

case1.sh
#!/bin/bash
case "$1" in
            start)
                   echo "Start~";;
            stop)
                   echo "Stop~";;
         restart)
                   echo "Restart~";;
                  *)
                    echo "I don't know what it is~~";;
esac
exit 0

 

case2.sh
#!/bin/bash
echo "Is Linux fun? (yes / no)"
read answer
case $answer in yes |y |Y | Yes |YES)
         echo "That's good."
         echo "Cheer up~ ^^";;
    [nN]*)
         echo "That's too bad.. ㅠㅠ";;
      *)
         echo "You should have just typed YES or NO" exit 1;;

esac
exit 0


⊡ AND, OR 관계연산자

andor.sh
#!/bin/bash

echo "Please enter the file name you want to view."
read fname
if [ -f $fname] && [ -s $fname] ;
then
       head -5 $fname
else
       echo "The file does not exist or its size is 0."
fi
exit 0


⊡ for~in문

forin.sh
#!/bin/bash
hap=0
for i in 1 2 3 4 5 6 7 8 9 10
do
     hap=`expr $hap + $i`
done
echo "The sum of 1 to 10 is " $hap
exit 0

forin2.sh
#!/bin/bash
for fnamein $(ls *.sh)
do
     echo "---$fname---"
     head -3 $fname
done
exit 0


⊡ while문

while.sh
#!/bin/bash
while true
do
     echo "Ubuntu"
done
exit 0
#!/bin/bash
while :
do
     echo "Ubuntu"
done
exit 0

while2.sh
` -> 햅틱보다는 요즘 $로 많이 사용
#!/bin/bash
hap=0 i=1
while [ $i-le 10 ]
do
     hap=`expr $hap + $i`
     i=`expr $i+ 1`
done
echo "The sum of 1 to 10 is: $hap"
exit 0
#!/bin/bash
hap=0 i=1
while [ $i-le 10 ]
do
     hap=$((hap + i))
     i=$((i+ 1))
done
echo "The sum of 1 to 10 is: $hap"
exit 0

while3.sh
#!/bin/bash

echo "Please enter your password."
read mypass
while [ "$mypass" != "1234" ]
do
     echo "Incorrect. Please re-enter."
     read mypass
done
echo "Success~"
exit 0


until문

조건식이참일때까지(=거짓인동안) 계속반복
until.sh
#!/bin/bash

hap=0
i=1
while [ $i-le 10 ]
do
    hap=`expr $hap + $i`
    i=`expr $i + 1`
done
echo "The sum of 1 to 10 is: $hap"
exit 0

#!/bin/bash

hap=0
i=1
until [ $i-gt 10 ]
do
    hap=`expr $hap + $i`
    i=`expr $i + 1`
done
echo "The sum of 1 to 10 is: $hap"
exit 0


break, continue, exit, return

bce.sh
#!/bin/bash

echo "Starts infinite loop input. (b : break, c : continue, e : exit)"
while true; do
         read input
         case $input in
                 b | B)
                          break
                          ;;
                 c | C)
                         echo "If you press continue, it will return to the while condition" continue
                         ;;
                e | E)
                         echo "If you press exit, the program (function) will be completely terminated."
                         exit 1
                         ;;
                *)
                        echo "Unknown input. Please press b, c, or e."
                        ;;
          esac
done
echo "If you press break, it will exit while and print this sentence."
exit 0

 

 


🎯 정리 

  • 셸 스크립트 = 반복되는 일을 자동으로 해주는 “작은 프로그램”
  • 현업에서 많이 쓰는 것
    • 로그 정리 (서버 터짐 방지)
    • 프로세스 모니터링 (서비스 다운되면 자동 복구)
    • 서버 헬스체크 (운영팀 점검)
    • 대량 파일 이름/텍스트 처리
    • 배포 자동화
  • 중학생 수준 비유: 집에서 매일 하는 일(청소, 정리, 확인)을 사람이 직접 하지 않고 자동 로봇이 대신 해주는 것 🚀
반응형

'Cloud Engineering Bootcamp > 5. Linux' 카테고리의 다른 글

10. 리눅스 종합 실습  (0) 2025.09.17
08. 리눅스 쉘 사용하기  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
2025-09-16 13:38:01
반응형

🐚 리눅스 셸 사용하기 정리

1️⃣ 셸 기본

  • 셸(Shell): 사용자가 입력한 명령을 해석해서 운영체제(OS)에게 전달하는 번역기 같은 프로그램
  • 종류: sh, bash, csh, ksh 등
  • 기본 프롬프트 기호:
    • $ → 일반 사용자
    • # → 관리자(root)
    • % → csh 같은 셸

👉 기본 셸 바꾸기

 
chsh -s /bin/bash # 기본 셸을 bash로 변경

2️⃣ 셸 사용법

📌 출력 명령

 
echo"Hello"# 화면에 글자 출력printf"Hi\n"# 줄바꿈 포함해서 출력

📌 특수문자

  • * : 모든 파일
  • ? : 한 글자 대체
  • [] : 특정 문자 집합
  • ~ : 홈 디렉토리
  • ; : 여러 명령 연속 실행
  • | : 앞 결과 → 뒤 명령 입력

📌 리다이렉션

 
ls > file.txt # 명령어 결과를 file.txt에 저장 (덮어쓰기)
ls >> file.txt # 명령어 결과를 file.txt 끝에 추가
cat < file.txt # file.txt 내용을 입력으로 사용
ls not_exist 2> error.log # 에러 메시지만 error.log에 저장
 

3️⃣ 셸 환경

🧩 환경 변수

SOME=testecho$SOME# 변수 값 출력 → test bash -c 'echo "child:$SOME"'# 전파 안 됨
export SOME # 환경 변수로 등록 bash -c 'echo "child:$SOME"'# 전파 됨

🧹 환경 변수 해제

 
export SOME1=hello env | grep SOME1 # 환경 변수 확인 export -n SOME1 # 환경 변수 속성만 제거 unset SOME1 # 변수 완전히 삭제

4️⃣ alias (자주 쓰는 명령어 단축키)

alias ll='ls -lF --color=auto'# 파일 목록 자세히 보기
alias la='ls -A'# 숨김 파일까지 보기
alias ..='cd ..'# 상위 폴더로 이동
aliasrm='rm -i'# 삭제할 때 확인 질문
alias grep='grep --color=auto'# grep 결과 색상 강조
aliasdf='df -h'# 디스크 용량 보기
alias myip='curl ifconfig.me'# 외부 IP 확인

👉 현업에서 가장 자주 쓰는 것

  • ll, la → 파일 확인
  • .., ... → 디렉토리 이동
  • rm -i, cp -i, mv -i → 실수 방지 (중요 파일 날리지 않도록)
  • grep --color → 로그 분석할 때 필수
  • df -h, du -h → 서버 디스크 용량 확인
  • myip → 서버 외부 IP 확인

5️⃣ 함수(Function)

 
function cdpwd { if [ -z "$1" ]; then# 인자가 없으면echo"Usage: cdpwd <dir>"# 사용법 출력return 1 # 에러 코드 반환ficd"$1" && pwd# 해당 폴더로 이동하고 현재 경로 출력 }

👉 cdpwd /tmp → /tmp로 이동하면서 경로까지 확인


6️⃣ 히스토리 활용

 
history | tail# 최근 사용한 명령어 보기 !! # 마지막 명령어 다시 실행 !5 # 히스토리에서 5번 명령어 실행

👉 현업에서는 history | grep ssh 같은 식으로, 과거에 쓴 명령어 찾는 경우가 많음


7️⃣ 프롬프트 (PS1) 꾸미기

 
echo"$PS1" # 현재 프롬프트 확인
PS1=
'[${USER} ${PWD}] $ '# 사용자 + 경로 표시
PS1=
'\u@\h \w\$ '# 사용자@호스트 경로 $
PS1=
"\e[34;1m\u@\h \w \$ \e[0m"# 파란색, 볼드체

👉 서버가 여러 개일 때 프롬프트 색상 다르게 해두면 실수 줄일 수 있음 (예: 운영서버 빨간색, 테스트서버 초록색)


📊 전체 흐름 (Mermaid 다이어그램)

 

 


🎯 정리

  • = "컴퓨터에게 명령 내리는 번역기"
  • 환경 변수 = "컴퓨터에 메모해둔 값"
  • alias = "명령어 단축키"
  • 리다이렉션/파이프 = "결과를 저장하거나, 다른 명령어에 전달"
  • PS1 = "프롬프트 꾸미기"
  • 현업에서 필수 = alias rm='rm -i', grep --color, df -h, myip
반응형

'Cloud Engineering Bootcamp > 5. Linux' 카테고리의 다른 글

10. 리눅스 종합 실습  (0) 2025.09.17
09. Linux Shell Script Programming  (0) 2025.09.16
07. 리눅스 사용자 관리  (0) 2025.09.15
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
2025-09-15 15:46:20
반응형

👤 리눅스 사용자 관리 정리

리눅스는 여러 사용자가 동시에 접속할 수 있는 멀티유저 시스템이에요.
그래서 "누가 로그인했는지, 어떤 권한을 갖는지"를 사용자 계정 관리로 철저히 통제해야 합니다. 🔑


1️⃣ 사용자 계정 관련 파일

리눅스에서는 사용자 정보를 파일에 저장해요.

파일설명
/etc/passwd 계정 기본 정보 (ID, UID, GID, 홈 디렉토리, 로그인 셸)
/etc/shadow 암호화된 비밀번호와 패스워드 만료 정보
/etc/login.defs UID/GID 범위, 비밀번호 정책 기본값
/etc/group 그룹 정보
/etc/gshadow 그룹 암호 및 멤버 정보
 
flowchart TD A[/etc/passwd] -->|계정| U[사용자 ID, 홈 디렉토리] B[/etc/shadow] -->|보안| P[비밀번호 해시, 만료일] C[/etc/group] -->|그룹| G[그룹 정보] D[/etc/login.defs] -->|정책| L[UID/GID 범위, 정책]

2️⃣ 사용자 계정 관리 명령어


명령어 설명
useradd 사용자 추가
usermod 사용자 정보 수정
userdel 사용자 삭제
passwd 암호 설정 및 계정 잠금
chage 비밀번호 만료 정책 관리

🧑‍💻 실습 예시

```
# 1. 사용자 생성 및
홈 디렉토리 생성(-m 옵션)
sudo useradd -m user1
 
# 2. 암호 설정
sudo passwd user1 # 비밀번호 입력 후 Enter
 
# 3. UID 변경
sudo usermod -u 2001 user1
 
# user1 계정의 UID를 2001로 변경
# 4. 사용자 삭제 (-r 옵션: 홈 디렉토리도 같이 삭제)
sudo userdel -r user1
```

3️⃣ 그룹 관리 명령어

명령어설명
groupadd 그룹 생성
groupmod 그룹 수정
groupdel 그룹 삭제
gpasswd 그룹 암호 설정, 멤버 추가/삭제
```
# 그룹 생성
sudo groupadd devteam
 
# 그룹 이름 변경
sudo groupmod -n devops devteam
 
# 그룹 삭제
sudo groupdel devops
 
# 그룹에 사용자 추가
sudo gpasswd -a user1 devops
 
# 그룹에서 사용자 제거
sudo gpasswd -d user1 devops
```

4️⃣ 사용자 정보 관리 명령어

명령어설명
who / w 로그인 사용자 확인
last 최근 로그인 기록 확인
id UID, GID, 그룹 확인
groups 속한 그룹 확인
sudo 특정 권한 위임
chown 파일 소유자 변경
chgrp 파일 그룹 변경

🧑‍💻 실습 예시

 
# 현재 로그인 사용자 확인 who w last | head
# 최근 로그인 기록 상위 10줄
# 사용자 UID, GID 확인 id user1 groups user1
# 파일 소유자 변경 sudo chown user1 test.txt
# 파일 그룹 변경 sudo chgrp devops test.txt
# sudo 권한 부여 (visudo 실행) sudo visudo
# user2 ALL=/sbin/useradd,/sbin/usermod


5️⃣ 현업에서 자주 쓰는 것들 🔑

  • id, groups → 계정 권한 및 그룹 확인
  • passwd -l user → 계정 잠금 (보안 사고 방지)
  • sudo visudo → 특정 사용자에게 제한된 권한 부여
  • chown, chgrp → 파일 접근 권한 관리
  • /etc/shadow → 보안 관련 문제(비번 만료) 확인

✅ 정리

  • 리눅스는 계정과 그룹으로 사용자 권한을 관리함
  • /etc/passwd, /etc/shadow 가 핵심 파일
  • useradd/userdel/usermod, groupadd/groupdel 로 계정/그룹 관리
  • 현업에서는 권한 위임(sudo), 계정 잠금(passwd -l), 로그인 기록 확인(last) 이 많이 쓰임

👉 이렇게 정리하면,  "리눅스에서 사용자/그룹 관리 = 신분증 만들기, 지갑 관리하기" 정도로 이해할 수 있어요 😊

반응형

'Cloud Engineering Bootcamp > 5. Linux' 카테고리의 다른 글

09. Linux Shell Script Programming  (0) 2025.09.16
08. 리눅스 쉘 사용하기  (0) 2025.09.16
06. 프로세스 관리하기  (0) 2025.09.15
05. 파일 접근권한 관리하기  (0) 2025.09.15
04. LINUX VI 문서 편집기  (0) 2025.09.12