반응형

 

프로그래밍을 공부하면서 가장 어려웠던 점은

지금까지 아이콘과 마우스 클릭으로 이루어졌던 모든 일들을

이제는 CMD, TERMINAL 등에서 명령어로

수행해야 한다는 것이었습니다.

즉각적으로 눈에 보이는 구조가 아니라

머릿속에서 컴퓨터 동작의 구조를 인지하고

있어야 한다는 점이 익숙하지 않았습니다.

터미널 창을 띄우고 간단한 명령어들을

입력해 보면서 공부하기는 했지만,

기본적으로 이 시스템 자체에 대한 이해가 필요했고,

그중 셸 (Shell)에 대해 정리해 보기로 했습니다.


쉘(Shell)이란 무엇인가?

쉘 (Shell)은 껍질이라는 뜻입니다.

바깥 환경과 속 살 그 사이의 껍질,

이것이 쉘 (Shell)입니다.

속 살은 운영체제 (Window, Mac, Linux etc..)이고,

바깥 환경은 사용자이며

운영체제와 사용자가 대화를 주고받을 수 있도록

그 사이에서 도와주는 것이 쉘입니다.

Shell 은 명령어 해석기로서

프로그램이며 실행 파일입니다.

C언어, 자바스크립트 같은 언어들은

컴파일러라는 번역기에 의해

기계어로 변환되어 컴퓨터에서 동작하지만

쉘 스크립트는

사람이 바로 이해할 수 있는

자연어 형식으로 되어있습니다.

기본적으로 셸은 대화형 인터페이스를 제공합니다.

따라서 입력받은 명령어를 즉시 실행시킬 수 있으며

다양한 옵션 기능을 통해 편리하게 이용할 수 있습니다

 

즉,

쉘은 사용자와 운영체제 간의 대화를 중개하는 인터페이스입니다.

사용자가 입력한 명령을 운영체제에 전달하고,

그 결과를 사용자에게 돌려주는 역할을 합니다.

쉘은 일종의 명령어 해석기로,

사용자의 명령어를 해석하여 컴퓨터가 수행할 수 있는 언어로 변환합니다.

이는 다양한 프로그래밍 언어가 컴파일러를 통해 기계어로 번역되는 과정과 유사합니다.


마지막으로 다시 한번 짚어보겠습니다.

쉘은 운영체제와 커널 사이에 위치해 있으며,

응용 프로그램과 커널이

대화를 할 수 있도록 만들어줍니다.

우리가 명령어를 쳐서 쉘에게 넘기면

쉘은 커널에게 전달합니다.

커널은 해당 명령어를 수행하고 결과를

다시 쉘을 통해 우리에게 전달합니다.

그래서 쉘을 명령어 해석기라고 이해하셔도 무방합니다.


쉘의 주요 기능
  • 대화형 인터페이스: 사용자로부터 명령어를 입력받아 즉시 실행할 수 있습니다.
  • 스크립트 실행: 쉘 스크립트를 통해 복잡한 작업을 자동화할 수 있습니다.
  • 환경 설정: 시스템 전체나 개별 사용자의 환경을 설정할 수 있습니다.

주요 쉘의 종류
  1. Bourne Shell (sh): 유닉스에서 가장 초기의 쉘로, 많은 리눅스 배포판에서 기본적으로 설치됩니다.
  2. C Shell (csh): C언어의 문법을 모방하여 사용성을 향상시킨 쉘입니다. 다양한 편리 기능을 제공하지만, 처리 속도가 느린 단점이 있습니다.
  3. Korn Shell (ksh): Bourne Shell을 확장한 쉘로, C Shell의 기능을 포함하며 빠른 처리 속도를 자랑합니다.
  4. Bash (Bourne Again Shell): 현재 가장 널리 사용되는 쉘로, Bourne Shell의 기능을 기반으로 하여 Korn Shell과 C Shell의 장점을 결합했습니다. sh 셸을 기반으로 만들어졌으며 리눅스에서 사용자 계정을 생성할때 특별한 셀을 지정하지 않으면 기본적으로 사용되는 셸입니다. bash는 sh를 기반으로 korn shell(ksh) + C shell(csh)의 장점을 모아 만들었으며 무로료 배포되어 빠르게 시장을 점유했습니다.
  5. Z Shell (zsh): Bash의 기능을 확장하고 사용성을 더욱 향상시킨 쉘로, macOS Catalina 버전부터 기본 쉘로 사용됩니다.
  6. tcsh Shell: csh의 기능을 강화한 쉘입니다.

내가 원하는 셸을 사용해 보자

 

내가 사용 중인 셸 확인하기

# 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

 

커널(Kernel)이란 무엇일까? (개념, 이중 모드, 쉘의 역할)

커널(Kernel)은 컴퓨터 운영체제의 핵심 부분으로,하드웨어 자원을 관리하고 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 수행합니다.이는 응용 프로그램이 시스템 호출을 통해 하드웨

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

커널(Kernel)은 컴퓨터 운영체제의 핵심 부분으로,

하드웨어 자원을 관리하고 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 수행합니다.

이는 응용 프로그램이 시스템 호출을 통해 하드웨어 자원을 안전하게 요청하고 사용할 수 있게 도와줍니다.

 

다시 한번 설명하면,

커널 (Kernel)은 알맹이, 핵심 이란 뜻입니다.

운영체제의 핵심으로

컴퓨터 자원을 관리하는 역할을 수행합니다.

커널은 하드웨어와 응용 프로그램 사이에서

