Login vs Non-Login Shell (/etc/profile, .bash_profile, .bashrc)
Login Shell vs Non-Login Shell
리눅스 시스템에 로그인하여 bash 쉘을 시작할 때 bash는 명령에 관한 여러개의 파일을 검사한다. bash 쉘이 시작 단계에서 처리하는 시동 파일은 bash 쉘을 실행하기 위해서 사용하는 방법에 따라 달라진다.
Bash 쉘은 세가지 방법으로 실행된다.
- 로그인 때 기본 Login Shell
- sub-shell을 생성함으로써 실행되는 Interactive Shell(대화형 쉘)
- 스크립트를 실행시키기 위한 비 non-interactive Shell(비대화형 쉘)
Login Shell
리눅스 시스템에 로그인하면 bash 쉘은 Login Shell로 실행된다. 즉, 로그인할 때 수행되는 기본 Shell이다. 로그인 Shell은 logout 명령으로 쉘을 종료할 수 있다.(non-login shell은 exit 명령을 통해 종료)
예를 들면,
① 터미널을 통해 SSH를 통해 리눅스 시스템에 접근
② "su -" 명령어를 통해 user를 바꿀 때 이다.
Login Shell(profile) 은 다음과 같은 순서로 명령을 실행한다.
- Login Shell은 /etc/profile 을 실행
- /etc/profile 은 /etc/profile.d 안에 있는 스크립트들을 실행
- $HOME/ .bash_profile 실행 (or ~/.bash_login or ~/.profile)
- $HOME/ .bash_profile 은 $HOME/ .bashrc 파일 실행
- $HOME/ .bashrc 는 /etc/bashrc 파일을 실행
즉, /etc/profile → /etc/profile.d → $HOME/.bash_profile → $HOME/.bashrc → /etc/bashrc 순으로 읽으며 root 로 로그인 시 /etc/profile 을 먼저 읽고 이후 홈 디렉토리의 실행파일들을 읽는다.
/etc/profile vs $HOME/.bash_profile vs $HOME/.bash_profile
/etc/profile
- 시스템 전역 (모든 user)에 대한 환경설정 파일이다. (= Global Configuration Script)
- bash 쉘의 주요 기본 시작 파일이다.
- 시스템에 로그인 할 때마다 bash는 /etc/profile 시동 파일에 있는 명령을 실행한다.
$HOME/.bash_profile
- 개인 사용자에 대한 환경설정 파일이다. (= User Personal Startup File)
- HOME 디렉토리에 있으며, 사용자 환경에 맞게 환경변수를 설정한다.
- /etc/profile에서 설정한 전역 변수들을 덮어 사용할 경우도 있다.
$HOME/.bashrc
- Alias 와 Bash가 수행될 때 실행되는 함수를 제어하는 지역적 시스템 설정과 관련된 파일
Non Login Shell
Non Login Shell은 login shell로부터 파생된 Shell 이다. exit 명령으로 Shell을 종료한다.
예를 들면,
① ssh로 리눅스 시스템에 접근 후, bash Shell을 실행하는 경우
② GUI 세션에서 터미널을 띄우는 경우 이다.
새로운 환경변수를 설정할 때 non-login shell 경우 .bashrc 파일을 이용해야 한다.
.rc 파일의 유래
1965 년 MIT Compatible Time-Sharing System (CTSS) 에는 하나의 파일에 여러 명령을 넣어놓고 실행하는 기능이 있었는데 'run commands' 를 뜻하는 의미로 'runcom' 이라 불렀다고 합니다. 여기서 앞 글자를 따서 .rc 파일 이라고 합니다.
Non Login Shell(rc file) 은 다음과 같은 순서로 명령을 실행한다.
- Non Login Shell은 ~/.bashrc 를 실행시킨다.
- ~/.bashrc는 /etc/bashrc 를 실행시킨다.
- /etc/bashrc 는 /etc/profile.d 내 스크립트를 실행한다.
즉, ~/.bashrc → /etc/bashrc → /etc/profile.d 순으로 읽어나간다.
/etc/bashrc
- 시스템 전역 (모든 user)에 대한 환경설정 파일이다. (= Global Configuration Script)
~/.bashrc
- 개인 사용자에 대한 환경설정 파일이다. (= User Personal Startup File)
참조
/etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc
https://linuxism.ustd.ip.or.kr/522
Linux Environment 환경변수
https://seulcode.tistory.com/546
Bash: .profile, .bash_profile, .bashrc
http://dogfeet.github.io/articles/2012/bash-profile.html
'Engineering > Linux & Shell' 카테고리의 다른 글
[Linux] 관리자 권한 sudo vs su 차이점 (1) | 2022.03.20 |
---|---|
[Linux] Locate 와 FIND 명령어 차이점 (0) | 2021.12.31 |
소스 컴파일 ↔ 바이너리 패키지 설치방식의 차이점 (Source Compile vs Binary Package) (0) | 2021.12.03 |
크론탭(Crontab) 기본 사용법 정리 (0) | 2021.12.03 |
[Linux / OS] Interactive vs Non-Interactive Shell (0) | 2021.11.28 |
댓글