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