⭐ 명령어 해석기 또는 명령행 인터페이스
⇒ 커널과 사용자를 이어주는 다리 역할
⭐ 콘솔창에서 나의 일을 처리해주는 사람이라고 생각하자!
⇒ 그리고 그 사람은 매우 친절해서 내가 해달라는 것을 전달하면 처리해준다!
만약 cat /proc/stat
(= 내가 입력한 파일(/proc/stat)을 보여줘!) 라는 말을 Shell에게 전달하면 파일을 찾아서 우리가 눈으로 볼 수 있게 보여준다
⚠️ 콘솔창이 Shell은 아니다! 콘솔창은 단지 Shell 과 소통하는 공간 (ex. 카톡) 일뿐
굉장히 많은 곳을 예로 들 수 있겠지만 은행을 예로 들어봅시다. 은행에서 우리의 업무를 처리해 줄 사람은 한명이 아닙니다. 만약 번호표를 뽑고 배정받은 은행원과 소통이 원활하지 않다거나 나의 일을 제대로 처리해줄 수 없는 경우, (대부분의 경우 그럴일이 없겠지만….) 다른 사람으로 바꿔서 업무를 처리할 수 있겠죠.
Shell도 같습니다. 우리가 전달하는 명령을 처리해 줄 수 있는 Shell이 단 한개가 아니라는 말이죠!
cat /etc/shells
위와 같은 명령어를 입력하면 저희가 일을 처리해줄 수 있는 Shell의 목록을 볼 수 있습니다.
그럼 현재 저희의 일을 처리해주는 Shell은 누구일까요?
echo $SHELL
bash(Bourne again Shell) 이 현재 저희의 일을 처리하는 Shell 인것을 확인 할 수 있습니다. bash Shell은 추가설정을 하지 않는다면 기본적으로 지정되는 Shell 입니다.
(Shell의 종류 설명 업데이트 예정)
제목을 보고 또 쉘의 종류라고 생각할 수 있겠지만 그렇지 않습니다.
어떤 Shell에게 로그인 처리를 맡길것인가!
즉, 이번엔 역할에 관련된 주제가 되겠죠.
◾ 로그인 쉘 (login Shell)
리눅스를 로그인 할 때, 사용자를 선택하고 알맞게 패스워드를 입력하면 짠! 하고 로그인이 되지만 사실 그 뒤에는 여러가지 일들, 정확히 말하자면 여러 쉘 스크립트 파일(.sh)이 실행됩니다. 그렇다면 그 쉘 스크립트 파일은 혼자 돌아가는 것일까요? 아니죠! 일처리는 Shell이 한다고 했으니 쉘 스크립트 파일이 실행되려면 Shell이 필요합니다.
이제 로그인 쉘에 대해 정확한 느낌이 오실 것 같습니다. 로그인 쉘이란 로그인 처리에 필요한 파일들을 실행하는 Shell을 의미하게 되겠죠!
추가로 로그인이 실행하는 여러 쉘 스크립트 파일은 대부분 사용자 환경의 초기 세팅을 지정합니다. 그 과정에서 터미널에서 기본적으로 쓰게 되는 쉘 또한 로그인 쉘을 담당하는 쉘로 지정되게 됩니다.
◾서브 쉘 (sub Shell or non-login Shell)
그렇다면 서브 쉘이란 무엇일까요? 앞서 로그인 쉘은 사용자의 로그인을 처리해주는 쉘이며, 초기화 과정을 통해 터미널 기본 쉘로 지정된다고 했었습니다. 서브쉘은 기본 쉘 위에서 추가로 실행되는 쉘을 의미합니다. 서브쉘의 예를 몇가지 보겠습니다.
위의 사진은 기본 쉘인 bash Shell에서 sh Shell을 추가로 실행시킨 것입니다. 두 번째 줄에 $
가 있는 것으로 보아 sh Shell이 명령을 기다리고 있는 것 같습니다.
위의 사진은 현재 계정에서 user1 이라는 계정으로 바꾸기 위한 명령어를 보여주고 있습니다. 이 과정 또한 로그인 과정이기 때문에 로그인 쉘(현재는 bash Shell)이 이 과정을 처리하기 위해 서브쉘로서 실행됩니다. 즉, 로그인 쉘 또한 서브 쉘로 등장할 수 있다는 이야기죠!
💡 서브 쉘의 특징
기본 쉘과 그 위에 실행된 서브 쉘은 어떤 면에서 부모-자식의 관계라고 볼 수 있습니다. 서브 쉘은 상위 쉘의 환경변수 를 사용할 수 있습니다.
~/.bashrc
파일에 의해 설정됩니다. → 즉, 각 쉘 마다 쓸 수 있는 환경변수가 다르다는 것을 의미합니다.crontab
을 사용해 스크립트 파일을 실행시키는 것이 있습니다. crontab
은 스크립트 파일을 실행시킬 때마다 새로운 쉘을 만들고 그 안에서 스크립트를 실행시키기 때문에 쉘에서 특정 변수가 유지되지 못합니다./etc/bashrc
에서 확인할 수 있습니다.💡 bashrc
파일이란?**
bashrc
파일은 사용자가 새로운 쉘을 열 때마다 실행되는 스크립트입니다.
→ 만약 해당 스크립트에 변수들이 선언되어 있었다면, 쉘을 열고 따로 선언하지 않아도 쓸 수 있게 되는 것이죠!