셸 기본과 파일 시스템
3. 코드 예제
예제 1: 디렉터리 탐색 — 01_tree.sh 발췌
linux-src/01_shell_basics/01_tree.sh 는 임시 폴더에 배포 구조를 흉내 낸 뒤 탐색·조회 명령을 순서대로 실행합니다. 핵심 부분만 보면 다음과 같습니다.
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 # 파티션 사용률./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 는 권한 변경, 리다이렉션, 파이프, 환경 변수 승격을 한 파일에서 순서대로 보여줍니다.
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 (승격 후)first
second
2 a
1 b
1 c
없음
dev실행은 bash 02_perm_redirect.sh 한 줄입니다. ls nope 처럼 의도적으로 실패하는 명령이 있어 set -e 는 빼고 set -uo pipefail 만 썼습니다.
예제 3: 실제 서버 세션 흐름
실제로 배포된 자바 앱을 점검할 때는 아래 순서를 그대로 따라가면 됩니다.
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: 자바 앱 표준 배포 폴더 구조
/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 소유 파일이 섞이지 않게 합니다.