제육's 휘발성 코딩
article thumbnail
반응형

운영체제 (Operating System)

안녕하세요. 오늘은 쉘과 커널에 대해 알아보고자 합니다. 쉘과 커널에 대해 알아보기 전에 운영체제에 대해서 간단하게 짚고 넘어가려고 합니다.

운영체제 아키텍처 (출처: https://www.tutorialspoint.com/operating_system/os_overview.htm)

운영체제 종류로는 Mac, Window, Linux, Unix 등이 있으며 CPU 스케줄링, 프로세스, 메모리, 디스크, I/O 디바이스 등을 관리하는 역할을 합니다. 간단히 말해 운영체제는 사용자와 컴퓨터 간에 통신과 자원 관리를 담당하고 있습니다. 그중 핵심적인 역할을 하는 소프트웨어가 바로 쉘과 커널입니다. 

쉘과 커널 (Shell, Kernel)

쉘은 사용자가 운영체제의 서비스를 사용할 수 있도록 사용자의 입력을 기반으로 프로그램을 실행해 주는 역할을 한다. 즉, 커널과 사용자 사이의 인터페이스 역할을 담당합니다. (쉘은 OS 외부 계층에 속해있다)

커널은 쉘로부터 전달 받은 명령을 기계가 이해할 수 있는 언어로 변환하여 CPU, I/O, 메모리 등 다양한 리소스에 접근해 주는 역할을 한다.  (커널은 OS 내부 계층)

unix 아키텍처 (출처: https://www.naukri.com/learning/articles/unix-vs-linux/ )

쉘은 사용자(프로그램)에게 받은 명령을 전달받아 커널이 이해할 수 있도록 해석하여 전달하고, 커널은 하드웨어와 직접적으로 통신하는 역할을 합니다. 사용자는 시스템 손상 방지를 위해 접근할 수 있는 영역이 제한되어 있어 하드웨어에 엑세스하기 위해선 시스템 콜이라는 특정 작업을 수행해야 합니다.

 

시스템 콜 (System Call)

시스템 콜은 Mode bit를 기반으로 0이면 커널모드, 1이면 사용자 모드로 나뉘어서 작동한다.  사용자가 파일 생성, 프로그램 실행 등의 호출을 수행하려면 시스템 콜을 통해 서비스를 제공받을 수 있습니다.

System Call (출처 : https://cstaleem.com/user-mode-vs-kernel-mode-trap-vs-interrupt)

예를 들어 유저 프로그램이 I/O 요청을 하면,  trap이 발동되면서 모드비트가 1에서 0으로 변경되고, 커널에 전달됩니다. 커널은 해당 서비스를 수행하고, 다시 trap을 통해 모드비트를 0에서 1로 변경하여 사용자모드로 전달해 줍니다. 

 

리눅스 쉘 종류 

# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
  • cat /etc/shells 명령어를 통해 /etc/shells 파일을 보면 현재 운영체제 환경에서 사용할 수 있는 쉘의 종류를 확인할 수 있다. bash, zsh, ksh 등 다양한 쉘의 종류가 있다. 

 

쉘 이름 위치 특징
sh (Bourne Shell) /bin/sh 최초의 유닉스 쉘로 스크립트를 지원하며 sh로 표기한다. 본쉘은 논리 및 산술 연산을 처리하는 내장 기능이 없어 이전에 사용한 명령을 기억할 수 없다. (history 기능 제공하지 않음)
ksh (Korn Shell) /bin/ksh 본 쉘을 개선한 상위집합으로 history, alias 등의 작업기능이 추가되었다. (csh, sh 보다 빠름)
csh (C Shell) /bin/csh ksh 처럼 본쉘의 개선버전으로 history, alias, ~ (홈디렉토리) 기능 추가, 명령어 편집 기능 제공 X 
tcsh /bin/tcsh csh 개선 버전으로 명령어 편집기능 제공, 자동완성, where 명령어 제공 
bash (Bourne Again Shell) /bin/bash 본쉘의 확장버전으로 만든 Unix 쉘로 Linux, Mac의 기본 쉘로 사용된다.
mv, cp, rm, touch, ls, mkdir, cd, rmdir 등의 명령어 들이 추가되었다.
zsh /bin/zsh bash, ksh, tcsh의 기능을 결합하여 맞춤법 검사, 로그인 감시, 자동 생성, 플러그인 및 테마가 지원되며, oh my zsh 등의 사용자 정의 테마를 지원한다. 
  • 다양한 쉘의 종류가 있으며, 대부분 bash, zsh을 많이 사용한다. zsh은 bash와 동일한 쉘을 기반으로 추가 기능을 제공한다. 

 

# 사용 중인 쉘 확인 명령어들
echo $0
echo $SHELL
ps | grep sh
env | grep SHELL
  • 리눅스에서 현재 사용 중인 쉘의 종류를 알아볼 수 있는 다양한 방법이다. 

 

# 쉘 변경하기
chsh -s /bin/bash sasca37
  • chsh -s /bin/[쉘이름] [사용자명] 을 입력하면 현재 사용 중인 쉘을 변경할 수 있다. 

 

 

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^