반응형
리눅스(Bash) 환경에서 .bash_profile과 .bashrc는 설정이 적용되는 시점이 완전히 다릅니다. 이 차이를 이해하려면 Bash가 실행되는 두 가지 방식인 '로그인 쉘'과 '대화형 비로그인 쉘'의 개념을 먼저 알아야 합니다.
1. 핵심 차이점
| 구분 | .bash_profile | .bashrc |
| 실행 시점 | 로그인 시 딱 한 번 실행 | 새 터미널 창을 열 때마다 실행 |
| 쉘 종류 | 로그인 쉘 (Login Shell) | 대화형 비로그인 쉘 (Interactive Non-login Shell) |
| 주요 용도 | 환경 변수 설정 (PATH, LANG 등) | 별칭(alias), 프롬프트(PS1), 함수 설정 |
| 범위 | 세션 전체에 영향을 미침 | 해당 터미널 세션에만 영향을 미침 |
2. 상세 동작원리
① .bash_profile (로그인 쉘용)
사용자가 시스템에 처음 로그인할 때 읽어들이는 설정 파일입니다.
- 언제 실행되나?
- SSH를 통해 원격 서버에 접속할 때.
- 로컬 머신에서 GUI 로그인 후 터미널을 처음 실행할 때 (배포판에 따라 다름).
- su - username 명령어로 사용자를 전환할 때.
- 특징: 시스템 전체에 적용될 무거운 설정이나 환경 변수(export PATH=...)를 정의합니다. 한 번 로드되면 자식 프로세스(터미널 창 등)에 상속되므로 매번 실행될 필요가 없습니다.
② .bashrc (비로그인 쉘용)
이미 로그인된 상태에서 새로운 터미널 창(쉘)을 열 때마다 실행되는 설정 파일입니다.
- 언제 실행되나?
- 우분투에서 Ctrl + Alt + T로 터미널을 열 때.
- 터미널 내에서 bash 명령어를 입력해 새 쉘을 띄울 때.
- 특징: 터미널 사용 편의성을 위한 설정을 주로 담습니다. 예를 들어 ls를 입력했을 때 색깔이 나오게 하는 alias ls='ls --color=auto' 같은 설정이 여기 들어갑니다.
3. 두 파일을 구분해서 사용하는 이유
모든 설정을 .bashrc에 넣어도 동작은 하지만, 효율성과 상속 문제 때문에 구분합니다.
- 성능: 환경 변수(PATH 등)는 한 번만 설정하면 하위 프로세스에 자동으로 전달됩니다. 굳이 터미널을 열 때마다 똑같은 경로를 다시 계산하고 추가할 필요가 없습니다.
- 논리적 구분: 로그인 시에만 필요한 작업(예: 시스템 공지 출력, 특정 서비스 시작 체크)과 터미널 사용 환경 설정(예: 명령어 줄이기)을 분리하여 관리하기 위함입니다.
4. 우분투(Ubuntu)에서의 실제 동작
Ubuntu 24.04를 포함한 대부분의 데비안 계열에서는 조금 독특한 방식을 사용합니다.
- 우분투는 기본적으로 .bash_profile 대신 .profile을 사용합니다.
- 로그인 시 .profile이 실행되는데, 이 파일 내부를 열어보면 보통 다음과 같은 코드가 들어있습니다.
# ~/.bashrc가 존재하면 실행하라
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
- 결과적으로 우분투에서는 로그인할 때 .profile이 실행되면서 자동으로 .bashrc까지 함께 불러오게 됩니다. 이 구조 덕분에 사용자는 어떤 파일에 설정을 넣어도 터미널에서 즉시 사용할 수 있는 것처럼 느껴집니다.
5. 결론
- export PATH=... (경로 추가): .profile (또는 .bash_profile)에 적는 것이 정석입니다.
- alias ll='ls -al' (별칭 설정): .bashrc에 적어야 합니다.
반응형
'운영체제(OS) > Linux' 카테고리의 다른 글
| 우분투 명령어 (0) | 2026.03.24 |
|---|---|
| VI 단축키 (0) | 2026.03.24 |
| .bash_profile 과 .profile (0) | 2026.03.17 |
| 우분투 서버 키보드 레이아웃 변경 (0) | 2026.03.11 |
| 2. 우분투 22.04 LTS 설치 (0) | 2023.02.27 |
댓글