공공부하자개발 · 영어 학습 노트
리눅스
리눅스 운영RHEL 에서 배포·운영하기0/13 완료
  • 01셸 기본과 파일 시스템
  • 02텍스트 처리 (grep·sed·awk)
  • 03프로세스·서비스 관리 (systemd)
  • 04자바 애플리케이션 배포
  • 05Tomcat·nginx 배포·재기동
  • 06로그·디스크 운영 (logrotate·cron)
  • 07네트워크 진단 (ss·curl·firewalld)
  • 08셸 스크립트 (운영 자동화)
  • 09장애 대응 (jstack·jmap·OOM killer·FD)
  • 10보안 기초 (ssh 강화·SELinux·감사 로그)
  • 11컨테이너 기초 (podman)
  • 12백업·복구 (설정·릴리스·DB 덤프)
  • 13Docker 실무
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 리눅스 운영 › 01 / 13

셸 기본과 파일 시스템

섹션 7진행 0 / 13
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

4. 응용 변형 예제

4.1 Git Bash·WSL 차이

Windows 개발자가 로컬에서 리눅스 명령을 연습할 때는 Git Bash 나 WSL 을 씁니다. 둘은 비슷해 보여도 차이가 있습니다.

항목 Git Bash WSL
커널 Windows 위 에뮬레이션 진짜 리눅스 커널
심볼릭 링크 대부분 복사로 동작 정상 동작
권한(rwx) 의미 없이 표시만 실제로 적용
용도 가벼운 명령 연습 서버와 동일한 환경 검증

이 레슨 예제 스크립트는 Git Bash 에서도 돌아가도록 만들었지만, 링크·권한 관련 결과는 실제 서버와 다를 수 있습니다. 권한과 링크를 정확히 검증하려면 WSL 이나 실제 RHEL 서버에서 확인해야 합니다.

Git Bash 는 Windows 실행 파일(git.exe, ssh.exe 등)을 유닉스 스타일 명령으로 감싼 것이라 설치가 가볍고 바로 쓸 수 있습니다. 대신 chmod, ln -s 처럼 리눅스 커널 기능에 의존하는 명령은 흉내만 낼 뿐 실제 권한·링크 시스템콜을 호출하지 않습니다. 이 레슨을 Git Bash 로 먼저 연습하고, 권한과 링크가 실제로 걸리는지는 서버에서 최종 확인하는 흐름을 권합니다.

4.2 scp·sftp 로 jar 올리기와 폐쇄망 반입

인터넷이 되는 환경에서는 scp 로 파일을 서버에 바로 올립니다.

bash
scp target/myapp.jar app@server01:/opt/myapp/releases/v3/
scp -r conf/ app@server01:/opt/myapp/releases/v3/

폐쇄망 서버는 외부 접속 자체가 막혀 있어 scp 를 바로 못 씁니다. 반입 매체(USB, 사내 파일 서버)로 jar 를 옮긴 뒤 내부망에서 다시 scp/sftp 로 서버에 전달하는 절차를 거칩니다. 파일 하나하나에 반입 승인 이력을 남기는 조직도 많습니다.

대화형으로 여러 파일을 올릴 때는 sftp app@server01 로 접속해 put, get, ls 명령을 씁니다. put myapp.jar /opt/myapp/releases/v3/ 처럼 원격 경로를 지정합니다.

4.3 tar 로 설정 백업·복원

bash
tar czf conf_backup_$(date +%Y%m%d).tgz -C /opt/myapp conf   # 백업
tar xzf conf_backup_20260910.tgz -C /opt/myapp_restore       # 복원

-C 옵션으로 작업 디렉터리를 바꾸면 tar 안에 절대 경로가 남지 않아, 다른 서버에 복원할 때도 경로가 꼬이지 않습니다. 배포 직전 conf, bin 폴더를 통째로 백업해 두면 롤백이 명령 한 줄로 끝납니다.

bash
tar tzf conf_backup_20260910.tgz          # 풀기 전에 내용물만 미리 확인
diff -r conf /opt/myapp_restore/conf      # 복원 후 원본과 동일한지 확인

압축을 풀기 전에 tar tzf 로 목록만 먼저 보면, 엉뚱한 백업 파일을 실수로 푸는 것을 막을 수 있습니다. 복원 후에는 diff -r 로 폴더 두 개를 통째로 비교해 누락이 없는지 확인합니다.

4.4 sudo 와 서비스 계정

bash
sudo -u app /opt/myapp/bin/start.sh     # app 계정 권한으로 실행
sudo systemctl status myapp             # 서비스 상태 조회는 sudo 필요

자바 프로세스 자체는 app 계정으로 띄우고, 그 계정에는 /opt/myapp 아래에만 쓰기 권한을 줍니다. sudo 는 서비스 재시작처럼 시스템 전역에 영향을 주는 명령에만 쓰고, 애플리케이션 실행에는 쓰지 않는 것이 원칙입니다.

4.5 find -exec·xargs 로 일괄 처리

bash
find /opt/myapp/logs -name '*.log' -mtime +30 -exec rm {} \;
find /opt/myapp/logs -name '*.log' -mtime +30 -print0 | xargs -0 rm

두 명령은 결과가 같지만 방식이 다릅니다. -exec 는 찾은 파일마다 rm 을 매번 새로 실행하고, xargs 는 목록을 모아 적은 횟수로 실행해 파일이 많을 때 더 빠릅니다. -print0/-0 조합은 파일명에 공백이 있어도 안전합니다.

삭제처럼 되돌릴 수 없는 작업은 먼저 -delete 대신 -print 로 지울 목록만 눈으로 확인한 뒤 실행하는 습관을 들입니다.

bash
find /opt/myapp/logs -name '*.log' -mtime +30 -print   # 1) 목록만 먼저 확인
find /opt/myapp/logs -name '*.log' -mtime +30 -exec rm {} \;  # 2) 확인 후 삭제
응용 변형 예제
  • 4.1 Git Bash·WSL 차이
  • 4.2 scp·sftp 로 jar 올리기와 폐쇄망 반입
  • 4.3 tar 로 설정 백업·복원
  • 4.4 sudo 와 서비스 계정
  • 4.5 find -exec·xargs 로 일괄 처리
이전 섹션3 코드 예제4 / 7다음 섹션5 자주 하는 실수 (Tip)