프로그래밍을 공부하면서 가장 어려웠던 점은
지금까지 아이콘과 마우스 클릭으로 이루어졌던 모든 일들을
이제는 CMD, TERMINAL 등에서 명령어로
수행해야 한다는 것이었습니다.
즉각적으로 눈에 보이는 구조가 아니라
머릿속에서 컴퓨터 동작의 구조를 인지하고
있어야 한다는 점이 익숙하지 않았습니다.
터미널 창을 띄우고 간단한 명령어들을
입력해 보면서 공부하기는 했지만,
기본적으로 이 시스템 자체에 대한 이해가 필요했고,
그중 셸 (Shell)에 대해 정리해 보기로 했습니다.
쉘(Shell)이란 무엇인가?
쉘 (Shell)은 껍질이라는 뜻입니다.
바깥 환경과 속 살 그 사이의 껍질,
이것이 쉘 (Shell)입니다.
속 살은 운영체제 (Window, Mac, Linux etc..)이고,
바깥 환경은 사용자이며
운영체제와 사용자가 대화를 주고받을 수 있도록
그 사이에서 도와주는 것이 쉘입니다.
Shell 은 명령어 해석기로서
프로그램이며 실행 파일입니다.
C언어, 자바스크립트 같은 언어들은
컴파일러라는 번역기에 의해
기계어로 변환되어 컴퓨터에서 동작하지만
쉘 스크립트는
사람이 바로 이해할 수 있는
자연어 형식으로 되어있습니다.
기본적으로 셸은 대화형 인터페이스를 제공합니다.
따라서 입력받은 명령어를 즉시 실행시킬 수 있으며
다양한 옵션 기능을 통해 편리하게 이용할 수 있습니다
즉,
쉘은 사용자와 운영체제 간의 대화를 중개하는 인터페이스입니다.
사용자가 입력한 명령을 운영체제에 전달하고,
그 결과를 사용자에게 돌려주는 역할을 합니다.
쉘은 일종의 명령어 해석기로,
사용자의 명령어를 해석하여 컴퓨터가 수행할 수 있는 언어로 변환합니다.
이는 다양한 프로그래밍 언어가 컴파일러를 통해 기계어로 번역되는 과정과 유사합니다.
마지막으로 다시 한번 짚어보겠습니다.
쉘은 운영체제와 커널 사이에 위치해 있으며,
응용 프로그램과 커널이
대화를 할 수 있도록 만들어줍니다.
우리가 명령어를 쳐서 쉘에게 넘기면
쉘은 커널에게 전달합니다.
커널은 해당 명령어를 수행하고 결과를
다시 쉘을 통해 우리에게 전달합니다.
그래서 쉘을 명령어 해석기라고 이해하셔도 무방합니다.
쉘의 주요 기능
- 대화형 인터페이스: 사용자로부터 명령어를 입력받아 즉시 실행할 수 있습니다.
- 스크립트 실행: 쉘 스크립트를 통해 복잡한 작업을 자동화할 수 있습니다.
- 환경 설정: 시스템 전체나 개별 사용자의 환경을 설정할 수 있습니다.
주요 쉘의 종류
|
내가 원하는 셸을 사용해 보자
내가 사용 중인 셸 확인하기
# echo $SHELL
# env|grep SHELL
변경 가능한 셸 확인하고, 일시적으로 변경하기
# cat /etc/shells
# /bin/sh
변경 가능한 셸 확인하고 , 셸 변경하기
# cat /etc/shells
# chsh -l
(방법1)
# chsh ubuntu -s /bin/dash <- 예시로 우분트 셸을 dash셸로 변경해보기
(방법2)
# vi /etc/passwd <- vi 편집기로도 변경 가능
셸 별 기능 체크
Bourne
|
C
|
TC
|
Korn
|
Bash
|
|
sh
|
csh
|
tcsh
|
ksh
|
bash
|
|
Programming language
|
✓
|
✓
|
✓
|
✓
|
✓
|
Shell variables
|
✓
|
✓
|
✓
|
✓
|
✓
|
Command alias
|
X
|
✓
|
✓
|
✓
|
✓
|
Command history
|
X
|
✓
|
✓
|
✓
|
✓
|
Filename completion
|
X
|
✓+
|
✓
|
✓+
|
✓
|
Command line editing
|
X
|
X
|
✓
|
✓+
|
✓
|
Job control
|
X
|
✓
|
✓
|
✓
|
✓
|
쉘과 커널의 관계
쉘은 운영체제의 핵심 구성 요소인 커널과 밀접하게 연결되어 있습니다.
사용자가 쉘에 명령을 입력하면, 쉘은 이를 해석하여 커널에 전달합니다.
커널은 명령을 수행한 후 그 결과를 쉘을 통해 사용자에게 반환합니다.
아래 글에 커널에 대해 쉽고 자세하게
작성해 두었으니
https://jdcyber.tistory.com/67
궁금하신 사항은 댓글에 남겨주세요
댓글에 남겨주신 내용은
추후 정리해서 올려드리겠습니다
구독 신청하시면 업로드 시 알려드릴게요!
-
조금이라도 도움이 되셨다면
공감&댓글 부탁드리겠습니다
감사합니다!
'개념' 카테고리의 다른 글
APN 설정으로 데이터 테더링 무제한 사용하기: SKT, KT, LG 통신사별 가이드 (2) | 2024.11.25 |
---|---|
컨테이너 이미지 이해하기: 애플리케이션 실행의 기본 (0) | 2024.04.26 |
도커(Docker)란 무엇인가? (0) | 2024.04.26 |
커널(Kernel)이란 무엇일까? (개념, 이중 모드, 쉘의 역할) (1) | 2024.04.23 |
하이퍼바이저란 무엇일까? Hypervisor 개념 알아보기 (1) | 2024.04.23 |