쉘(shell
)은 커맨드 라인 명령어 해석기(command-line interpreter
)이다. 말이 복잡한데 그냥 사용자의 명령어를 읽어서 사용자에 요구의 맞는 동작을 수행하는 운영체제와 사용자의 징검다리라고 생각하면 쉽다. 쉘에는 다양한 종류가 있는데 리눅스 기본 쉘은 bash
이다. 이번 글에서는 bash
가 아닌 다양한 테마와 플러그인을 사용할 수 있는 zsh
+ oh-my-zsh
를 사용해볼 것이다.
zsh
설치필자 역시 설치하는 과정을 보여주기 위해 바닥부터 다시 설치해볼 예정이다. 가장 먼저 할 일은 zsh
설치이다. Fedora 34
에는 zsh
패키지가 있기 때문에 패키지 매니저를 통해 쉽게 설치 가능하다.
sudo dnf install zsh
이제 터미널을 열었다 닫으면 bash
에서 zsh
로 변경된 것을 볼 수...
있으나 설정 화면이 나온다. 그냥 0
입력하고 빠져 나오면 된다.
쉘의 프롬프트 물결표 앞의 기호가 $
에서 %
로 바뀐 것을 볼 수 있다. 터미널을 다시 껐다 켜도 %
가 나오면, 성공적으로 zsh
로 변경한 것이다.
oh-my-zsh
설치사실 zsh
만으론 딱히 뭘 할 수가 없다. 예쁜 테마와 실용적인 플러그인 사용을 위해선 oh-my-zsh
를 설치해야 한다. 설치 방법도 무척이나 간단하다:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
이게 끝이다. 입력하고 나면 기본 쉘 변경을 묻는데 그냥 Y 하면 된다:
그럼 아래와 같이 쉘이 멋지게 바뀐다:
이제 본격적으로 테마를 변경해보겠다. 테마 변경도 무쟈게 쉽다. 이 사이트에 들어가서 마음에 드는 테마를 찾고 설정 값만 변경하면 된다.
마음에 드는 테마를 찾았다면 홈 디렉터리에 있는 .zshrc
파일(~/.zshrc
)을 열어, 아래와 같이 ZSH_THEME
의 값을 원하는 테마명으로 바꾸면 된다:
필자는 bira
테마를 사용할 것이다. 독자들도 마음에 드는 테마를 찾아 사용하길 바란다.
oh-my-zsh
는 테마 뿐만 아니라 유용한 플러그인들도 제공한다. 가장 쓸만한 플러그인 두 가지를 추천하려 한다.
zsh-syntax-highlighting
)git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
위 명령어를 입력하면 자동으로 설치가 된다. 이제 아래와 같이 .zshrc
파일을 수정해서 플러그인을 등록하면 끝난다.
zsh-autosuggestions
)두 번째 추천 플러그인은 zsh-autosuggestions
이다. 설치는 아래와 같이 진행 가능하다:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
역시 .zshrc
파일에 플러그인 명을 쉽게 적용할 수 있다. 단 주의해야 할 점은 플러그인을 구분하기 위해선 공백(whitespace
)만을 사용해야 한다는 것이다. 그 외에 구분자(,
, ;
, etc.) 들은 필요치 않다.
사실 위에서 소개한 플러그인들 때문에 oh-my-zsh
쓰는 것이라 해도 과언이 아니다. 정말 편리하고 좋다. 한번 쓰고 나면 bash
는 쳐다볼 수도 없게 된다.
필자가 쉘에서 작업할 때 유용하게 사용하는 프로그램을 소개하려 한다.
batcat
리눅스에서 보통 파일의 내용을 잠깐 흝어볼 때 cat
명령어를 사용하곤 한다. 이 cat
명령어의 결과를 더 아름답게 꾸며주는 프로그램이 있으니... 그것은 바로 batcat
이다.
힘의 차이가 느껴지는가? 설치도 매우 간단하다.
sudo dnf install bat
끝이다. 이제 마음껏 bat
를 휘둘러라.
fzf
탐색을 혁신적으로 바꿔준 프로그램이다. zsh
쉘과 연동하면 단축키까지 이용 가능하다. 그 자체로도 하나의 프로그램처럼 쓸 수 있기 때문에 플러그인 말고 프로그램으로 따로 빼두었다. 설치 후 oh-my-zsh
에 등록하면 단축키 사용 역시 가능하다.
설치는 아래와 같이 가능하다:
sudo dnf install fzf
이후 fzf
명령어 사용이 가능한데 fzf
는 사실상 문자열 매칭 프로그램이다. 가령 아래와 같이 사용 가능하다.
find * | fzf 직접 문자열 입력해서 탐색
나름 좋아 보이긴 하는데 이런 질문도 종종 나온다:
그냥
pipe
열어서grep
으로 쏴주면 안되나?
틀린 얘긴 아니지만 fzf
는 zsh
와 연동했을 때가 정말 쓰기 좋다.
.zshrc
파일에 아래와 같이 fzf
프로그램을 플러그인으로 등록한다:
그럼 아래와 같은 세 개의 명령어가 사용 가능해진다:
CTRL+T
현재 선택한 파일을 커맨드 라인에 붙여 넣는다.CTRL+R
최근 사용했던 명령어를 커맨드라인에 붙여 넣는다.ALT+C
선택한 디렉터리로 현재 디렉토리를 변경한다.위 세 개의 명령어를 어떠한 명령어 입력 필요없이, 심지어 다른 명령어 입력 중에도 바로 사용할 수 있다.
필자가 사용하는 zshrc
설정파일이다. 플러그인들과 bat
프로그램에 대해선 설명했는데, 쉘 가장 마지막 줄에 있는 프로그램들에 대해서는 아직 설명하지 못했다.
# 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="/home/mythos/.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="bira"
# 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.
# Caution: this setting can cause issues with multiline prompts (zsh 5.7.1 and newer seem to work)
# See https://github.com/ohmyzsh/ohmyzsh/issues/5765
# 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
zsh-syntax-highlighting
fzf
)
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"
function cs () {
if [ $# -ne 1 ]; then
ls
else
cd $1
ls
fi
}
alias cat="bat"
alias vi="nvim"
alias vim="nvim"
alias cl="clear"
export PATH=/home/mythos/Documents/scripts:$PATH
# when shell is started
# neofetch
fortune -s | cowsay -f dragon-and-cow | boxes -d spring | lolcat -r
다음의 프로그램들이 궁금하다면 필자가 작성한 글을 확인하길 바란다. zshrc
의 가장 마지막 줄이 실행되면 다음과 같은 결과가 쉘 진입 시 나타나게 된다:
좋은정보 감사합니다