티스토리 뷰

Linux에 오라클을 설치하면 oracle User에 .bash_profile을 설정해야한다. 이 계기로 해당 내용을 정리해본다.

 

먼저 .bashrc, .bash_profile의 역할을 알아보자.

.bashrc, .bash_profile 역할과 실행시기

두 파일은 특정 유저 shell 실행환경을 편리하게 설정하기 위해 존재한다.

둘다 shell script file로 Shell 실행시자동으로 실행되는 파일 목록들이다.

둘의 차이점은 실행되는 조건다르다는 것이다.

실행되는 조건을 알아보자

 

파일위치

User Home Dirctory에 위치

User Home Directory

.bashrc

Shell 실행환경상관없이 무조건 실행되는 파일

 

.bash_profile

Login Shell로 실행할 경우 실행되는 파일

 

Shell 실행환경

Login shellnon-Login shell로 구분된다.

Login shell의 정의를 찿아보면 아래와 같다.

A login shell is a shell given to a user upon login into their user account

로그인시에 유저에게 주어지는 쉘이라고 되어있다.

처음에는 해당 정의가 이상했다. 왜냐하면 OS상에서 당연히 특정 유저로 로그인을 해야되는건데 그것을 왜 궂이 Login shell 이라고 칭하는 것일까 하는 의문 때문이었다.

이 의문을 해결하기 위해서 non-Login shell이 언제 발생하는지를 알아야 했다.

다음 예제들을 통해 두 가지 Shell 실행환경을 자세히 알아보자.

 

먼저 .bashrc와 .bashprofile이 실행되었다는 것을 알기위해 각 파일 끝에 echo 명령문을 삽입해준다.

.bashrc

echo "oracle User의 .bashrc가 실행되었습니다"

.bash_profile 

echo "oracle User의 .bash_profile이 실행되었습니다"

그런다음 Linux 상에서 Terminal 창을 열어보자.

.bashrc 실행

터미널 창을 열자마자 .bashrc가 실행되었다.

응 ? .bash_profile이 실행이 안되었나? 그래서 .bash_profile에 설정된 환경변수 설정이 되었는지 확인해보았다.

.bash_profile 적용이 되었다.

.bash_profile에 설정된 환경변수가 적용되어있다. 

나는 GUI 환경이다보니 oracle User로 로그인시 적용된 모습을 확인할 수 없었던것 뿐이다.

확실하게 보기 위해서 putty로 ssh 접속을 하여 터미널로 확인하기로 했다.

putty로 접속한 터미널

그렇다. 두 가지 파일이 모두 실행이 되었다. 이로서 Login shell 환경을 알아보았다.

non-Login shell은 어떻게 확인할까? su 명령어를 통해서 확인할 수 있다.

root 사용자에서 oracle user로 변환

.bashrc만 실행되었다.

다음은 옵션을 추가해서 su 명령어를 실행 해보자.

.bashrc와 .bash_profile 둘 다 실행되었다. "-" 옵션을 알아보자.

su

su -help

su 명령어 options

-, -l, --login 옵션은 login shell로 만드는 기능이다!

 

사실 non-Login shell을 확인하기 위해 su 명령어를 통해 확인할 필요가 없었다.

위에서 보았듯이 새터미널 창을 여는 경우는 .bashrc만 적용되는 것을 확인하였기 때문이다.

 

전체적으로 정리를 해보자.

.bash_profile은 해당 유저로 접속시에 shell이 실행되면서 실행이 된다.

그에 반해 .bashrc는 새로운 shell을 실행할 때마다 실행이 된다.

그렇기에 새 터미널창을 열때마다 .bashrc는 실행이 계속되었지만 .bash_profile은 실행이 되지 않은 것이다.

putty에서는 터미널로 접속하였기 때문에 echo 명령어를 통해 실행되는 모습을 확인할 수 있었으며 GUI환경에서는 출력값은 확인 못했지만 적용되어있는것을 확인할 수 있었다.

 

이제 구체적으로 말할 수 있다.

Login Shell은 세션연결이 된 직후 Shell 실행 환경이고 non-Login Shell은 세션 연결후에 새로운 Shell을 실행할 때를

뜻하는 것이다.

즉 .bash_profile은 세션 연결시에만 실행이 되며 .bashrc는 shell 실행환경과 상관없이 실행이 된다.

 

 

추가정리

bash startup file 목록

  • /etc/profile
  • ~/.bash_profile
  • ~/.bashrc
  • ~/.bash_login
  • ~/.profile
  • ~/.bash_logout

 

 

 

 

'Linux' 카테고리의 다른 글

[Linux] >, >>, <, | 간단한 예제  (0) 2022.08.18
[Linux] service vs systemctl 차이, /etc/init.d 용도  (0) 2022.08.17
Linux 화면 보호기 해제  (0) 2022.07.11
Linux 사용자 확인 및 삭제  (0) 2022.07.11
su시 .bash_profile 적용  (0) 2022.07.04
댓글