✅ 로그인 셸 (Login Shell) vs 비로그인 셸 (Non-login Shell)
✅ 1. 로그인 셸 (Login Shell)
📌 정의
사용자가 시스템에 로그인하거나, 셸을 명시적으로 로그인 환경으로 실행했을 때
✅ 대표적인 상황:
| 상황 | 예시 |
|---|---|
| 터미널에서 직접 로그인 | 콘솔 로그인 (tty) |
ssh 접속 |
ssh user@host |
su - 사용자 |
로그인 셸로 전환 |
bash --login |
명시적 로그인 셸 실행 |
✅ 실행되는 설정 파일
→ /etc/profile
→ ~/.bash_profile (우선순위)
→ ~/.bash_login
→ ~/.profile
순차적으로 읽으며, 첫 번째로 존재하는 파일만 실행
(보통.bash_profile→ 없으면.profile)
🔹 보통 이 안에서 ~/.bashrc를 수동으로 호출해주는 것이 일반적입니다:
# ~/.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
✅ 2. 비로그인 셸 (Non-login Shell)
📌 정의
이미 로그인한 사용자가 터미널 창을 새로 열거나,bash, sh, su 사용자 같은 명령으로 셸을 실행했을 때
✅ 대표적인 상황:
| 상황 | 예시 |
|---|---|
| GUI에서 터미널 실행 | Gnome Terminal, Konsole 등 |
명령어로 bash 실행 |
bash, su user, bash script.sh |
.bashrc만 불러옴 |
자동 실행 스크립트에서 source ~/.bashrc |
✅ 실행되는 설정 파일
→ ~/.bashrc
시스템 전역 설정이나
~/.profile은 불리지 않음
✅ 정리 표: 로그인 셸 vs 비로그인 셸
| 항목 | 로그인 셸 | 비로그인 셸 |
|---|---|---|
| 정의 | 로그인 시 실행되는 셸 | 로그인 이후에 실행되는 셸 |
| 예시 | ssh, su - user, bash --login |
터미널 열기, bash, su user |
| 주요 설정 파일 | /etc/profile, ~/.bash_profile, ~/.profile |
~/.bashrc |
alias, PS1, 색상 설정 |
✳️ .bashrc에서 호출해야 적용 |
✅ .bashrc 직접 적용 |
환경변수 설정 (PATH, LANG) |
✅ 보통 .profile 계열에 작성 |
❌ 직접 적용 안됨 |
✅ 실습 예시
# 현재 셸이 로그인 셸인지 확인
echo $0 # → -bash 이면 로그인 셸, bash면 비로그인 셸
# 현재 프로세스 확인
ps -p $$ # → bash 또는 zsh 확인 가능
# 로그인 셸 직접 실행
bash --login
# 비로그인 셸 직접 실행
bash
✅ 권장 설정 구조
# ~/.bash_profile 또는 ~/.profile
# 로그인 시 실행되며 .bashrc도 불러오도록 설정
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# ~/.bashrc
# alias, 프롬프트, 자주 쓰는 설정 등
alias ll='ls -alF'
export EDITOR=vim
✅ 왜 나눠놨을까? (목적이 다르기 때문)
🟦 로그인 셸은 “한 번만” 실행됨
- 로그인 셸: 로그인 시에만 실행해야 할 설정 (예:
PATH,JAVA_HOME) - 예:
ssh user@host,su - user - 시스템 전체 초기화, 환경 변수 설정에 사용
🟨 비로그인 셸은 “자주 반복적으로” 실행됨
- 비로그인 셸: 터미널 창 열 때마다 실행
- 프롬프트, alias, 색상 설정 같은 반복적인 설정만 적용
✅ 왜 .bashrc에 alias 넣고 .bash_profile에 PATH를 넣을까?
▶️ 이유 ①: alias는 터미널을 자주 열 때마다 적용돼야 함
- 예:
alias ll='ls -alF'는 터미널마다 바로 작동해야 하니까.bashrc에 넣음 - 반면, 환경 변수는 로그인 시 딱 한 번만 설정해주면 됨
▶️ 이유 ②: .bash_profile은 무겁게 쓰면 느려짐
- 매 로그인마다 프로젝트별 초기화 스크립트, PATH 설정 다 넣으면 로그인이 느려질 수 있음
- 그래서
.bash_profile에는.bashrc만 불러오고 실제 설정은.bashrc에 위임
✅ 이해를 돕는 비유 🎒
| 구분 | 비유 | 설명 |
|---|---|---|
| 로그인 셸 | 아침 출근 루틴 | 한번만 하면 되는 일 (옷 입기, 가방 챙기기) |
| 비로그인 셸 | 책상에 앉을 때마다 하는 일 | 자주 반복 (책 펴기, 펜 꺼내기) |
→ 책상에 앉을 때마다 가방 정리하고 세면도구 챙기면 비효율적이겠죠?
✅ 실무 패턴 정리
| 실무 규칙 | 이유 |
|---|---|
.bash_profile에는 최소한만 (환경변수 + .bashrc 호출) |
로그인 시 1회만 실행되므로 속도/안정성 |
.bashrc에는 자주 쓰는 alias, 색상, prompt 설정 등 |
터미널 열 때마다 반영되어야 하므로 |
✅ 요약 정리
- 로그인 셸은 시스템 초기화용 (한 번 실행)
- →
.bash_profile,.profile에 환경 변수 설정
- →
- 비로그인 셸은 반복 작업용 (터미널 열릴 때마다 실행)
- →
.bashrc에 alias, 프롬프트 설정
- →
# 실무 추천 구조: ~/.bash_profile
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
'CS > OS' 카테고리의 다른 글
| [Docker] Docker 개념 정리 (0) | 2025.04.29 |
|---|---|
| [Linux] 리눅스 로그인 환경 설정 파일 구조 정리 (0) | 2025.04.17 |
| [Linux] Crontab 개념 정리 (0) | 2025.04.17 |
| [Linux] 쉘 스크립트 실행과 프로세스 관리 (0) | 2025.04.17 |
| [OS] vi 편집기 자주 사용하는 키 정리 (0) | 2025.04.03 |
댓글