Blog

터미널 초보의 필수품인 Oh My ZSH!를 사용하자

August 21, 2015

터미널 초보의 필수품인 Oh My ZSH!를 사용하자

요약: 화려한 테마와 편리한 기능을 가진 Oh My Zsh를 설치하여 터미널 환경을 획기적으로 변경하고 iTerm이던 터미널 앱이던 리눅스든 상관없이 같은 환경으로 작업하자!

터미널로 정말 많은 것을 할 수 있지만, 터미널 명령어를 익히는 것은 맥이나 리눅스 초보에겐 매우 낯선 일이다. 아마 맥을 오랫동안 사용한 사람들도 터미널을 한 번도 사용하지 않은 사람도 많고, 터미널을 사용했다고 하더라도 제시된 명령어를 그대로 복붙하는 경우가 많다. 그러나 터미널 명령어를 한번 익혀놓으면 어떠한 OS에서도(수십 년의 시간과 기종과 거의 상관없이 – 물론 유닉스 계열이라 윈도 기종은 제외) 거의 그대로 사용할 수 있으므로 배우는 시간이 아깝지 않다.

터미널을 실행시키면 최신 버전의 우분투와 OS X에서는 bash라는 쉘shell을 실행한다. 맥에서 터미널 앱을 실행시킬 때 또는 우분투에 로그인할 때 처음 만나는 화면은 bash 쉘이 보여주는 화면이다. 텍스트로 되어있고 폰트도 까만 화면에 하얀색으로 무뚝뚝하게 보여주는 화면이다. GUI 환경을 많이 사용하다 보면 정이 뚝 떨어지는 느낌이 든다. 그래서 많은 사용자가 쉘 환경설정을 변경하여 자신이 좋아하는 색상과 폰트를 설정하기도 하고 시스템의 설정을 자신만의 환경으로 변경하기도 한다. 깃허브에서도 이러한 돗파일dotfiles만 모아서 추천해주고 있다.

이 돗파일을 살펴보면 정말 많은 환경설정 값을 변경할 수 있다는 것을 알 수 있는데 초보자가 보기에는 어렵고, 때로는 원하지 않는 설정을 바꾸게 되어서 되돌리느라 많은 시간을 소비할 경우도 있다.

Oh My Zsh

Oh My Zsh는 bash보다 최근에 나온 쉘인 zsh의 환경설정을 다루는 프레임워크이며, 커뮤니티 활동이 매우 활발하여 120여 개의 테마와 120여 개의 플러그인이 준비되어있다.

먼저 Oh My Zsh를 설치하려면 당연히 zsh가 설치되어 있어야 하고, curl이나 wget, 마지막으로 git이 설치되어 있어야 한다.

아래 명령으로 zsh가 설치되어 있나 확인한다.

$ zsh --version
zsh 5.0.7

설치가 되어있지 않다면 아래 명령으로 설치한다. 우분투는:

sudo apt-get install zsh

OS X에서는:

$ brew update
$ brew install zsh

bash로 되어있는 기본 쉘을 zsh로 바꾼다.

$ which zsh               #쉘의 위치를 확인한다.
/usr/bin/zsh

$ chsh -s /usr/bin/zsh    #기본 쉘을 변경한다.

$ chsh -s `which zsh`     #위 두 개의 명령을 하나로 줄일 수도 있다.

재로그인하거나 터미널을 종료하고 재시작한 후 기본 쉘이 zsh인 것을 확인한다. 일부 시스템 특히 OS X에서는 /etc/shells 파일에 설치한 쉘을 등록한 후에 재시작해야 한다.

$ echo $SHELL
/usr/bin/zsh

이제 Oh My Zsh을 설치한다. wget으로 설치할 수도 있다.

$ curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh

간단한 사용법

설치가 잘되었다면 이제 간단하고 편리한 몇 가지 기능을 경험해보자.

/home/encodes/Projects라는 폴더가 있을 때 cd /h/enco/proj만 입력하고 탭을 치면 전체 경로가 완성된다.

$ cd /h/enco/proj             # 여기까지 입력한 후 탭을 친다.

$ cd /home/encodes/Projects   # 이렇게 결과가 나온다.

/home/encodes/Projects라는 폴더에서 바로 /로 이동하려면 cd ......라고 하면 된다. cd ..은 바로 위 부모 디렉토리로 올라가는 일반적인 명령어인데, Oh My Zsh에서는 cd ...은 부모 디렉토리의 부모 디렉토리로, cd ....은 부모 디렉토리의 부모 디렉토리의 부모 디렉토리로 옮겨진다.

루트/ 디렉토리에서 바로 이전의 디렉토리인 /home/encodes/Projects로 이동하려면 간단히 cd -를 입력하면 된다. Oh My Zsh에서는 이것을 확장하여 cd - 상태에서 탭을 치면 이전 히스토리가 나온다.(최대 10개까지 보여주며, 2개 이상일 때 유용하므로 cd 명령으로 여러 개의 디렉토리를 이동한 후에 사용해 보자) 히스토리 바로 앞의 숫자를 입력하면 원하는 디렉토리로 돌아갈 수 있다.

