Programming/Linux

(linux) /etc/profile ~/.bash_profile /etc/bashrc ~/.bashrc 환경 파일 내용 정리

Jan92 2024. 8. 21. 22:46
반응형

(Linux) /etc/profile ~/.bash_profile /etc/bashrc ~/.bashrc 환경 파일 내용 정리

 

리눅스 로그인 쉘, 비로그인 쉘에 따른 환경 파일 내용 정리

 

 

해당 포스팅은 리눅스를 공부하는 과정에서 '/etc/profile', '~/.bash_profile', '/etc/bashrc', '~/.bashrc' 각 환경 설정 파일의 역할과 차이점, 어떤 순서로 동작하는지에 대해 정리한 내용입니다.

(아래 내용은 bash shell이 사용된다는 가정하에 내용으로 다른 쉘을 사용하는 경우 적용되는 파일 명이 조금씩 다를 수 있습니다.)

 


각 파일의 역할과 세부적인 내용

* 내용 중 등장하는 로그인 쉘(login shell)과 비로그인 쉘(non-login shell)에 대해서는 아래에 추가로 정리해 놓았으니 아래 내용을 먼저 보고 해당 내용을 보셔도 좋습니다.

 

 

1. /etc/profile

시스템 전체에 적용되는 환경 설정 파일입니다.

이 파일은 시스템에 있는 모든 사용자의 로그인 쉘(login shell)에 대해 사용자가 로그인할 때(로그인 쉘이 시작될 때) 실행됩니다.

해당 파일에는 시스템의 환경 변수인 'PATH'나 기본 언어 설정인 'LANG', 기본 파일 권한 마스크 설정인 'UMASK' 등의 설정이 존재할 수 있습니다.

 

# /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
fi

 

또한 '/etc/profile' 파일 내부적으로는 다음 스크립트와 같이 '/etc/profile.d' 디렉터리 존재 유무를 확인하여 해당 디렉터리 내부에 있는 모든 스크립트 파일(*.sh)을 순환하며 실행하는 기능도 수행할 수 있으며, 아래에서 살펴볼 '/etc/bashrc' 스크립트를 호출하는 등 다른 스크립트 파일을 호출할 수도 있습니다.

 

해당 스크립트 파일은 모든 사용자의 로그인 쉘에 적용되는 설정을 가지고 있기 때문에 시스템 관리자(root)가 관리할 수 있습니다.

 

 

 

2. ~/.bash_profile

특정 사용자에 대한 환경 설정 파일입니다.

이 파일 역시 로그인 쉘에 대해 사용자가 로그인할 때(로그인 쉘이 시작될 때) 실행됩니다.

해당 파일은 사용자의 홈 디렉터리에 존재하며, 사용자별 환경 변수를 지정하거나 사용자에 따른 특정 스크립트를 실행할 수 있기 때문에 사용자의 로그인 시마다 실행되기를 원하는 명령어들이 여기에 배치될 수 있습니다.

 

'~/.bash_profile'은 '/etc/profile' 뒤에 적용되기 때문에 두 파일에 동일한 환경 변수가 지정된 경우 '~/.bash_profile'에 선언된 환경 변수가 사용되게 됩니다.

 

# Get the aliases and fucntions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

 

또한 '~/.bash_profile' 파일에서는 다음과 같이 '~/.bashrc' 파일을 호출하는 코드가 포함되어 있기 때문에 비로그인 쉘(non-login shell) 설정도 로그인 쉘에서 사용할 수 있도록 합니다.

 

추가로 '~/.bash_profile'이 존재하지 않는 경우 '~/.bash_login' 파일을 찾고, 해당 파일도 존재하지 않는 경우 '~/.profile' 파일을 찾게 됩니다.

(.profile 파일은 bash shell 뿐만 아니라 sh, dash, ksh 등의 다른 POSIX 호환 쉘에서도 사용되는 설정 파일입니다.)

 

 

 

3. /etc/bashrc

