홈 › 리눅스 운영 › 01 / 13

셸 기본과 파일 시스템

섹션 7진행 0 / 13

3. 코드 예제

예제 1: 디렉터리 탐색 — 01_tree.sh 발췌

linux-src/01_shell_basics/01_tree.sh 는 임시 폴더에 배포 구조를 흉내 낸 뒤 탐색·조회 명령을 순서대로 실행합니다. 핵심 부분만 보면 다음과 같습니다.

bash
mkdir -p app/{bin,conf,logs} data/backup
find . -type d | sort                # 폴더 구조 출력
ls -la app/conf                      # 숨김·권한·크기 확인
find . -name '*.log'                 # 이름으로 찾기
find . -type f -size +2k             # 크기로 찾기
du -sh app data                      # 폴더별 용량
df -h . | tail -n 1                  # 파티션 사용률
text
./app
./app/bin
./app/conf
./app/logs
./data
./data/backup
-rw-r--r-- 1 user group 33 9월 10 15:00 app.properties
./app/logs/app.log
./data/big.bin

실행은 bash 01_tree.sh 한 줄입니다. Git Bash 와 RHEL 모두에서 그대로 동작하도록 검증했습니다.

예제 2: 권한·리다이렉션 — 02_perm_redirect.sh 발췌

linux-src/01_shell_basics/02_perm_redirect.sh 는 권한 변경, 리다이렉션, 파이프, 환경 변수 승격을 한 파일에서 순서대로 보여줍니다.

bash
chmod u+x run.sh                     # 소유자에게 실행 권한
chmod 750 run.sh                     # rwxr-x---
echo "first"  > out.txt              # 덮어쓰기
echo "second" >> out.txt             # 이어쓰기
ls nope > all.txt 2>&1               # 출력+에러 한 파일로
sort names.txt | uniq -c | sort -rn  # 빈도 정렬
APP_ENV=dev
bash -c 'echo "${APP_ENV:-없음}"'    # 자식: 없음 (승격 전)
export APP_ENV
bash -c 'echo "${APP_ENV:-없음}"'    # 자식: dev (승격 후)
text
first
second
2 a
1 b
1 c
없음
dev

실행은 bash 02_perm_redirect.sh 한 줄입니다. ls nope 처럼 의도적으로 실패하는 명령이 있어 set -e 는 빼고 set -uo pipefail 만 썼습니다.

예제 3: 실제 서버 세션 흐름

실제로 배포된 자바 앱을 점검할 때는 아래 순서를 그대로 따라가면 됩니다.

bash
ssh app@server01                                  # 서버 접속
cd /opt/myapp && ls -la                           # 배포 폴더 확인
tail -f logs/app.log                              # 실시간 로그, Ctrl+C 로 종료
cp conf/app.properties conf/app.properties.bak    # 수정 전 백업
vi conf/app.properties                            # 설정 수정
diff conf/app.properties.bak conf/app.properties  # 변경 내용 확인

설정을 고치기 전에는 반드시 원본을 복사해 둡니다. 되돌릴 방법이 있어야 실수해도 서비스에 영향이 없습니다.

예제 4: 자바 앱 표준 배포 폴더 구조

text
/opt/myapp/
├── bin/                      # 실행 스크립트, start.sh stop.sh
├── conf/                     # application.properties 등 설정
├── lib/                      # 의존 jar
├── logs/                     # 애플리케이션 로그
├── releases/
│   ├── v1/
│   └── v2/
└── current -> releases/v2    # 심볼릭 링크, 배포마다 갱신

bin, conf, lib, logs 네 폴더로 역할을 나누면 설정만 골라 백업하거나 로그만 골라 권한을 좁히기 쉽습니다. 소유자는 app:app 서비스 계정으로 맞추고, root 소유 파일이 섞이지 않게 합니다.