どのLinuxシェルが最適?人気の5つのシェルを徹底比較
Linuxでbashシェルを使い続けていますか?それとも、別のシェルを試してみたいと思っていますか?tcsh、fish、KornShell、Z Shellなど、選択肢は豊富にあります。しかし、これらの人気Linuxシェルの中で、どれが本当に優れているのでしょうか?本記事では、それぞれの特徴を詳しく比較していきます。
Linuxシェルとは?
通常、アプリケーションはC#、Java、C++など、人間が理解できる高水準言語で記述されます。ところが驚くことに、コンピュータから見れば、あらゆるデータは0と1、つまり「バイナリ(機械語)」にすぎません。
コンパイラは、高水準言語で書かれたコードを実行可能ファイルなどのバイナリファイルへと翻訳します。私たちがアプリを起動するときに実行しているのは、まさにこのバイナリファイルです。
これは非常に大雑把な説明ですが、重要なのは、コンピュータには「翻訳レイヤー」が必要だという点です。それは、人間が指示した内容と、コンピュータが理解できる形式との間に存在します。
シェルは「インタプリタ」と呼ばれるものです。コンパイラと同様に、インタプリタも人間が書いたコードを機械語に翻訳しますが、違いは1文ずつ逐次処理する点にあります。一方、コンパイラはプログラム全体をスキャンして一括して機械語に変換します。
つまりシェルとは、オペレーティングシステム(OS)と対話するためのインターフェースです。コマンドを入力すると、シェルがそれを解釈し、実行してくれます。ファイルのコピー、パイプ処理、ファイル一覧の表示といった操作は、すべてシェルの担当範囲です。
Linuxには複数のシェルが用意されています。システムで利用可能なすべてのシェルを確認するには、ターミナルを開いて以下のコマンドを入力してください。
cat /etc/shells
現在使用中のシェルを確認するには、次のコマンドを使います。
echo $0
では、あなたは最適なLinuxシェルを使えているのでしょうか?利用可能なシェルを一つずつ見ていきましょう。
1. Bash
Bash(Bourne-Again Shell)は、Linuxユーザーの間で圧倒的な人気を誇るシェルです。多くのLinuxディストリビューションがbashをデフォルトシェルとして採用しています。bashはGNUプロジェクトの標準シェルであり、1989年に登場して以来、数十年にわたる堅実な開発の歴史を持っています。
Bashの前身は、初期のUnixシェルの一つであるBourne Shell(sh)です。shプログラマーにとって魅力的だったのは、既存のスクリプトをほぼ無修正のままbashへ移植できたことです。さらにbashは、前身にはなかった次のような機能強化も提供しています。
- コマンド補完
- コマンド履歴
オンラインのドキュメントやチュートリアルの多くは、読者がbashを使用していることを前提としています。ただし、bashにも欠点がないわけではありません。bashスクリプトを書いたことのある人なら誰でも実感するように、「できないことはないけれど、読み書きが必ずしもエレガントではない」というのが実情です。
2. KornShell
kshとして知られるKornShellは、1980年代にベル研究所で生まれた人気の代替シェルです。bashとkshの間に大きな違いはありませんが、それぞれに小さな利点があります。たとえばkshには「cd old new」という便利なコマンドがあります。/Downloads/foo/bar/one/foobarというディレクトリにいて/Downloads/foo/bar/two/foobarへ移動したい場合、次のように入力するだけです。
cd one two
kshのベテランユーザーは、スクリプティング面での優位性を挙げてその優秀さを主張します。主なメリットは以下の通りです。
- より読みやすいループ構文
- コマンドの繰り返しを自然に記述できる
- 連想配列のサポート
ただしbashと異なり、kshに関するオンラインの情報やヘルプは見つけにくいのが難点です。kshを試してみたい場合は、次のコマンドを入力してください。
sudo apt install ksh
ksh
3. Tcsh
TcshのルーツはUnixの黎明期にまで遡ります。Cシェル(csh)の改良版であり、以下のような機能を備えています。
- プログラマブルなコマンドライン補完
- コマンドライン編集
- エイリアスへの引数追加
- コマンド履歴への簡単なアクセス
表示された履歴の番号nを指定して!nと入力すれば、任意のコマンドを再実行できます。tcshの履歴タブ補完は、次のように使います。
!a<TAB>
これにより、「a」で始まる直近のコマンドが展開されます。同じことをbashで行うには、まず!a:pと入力してコマンドを確認し、その後!!で実行するという2段階の手順が必要です。
tcshを試すには、次のように入力します。
sudo apt install tcsh
tcsh
TcshはFreeBSDなどBSD系システムのデフォルトシェルです。最大のセールスポイントはスクリプト言語にあり、主にC言語でプログラミングする人にとって有用です。C言語とシェルスクリプトを行き来していると、括弧の種類などを混同しがちですが、tcshなら構文がCに似ているため、小さなCプログラムのプロトタイピングに便利です。
4. Fish
真面目なイメージの強いLinuxの世界において、fishの開発チームはユーモアをプロジェクトに取り入れています。公式サイトには「ついに登場、90年代のためのコマンドラインシェル」という皮肉めいたタイトルが掲げられています(実際、fish=friendly interactive shellが開発されたのは2005年です)。謳われている「Glorious VGA Color」以外にも、他のシェルにはない次のような拡張機能があります。
- 構文が不正なコマンドは赤色で表示される
- 正しい構文は青色で表示される
- 自動補完候補の表示
- マシン上のmanページに基づくコマンド補完
このmanページ連携機能により、新しくインストールしたソフトウェアの構文が自動補完候補に反映されます。コマンドラインに慣れたい初心者にとって、fishは絶好の入り口になるでしょう。
fishを体験してみるには、次のコマンドを入力します。
sudo apt install fish
fish
5. Z Shell
「最高のシェルを最後に取っておいた」と多くの人が感じるほど、Zsh(Z Shell)は完成度の高いシェルです。bashやkshと共通点が多く、両者の機能に加えてtcshの機能の多くも取り込んでいます。Zshの主な特徴は以下の通りです。
- ナビゲーション可能な自動補完リスト
- 高度なスペル修正機能
- コマンドライン補完
- ターミナル間で共有される履歴
- グロブ(ファイル名のワイルドカード)
Zshのグロブは非常に強力です。例えば次のように入力すると、
vim /u/l/b/a<TAB>
次のファイルが開きます。
/usr/local/bin/autoupdate.sh
デフォルト設定を使わない場合、Zshの初回設定には多少時間がかかることがあります。試してみるには、次のコマンドを入力してください。
sudo apt install zsh
zsh
どのLinuxシェルが自分に合っている?
こうした選択肢が存在すること自体が素晴らしいことです。それぞれのシェルは、プログラマーたちが「自分好みのやり方」を追求したコンピューティングの歴史の断片と言えます。
各シェルの大きな違いはスクリプトの構文にあります。それぞれに固有のニュアンスがあり、それがシェル同士を区別する要素となっています。現時点では、bashが市場シェアで圧倒的な地位を占めており、その分トラブル時に助けを見つけやすいという大きな利点があります。総合力で言えば、最も高度なニーズを持つユーザーを除き、ほとんどのユーザーの要求を満たすのはbashだと言えるでしょう。
使用するLinuxシェルを決めたら、シェルスクリプティングの基礎をしっかり身につけておきましょう。
-
Windows 10にBash(Linuxシェル)をインストールして使う方法【WSL完全ガイド】
Windows上でLinuxシェルをセットアップして使う方法を、Windows Subsystem for Linux(WSL)を使って解説します。 このチュートリアルは、2020年以降にリリースされた最新版のWindows 10を対象としています。古いバージョンのWindows 10でのWSLの使い方や、Windows 8/7/XP向けの別の方法については扱いません。サポートが終了したソフトウェアの使用は避けるべきだからです。どうしてもWindowsを使わなければならない場合は、必ずセキュリティ更新プログラムが提供されているバージョンを使用してください。 WSLは非常に優れたツールで、まるで
-
Windows 10にLinux Bashシェルをインストールする方法【WSL設定ガイド】
Bashシェルとは?Windows 10でLinuxが動く仕組み Bashシェルは、長年にわたりLinuxに搭載されてきたコマンドラインユーティリティです。そして現在、MicrosoftはこのBashシェルをWindows 10に直接組み込みました。これは仮想マシンでも、コンテナでも、Windows向けにコンパイルされたソフトウェアでもありません。実態は、Linuxソフトウェアを実行するための「Windows Subsystem for Linux(WSL)」というサブシステムであり、AndroidアプリをWindows上で動かすために開発されていた(後に中止された)Project Asto