login shell, non-login shell
login shell : 처음 리눅스를 부팅하면 접속되는 특정 shell
non-login shell : 직접 sh 등의 명령어를 통해 들어가는 shell로 이미 로그인 된 세션 내에서 실행되는 추가적인 shell
non-login shell 예
1. ssh로 접속하는 쉘
2. 새로운 터미널을 뛰우는 것
3. sudo, su 등의 명령어로 타계정을 통해 명령을 내리는 경우
#로그인 쉘인지 비로그인 쉘인지 확인하는 법
shopt login_shell
> login_shell on
#로그인 쉘일 경우
shopt login_shell
> login_shell off
#로그인 쉘이 아닐 경우
login shell 실행 시 환경 설정 파일 읽는 순서
- /etc/profile
- ~/.bash_profile || ~/.bash_login || ~/.profile
- ~/.bashrc
- /etc/bashrc
해당 순서로 쉘에 환경변수와 환경설정 내용을 읽고 적용함
non-login shell 실행 시 환경 설정 파일 읽는 순서
- ~/.bashrc
- /etc/bashrc
해당 순서로 쉘에 환경변수와 환경설정 내용을 읽고 적용함
/etc/profile
시스템 전체에 적용되는 환경 설정 파일, 로그인 쉘 실행시에 한번만 읽음
# /etc/profile.d 디렉터리 하위의 스크립트 호출
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
# /etc/bashrc 스크립트 호출
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
/etc/profile은 /etc/profile.d 디렉터리 존재 유무를 확인하고 해당 디렉터리 내에 존재하는 모든 쉘 스크립트를 실행하는 역할을 함
~/.bash_profile
사용자의 홈 디렉터리에 존재하는 특정 사용자에 대한 환경 설정 파일로 /etc/profile의 지역파일 버전
/etc/profile 뒤에 적용되는 파일로서 만약 동일한 환경변수가 존재한다면 ~/.bash_profile에 선언된 환경변수가 사용됨
만약 해당 파일이 존재하지 않으면 ~/.bash_login → ~/.profile 순으로 파일을 찾아 실행
/etc/bashrc
시스템 전역에 대한 환경설정 파일로 새로운 bash가 실행될 때마다 내용을 읽어들임
Red Hat 계열 : /etc/bashrc
Ubuntu 계열 : /etc/bash.bashrc
bash가 실행될 때마다 내용을 읽어들인다의 의미 :
- 터미널을 새로 열 때
- 스크립트나 프로그램이 bash를 실행할 때
~/.bashrc
개인 사용자에 대한 환경설정 파일 /etc/bashrc의 지역파일 버전
/etc/profile과 /etc/bashrc의 차이
두 파일 모두 환경설정 파일이지만 설정하는 내역과 적용 시점이 다름
| /etc/profile | /etc/bashrc | |
| 적용시점 | 로그인 쉘 로그인 시 한번 | 비로그인쉘 생성시마다 실행 |
| 설정내용 | 환경변수 | alias, 함수 등 |
/etc/profile에 환경변수를 설정하고 /etc/bashrc에 alias등을 설정하는 이유는 아래와 같다.
비로그인쉘을 생성시마다 실행한다는 bash를 재실행한다는 의미로 해석되는데 (잘 이해는 안됨) 간단한 예는 터미널을 하나 더 여는 것이다.
이 때, 두개의 bash가 별도의 트리를 가지는 형식이 아니고 기존 A bash 아래에 자식인 B bash의 형태로 생성되기 때문이다.
따라서 환경변수는 자식 프로세스에 상속이 가능하지만 alias의 경우 자식 프로세스에 상속이 되지 못하므로 두 파일에서 모두 alias를 선언할 수 있지만 profile에 선언하더라도 bash가 재실행된 환경에서는 해당 alias를 사용할 수 없기 때문에 /etc/profile에 적용하는 것이다.
더 자세하게 작성된 내용 >>
https://unix.stackexchange.com/questions/476593/when-should-i-use-bashrc-and-when-profile
When should I use .bashrc and when .profile?
I am basically putting all my settings into my .bashrc and when I was using zsh it was all in my .zshrc. The Rust installer just informed me that it has added the new installation to my PATH by
unix.stackexchange.com
'서버 > 리눅스' 카테고리의 다른 글
| 환경변수[export, env, set, source] (0) | 2026.01.04 |
|---|---|
| 리눅스 - /etc/fstab (0) | 2025.11.29 |