[DevOps] zsh 설치 방법 (Oh My Zsh 까지..)

[DevOps] zsh 설치 방법 (Oh My Zsh 까지..)

안녕하세요? 정리하는 개발자 워니즈입니다. 이번시간에는 리눅스 터미널에서 재미난 셋팅에 대해서 몇가지 정리를 해보려고 합니다.

필자가 2019년 말 즈음에 필자의 사내에서 세미나가 진행을 했었는데, 정확히 기억은 나지 않지만, 그때 리눅스 터미널에 대해서 소개하는 자리였었습니다.

요즘에능 확실히 bash shell 보다는 다른 쉘계열들을 많이 사용하는 것 같습니다. 그렇다면, 다른 쉘을 사용했을때 과연 어떠한 장점이 있길래 사용할까요? 그런 궁금증에서 시작해서 직접 설치하고 기능들을 하나씩 겪어가면서, 장점을 알게 되었습니다.

오늘소개 드릴내용은 zsh를 소개 드리고자 합니다.

1. zsh 란 무엇인가?

Z 셸은 상호작용 로그인 셸이자 셸 스크립트를 위한 강력한 명령 줄 인터프리터로 사용할 수 있는 유닉스 셸이다. Zsh는 bash, ksh, tcsh의 일부 기능을 포함하여 수많은 개선 사항이 갖추어진 확장형 본 셸이다.

정확하게 구글에서 검색해서 나온 설명을 그대로 붙여 넣기 했습니다. 쉽게 이야기해서 우리가 보통 사용하는 본쉘의 확장판이라고 보면 될 것 같습니다.

Oh my zsh github

근데 사실 기능을 모를떄는 왜 사용해야되는지 모르겠지만, 쉽게 이야기해서 그동안 터미널 화면이 너무 딱딱했던거는 사실입니다. 그런데 zsh를 기본으로 가져가고 oh my zsh 를 설치하면, 기본적인 테마도 변경이 가능하고 그냥 딱 봐도 이쁘고 휘황찬란하다라는 말이 나옵니다.

2. 설치 방법

설치는 yum을 통해서 설치를 진행합니다.

  • zsh 설치
$ yum install zsh 

일단 zsh 가 설치가 완료되면, 기본 쉘로 지정을 해줘야 합니다.

change shell 명령어로 변경을 합니다.

$ chsh -s /usr/bin/zsh
  • Oh my zsh 설치
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

oh my zsh 는 이름에서도 느껴지듯이 오! 나의 zsh 를 참으로 이쁘고 멋지게 꾸며주는 것들 이라고 보시면됩니다. 플러그인들과 여러가지 테마들을 셋팅할 수 있습니다.

oh my zsh를 설치했으면 ~/.zshrc 가 생겼을 것입니다.

  • ~/.zshrc 셋팅
# If you come from bash you might have to change your $PATH.
# export PATH=$HOME/bin:/usr/local/bin:$PATH
# Path to your oh-my-zsh installation.
export ZSH="/root/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="agnoster"

# Set list of themes to pick from when loading at random
# Setting this variable when ZSH_THEME=random will cause zsh to load
# a theme from this variable instead of looking in $ZSH/themes/
# If set to an empty array, this variable will have no effect.
# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" )

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"

# Uncomment the following line to automatically update without prompting.
# DISABLE_UPDATE_PROMPT="true"

# Uncomment the following line to change how often to auto-update (in days).
# export UPDATE_ZSH_DAYS=13

# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS=true

# Uncomment the following line to disable colors in ls.
# DISABLE_LS_COLORS="true"

# Uncomment the following line to disable auto-setting terminal title.
# DISABLE_AUTO_TITLE="true"

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line to display red dots whilst waiting for completion.
# COMPLETION_WAITING_DOTS="true"

# Uncomment the following line if you want to disable marking untracked files
# under VCS as dirty. This makes repository status check for large repositories
# much, much faster.
# DISABLE_UNTRACKED_FILES_DIRTY="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
# HIST_STAMPS="mm/dd/yyyy"

# Would you like to use another custom folder than $ZSH/custom?
# ZSH_CUSTOM=/path/to/new-custom-folder

# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git zsh-autosuggestions)

source $ZSH/oh-my-zsh.sh

