공공부하자개발 · 영어 학습 노트
리눅스
리눅스 운영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정리‹ 이전다음 ›

5. 자주 하는 실수 (Tip)

❌ 실수 1: 변수가 비어 있는 채로 rm -rf "$DIR"/* 를 실행한다

DIR 값을 설정하는 줄이 위에서 빠지거나 오타가 나면 $DIR 이 빈 문자열이 되고, 명령은 사실상 루트 아래 전체를 지우는 것과 같아집니다. 되돌릴 방법이 없는 사고로 이어집니다. ✅ 스크립트 앞부분에 : "${DIR:?DIR 값이 비었습니다}" 로 방어하거나, set -u 로 빈 변수 사용 자체를 에러로 만듭니다.

bash
: "${DIR:?DIR 값이 비었습니다}"   # DIR 이 비어 있으면 여기서 즉시 종료
rm -rf "$DIR"/*                   # 이 줄까지 오면 DIR 은 항상 값이 있다

❌ 실수 2: 습관적으로 chmod 777 을 준다

권한 오류가 나면 원인을 찾는 대신 777 로 모두에게 rwx 를 열어 문제를 회피하는 경우가 많습니다. 서버의 모든 사용자가 파일을 읽고 쓰고 실행할 수 있게 돼, 보안 감사에서 바로 지적됩니다. ✅ 필요한 대상에만 필요한 권한을 주고, 대부분은 750(소유자 전체, 그룹 읽기·실행) 이면 충분합니다.

❌ 실수 3: 애플리케이션을 root 로 실행한다

root 로 띄우면 포트 제한 없이 편하고 권한 오류도 안 나서 그대로 습관이 됩니다. 애플리케이션에 취약점이 있으면 공격자가 곧바로 서버 전체 권한을 갖게 됩니다. ✅ 전용 서비스 계정(app)을 만들고, 그 계정 권한으로만 자바 프로세스를 실행합니다.

❌ 실수 4: > 로 로그 파일을 실수로 덮어쓴다

이어써야 할 로그에 >> 대신 > 를 쓰면 기존 내용이 그 순간 전부 사라집니다. 장애 원인을 찾아야 하는 로그가 통째로 날아가는 사고로 이어집니다. ✅ 로그처럼 누적해야 하는 파일은 항상 >> 를 쓰고, 헷갈리면 별칭이나 스크립트로 고정해 둡니다.

❌ 실수 5: 공백이 있는 파일명에 따옴표를 빼먹는다

rm $FILE 처럼 변수를 따옴표 없이 쓰면, 값에 공백이 있을 때 셸이 여러 단어로 쪼개 엉뚱한 파일까지 지울 수 있습니다. app log.txt 는 app 과 log.txt 두 인자로 나뉩니다. ✅ 변수는 항상 "$FILE" 처럼 따옴표로 감쌉니다.

❌ 실수 6: cat 으로 수 GB 짜리 로그를 그대로 연다

cat huge.log 를 실행하면 터미널이 그 내용을 전부 출력하려다 멈춘 것처럼 보이고, 실제로 화면 스크롤도 감당이 안 됩니다. 원하는 내용을 찾기도 전에 터미널이 먹통이 됩니다. ✅ less huge.log 로 페이지 단위로 열거나, tail -f 로 필요한 부분만 봅니다.

❌ 실수 7: ls 출력을 파싱해서 스크립트를 짠다

ls -l | awk '{print $5}' 처럼 사람이 보기 좋은 출력을 파싱하면, 파일명에 공백이나 개행이 있을 때 열이 어긋나 잘못된 값을 읽습니다. 배포판마다 ls 출력 형식이 조금씩 달라 이식성도 떨어집니다. ✅ 크기가 필요하면 stat -c '%s' 파일, 목록 순회가 필요하면 find 를 씁니다.

❌ 실수 8: 심볼릭 링크를 상대 경로로 잘못 만든다

링크를 만든 위치와 다른 디렉터리에서 상대 경로 링크를 참조하면 대상을 못 찾습니다. current -> releases/v2 링크만 다른 폴더로 옮기면 깨지는 것이 대표적입니다. ✅ 배포처럼 위치가 고정된 경우는 절대 경로로 만들거나, ln -sfn 을 같은 부모 디렉터리 안에서만 씁니다.

❌ 실수 9: PATH 를 통째로 덮어쓴다

export PATH=/opt/jdk/bin 처럼 기존 값 없이 다시 대입하면 ls, cd, grep 같은 기본 명령 경로까지 사라집니다. 그 순간부터 셸의 거의 모든 명령이 command not found 가 됩니다. ✅ 항상 export PATH=$PATH:/opt/jdk/bin 처럼 기존 값 뒤에 덧붙입니다.

bash
export PATH=/opt/jdk/bin      # 사고: 기존 PATH 를 통째로 날림
ls                             # bash: ls: command not found
export PATH=$PATH:/opt/jdk/bin # 올바른 방법: 뒤에 덧붙이기

같은 세션에서 이미 PATH 를 날렸다면 export PATH=/usr/bin:/usr/local/bin:$PATH 처럼 표준 경로를 손으로 되살리거나, 재접속해서 처음부터 다시 시작합니다.

❌ 실수 10: .bashrc 에 export 를 넣고 재로그인을 안 한다

설정 파일을 고쳐 놓고 같은 셸에서 계속 작업하면 변경 전 값이 그대로 남아 있습니다. JAVA_HOME 을 고쳐도 이미 열어 둔 세션에는 반영되지 않습니다. ✅ source ~/.bashrc 로 즉시 적용하거나, 새 세션으로 재접속해 확인합니다.

자주 하는 실수 (Tip)
  • ❌ 실수 1: 변수가 비어 있는 채로 rm -rf "$DIR"/ 를 실행한다
  • ❌ 실수 2: 습관적으로 chmod 777 을 준다
  • ❌ 실수 3: 애플리케이션을 root 로 실행한다
  • ❌ 실수 4: > 로 로그 파일을 실수로 덮어쓴다
  • ❌ 실수 5: 공백이 있는 파일명에 따옴표를 빼먹는다
  • ❌ 실수 6: cat 으로 수 GB 짜리 로그를 그대로 연다
  • ❌ 실수 7: ls 출력을 파싱해서 스크립트를 짠다
  • ❌ 실수 8: 심볼릭 링크를 상대 경로로 잘못 만든다
  • ❌ 실수 9: PATH 를 통째로 덮어쓴다
  • ❌ 실수 10: .bashrc 에 export 를 넣고 재로그인을 안 한다
이전 섹션4 응용 변형 예제5 / 7다음 섹션6 연습 문제