シェルとはなんですか?
A:広義には「ユーザーとシステムの橋渡しをするインターフェイス」ということになります(図2)。ただし、Linuxでは「コマンドラインに渡された文字列を解釈して、その命令をシステムに渡すもの」(コマンドラインインタープリタ)の意味で使われることがほとんどです。元々コマンドラインでの利用が主流だったUNIXでは、コマンドラインインタープリタとしてのシェルは数多く作られており、Bourneシェル(sh)、Cシェル(csh)、Kornシェル(ksh)、tcsh、bash、zshなどの種類があります。
図2 シェルの概念 |
Q:それぞれのシェルはどんな特徴がありますか?
A:これらのシェルは、sh系とcsh系に大別することができます。sh系の大元になるのがBourneシェルです。Bourneシェル(sh)は、AT&Tベル研究所のSteven Bourne氏によって作られたもので、古くからUNIXでは標準的にバンドルされてきたシェルです。Bシェルと呼ばれることもあります。このBourneシェルはUNIXでは標準的な存在ながら、非常にプリミティブな機能しか持っていません。
それとは別にcsh系の大元となるのがCシェルです。Cシェルは、UCB(カリフォルニア大学バークレー校)で、viやBSDの開発で知られるBill Joyによって作られました。ジョブ制御やエイリアスなどBourneシェルにない機能を持っています。また、C言語に似た文法でスクリプトを記述できるという特徴を持っています。
これらの2つシェルを中心に、拡張版としていくつかのシェルができました。sh系の後継として、Kornシェルやbashが開発されました。Kornシェル(ksh)はベル研究所のDavid Korn氏によって開発されました。Kornシェルは、BourneシェルとCシェルの優れた機能を取り込んだシェルで、商用製品です(以前のバージョンを基にパブリックドメインとして提供されているものはある)。
一方のcsh系には、tcshがあります。tcshは、Cシェルの機能に加えて、コマンド行編集が改善されています。
Linuxで標準的に利用されているbashは、Bourne Again Shellの略称で、GNUプロジェクトによる成果物です。Bourneシェルとの互換性だけでなく、CシェルやKornシェルの機能も取り込んでいます。基本機能だけでもあらゆるシェルの特徴を持っていますが、カスタマイズ力も高くなっています。
Q:自分が使っているシェルを知りたいときは?
A:コマンドラインから、
$ echo $SHELL
と入力します。Linuxではほとんどの場合、bashを使用しているでしょう。
Q:シェルを変更するには?
A:コマンドラインから、chshコマンドを実行することでシェルを変更できます。さらに、LinuxconfやturbousercfgなどのGUIツールからも変更可能です。
Q:ホームディレクトリにある.bash_profile、.bashrc、.bash_logoutは、それぞれどのような働きをするのでしょうか?
A:簡単にいうと、.bash_profileはシステムにログインする際に読み込まれる環境定義ファイルです。.bash_loginや.profileなども.bash_profileと同様の働きをして、ホームディレクトリに.bash_profileがなければ、.bash_loginを探し、.bash_loginがなければ、.profileをという順番で探していきます。特別な理由がない限り、.bash_profileを利用すればいいでしょう。
.bashrcはサブシェルが起動されるたびごとに読み込まれる環境定義ファイルです。ただし、多くのディストリビューションでは、ログインシェルとサブシェルを区別なくコマンドを実行できるよう、.bashrcを.bash_profileの中で読み込むような設定になっています。
なお、起動時には、これらのファイルの前に、/etc/profileがあれば、このファイルが一番先に読み込まれます。
.bash_logoutは、ログアウト時に読み込まれて実行されるファイルで、テンポラリファイルの削除やログの書き込みコマンドなどを書いておけばいいでしょう。