かっくんの学習記録

エンジニアの卵が綴る学習の記録です。何かの参考になれば嬉しいです。

zsh(チュートリアル)

zshの利点

 zshの特徴は、下記の通りです。

  • bashの主な機能を網羅
  • for i (*.c) echo $i のようなループの省略形をサポート
  • 拡張されたファイルグロブやリダイレクト
  • 履歴のインクリメンタルサーチ
  • 強力でプログラミング可能なコマンドライン補完機能
  • 複数のコマンド履歴を共有
  • 強力なファイル名展開
  • スペルミス修正機能
  • 拡張されたエイリアス

zshの基本

 zshの設定ファイル(.zshrc)に最低限の設定を記述しておきます。このファイルは、vim ~/.zshrcで作成・記述すれば大丈夫です。

autoload -U compinit
compinit
setopt auto_pushd
setopt auto_cd
setopt correct

 zshの起動

$ zsh
%

 シェルがbashの場合は、先頭に$マークが表示されています。そこでzshを実行すると、$マークから%マークになります。%マークはzshである印です。

 zshのバージョン確認は、下記のコマンドを実行すると確認できます。

% zsh --version

zshをログインシェルにする方法

 まず、whichコマンドでzshのパスを確認します。

$ which zsh
/bin/zsh

 次に、chshコマンドでログインシェルを変更します。Passwordは自分で設定したパスワードを入力してください。

$ chsh -s /bin/zsh
Password:

強力な補完機能

 一部のコマンドを入力してから、tabキーを押すと候補であるファイルやディレクトリなどを全て表示することができます。下記では、tabキーを押すタイミングをわかりやすくするために、(tab)で表しています。
 lsコマンドの場合は、以下のようになります。 

% ls (tab)
Desktop/  Applications/  Movie/  memo.txt

 また、cdコマンドの場合は、以下のようになります。

% cd (tab)
Desktop/  Applications/  Movie/

コマンドのスペルチェック

 コマンドを打ち間違えて実行してしまった場合でも、再入力する必要がありません。もしかして○○ですかと英語で聞かれるので、その後にyを打つだけで正しいコマンドが実行されます。

% hisotry
zsh: correct 'hisotry' to 'history' [nyae]?

cdコマンドの省略

 ディレクトリを移動する際に、cdコマンドを入力しなくても、ディレクトリを入力するだけで移動することができます。

% /usr/local/bin/
% pwd
/usr/local/bin

ディレクトリの移動履歴

 zshは過去に移動したディレクトリを記憶しているので、cd -に続けてtabキーを押すと候補の一覧が表示されます。

% cd -(tab)
0 -- ~/Desktop/Program
1 -- ~/Applications
2 -- /usr/local/bin
3 -- ~/Desktop

 その後は、移動したいディレクトリの番号を入力すると移動することができます。

% cd -3
~/Desktop

拡張ファイルグロブ

 ファイルグロブとは、「*.txt」「log.[1-5]」のように記述してファイル名のパターンマッチを行うことです。

●ファイルグロブの例1
 サブディレクトリ内を再帰的に探索し、memoファイルを探します。

% ls **/memo

●ファイルグロブの例2
 ls ファイル名<数字->では、ファイル名の後につく数字以上であるファイル名に一致して表示します。

% ls sample<25->
sample25  sample49  sample50

●ファイルグロブの例3
 ls *.(拡張子1|拡張子2)では、拡張子1と拡張子2のファイルを全て表示します。

% ls *.(py|c)
sample.py  demo.c  replace.py

●ファイルグロブの例4
 ls *(アクセス権限)では、アクセス権限と一致するファイルのみを表示します。

% ls *(R)
sample1.csv  sample4.csv

●ファイルグロブの例5
 ls *.拡張子1~ファイル名.拡張子1では、~(チルダ)以降のファイル名に一致するファイル以外で、拡張子1であるファイルを全て表示します。

% ls *.py~sample.py
replace.py  correct.py

複数行のヒストリ編集

 for文によるループをコマンドラインで使用することができます。「;(セミコロン)」で意図的に一行で記述しない限り、サブプロンプトに複数行でコマンドを入力します。

% for i in {0..4}
for> do
for> echo $i
for> done
0
1
2
3
4

リダイレクト

 あるコマンドの実行結果をfile1とfile2に保存したい場合は、下記のように記述すればできます。

% who > file1 > file2

 < ファイルでは、moreを使ってファイルが開かれます。下記の二つのコマンドは同じ意味です。

% < datafile
% more datafile

 > ファイルでは、標準入力からファイルへの書き込み(上書き)を行うことができます。下記の二つのコマンドは同じ意味です。

% > datafile
% cat > datafile

 ファイルに上書きではなく追記したい場合は、>ではなく>>を使います。

% >> datafile
% cat >> datafile

参考文献

[1]中島 能和 著、「zsh 最強シェル入門」、株式会社 翔泳社、2008年12月3日