[PART5] 운영체제/시스템/보안 - TERMS 04
[ TERMS 04 ] 셸
1. 셸(Shell)의 정의
셸은 사용자와 커널 간의 소통을 원활하게 해 주는 소프트웨어이다. 사용자가 터미널에서 작성한 명령어를 해석하여 커널에 직접 전달해서 컴퓨터를 빠르고 강력하게 제어할 수 있다.
> 터미널
최초의 터미널은 유닉스 기반의 컴퓨러를 제어하는 하드웨어 단말기를 의미했다. 주로 전신 타자기(Teletype Writer)을 이용했기 때문에 'TTY'라고도 불렸으나 현재는 기술이 발달하여 소프트웨어로 완전히 대체되었다. 터미널의 목적은 컴퓨터가 실행한 결과를 그대로 출력해 주는 것이다.
> 파워셸(PowerShell)
파워셸은 마이크로소프트사에서 윈도우에서 실행되도록 만든 셸이다. 기존 CMD(명령 프롬프트)의 확장형이라고 볼 수 있다. 기존 CMD와 다르게 크로스 플랫폼과 오픈 소스를 지향하기 시작하면서 다양한 OS에서 사용할 수 있다. 리눅스 명령어를 지원한다.
> CLI(Command Line Interface)
CLI는 사용자가 입력할 수 있는 인터페이스로 터미널과 혼용되어 쓰인다. CLI는 명령어의 입력과 출력은 모두 문자열로 이루어진다. GUI가 상용화된 현재 CLI는 불편한 환경으로 여겨지지만 자원이 적게 필요해 고성능을 요구하는 서버용 컴퓨터에 많이 쓰인다.
2. 셸은 어디서 접하게 될까?
> 파일탐색기 / Finder
윈도우의 파일탐색기, 맥의 Finder는 대표적인 GUI 셸이다. 파일탐색기/Finder에서 하는 작업을 터미널에서 완전 히 동일하게 수행할 수 있다.
> Git
Git을 설치하면 Git Bash가 설치되는데, 이때 배시가 바로 셸이다.
> 비주얼 스튜디오 코드(Visual Stu에o Code)
VSC에는 기본적으로 터미널이 내장되어 있다. 터미널로 개발에 필요한 여러 셸 명령을 수행할 수 있다.
3. 셸 알아보기
> 본 셸 (Bourne Shell)
유닉스 V7에 처음 탑재되었다. 사용자와 유닉스(운영체제)의 소통 창구 역할을 하였다. 이후 만들어진 많은 셸의 기반이 되었다.
> C 셸(csh)
History(내역), Alias(별명) 같은 편의 기능을 사용할 수 있다. 셸 스크립트 구문 형식이 C언어에 전신을두고 있어 C 셸이라고 불린다.
> 본 어게인 셸 (Bourne Again Shell (bash))
본 셸을 대체하는 자유 소프트웨어로 GNU 프로젝트를 위해 만들어졌다. 이후 리눅스, 맥 등 다양한 운영체제의 기본 셸로 탑재되어 현재까지 사용되고 있다.
> Z 셸(zsh)
본 셸 기반으로 배시와 호환된다. 배시의 단점을 보완했다.
4. 셸을 알아야 하는 이유
리눅스, Git, npm 등 많은 곳에서 셸이 사용되고 있다. 높은 작업 효율 때문에 리눅스는 물론이고 맥 Os, 윈도우 셸을 지원한다.
셸 스크립트(Shell Script)는 여러 셸 명령어와 스트립트 문법을 활용하면 강력한 프로그램을 만들 수 있으며, 프로그래밍 언어보다 구조가 단순해서 배우기 쉽다. 셸 스크립트는 .sh 확장자로 만드는 경우가 많으며 실행 파일이나 유틸리티 등을 서로 연결하여 원하는 프로그램을 쉽고 빠르게 만들 수 있다. 스크립트를 작성하거나 디버깅하는 것 또한 고급언어에 비해 수월하다. 따라서 프로토 타입을 위한 목적으로 주로 사용된다.
5. 셸 사용하기
> 체인지 디렉터리 (Change Directory)
작업 중인 디렉터리를 바꾸는 명령어로 'cd (디렉터리 명)'을 입력하면 해당 디렉터리로 이동한다. 폴더를 더블클릭하는 것과 동일한 명령어이다.
> 리스트 세그먼트(List Segments)
현재 디렉터리에 존재하는폴더 및 파일을 확인하는 명령어로 ‘1s’를 입력하 면 현재 디렉터리에 존재하는 폴더와 파일이 출력된다. 'ls (옵션)'을 통해 다양한 기능을 지원하는데, 파일의 세부적인 내용을 표시해 주는 -l 옵션, 수정 시간으로 정렬하여 출력해 주는 -t 옵션 등이 있다.
> ConcATenate
간단하게 파일 내용을 읽어 오고 두 파일의 내용을 잇는 명령어다. cat〈파일 명〉을 입력하면 해당 파일이 출력된다.
‘>’을 이용하면 두 파일을 이을 수도, 명령에 대한 출력을 바로 저장 할 수도 있다. ‘cat fl f2 > f3’를 입력하면 f3에 fl과 f2가 이어서 저장된다. ‘ls > fileList.txt’를 입력하면 fileList.txt가 생성되면서 ls 명령에 대한 출력이 저장된다.
> MANual
어떤 명령어의 사용법이나 용도를 알고 싶을 때 사용하는 명령어다. ‘man (명령어, 항목)’ 입력시, 해당 명령어 또는 항목에 대한 매뉴얼이 출력된다. 그만 읽으려면 ‘q’를 입력하면 된다.
> Print Working Directory
현재 작업 중인 폴더의 위치를 알고 싶을 때 사용하는 명령어이다. ‘pwd를 입력하면 현재 작업 중인 폴더의 경로가 출력된다.
> CLEAR
터미널을 깨끗하게 만드는 명령어이다. ‘clear’를 입력하면 명령어 입력 라인이 터미널 가장 상단에 위치하게 된다.
6. 셸 더 알아보기
> 셸 스크립트
셸 명령어를 텍스트 파일 형식으로 저장한 후 한 줄씩 읽어 실행시키는 스크립트이다. 스크립트는 인터프리터(interpreter) 방식으로, 전체 소스코드를 컴파일하는 것이 아니라 한줄씩 차례대로 읽어 실행시킨다.
# 사용자에게 이름을 입력받아 그대로 출력해 주는 스크립트
#!/b1n/bash
function greeting() {
echo "Hello, $1"
}
echo "Enter name"
read name
greeting $name
> 셸 스크립트를 사용하는 이유
셸 스크립트는 다른 프로그래밍 언어보다 구조가 단순해서 배우기 쉽다. 즉, 스크립트 작성이나 디버깅은 수월하다. 이 때문에 프로젝트의 프로토 타입을 위한 목적으로 주로 사용됩니다. 또한 반복적인 작업을 자동화하는 데 유용하게 쓰인다.
> 셸 스크립트를 사용을 지양해야 하는 이유
셸 스크립트는 CLI에서 동작하기 때문에 GUI나 그래픽 작업이 필요한 경우에는 알맞지 않다. 또한 다차원 배열을 사용하거나 Hash, Tree, Sort 등 빠른 연산이 필요한 경우에도 알맞지 않다.
> 함께 알아두면 좋은 용어
- 유닉스/리눅스
- GUI/UI
- 커널
- 스크립트
> 혼동하기 쉬운 용어
- CLI
- 명령 프롬프트
- 파워셸