'/etc/profile' 파일과 동일하게 시스템 전체에 적용되는 환경 설정 파일이지만, 해당 파일은 비로그인 쉘이 시작될 때마다 실행되는 파일입니다.

해당 파일에는 전역으로 사용되는 함수나 alias 설정 등이 존재할 수 있습니다.

(Red Hat 계열의 배포판에서는 '/etc/bashrc'이지만 Ubuntu 계열의 배포판에서는 '/etc/bash.bashrc' 파일이 사용되며, '/etc/bash.bashrc' 파일의 경우 대화형 쉘인 경우 로그인 쉘이든 비로그인 쉘이든 두 환경 모두 동작한다는 특징이 있습니다.)

 

 

 

4. ~/.bashrc

특정 사용자에 대한 비로그인 쉘 환경 설정 파일입니다.

비로그인 쉘이 시작될 때 실행되며, '~/.bash_profile' 파일과 동일하게 사용자의 홈 디렉터리에 존재합니다.

사용자별 함수나 alias를 지정할 수 있으며, 명령 프롬프트의 색상 설정이나 출력 형식 등을 사용자가 원하는 대로 변경할 수 있습니다.

 

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

 

추가로 '~/.bashrc' 파일에서는 다음과 같이 '/etc/bashrc' 파일을 호출하는 코드가 포함되어 있습니다.

 

 


로그인 쉘과 비로그인 쉘 (+ 환경 설정 파일 실행 순서)

로그인 쉘 확인 명령어 shopt login_shell

로그인 쉘(login shell)

사용자가 시스템에 로그인할 때 생성되는 쉘으로 1. 터미널을 통해 직접 시스템에 로그인하거나, 2. SSH 등을 통해 원격으로 접속할 때 생성되는 쉘이 'Login Shell'의 대표적인 예시입니다.

비로그인 쉘의 경우 'exit' 명령어를 통해 종료하는 반면, 로그인 쉘의 경우 'logout' 명령어를 통해 쉘을 종료할 수 있습니다.

 

현재 쉘이 로그인 쉘인지, 비로그인 쉘인지 확인하는 방법은 위 이미지와 같이 'shopt login_shell' 명령어를 통해 확인할 수 있는데요.

로그인 쉘의 경우 'on', 비로그인 쉘의 경우 'off'의 결과가 출력됩니다.

 

 

로그인 쉘이 실행되었을 때 환경 설정 파일이 실행되는 기본적인 순서는 다음과 같습니다.

 

1. '/etc/profile' 실행

2. '/etc/profile'이 '/etc/profile.d' 안에 있는 모든 스크립트(*.sh)를 실행

3. '~/.bash_profile' 실행 (또는 '~/.bash_login' 또는 '~/.profile')

4. '~/.bashrc' 실행

5. '/etc/bashrc' 실행

 

(기본적인 순서는 다음과 같지만 서버 환경 및 쉘 설정, 환경 설정 파일의 내용에 따라 차이가 있을 수 있습니다.)

 

 

 

비로그인 쉘(non-login shell)

비로그인 쉘의 개념이 처음에는 좀 헷갈릴 수 있는데요.

비로그인 쉘은 이미 로그인된 세션 내에서 실행되는 추가적인 쉘로, 로그인 쉘로부터 파생된 쉘로 볼 수 있습니다.

1. SSH를 통해 원격으로 접속한 뒤 bash shell을 실행하거나, 2. GUI 세션에서 터미널을 실행하는 경우 비로그인 쉘로 실행됩니다.

 

 

비로그인 쉘이 실행되었을 때 환경 설정 파일이 실행되는 기본적인 순서는 다음과 같습니다.

 

1. '~/.bashrc' 실행

2. '/etc/bashrc' 실행

 

(비로그인 쉘 마찬가지로 기본적인 순서는 다음과 같지만 서버 환경 및 쉘 설정, 환경 설정 파일의 내용에 따라 차이가 있을 수 있습니다.)

반응형