$ cd -        # 탭을 치면 아래와 같은 히스토리가 나오고 번호로 선택한다.
1 -- /home/encodes/Projects
2 -- /var/www
3 -- /usr/local
4 -- /usr/bin
5 -- /home/user

디렉토리나 파일의 이름을 자동으로 완성하거나 추천해준다. 여러 개일 경우에는 탭으로 내비게이션해서 선택할 수 있다.

$ cd /etc/a    # 탭을 치면 아래와 같이 a로 시작하는 디렉토리가 나오며 탭으로 선택할 수 있다.
acpi/          apache2/       apparmor/      apport/        at-spi2/
alternatives/  apm/           apparmor.d/    apt/

명령어의 옵션에서도 이 추천 기능을 사용할 수 있다!

$ git a         # 탭을 치면 a로 시작하는 옵션이 나오고 탭으로 선택할 수 있다.
add      -- add file contents to index
am       -- apply patches from a mailbox
apply       -- apply patch to files and/or to index
archimport  -- import an Arch repository into git
archive  -- create archive of files from named tree

zsh에도 추천 기능이 있지만 Oh-My-ZSH!가 더 직관적이다.

명령어 스펠체크기능은 디폴트가 아니기 때문에 다음 명령어로 깨워야 한다.

$ setopt correct                        # 스펠체크기능을 깨운다.
$ gut add                               # 잘못된 명령어를 입력하면
zsh: correct 'gut' to 'git' [nyae]?     # 예상되는 추천 명령어를 제시한다.

테마

개인적으로 예쁜 테마도 좋지만, 기능적으로 간결한 테마를 원한다. 120개 가까운 테마를 훑어 봤는데 디폴트 테마인 robbyrussell보다 확실하게 더 눈에 띄는 것을 찾을 수가 없었다. 그렇다고 일일이 써보기엔 너무 많아서 고민이었는데 재미있는 기능을 발견했다. 터미널을 실행할 때마다 랜덤하게 선택해서 테마를 경험해 볼 수 있는 기능이다. ~/.zshrc에서 두 번째 설정값을 디폴트값인 robbyrussell에서 random으로 변경한다.

ZSH_THEME="random"

이제 터미널을 켤 때마다 테마를 탐색할 수 있다. 테마 중에 Oh My Zsh의 기능인 Right-hand prompts을 적용한 테마도 있다. 주로 시간이나 배터리값을 보여주거나 현재 git 상태를 기호 등으로 나타내주는 기능이다.

플러그인

~/.oh-my-zsh/plugins에 들어있는 200개 가까운 플러그인은 많이 사용되는 프로그램의 alias를 미리 정의해 놓은 것이다. alias는 긴 명령어를 짧게 사용할 수 있도록 별명을 주는 것이다. 예를 들어 alias ga = "git add"로 정의하면 ga만 입력해도 git add를 입력한 것과 같도록 하는 것인데 안 쓸 수 없다. 위에서 설명한 옵션 완성 기능도 플러그인을 설치해야 한다.(git 플러그인은 기본으로 설치되어 있다)

~/.zshrc 파일에 원하는 플러그인을 스페이스로 구분하면서 하나씩 나열하면서 입력한다.

plugins=(git rails gem rvm)

터미널을 재로그인하거나 아래 명령으로 ~/.zshrc안의 스크립트를 실행한다.

source ~/.zshrc         # 혹은
. ~/.zshrc              # .과 source는 같다.

자신만의 알리아스를 추가할 경우에도 ~/.zshrc에 입력한 후 위의 명령을 내리면 된다.

.zshrc나 .bashrc의 rc는 Run commands의 준말로 "런컴"으로 읽는다.

설명이 곁들여진 플러그인 리스트는 Plugins OverviewPlugins에서 볼 수 있다.

기본으로 설치되는 git 플러그의 알리아스도 70개가 넘다 보니 편하게 쓰려다가 외워야 하는 게 너무 많아졌다. 행복한 고민일까? 간단하게 검색해보니 알리아스팁이란 것이 있다. 여기서는 자동으로 설치하는 것보다 수동설치한다.

$ cd ${ZSH_CUSTOM1:-$ZSH/custom}/plugins            # 커스텀 플러그인 폴더로 이동
$ git clone https://github.com/djui/alias-tips.git  # 저장소를 로컬로 복사
$ $EDITOR ~/.zshrc                                  # 에디터로 파일을 에디터로 불러들임

alias-tips 플러그인을 추가한다.

plugins=(git ... alias-tips)

source 명령으로 ~/.zshrc을 재실행하면 다음과 같은 화면을 볼 수 있다.

$ ls -lh
You know you have an alias for that, right? ll

~/.zshrc 파일 안에 다음 변수와 값을 지정하여 나타나는 메시지를 변경할 수도 있다.

:
export ZSH_PLUGINS_ALIAS_TIPS_TEXT="Alias tip: "
:

이제 자주 사용하는 몇 개만 외워두고 사용해가면서 알리아스를 배워나갈 수 있다.

참고 링크