프로그래밍

[Linux] What is Shell in Linux?

나오_주인장 2026. 2. 19. 16:04

과거에 bash shell과 c shell의 차이가 뭐냐고 질문을 들었던 적이 있습니다.

그 때는 일반적으로 사용하는 shell이 bash shell이고, 잘 사용하지 않는 shell이 cshell이라고 알고 있었고, 그렇게 대답했다가 혼났던 기억이 있습니다. 그래서 오늘은 shell이라는 것은 무엇이고, bash shell과 cshell의 차이는 무엇인지, 그 외에도 tsh, ksh, zsh, dash에 대해서도 다뤄보려고 합니다.

 

Shell이란 무엇인가?


Shell이란, 명령어 해석기, 명령행 인터페이스이자 스크립트 언어입니다.

 

어떠신가요? 이해가 좀 되시나요? 

아니면, '흠.. 명령어를 해석하고, 스크립트를 작성할 때 사용하는 언어라는건가? '라고 생각되시나요?

 

자, 그럼 좀 더 깊게 들어가보겠습니다.

리눅스의 운영체제는 커널(Kernel)쉘(Shell)유틸리티(Utility)의 3부분으로 구성됩니다. 이 세 구성 요소는 서로 상호작용하며 완전한 운영체제를 이루며, 각각의 역할과 기능이 명확히 분리되어 있습니다.

 

1. 커널(Kernel)

사용자가 실행하는 애플리케이션하드웨어 사이에서 조정자 역할을 합니다.

 

2. 쉘(Shell)

커널과 사용자 간의 인터페이스로서 중간 매개의 역할을 담당합니다. 명령어를 해석하고, 명령과 관련된 유틸리티나 커널을 호출하고, 실행 결과를 출력합니다.

 

3. 유틸리티(Utility)

사용자가 시스템을 편리하게 사용하기 위한 용용 프로그램입니다. 쉘과 유틸리티는 사용자 입장에서는 구분이 필요 없으며, 시스템을 더욱 효율적으로 사용할 수 있도록 도움을 줍니다.

 

즉, 커널은 CPU·메모리·디스크·네트워크 같은 것을 직접 다루고, 프로그램이 실행되고 파일이 저장되며 권한이 적용되도록 실제로 일을 처리합니다. 쉘은 사용자가 친 명령을 해석해서 어떤 프로그램을 실행할지 정하고, 그 실행을 커널에 요청하는 창구입니다. 유틸리티는 ls, cp처럼 사용자가 원하는 작업을 수행하는 프로그램들이며, 쉘을 통해 실행되어 커널이 제공하는 기능을 사용해 결과를 만들어 냅니다.

 

이제 shell에 대해서 어느정도 이해가 되셨을거라고 생각합니다.

 

 

이번에는 shell의 종류에 대해서 다뤄보도록 하겠습니다.

/etc/shells 파일을 열어보면 현재 운영체제 환경에서 사용할 수 있는 shell의 종류를 확인할 수 있습니다. 

 

 

아래의 그림을 보시면 bash, csh, dash, ksh, sh, tcsh, zsh 등 다양한 종류가 있는 것을 확인할 수 있습니다.


마지막으로, Shell의 종류별 특징을 보고, 포스팅을 마무리하겠습니다.

 

Shell의 종류


쉘 이름 위치 특징
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 등의 사용자 정의 테마를 지원한다. 

 

 

 

 

 

참고 자료


 

https://linux.jiny.dev/prologue/structure.html

 

리눅스 운영체제의 구조 - 커널, 쉘, 유틸리티

리눅스 운영체제는 커널, 쉘, 유틸리티의 3부분으로 구성됩니다.

linux.jiny.dev

 

'프로그래밍' 카테고리의 다른 글

[Linux] 명령어 모음  (0) 2026.02.23
[Linux] Permission  (0) 2026.02.19