셸이란?
우리가 PuTTY를 통해 `date` 명령어를 입력하면, 리눅스 내부에서는 다음과 같은 일이 일어난다.
- 키보드로 입력한 date 문자열을 받아들인다.
- 해당 명령어를 시스템에서 찾는다.
- 커널이 명령어를 찾아 실행한다.
- 실행 결과로 얻은 문자열을 화면에 출력한다.
이 과정에서 주목할 점은 사용자가 `date`라는 명령어를 입력했다고 해서 리눅스 커널을 직접 조작한 것이 아니라는 점이다.
사용자와 커널 사이에는 명령어를 받아들이고, 커널의 실행 결과를 사용자에게 전달하는 역할을 수행하는 소프트웨어가 필요하다.
이 소프트웨어가 바로 셸(Shell)이며, 사용자와 커널을 연결하는 인터페이스 역할을 수행한다.
일시적으로 셸 바꾸기
`echo $SHELL` 명령어를 사용해 리눅스의 로그인 셸(기본 셸)을 확인할 수 있다.
대부분의 리눅스의 로그인 셸은 bash 셸이다.
`sh` 명령어를 사용해 현재 사용 중인 셸을 sh 셸로 변경해 보자.
이번에는 `bash` 명령어를 사용해 현재 사용 중인 셸을 bash 셸로 변경해 보자.
다시 로그인 셸로 들어간 것처럼 보인다.
그러나 실제로는 bash 셸 위에 sh 셸이, sh 셸 위에 bash 셸이 중첩되어 실행 중인 상태다.
현재 bash 셸은 로그인 셸이 아닌 일반 셸이다.
따라서 `logout` 명령어를 사용할 수 없으며, `exit` 명령어를 사용해야 한다.
bash 셸에서 `exit` 명령어를 사용해 sh 셸로, sh 셸에서 `exit` 명령어를 사용해 로그인 셸로 돌아올 수 있었다.
로그인 셸 자체를 변경하려면 `cshs` 명령어를 사용하지만, 특별한 이유가 없다면 로그인 셸은 기본적으로 bash 셸 사용을 권장한다.
터미널과 셸
터미널이란 원래 컴퓨터의 입출력만을 담당하는 전용 하드웨어를 의미한다.
ex) 키보드, 모니터 ...
하지만 현재 리눅스를 다룰 때 하드웨어 터미널을 사용하는 경우는 거의 없다.
대신 소프트웨어로 구현한 터미널 에뮬레이터를 사용한다.
ex) PuTTY, Tera Term ...
우리가 윈도우에서 리눅스로 원격 로그인을 하는 경우를 가정해보자.
터미널 에뮬레이터는 윈도우 머신에서 동작하며, 리눅스 머신과의 연결을 통해 셸과 상호작용한다.
셸은 리눅스 머신에서 동작하며, 사용자가 입력한 명령어를 해석하고 실행한다.
즉, 터미널 에뮬레이터는 단지 리눅스 머신에서 돌아가는 셸의 입출력을 제공하는 소프트웨어일 뿐이다.
Reference
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=285368686&start=slayer
'Linux' 카테고리의 다른 글
셸 조작 (작성 중) (0) | 2025.01.04 |
---|---|
리눅스란? (1) | 2025.01.01 |