
Shellを自分なりにまとめてみる
-
2023年9月5日
こんにちは。サーバーエンジニアのYです。
先日、弊社CTOから「皆さんshellって何使っています?」とのアンケートがありました。
いくつか選択肢が用意されていたのですが、私が普段使用しているshellは「その他」に該当するものでした。
- 自分が使用しているのはニッチなのか。
- みんなどんなの使ってるんだろ。
- そういえばそんなこと調べること随分してないな。
そんなことを考え、すべては網羅できていないですが、自分なりにshellの違いをまとめてみようと思いました。
B系シェル
sh(Bourne Shell)
- shは(Bourne Shell)と呼ばれ、AT&Tベル研究所によって開発されました。ちなみにBの意味は開発者(Steven Bourne氏)の名前からとっています。
「Shell」と言えば、このBshを指していると思ってよいでしょう。現在では、このBshを元にして、様々な派生シェルが登場しています。
- 余談ですが、若かりし頃に「shはすべてのshellの基礎だから骨格なんだよ。なのでbone shellだよ。」と言われたことがありました。うっかり信じちゃったよ。。。
Bourneさんが開発したからBourne Shellです。ただ全てのシェルの元になっていることは確かです。
bash(Bourne-Again Shell)
- bashは(Bourne again shell)と呼ばれ、Bshを元に機能を拡張した派生シェルの1つです。RedHat系のLinuxの標準シェルとして組み込まれています。
急速なLinux普及を背景に、現在ではこの「bash」が標準シェルと思っている方も多く、また、Bshとも互換性を持つため、事実上のBshの後継シェルとも言われています。
bashはshを元に開発された Bourne Again Shellです。基本的にはshにできることは全部でき、CentOSでは/bin/shを指定すると/bin/bashが使用されます。
ksh(Korn Shell)
- kshは(Korn shell)と呼ばれ、bashと同様に、AT&Tベル研究所によって開発されました。ちなみにKの意味は開発者(David Korn氏)の名前からとっています。
このKshもbash同様に、shを元に機能を拡張した派生シェルの1つです。KshはIBM社製サーバーOS「AIX (ver.4以降)」の標準シェルとして世界的に普及しました。
ash
- 最もオリジナルのBourne Shellに近い実装系のシェルがashです。
NetBSDやFreeBSDではashが/bin/shとして使われています。
Alpine Linuxもこちらが使用されています。
dash
- ashをLinuxに移植したシェルがdashで、特徴はashとほとんど同じです。
Bourne Shellに最も近いシェル実装系の一つであり、軽量で高速という特徴があります。bashよりも高速に動作する(ようです)。
Ubuntuでは/bin/shを指定すると/bin/dashが使用されます。
C系シェル
csh
- cshは、カリフォルニア大学バークレー校の大学院生によって開発されました。
Bshを元にスクリプト構文をC言語のプログラミング風にアレンジしたシェルがcshです。
最大の特徴はBshにはない「配列」を使用可能としたシェルとなります。
if-fiではなく、if-endifという記載ができます。が、あくまでC言語風なので、慣れが必要とは思います。
tcsh
- tcshは、Cshを元に、ユーザーインターフェース部分を中心に拡張した派生シェルの1つです。
- tcshは、「FreeBSD(ver4以降)」の標準シェルとして世界的に普及しました。
また、MacOS Jaguarでデフォルトシェルとして使用されていました。
その他シェル
上記に属さないシェルで割りと新しめのシェル。その分高機能でとても便利です。
zsh
- B系とも言えるらしいけど、cshっぽい機能もあります。
sh、bash、csh、tcshの機能をほぼ網羅している非常に強力なshellで、現行のmacではデフォルトのshellとして使用されています。
読み方は「ズィーシェル」で、私はお恥ずかしながら、ゼッシュって言ってました。
- ディレクトリ移動が簡単。cdを使わなくても、ディレクトリ名だけで移動できる。
- パス補完が秀逸。
“/u/lo/b” とタイプしてTabキーを押すと、/usr/local/bin に自動補完してくれる。
- プラグインやテーマのサポートが豊富
fish
- POSIX非互換のシェルです。
とにかく補完が強力です。
コマンド入力中にもシンタックスハイライトが効き、インタラクティブに補完後の内容が確認できます。
zshでもプラグインを入れると同様のことができますが、fishだと面倒なことは全部省略できます。
その分余計なものも入っちゃいますが。。。
- ディレクトリ保管
- lsの後ろにディレクトリ名の一部だけ入力し、タブを押すことでディレクトリの候補が表示され、
タブや上下のキーで対象のディレクトリにフォーカスを移動できます。
以下のようにVolumeの「me」だけで「home」と「Volume」が選択できます。
- lsの後ろにディレクトリ名の一部だけ入力し、タブを押すことでディレクトリの候補が表示され、
- manを使った補完
- gitのようなサブコマンドを使用するコマンドの場合は以下のように保管ができます。
また、ファイル名の階層が深くても一部の名前だけで対象となるファイルを選択できます。
- gitのようなサブコマンドを使用するコマンドの場合は以下のように保管ができます。
- ウェブからの設定変更
- fishインストール後に以下のコマンドを実行すると、内部のwebサーバーが起動し、GUIからプロンプトの設定が変更できます。
どうでも良いことですが、webサーバーはポート8000で動きます。
8000を使用していたら8001を使用してくれます。$ fish_config
- 他にも色々あるのですが、詳しくは公式サイトをご確認ください
終わりに
私はfishを使用していますが、
弊社ではzshを使用されている方が多いようです。
結局個人で使用するシェルはエディタとかと同じで好みの問題だと思っています。
ただ、組み込み系や汎用的なサーバーでは一般的なシェルを使用するのが無難だと思います。
そのような場合、私はbashを使用するようにしています。