Linuxのコマンドライン環境で使われるOSに相当する言語、zsh (ゼットシェル)をご存じでしょうか?
本記事では、コマンドをマシン語に変換してくれるシェルのなかでも最強と謳われるzshのインストール方法から初期設定までを解説します。また、利用する上での「便利な機能」や「カスタマイズ方法」も紹介します。
本記事の読者層は以下の方を想定しています。
- Zshについて知らない、もしくはBashとZshの違いがわからない方
- Zshの初心者だけど、インストール方法がわからない方
- Zshを使っているけど、さらに使いやすくしたい方
シェルとは?
「シェル」とは、Unixでさまざまなコマンドをマシン語に変換し、人間とコンピューターとの命令の橋渡しをするコマンドラインインタープリンターのことです。
このシェルに以下のような種類があります。
代表的なシェルの種類
- ①「sh」(シェル)
- ②「bash」(バッシュ)
- ③「csh」(シー・シェル)
- ④「tcsh」(ティー・シェル)
- ⑤「ksh」(ケー・シェル)
- ⑥「zsh」(ズィー・シェル
なかでも「Bash」(Bourne-Againシェル)は、Unixや一般的なLinuxディストリビューションのなかでもデフォルトでインストールされているシェルです。
一方、「Zsh」は対話型ログインシェルとして「Bash」上に構築され、様々な追加機能が利用できます。どちらもシェルもBourne Shell(sh)の拡張バージョンです。
シェルには、sh、ash、bash、csh、ksh、tcshといった種類もあり「zsh」との互換性があります。
シェル | Bash | 内容 |
---|---|---|
sh | boure Shell | Unixで使われていた初期のxシェルの一つ |
ash | Almquist Shell | 小型で高速Bourne Shellの代替 |
dash | debian Almquist shell | Almquist Shell (ash) のDebian版 |
bash | Bourne-Again shell | 「bash」と呼ばれているやつの正式名称 |
ksh | KornShell | AT&T Bell LaboratoriesのDavid Kornにより開発 |
zsh | Z shell | 対話型ログインシェル |
yash | Yet another shell | POSIX準拠のUnixシェル |
csh | C Shell | Borneシェルよりも高機能 |
tcsh | TENEX C shell | tcsh.cshのパワーアップ版 |
eshell | Emacs shell | Emacs上で使えるShell |
下記ではよく知られているシェルをリスト化してあります。
Zshとは?
Zsh (Z-Shell)は、Unix系のOSで利用可能なシェルの1つであり、ユーザーにとって豊富な革新的機能を持つツールとして設計されています。
「Z シェル」は、ポール ファルスタッドがプリンスタウン大学の学生だったときに最初に作成されました。
今では、zshは非常に人気のあるシェルになりました。
ここでは人気の理由について解説していきます。
bash、 ksh、およびtcshの便利な機能の多くはzsh に組み込まれています。
Zshは対話型で使用するために設計されたシェルですが、なかでも最大のメリットは、その強力なスクリプト言語にあります。
また、bashと比べて多くのオリジナル機能が追加されています。同時に、強力な補完機能も特徴です。
zshの補完機能については、下記の記事をご参照ください。
このように、すべてのシェルの良いところを取り入れたzshは「最強のシェル」とも呼ばれています。
このzshのメリットを如何にまとめておきます。
- プログラム可能な補完機能を持ち、ユーザーコマンドのオプションや因数の打ち込み支援。
- 強力なスクリプト言語。
- プロンプトテーマがカスタマイズ可能。
- その他多彩な便利な機能。
UbuntuなどのLinux OSでは、インストール直後の基本シェルとしてBashが使われています。
このためデフォルトのログインシェルはBashですが、zshをインストールすることでさらに便利な機能を利用できます。
ヘビーユーザーになればなるほど自分に適したカスタマイズを求めてBashを卒業し、カスタマ性に優れたzshを選択するようになるそうです。
ログインシェルとは….
Linuxにログインすると自動的にいずれかのシェルが起動します。そのとき立ち上がったシェルを「ログインシェル」といいます。
各OSでのzshの対応環境 (Windows, macOS)
macOS環境でのzsh
ここまでは、Linux OSの環境下でお伝えしましたが、OSでのzshの対応状況はどうでしょう。
2019年以来 Apple製のmacOS Catalinaでもデフォルトのログインシェルとして、zshが採用されるようになりました。
このためzshのためインストールは必要ありません。
Windows OS環境でのzsh
一方でWindowsではNTFSファイルシステムが使われておりLinuxで標準的に使われているものとは権限管理の仕組みが異なっています。
このためWindows上でのPowerShellやDOSプロンプト画面での利用はできません。使用する場合には、Git Bash, cygwin, WSL2などのLinux専用の仮想環境が必要です。
zshのマニュアル
本記事ではzshの魅力を少しでも伝えていこうと思いますが、すべてを網羅できないため、詳細は以下のZshのページからマニュアルを確認してみてください。
BashとZshの違い
zshはBashの上位互換です。このためBashでできることはzshでも可能です。
ZshにはBashにはない自動修正機能が組み込まれいます。また、人気のあるOh-my-zshなどの利用可能なプラグイン、テーマ、フレームワークが豊富にあります。
以下にBashとZshの主な違いを比較しまとめたものになります。
シェル | Bash | Zsh |
---|---|---|
読み込みファイル | .bashrcを読み込み。 | .zshrcを読み込み。 |
主な機能 | 構文強調表示と自動修正機能がない。 | 構文強調表示と自動修正機能がある。 |
プラグイン | プラグインのサポートがない。 | プラグインやテーマが豊富 |
一方でBashも今後使われ続けると思います。
Zshのインストール方法
本記事ではUbuntu18.04LTS以降のLinuxディストリビューション環境でテストしております。
macの場合はzshがデフォルトで搭載されていますのでインストールの必要はありません。
Zshのインストール前確認
現在どのシェルが使われているかは以下のコマンドを入力すると確認できます。
> echo $0
-zsh
「-zsh」と表示されていれば、SHELLはzshですのでインストールは不要です。
Zshのインストール
Ubuntu Linux環境下では、パッケージマネージャーを利用してインストールできます。
aptコマンドによりzshをインストールできます。
> sudo apt-get install zsh
その後、zshコマンドを入力することでzshを立ち上げることができます。
すると以下のようにいくつかのオプションを選択するように求められられます。
>zsh
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~). This function can help you with a few settings that should
make your use of the shell easier.
You can:
(q) Quit and do nothing. The function will be run again next time.
(0) Exit, creating the file ~/.zshrc containing just a comment.
That will prevent this function being run again.
(1) Continue to the main menu.
(2) Populate your ~/.zshrc with the configuration recommended
by the system administrator and exit (you will need to edit
the file by hand, if so desired).
--- Type one of the keys in parentheses ---
メッセージの訳
これは新規ユーザー向けの Z Shell 設定機能です。
- 現時点で zsh の「起動ファイル」がないため、このメッセージが表示されます。
- (q)何もせず終了します。このメッセージは次回また確認出来ます。
- (0) コメントのみを含むファイル ~/.zshrc を作成して終了します。 これにより、この関数は再度実行されなくなります。
- (1) メインメニューに進みます。
- (2) ~/.zshrc に推奨される構成を入力します。 システム管理者によって実行され、終了します (編集する必要があります) 必要に応じて、ファイルを手動で作成します)。
後で編集できるので、ここでは(1)を選んでおくと良いと思います。すると、
The function will not be run in future, but you can run
it yourself as follows:
autoload -Uz zsh-newuser-install
zsh-newuser-install -f
The code added to ~/.zshrc is marked by the lines
# Lines configured by zsh-newuser-install
# End of lines configured by zsh-newuser-install
You should not edit anything between these lines if you intend to
run zsh-newuser-install again. You may, however, edit any other part
of the file.
その後、次のメッセージが現れます。
Please pick one of the following options:
(1) Configure settings for history, i.e. command lines remembered
and saved by the shell. (Recommended.)
(2) Configure the new completion system. (Recommended.)
(3) Configure how keys behave when editing command lines. (Recommended.)
(4) Pick some of the more common shell options. These are simple "on"
or "off" switches controlling the shell's features.
(0) Exit, creating a blank ~/.zshrc file.
(a) Abort all settings and start from scratch. Note this will overwrite
any settings from zsh-newuser-install already in the startup file.
It will not alter any of your other settings, however.
(q) Quit and do nothing else. The function will be run again next time.
--- Type one of the keys in parentheses ---
メッセージの訳
次のオプションのいずれかを選択してください。
- (1) 履歴の設定を構成します。つまり、コマンドラインを記憶します。 そしてシェルによって保存されます。 (推奨)
- (2) 新しい補完システムを構成します。 (推奨)
- (3) コマンドライン編集時のキーの動作を設定します。 (推奨)
- (4) より一般的なシェル オプションをいくつか選択します。これらは単純に「オン」です またはシェルの機能を制御する「オフ」スイッチ。
- (0) 終了し、空の ~/.zshrc ファイルを作成します。
- (a) すべての設定を中止し、最初からやり直します。これは上書きされることに注意してください zsh-newuser-install の設定はすでに起動ファイルに含まれています。 ただし、他の設定は変更されません。
- (q) 辞めて何もしません。この関数は次回も実行されます。
ここでは、何もしないで(0)を設定(zshの初期設定をせず)し、インストールは終了です。
zshのインストール後の確認
zshがインストール出来ているか確認してみます。以下にzshのインストール前後で利用出来るShellが増えていることが分かります。
zshインストール前
>cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/usr/bin/tmux
/usr/bin/screen
zshインストール後
>cat /etc/shells
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/bin/zsh
/usr/bin/zsh
/usr/bin/tmux
/usr/bin/screen
zshパスの確認
zshのパスを確認します。
% which zsh
/usr/bin/zsh
zshのバージョン確認
現在のUbuntu 20.04の場合、zshのバージョンはv5.8です。2022年さらに最新のv5.9が公開されています。
zsh --version
zsh 5.8 (x86_64-ubuntu-linux-gnu)
zshとbashの切り替え
一度zshをLinuxにインストールしてもbashに戻すことは以下のように簡単にできます。
zshからBshへ切り替えるためには
chsh -s /bin/bash
bshからzshへ切り替えるためには
chsh -s /bin/zsh
の入力でShellの交換は容易にできます。
Zshの機能
ZshとBashの違いをすぐには認識できないと思います。
Zshが特に優れている特徴は以下のような機能があります。
- ①コマンドの検証
- ②ディレクトリ履歴
- ③スペル修正
- ④auto cd オプション(cdコマンドを使用せずにディレクトリを変更)
- ⑤柔軟な検索機能 (lsコマンドによるファイル検索)
- ⑥zshタブ補完機能の使用
- ⑦ワイルドカードの利用
- ⑧オプションの色付き補完
- ⑨再帰的パス展開
- ⑩プラグインとテーマサポート
このような多彩な機能を使うためには.zshrcに設定を行う必要があります。
次章では設定ファイルの書き方について述べます。
設定ファイル「.zshrc」の作成
Zsh用おすすめ設定コード
zshの設定ファイルは、ホームディレクトリ下「~/.zshrc」にあり、そこに下記の記述しておきます。
設定ファイルを書き換えた後、反映させるために一度「zsh」をexitで一度抜けて、bashにも取ってから改めてzshコマンドでへ入りなおすことで設定ファイルを読み込んでくれるようになります。
次にzshにて特に重宝する設定ファイルを絞り込んで示します。
必要な機能があれば記載し有効にしてみてください。
最初のzshのコマンドはほとんど空の状態です。
お好みでカスタマイズしてみてください。
ZSH用のおすすめ初期設定コード
STEP1 日本語の設定をします。
# 日本語を# 日本語を使用
export LANG=ja_JP.UTF-8
STEP2 パスの設定をしておきます。
# パスを追加したい場合
export PATH="$HOME/bin:$PATH"
export PATH="/usr/local/bin:$PATH"
STEP3 プロンプトカラー変更のためcolor関数を読込ます。
# 色を使用
autoload -Uz colors
colors
STEP4 zshの補完機能を有効にします。
compinit
というシェル関数を自動読み込みます。主にcompsysとcompctlの二つの補完システムがあるので、この補完機能を使えるように設定するコマンドです。
# 補完
autoload -Uz compinit
compinit
STEP5 Emacs用の設定します。
キーバインドをオプション-eで指定してemacsを利用出来るようにしておきます。
# emacsキーバインド
bindkey -e
STEP6 ターミナルとヒステリーを共有します。
共有を解除するときは「setopt no_share_history」としておきます。
# 他のターミナルとヒストリーを共有
setopt share_history
STEP7 ヒストリーが重複表示しないように設定します。
ヒストリーサイズを10,000個設定しておき、.zsh_historyに保存します。
# ヒストリーに重複を表示しない
setopt histignorealldups
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
STEP8 auto cdコマンドを設定します。(cd省略機能の設定)
cdを使わずディレクトリ間を移動できようにします。
# cdコマンドを省略して、ディレクトリ名のみの入力で移動
setopt auto_cd
STEP9 cd履歴をスタックできるように設定します。
cd-TABで確認できます。
# 自動でpushdを実行
setopt auto_pushd
STEP10 auto_pushdで重複履歴を削除するよう設定します。
# pushdから重複を削除
setopt pushd_ignore_dups
STEP11 コマンドミスを修正するように設定する。
# コマンドミスを修正
setopt correct
STEP12 zshのプラグインを導入します。
#Zplug
source ~/.zplug/init.zsh
zplug "wbinglee/zsh-wakatime"
STEP13 zshのプラグインを導入します。
# syntax
zplug "chrissicool/zsh-256color"
zplug "Tarrasch/zsh-colors"
zplug "zsh-users/zsh-syntax-highlighting"
zplug "ascii-soup/zsh-url-highlighter"
STEP14 zshのプラグインを導入します。
# program
zplug "voronkovich/mysql.plugin.zsh"
STEP15 zshのプラグインを導入します。
# tools
zplug "marzocchi/zsh-notify"
zplug "oknowton/zsh-dwim"
setopt auto_cd
STEP16 zshのプラグインを導入します。
# コマンドミスを修正
setopt correct
#Zplug
source ~/.zplug/init.zsh
zplug "wbinglee/zsh-wakatime"
STEP17 グローバルエイリアスを設定します。
これらのエイリアス表記で長い表記も簡単表記で実行可能になる。これは便利なので多くのエイリアスを登録しておくと作業短縮になってよい。
# グローバルエイリアス
alias -g L='| less'
alias -g H='| head'
alias -g G='| grep'
alias -g GI='| grep -ri'
alias homessh='ssh user@wisenetwork.net'
alias issh='ssh user@192.168.49.243'
STEP18エイリアスを設定します。
# エイリアス
alias lst='ls -ltr --color=auto'
alias l='ls -ltr --color=auto'
alias la='ls -la --color=auto'
alias ll='ls -l --color=auto'
alias so='source'
alias v='vim'
alias vi='vim'
alias vz='vim ~/.zshrc'
alias c='cdr'
STEP19 ヒストリに日付を付ける設定にします。
# historyに日付を表示
alias h='fc -lt '%F %T' 1'
alias cp='cp -i'
alias rm='rm -i'
alias mkdir='mkdir -p'
alias ..='c ../'
alias back='pushd'
alias diff='diff -U1'
STEP20 バックスペースを使える設定にします。
# backspace,deleteキーを使えるように
stty erase ^H
bindkey "^[[3~" delete-char
# cdの後にlsを実行
#chpwd() { ls -ltr --color=auto }
#chpwd() { ls -ltr -G}
# どこからでも参照できるディレクトリパス
cdpath=(~)
STEP21 区切り文字の設定をします。
# 区切り文字の設定
autoload -Uz select-word-style
select-word-style default
zstyle ':zle:*' word-chars "_-./;@"
zstyle ':zle:*' word-style unspecified
# Ctrl+sのロック, Ctrl+qのロック解除を無効にする
setopt no_flow_control
STEP22 プロンプトの設定をします。
# プロンプトを2行で表示、時刻を表示
PROMPT="%(?.%{${fg[green]}%}.%{${fg[red]}%})%n${reset_color}@${fg[blue]}%m${reset_color}(%*%) %~
%# "
zshで利用できるキー操作一覧
zshのキー操作一覧
以下にZshのカーソル操作について記載しておきます。
$ sudo zsh
カーソル操作 | 内容 | 使用例 |
---|---|---|
Ctrl-A | カーソルを行頭に移動 | |
Ctrl-B | カーソルを1文字戻す | |
Ctrl-E | カーソルを行末に移動 | |
Ctrl-F | カーソルを1文字進める |
文字削除 | 内容 | 使用例 |
---|---|---|
Ctrl-K | カーソルから行末まで削除 | |
Ctrl-Y | 直前に削除した文字列を貼り付け | |
Ctrl-W | 1単語削除 |
コマンド履歴 | 内容 | 使用例 |
---|---|---|
Ctrl-G | 履歴表示をキャンセル | |
Ctrl-N | 履歴を1つ進める | |
Ctrl-P | 1単語削除 | |
Ctrl-R | 履歴を新しい順に検索 |
その他 | 内容 | 使用例 |
---|---|---|
ESC+Q | 現在入力中のコマンドをスタックに退避してプロンプトを空にする |
Oh-my-zsh の使用
Oh-my-zshのインストールするため、以下のコマンドを実行します。
sh -c "$(wget -O- https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
Looking for an existing zsh config...
Found /home/user/.zshrc. Backing up to /home/user/.zshrc.pre-oh-my-zsh
Using the Oh My Zsh template file and adding it to /home/user/.zshrc.
Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] (←ここでパスワード入力)
Changing your shell to /usr/bin/zsh...
[sudo] password for user:
Shell successfully changed to '/usr/bin/zsh'.
__ __
____ / /_ ____ ___ __ __ ____ _____/ /_
/ __ \/ __ \ / __ `__ \/ / / / /_ / / ___/ __ \
/ /_/ / / / / / / / / / / /_/ / / /_(__ ) / / /
\____/_/ /_/ /_/ /_/ /_/\__, / /___/____/_/ /_/
/____/ ....is now installed!
Before you scream Oh My Zsh! look over the `.zshrc` file to select plugins, themes, and options.
• Follow us on Twitter: https://twitter.com/ohmyzsh
• Join our Discord community: https://discord.gg/ohmyzsh
• Get stickers, t-shirts, coffee mugs and more: https://shop.planetargon.com/collections/oh-my-zsh
実行後に、コマンドラインを確認すると次のようなカラー画面となります。
Oh-my-zshのインストールにともない設定ファイル「.zshrc」の中身も自動的に変更されます。
初期のzshのテーマは以下のテーマとなっています。
ZSH_THEME="robbyrussell"
プラグイン
Oh-my-zsh には、利用できるプラグインが大量に付属しています。プラグイン ディレクトリや Wiki を参照して、現在利用可能なものを確認してください。
https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins
まとめ
本記事では、zshのインストールの仕方、oh-my-zshのインストールの仕方、.rczshの書き方を学びました。
これによりzshの使い勝手が大幅に改善すると思われます。
次回の記事をご期待下さい。どうぞよろしくお願いいたします。
コメント