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 (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系システムを操作する上で欠かせないツールです。各
シェルの特徴や設定を理解することで、より効率的なシステム運用が可能になります。