Skip to content

Shell

셸(shell, 문화어: 쉘, 자령해석프로그램)은 운영 체제 상에서 다양한 운영 체제 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 셸(껍데기의 영어 단어)은 사용자와 운영 체제의 내부(커널) 사이의 인터페이스를 감싸는 층이기 때문에 그러한 이름이 붙었다.

셸은 일반적으로 명령 줄과 그래픽 형의 두 종류로 분류된다. 명령 줄 셸은 운영 체제 상에서 명령 줄 인터페이스(CLI)를 제공하는 반면에, 그래픽 셸은 그래픽 사용자 인터페이스(GUI)를 제공한다.

CLI와 GUI 기반 셸의 상대적 장점에 대해서는 논쟁이 많다. CLI 지지자는 CLI 셸 상에서 일반적인 수행(파일 이동 등)을 훨씬 빠르게 할 수 있다고 주장한다. 반대로 GUI 지지자는 GUI 셸의 상대적 사용성과 간편함을 내세운다. 일반적으로 성능을 중시하고 숙련된 관리자의 작업에 주로 사용되는 서버의 경우는 CLI가 많이 쓰이며 반면 일상적인 업무에 사용되는 컴퓨터엔 GUI가 많이 사용된다.

Categories

  • Shell:Basic - 쉘 기초.
  • Here document - << EOF와 같은 형식으로 stdin 문자열 전달.
  • atuin - 쉘 히스토리를 SQLite에 저장
  • Dagger Shell - 컨테이너 시대를 위한 새로운 쉘
  • Starship - 모든 셸에서 작고, 빠르고, 커스터마이즈 가능한 프롬프트
  • Vet - 원격 셸 스크립트를 더 안전하게 실행하는 도구
  • VHS - Your CLI home video recorder 📼

개요

운영 체제에서 커널과 이용자 사이에 끼어서 이용자의 명령을 해석하고 그 처리 결과를 뿌려주는 시스템 프로그램. Shell의 사전적 의미인 조개/소라 껍데기에서 따온 말로 내부의 커널이 있고 사용자는 이를 감싸고 있는 껍데기를 통해 커널에 접근한다는 개념으로 컴퓨터 초창기인 60년대부터 사용된 단어이다.

셸은 흔히 두 종류로 구분하는데, 명령 줄 셸과 그래픽 셸이다. 전자는 CLI이고 후자는 GUI라 부른다. CLI는 때때로 CUI(character 또는 console user interface)라고 부르기도 한다.

그 외에도 이 환경으로 접속하는 보안접속 프로그램(SSH; Secure SHell)을 일컫는 말이기도 하다.

설치되어 있는 쉘 확인하기

$ cat /etc/shells

현재 사용자의 기본 쉘 변경

$ chsh -s /bin/zsh

자세한 내용은 chsh 참조.

Command-line shell

  • 유닉스 셸:
  • rc 셸 (rc) - 플랜 9과 유닉스용 셸
  • COMMAND.COM - 도스용 셸
  • CMD.EXE - OS/2의 텍스트 모드와 윈도 NT용 셸
  • 4DOS, 4OS2, 4NT - JP 소프트웨어가 개발 및 판매하는 셸 (각각 도스, OS/2, 윈도 NT용)
  • PowerShell
  • GSH - A POSIX shell for Windows

그래픽 셸

  • 마이크로소프트 윈도우 환경:
    • 윈도우 탐색기
    • 라이트스텝
    • 지오셸
    • BB4Win
    • 이머지 데스크톱
  • 매킨토시 파인더
  • X 윈도 시스템 기반 환경(주로 유닉스):

Sehll 단축키

거의 모든 셸에서 작동하는 기본 단축키와 기능:

  • CTRL + W, U, K, Y조합은 커서 기준으로 단어 또는 줄의 앞뒤를 빠르게 삭제하거나 복원하는라인 편집 단축키
    • CTRL + W는 커서 앞의 단어 삭제
    • CTRL + U는 커서부터 줄의 시작까지 잘라내기, CTRL + Y로 다시 붙여넣기 가능
    • CTRL + K는 커서부터 줄 끝까지 잘라내기
    • CTRL + A / E는 줄의 처음과 끝으로 이동, ALT + B / F는 단어 단위로 앞뒤 이동
    • 대부분의 터미널에서 기본 활성화되어 있으며, Mac에서는 Option 키를 Meta로 설정해야 작동
    • reset 또는 stty sane 명령은 바이너리 파일을 잘못 출력해 터미널이 깨졌을 때 복구
    • 화면이 깨져도 입력은 가능하므로 reset 입력 후 엔터로 복원
    • CTRL + C / D는 각각 명령 중단과 EOF(파일 끝) 신호 전송
    • CTRL + D는 빈 프롬프트에서 누르면 셸 종료
    • CTRL + L은 clear 명령과 동일하게 화면을 즉시 정리
    • 현재 입력 중인 명령을 유지한 채 프롬프트를 화면 상단으로 이동
    • cd - 는 이전 디렉터리로 즉시 이동, pushd / popd는 디렉터리 스택을 이용해 여러 위치를 오가며 작업 가능
    • > file.txt는 파일을 비우되 삭제하지 않아 권한과 소유권을 유지
    • $_ 변수는 이전 명령의 마지막 인자를 재사용
    • 예: mkdir -p /path/newdir && cd "$_"
    • set -e, set -u는 스크립트 안전성을 높이는 옵션
    • set -e는 오류 발생 시 즉시 종료
    • set -u는 정의되지 않은 변수를 참조할 경우 오류 처리
    • set -euo pipefail 조합은 보다 강력한 보호 기능 제공

Bash와 Zsh에서의 고급 단축키 및 기능

  • CTRL + R은 명령어 히스토리에서 역방향 증분 검색 수행
    • 키워드 입력 시 과거 명령을 즉시 찾아 재사용 가능
  • !! 는 이전 명령 전체를 재실행
    • sudo !!로 직전 명령을 관리자 권한으로 재실행 가능
  • CTRL + X, CTRL + E는 현재 입력 중인 명령을 기본 편집기(Vim, Nano 등) 에서 열어 수정 후 실행
    • Zsh에서는 별도 설정 필요
    • fc 명령은 이전 명령을 $EDITOR로 열어 수정하는 전통적 방식
  • ESC + . 또는 ALT + . 은 직전 명령의 마지막 인자를 커서 위치에 삽입
    • 반복 입력 시 더 이전 명령의 인자까지 순환
    • !$ 는 같은 기능을 비대화식으로 수행

Troubleshooting

ë 같은 유니코드 문자가 갑자기 입력되는 현상

Terminal emulator#리눅스에서 유니코드 문자 입력 방법 항목 참조.

같은 유니코드 문자가 갑자기 입력되는 현상

Emoji#이모지 삽입 모드 항목 참조.

Favorite site

Tutorials