# User configuration

# export MANPATH="/usr/local/man:$MANPATH"

# You may need to manually set your language environment
# export LANG=en_US.UTF-8

# Preferred editor for local and remote sessions
# if [[ -n $SSH_CONNECTION ]]; then
#   export EDITOR='vim'
# else
#   export EDITOR='mvim'
# fi

# Compilation flags
# export ARCHFLAGS="-arch x86_64"

# Set personal aliases, overriding those provided by oh-my-zsh libs,
# plugins, and themes. Aliases can be placed here, though oh-my-zsh
# users are encouraged to define aliases within the ZSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"



##From bashrc
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "([
? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

source ~/path/to/fsh/fast-syntax-highlighting.plugin.zsh

[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

function fzf-view()
{
    fzf --preview '[[ $(file --mime {}) =~ binary ]] &&
                 echo {} is a binary file ||
                 (highlight -O ansi -l {} ||
                  coderay {} ||
                  rougify {} ||
                  cat {}) 2> /dev/null | head -500'
}

필자가 셋팅한 부분은 크게 3가지 인데, 이부분은 다음 섹션에서 정리를 해보겠습니다.

3. zsh 설정

  • 테마 설정

우선 가장 눈에 들어오는거는 테마부터 바꾸고 싶었습니다.

zsh theme github

위의 github에 들어가서 마음에 드는 theme을 선정한 뒤, zshrc 파일에서 수정을 해주면 됩니다.

ZSH_THEME="Theme_Name"

save를 한 뒤, 터미널창으로 나오게 되면, 바로 반영된 것을 확인 할 수 있습니다.

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="agnoster"

필자 같은 경우는 agnoster라는 테마를 입혔고, 실제 화면은 다음과 같습니다.

  • 플러그인 설정
    • zsh-autosuggetions 셋팅
    #git clone
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
    
    #zshrc 파일 수정
    plugins=(git zsh-autosuggestions)
    

    zshrc 파일에서 위와 같이 셋팅을 하게 되면, 플러그인이 삽입이 됩니다.

    • fast-syntax-highlighting
    #git clone
    git clone https://github.com/zdharma/fast-syntax-highlighting ~/path/to/fsh
    
    #적용
    $ source ~/path/to/fsh/fast-syntax-highlighting.plugin.zsh
    

zsh plugin github

  • fzf 기능 추가

이기능을 위해서 zsh 을 사용한다고 해도 과언이 아닙니다. fzf 는 현재 깃헙에서도 핫한데, 이것을 만드시분이 한국분이라고 들었습니다. 정말 대단하면서도 편리하게 해주셔서 감사하다고 전하고 싶습니다.

​ -설치

#git clone
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf

#install 
~/.fzf/install

fzf github

기본적인 사용법은 위에 가보시면 설명이 잘되어있습니다.

​ -기능 추가

#zshrc 파일에 아래에 내용 추가 

function fzf-view()
{
    fzf --preview '[[ $(file --mime {}) =~ binary ]] &&
                 echo {} is a binary file ||
                 (highlight -O ansi -l {} ||
                  coderay {} ||
                  rougify {} ||
                  cat {}) 2> /dev/null | head -500'
}

등록을 해둔뒤, 터미널 창에 fzf-view라고 치면 현재 폴더 하위까지 리스팅 되어서 마치 GUI환경에서 파일을 볼 수 있는 것처럼 셋팅이 됩니다 .

왼쪽이 리스팅된 파일 목록이고 우측 화면에서 내용을 보여주고 있습니다. 매번 vi로 파일을 열어 볼 필요 없이 바로바로 볼 수 있어서 너무나도 편리한 것 같습니다.

4. 마치며…

아직 기초적인 셋팅만 해두고 사용하고 있습니다. 좀더 터미널을 이쁘고 멋있게 셋팅을 하여 사용해보고 싶습니다. 우선 fzf만으로도 다음번 정리할 포스팅이 있을 것 같습니다. 그리고 zsh에 대한 플러그인도 좀더 뜯어보고 정리를 하려고 합니다.

[참고 블로그]

리눅스에서 터미널 생활 즐기기

[FZF로 ZSH 터미널 더 강력하게 사용하기](

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다