🦇 Linux

리눅스 - 셸, 환경변수, bash 셸

ji-hyun 2021. 8. 24. 05:31

echo $SHELL

시스템에 로그인한 후에 사용 중인 셸을 확인하려면 로그인 셸관련 환경변수 SHELL을 통해 가능하다. 명령 프롬프트 상에서 echo $SHELL 을 입력해주면 확인 가능하다.

 

echo $SHELL 실행결과

$ 가 붙은건 환경변수 임을 나타내준다고 생각하면 된다.

 

 

환경변수란

프롬프트의 변경, PATH 변경 등과 같이 셸의 환경을 정의하는 중요한 역할을 수행하는 변수를 말한다. 환경 변수는 미리 예약된 변수명을 사용하고, bash 에서는 PATH, SHELL 등과 같이 대문자로 된 변수로 구성되어 있다.

 

 

 

 

env

env 는 "환경변수의 창고" 라고 생각하면 된다. env 를 명령하면 다음과 같은 실행결과가 나온다.

 

환경변수의 창고 = env

 

env 의 실행결과가 너무 길어서 일부분을 캡처하였다. 여기에서 3번째 줄의 hostname 을 주목해보자. (= HOSTNAME)

 

 

 

echo $HOSTNAME 을 한 결과와 hostname 을 한 결과가 똑같이 나온다.

 

 

 

 

chsh -l

앞서 echo $SHELL 을 명령했을 때 bash 셸이 결과로 나왔다. 그러나 bash 셸만 있는 것은 아니다.

다른 셸을 사용하기 위해 변경 가능한 셸의 확인은 chsh -l 을 하면 된다. (혹은 cat /etc/shells 로 확인이 가능하다)

 

chsh -l 실행결과

 

 

c셸, z셸 등이 있지만 "리눅스가 기본적으로 사용하는 셸은 bash 셸이다" 정도로만 알고 가도 좋다.

 

 

 

 

 

셸이란?

셸은 커널과 사용자간의 다리 역할을 하는 것으로 사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할을 한다. 쉘은 커널에서 분리된 별도의 프로그램이어서 다양한 종류의 셸이 존재하고 현재까지도 지속적으로 개발되고 있다.

 

셸은 사용자가 시스템에 로그인을 하게 되면 각 사용자에게 설정된 셸이 부여되면서 다양한 명령을 수행할 수 있게 된다. 다르게 얘기하면 사용자에게 셸을 부여하지 않게 되면 시스템에 로그인 하더라도 명령을 수행할 수 없게 되므로 로그인을 막는 효과와 동일하다고 볼 수 있다.

(최근 일부 배포판에서는 셸을 부여하지 않아도 로그인이 된다)

 

-리눅스 마스터 2급 완전 정복 253p

 

 

 

 

 

참고 : 셸의 변경

사용자가 로그인 셸을 변경하려면 chsh 명령을 사용하면 된다. 시스템에 로그인한 뒤에 chsh 라는 명령을 입력하면 사용자 암호를 물어본다. 암호를 입력한 후 변경하려는 셸을 절대 경로로 입력하면 변경할 수 있다.

 

변경한 셸의 적용은 다음 로그인부터 유효하다.

 


 

 

ls -l 을 했을 때 아무것도 없었지만 ls -al 명령을 하면 숨겨진 파일들이 나타난다. (파일 이름 앞에 . 이 붙은 것이 숨겨진 파일이라는 뜻이다.)

 

여기서 주목해야 할 것은 .bash_history, .bash_logout, .bash_profile, .bashrc 와 같이 bash 로 시작되는 파일들이다.

 

 

 

 

 

로그인부터 로그아웃까지 어떤 절차들이 이루어지는지 위의 bash 파일들과 함께 알아보면..

 

① 로그인 하게 되면 /etc/profile 을 읽는다.

② /etc/profile.d/*.sh 를 읽어온다. (profile.d(디렉터리의 d) 밑에 *.sh 확장자인 것을 읽어온다.)

③ 그 다음 ~/.bash_profile (=내 홈 디렉터리 밑에 있는 bash_profile) 을 읽어온다. 이것은 각 개인의 마스터 파일이다.

④ bashrc 을 읽어온다. 이것은 보조 파일이다.

⑤ bash_history : 로그아웃했을 때 이전 실행했던 명령어들을 이 파일에 저장하고 빠져 나온다. 

⑥ bash_logout : 로그아웃을 했을 때 어떤 일을 하고 싶으면 여기다가 적으면 된다.

 

 

 

 

.bash_logout 파일

 

nl .bash_logout 을 하면 한 줄만 출력되고 아무것도 안뜨는데

만약 로그아웃이 될때 뭔가를 실행시켜주고 싶다면(예를 들어 clear 같은..) 밑의 행에 써주면 된다.

 

 

 

 

 

 

.bash_history 파일

 

.bash_history 파일은 지난번 로그아웃 했을 때까지의 모든 명령어를 출력한다.

 

 

 

 

 

bashrc 와 bash_profile 파일과 관련해서는 설명이 너무 길어져서 가독성을 위해 다음 게시물에서 살펴보겠다!

 

 

 

 

 

 

 

 

※ 아래 유튜브와 "리눅스 마스터 2급 완전 정복" 을 읽고 개인적으로 공부 및 정리한 글입니다. 

https://www.youtube.com/watch?v=_DWiDKFEfjo&list=LL&index=1