Shell in Linux

JUHYUN·2022년 7월 24일
1
post-custom-banner

📔 Shell in Linux

🟢 What is Shell?

명령어 해석기 또는 명령행 인터페이스

⇒ 커널과 사용자를 이어주는 다리 역할


🟢 Shell이 구체적으로 뭔지 안잡힌다면..?

⭐ 콘솔창에서 나의 일을 처리해주는 사람이라고 생각하자!

⇒ 그리고 그 사람은 매우 친절해서 내가 해달라는 것을 전달하면 처리해준다!

만약 cat /proc/stat (= 내가 입력한 파일(/proc/stat)을 보여줘!) 라는 말을 Shell에게 전달하면 파일을 찾아서 우리가 눈으로 볼 수 있게 보여준다

⚠️ 콘솔창이 Shell은 아니다! 콘솔창은 단지 Shell 과 소통하는 공간 (ex. 카톡) 일뿐


🟢 Shell의 종류

굉장히 많은 곳을 예로 들 수 있겠지만 은행을 예로 들어봅시다. 은행에서 우리의 업무를 처리해 줄 사람은 한명이 아닙니다. 만약 번호표를 뽑고 배정받은 은행원과 소통이 원활하지 않다거나 나의 일을 제대로 처리해줄 수 없는 경우, (대부분의 경우 그럴일이 없겠지만….) 다른 사람으로 바꿔서 업무를 처리할 수 있겠죠.

Shell도 같습니다. 우리가 전달하는 명령을 처리해 줄 수 있는 Shell이 단 한개가 아니라는 말이죠!

cat /etc/shells

위와 같은 명령어를 입력하면 저희가 일을 처리해줄 수 있는 Shell의 목록을 볼 수 있습니다.

그럼 현재 저희의 일을 처리해주는 Shell은 누구일까요?

echo $SHELL

bash(Bourne again Shell) 이 현재 저희의 일을 처리하는 Shell 인것을 확인 할 수 있습니다. bash Shell은 추가설정을 하지 않는다면 기본적으로 지정되는 Shell 입니다.

(Shell의 종류 설명 업데이트 예정)

  • 쉘의 종류
    • Bourne Shell (sh)
    • C Shell (csh)
    • tee-see-Shell (tcsh)
    • Z Shell (zsh)
    • Bourne-again Shell (bash)

🟢 로그인쉘과 서브쉘

제목을 보고 또 쉘의 종류라고 생각할 수 있겠지만 그렇지 않습니다.

어떤 Shell에게 로그인 처리를 맡길것인가!

즉, 이번엔 역할에 관련된 주제가 되겠죠.

로그인 쉘 (login Shell)

리눅스를 로그인 할 때, 사용자를 선택하고 알맞게 패스워드를 입력하면 짠! 하고 로그인이 되지만 사실 그 뒤에는 여러가지 일들, 정확히 말하자면 여러 쉘 스크립트 파일(.sh)이 실행됩니다. 그렇다면 그 쉘 스크립트 파일은 혼자 돌아가는 것일까요? 아니죠! 일처리는 Shell이 한다고 했으니 쉘 스크립트 파일이 실행되려면 Shell이 필요합니다.

이제 로그인 쉘에 대해 정확한 느낌이 오실 것 같습니다. 로그인 쉘이란 로그인 처리에 필요한 파일들을 실행하는 Shell을 의미하게 되겠죠!

추가로 로그인이 실행하는 여러 쉘 스크립트 파일은 대부분 사용자 환경의 초기 세팅을 지정합니다. 그 과정에서 터미널에서 기본적으로 쓰게 되는 쉘 또한 로그인 쉘을 담당하는 쉘로 지정되게 됩니다.

◾서브 쉘 (sub Shell or non-login Shell)

그렇다면 서브 쉘이란 무엇일까요? 앞서 로그인 쉘은 사용자의 로그인을 처리해주는 쉘이며, 초기화 과정을 통해 터미널 기본 쉘로 지정된다고 했었습니다. 서브쉘은 기본 쉘 위에서 추가로 실행되는 쉘을 의미합니다. 서브쉘의 예를 몇가지 보겠습니다.

위의 사진은 기본 쉘인 bash Shell에서 sh Shell을 추가로 실행시킨 것입니다. 두 번째 줄에 $ 가 있는 것으로 보아 sh Shell이 명령을 기다리고 있는 것 같습니다.

위의 사진은 현재 계정에서 user1 이라는 계정으로 바꾸기 위한 명령어를 보여주고 있습니다. 이 과정 또한 로그인 과정이기 때문에 로그인 쉘(현재는 bash Shell)이 이 과정을 처리하기 위해 서브쉘로서 실행됩니다. 즉, 로그인 쉘 또한 서브 쉘로 등장할 수 있다는 이야기죠!

💡 서브 쉘의 특징

기본 쉘과 그 위에 실행된 서브 쉘은 어떤 면에서 부모-자식의 관계라고 볼 수 있습니다. 서브 쉘은 상위 쉘의 환경변수 를 사용할 수 있습니다.


🟢 Shell 에서의 환경변수와 변수의 특징

  • 환경변수는 각 쉘마다 ~/.bashrc 파일에 의해 설정됩니다. → 즉, 각 쉘 마다 쓸 수 있는 환경변수가 다르다는 것을 의미합니다.
  • 각 쉘의 지역변수는 오직 해당 쉘에서만 접근 가능합니다. ⚠️ 서브 쉘에서 상위 쉘의 모든 변수를 쓸 수 있는 것은 아닙니다. 환경변수로 지정하지 않은 상위 쉘의 지역변수는 서브 쉘에서 쓸 수 없습니다. → 한 예로 crontab 을 사용해 스크립트 파일을 실행시키는 것이 있습니다. crontab 은 스크립트 파일을 실행시킬 때마다 새로운 쉘을 만들고 그 안에서 스크립트를 실행시키기 때문에 쉘에서 특정 변수가 유지되지 못합니다.
  • 모든 쉘에서 공통으로 사용가능한 환경변수 또한 있습니다. 모든 쉘의 공통 환경변수는 /etc/bashrc 에서 확인할 수 있습니다.

💡 bashrc 파일이란?**

bashrc 파일은 사용자가 새로운 쉘을 열 때마다 실행되는 스크립트입니다.

→ 만약 해당 스크립트에 변수들이 선언되어 있었다면, 쉘을 열고 따로 선언하지 않아도 쓸 수 있게 되는 것이죠!


profile
행복과 같은 속도를 찾는 개발자
post-custom-banner

0개의 댓글