Unix
シェルは、
Unix系オペレーティングシステムにおけるコマンドラインインターフェースとして機能するプログラムです。ユーザーは
シェルを通じて、コマンドを直接入力したり、複数のコマンドを組み合わせた
シェルスクリプトを実行したりすることで、システムを操作します。
シェルは、ユーザーとカーネルの間を取り持ち、ユーザーの指示をシステムに伝える役割を果たします。
広義の
シェルは、ユーザーがコマンドを入力するために使用するプログラム全般を指します。
Unix系OSでは、対話的なコマンドラインインターフェースとして様々な
シェルが利用可能です。ユーザーがシステムに
ログインすると、自動的に
シェルプログラムが起動し、これを「
ログインシェル」と呼びます。この
ログインシェルはユーザー毎にカスタマイズでき、`passwd`ファイルで起動する
シェルプログラムを指定したり、`passwd -e`コマンドや`chsh`コマンドで変更したりできます。また、ユーザーは必要に応じて別の
シェルプログラムを起動することも可能です。
初期の
シェルは、対話型のコマンド言語であると同時に
スクリプト言語としても使われ、システム制御の中核を担っていました。この概念はUnixに限らず、他のOSにも影響を与えました。
Unix
シェルの歴史において特に重要な役割を果たしたのが、以下の2つの
シェルです。
Bourne Shell (sh)
スティーブン・ボーンがAT&Tで開発したシェルで、パイプ、ヒアドキュメント、変数、制御構造など、現代のシェルの基礎となる多くの機能を提供しました。ALGOL 68の影響を受けた構文を持ち、UNIXシステムで広く普及しました。
C Shell (csh)
ビル・ジョイが
カリフォルニア大学バークレー校で開発した
シェルで、
C言語をモデルにした文法を持っています。ヒストリ機能、エイリアス、ジョブコントロールなど、対話的な操作に便利な多くの機能が導入されました。
これらの
シェルをベースに、多くの
シェルが派生し、現在に至っています。
シェルは、その起源や機能に基づいていくつかのカテゴリーに分類できます。
Bourne Shell 互換
Bourne Shell (sh)
スティーブン・ボーンが開発したオリジナルのシェル。多くのUnix系システムで標準として採用されました。
Almquist Shell (ash)
Bourne ShellのBSDライセンス版。軽量でリソースの少ない環境でよく利用されます。
Bourne-Again shell (bash)
GNUプロジェクトで開発されたオープンソースのシェル。多くのLinuxディストリビューションで標準シェルとして採用されています。
Debian Almquist shell (dash)
Debianや
Ubuntuでashの代替として使用されています。
KornShell (ksh)
デビッド・コーンが開発したシェル。POSIX標準のベースとなりました。
Public domain Korn shell (pdksh)
kshからの派生版。
MirBSD Korn shell (mksh)
OpenBSDのkshの後継として開発されました。
Yet another shell (yash)
C99で書かれた
POSIX準拠の
シェル。
Z Shell (zsh)
多機能なシェルで、bash, ksh, tcshなどの上位互換の機能を持っています。macOS Catalina以降の標準シェルです。
C Shell 互換
C Shell (csh)
ビル・ジョイが開発した
シェル。対話的な操作に重点が置かれています。
TENEX C shell (tcsh)
cshを拡張したシェル。
Hamilton C shell
OS/2およびWindows向けに開発された
シェル。
es
関数型プログラミングを取り入れたシェル。
Friendly interactive shell (fish)
ユーザーフレンドリーなインタフェースを持つ
シェル。
Perl Shell (psh)
bashとPerlの機能を統合したシェル。
pysh
Pythonとシステム
シェルを統合した
シェル。
rc
Plan 9およびVersion 10 UNIXのデフォルトシェル。
scsh
Schemeで記述された
シェル。
wish
Tcl/Tk用のGUIシェル。
zoidberg
Perlで記述されたモジュール型
シェル。
Thompson shell (sh)
UNIX初のシェル。現代から見ると原始的な構造ですが、その後のシェルの基礎となりました。
PWB shell または Mashey shell (sh)
Thompson shellを改良した
シェル。
主な設定ファイル
各
シェルは、起動時や
ログイン時などに設定ファイルを読み込みます。これらのファイルには、
シェルの動作や環境を設定するためのコマンドが記述されています。代表的な設定ファイルは以下の通りです。
シェル | .profile | .bash_profile | .bashrc | .zprofile | .zshrc | .cshrc | .login | .tcshrc | /etc/profile | /etc/bashrc |
---|
:- | :-: | :--: | :-: | :--: | :-: | :-: | :-: | :-: | :---: | :----: |
sh | login | - | - | - | - | - | login | - | yes | - |
bash | login | login | int. | - | - | - | - | - | yes | yes |
zsh | - | - | - | login | int. | - | - | - | yes | - |
csh | - | - | - | - | - | int. | login | - | yes | - |
tcsh | - | - | - | - | - | int. | login | int. | yes | - |
凡例:
空白: ファイルを読み込まない
yes: 必ず読み込む
login: ログインシェル時のみ読み込む
n/login:
ログインシェルでない場合に読み込む
* int.: 対話型
シェル時のみ読み込む
シェルは、
Unix系システムを操作する上で欠かせないツールです。各
シェルの特徴や設定を理解することで、より効率的なシステム運用が可能になります。