본문 바로가기
CS/OS

[Linux] 로그인 셸 (Login Shell) vs 비로그인 셸 (Non-login Shell)

by clolee 2025. 4. 17.

✅ 로그인 셸 (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

댓글