인터페이스를 제공하여 응용 프로그램이

하드웨어에서부터 오는 자원을 관리하고

사용할 수 있게 해 줍니다.

 

소프트웨어로부터 요청 (System Call)

컴퓨터에 있는 하드웨어(CPU, 메모리, 모니터)가

처리할 수 있도록 요청을 변환하는 역할을 합니다

 

커널을 도시의 전력 관리 시스템으로 생각해 보세요.

도시에서 전기는 각 가정과 회사에 필수적인 자원입니다.

전력 관리 시스템은 필요한 곳에 전기를 공급하고,

공급이 안전하게 이루어지도록 관리합니다.

마찬가지로 커널은 컴퓨터의 하드웨어 자원(전력)을

필요한 소프트웨어(가정, 회사)에 안전하고 효율적으로 분배합니다.

 

아래에서 하나씩 풀어서 설명해 드리도록 하겠습니다.

 

커널은 어디에 있는 건가요?

컴퓨터는 하드웨어(예: 키보드, 모니터, CPU)와 소프트웨어로 구분됩니다.

소프트웨어는 운영체제(예: Linux, MacOS, Windows)와

그 위에 설치되는 응용 프로그램(예: Excel, Chrome)으로 나뉩니다.

운영체제 안에서 커널은 시스템 프로그램과 함께 존재하며,

컴퓨터의 자원을 관리하는 중요한 역할을 합니다.

 

커널을 대형 쇼핑몰의 관리실로 생각할 수 있습니다.

쇼핑몰 안에는 다양한 상점이 있고,

이 상점들이 고객에게 서비스를 제공합니다.

관리실은 상점들이 필요로 하는 자원을 조정하고 배분하는 역할을 합니다.

이와 유사하게,

커널은 운영체제 내에서 소프트웨어가 하드웨어 자원을 효과적으로 사용할 수 있도록 관리합니다.

 

운영체제커널(Kernel)

시스템 프로그램으로 구분됩니다.

즉 커널은 컴퓨터 안에 운영체제에 속해 있는

컴퓨터의 자원을 관리해 주는 아주 중요한 부분

왜 커널이 필요한가요?

응용 프로그램이 하드웨어 자원을 직접 조작하면 자원 관리가 무질서해지고

시스템에 큰 영향을 미칠 수 있습니다.

따라서 운영체제는 응용 프로그램이 자원에 접근할 때

자신을 통해서만 접근하도록 제한하여 자원을 보호합니다.

이 과정에서 커널이 중심적인 역할을 합니다.

 

상황을 교통 체계에 비유해 볼 수 있습니다.

도로에서 차량(응용 프로그램)이 자유롭게 움직이면

교통 혼잡이 일어나고 사고가 발생할 수 있습니다.

교통경찰(커널)은 차량이 규칙을 준수하며 움직일 수 있도록 도로 사용을 조정합니다.

이로 인해 도로의 효율과 안전이 보장됩니다.

 

이중 모드: 사용자 모드와 커널 모드

대부분의 운영체제는 이중 모드를 사용하여 운영됩니다.

사용자 모드에서는 제한된 접근 권한으로 응용 프로그램이 실행되고,

커널 모드에서는 운영체제가 전체 시스템 자원에 접근할 수 있습니다.

예를 들어, 하드 디스크에 데이터를 저장하려는 응용 프로그램은

시스템 호출을 통해 커널 모드로 전환하여 이 작업을 수행하고,

다시 사용자 모드로 복귀합니다.

 

이중 모드를 학교에서의 교실과 교장실로 비유할 수 있습니다.

학생들(응용 프로그램)은 교실에서 일정한 규칙 내에서 활동합니다(사용자 모드),

반면 교장실(커널 모드)은 학교 전체를 관리하고 교육적 의사결정을 내릴 수 있는 전권을 가집니다.

이중 모드는 시스템의 안정성과 보안을 유지하기 위해 필수적입니다.

 

이중모드에 대해 자세히 알고 싶으신 분은 아래 글을 읽어 주세요

(작성 중)

쉘과의 관계

커널은 사용자와 직접 소통하지 않으므로,

사용자는 쉘을 통해 커널에게 명령을 내릴 수 있습니다.

쉘은 사용자로부터 명령을 받아 커널에 전달하고,

커널의 작업 결과를 사용자에게 돌려줍니다.

 

쉘이란 무엇일까요? 아래 글을 참조해주세요

https://jdcyber.tistory.com/72

 

쉘이란? Shell 기본 개념 이해하기

프로그래밍을 공부하면서 가장 어려웠던 점은<p id="SE-2b20e3bc-c016-4659-afd1-f225c9122d8c" style="background-color: #f7f7f7; color: #000000; text-ali..

jdcyber.tistory.com

 

쉘을 컴퓨터 프로그램과 하드웨어 사이의 통역사로 생각해 보세요.

외국에서 통역사 없이 의사소통을 하려면 어렵겠지만,

통역사가 있다면 소통이 수월해집니다.

마찬가지로 사용자(외국인)는 쉘(통역사)을 통해 커널(현지인)에게 명령을 전달하고,

결과를 이해할 수 있도록 도움을 받습니다.


커널은 운영체제의 핵심 부분으로서

컴퓨터의 기능과 성능에 지대한 영향을 미칩니다.

사용자와 하드웨어 사이에서 중요한 역할을 수행하며,

컴퓨터의 자원을 효율적으로 관리하고 보호하는 데 필수적입니다.


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형

+ Recent posts