目次:
UnixおよびLinuxシステムのコマンドラインは既に非常に強力ですが、シェルは見た目以上に強力なツールです。 方法を知っている限り、カスタマイズして心のコンテンツに切り替えることができます。
シェルとは何ですか?
ほとんどすべてのUnixおよびLinuxのマニュアルには、オペレーティングシステムを囲むシェルの標準的な図があり、ある種のキャンディバーに似ています。 シェルは、カーネル、ファイルシステム、さまざまなシステムコールとユーザーを含むオペレーティングシステム間のインターフェイスにすぎません。 長年にわたり、1980年代にグラフィカルユーザーインターフェイスが一般的になるまで、唯一の対話型ユーザーインターフェイスでした。 グラフィカルユーザーインターフェイスは、プログラムの起動、システムの構成、ファイルの管理など、多くの同じ機能を提供するため、シェルの一種と考えることもできます。
これらの謙虚なテキストベースのインターフェイスには、驚くほどの力があります。 一つには、それらは本格的なプログラミング言語です。 Pythonのようなさらに強力なスクリプト言語が登場する前は、シェルスクリプトは必ずしもCのパワーを必要としないプログラムを作成するのに理想的でした。システムスクリプトの自動化やラピッドプロトタイピングには依然として有用です。
また、ファイルの操作と検索を容易にする多数の機能も備えています。 最も広く使用されているものの1つは、「ワイルドカード」または「グロビング」です。 ほとんどすべてのUnixおよびLinuxユーザーは、任意の文字に一致するワイルドカード「*」に精通しています。 これは実際にはシェルの仕事です。 異なるシェルにはさらに強力なオプションがあります。
Unixの特徴的な機能の1つは、プログラムの入出力をリダイレクトする機能です。 シェルはこの機能を実装しています。
シェルは単なる別のプログラムであるため、適切なスキルを備えたプログラマーであれば誰でも作成できます。 長年にわたって出現したいくつかの主要なシェルがありました。
シェルの歴史とまとめ
オペレーティングシステムの初期にはいくつかのUnixシェルがありましたが、Bell Labs以外で最初に認知されたのは、スティーブンR.ボーンにちなんで名付けられたボーンシェルでした。 シェルの主な革新は、構造化プログラミングの機能をサポートし、シェルを初めて実際のプログラミング言語として使用できるようになったことです。 通常、Bourneシェルをエミュレートする新しいシェルの1つですが、現在のUnixおよびLinuxのすべてのバージョンでまだ使用されているため、これは不可欠です。
次の主要なシェルはCシェルで、一般に「csh」と略されます。 このシェルはUC Berkeleyで開発され、BSDフレーバーの主要なコンポーネントになりました。 名前が示すように、その構文はCプログラミング言語に似ているように設計されていますが、実際にはインタラクティブな使用のために設計されています。
ユーザーは、行全体を再入力することなく以前に発行したコマンドに戻って繰り返すことができる履歴メカニズムを備え、ジョブ制御を改善して、複数のタスクの実行を容易にしました。 (これは、ほとんどの人がまだテキストベースの端末を使用していた時代であることを思い出してください。)
次の主要なシェルはKornシェルで、これもベル研究所から出てきました。 ちなみに、シェルはバンドではなく、David Kornにちなんで命名されました。 Kornシェルの主な革新は、コマンドライン編集の導入であり、履歴機能をさらに拡張します。 ユーザーは戻って、viまたはEmacsエディターに似たコマンドを使用して、入力したコマンドを編集できます。
主要なシェルの中で、Bourne Again Shell(bash)は80年代後半に導入されて以来最も人気があります。 GNUプロジェクトの一部として開発されたこのシェルは、Bourneシェルとの互換性を維持しながら、CシェルとKornシェルの革新を取り入れています。 ほとんどのLinuxディストリビューションの「標準」シェルです。
1990年に最初にリリースされたZ Shell(zsh)は、コマンドラインユーザーの夢です。 他のシェルが持っている他の主要な機能のほとんどを備えているだけでなく、多くの強力な機能でめちゃくちゃカスタマイズ可能です。 最も強力な方法の1つは、再帰的なグロビングです。これにより、ユーザーは、現在の作業ディレクトリ内のファイルではなく、コマンドを発行するときにサブディレクトリ内のファイル名を照合できます。 本当に上級のユーザーは、補完オプションをカスタマイズして、完全に入力しなくてもファイルを一致させることができます。 また、太い指のタイピストにとっては、スペルを修正することもできます。 このシェルは非常に高度で、そのマニュアルページはいくつかの非常に長いセクションに分割されています。
スクリプティング
前述のように、シェルは単なるコマンドラインインターフェイスではなく、強力なプログラミング言語です。 シェルスクリプトの利点は、通常のインタラクティブな使用とスクリプトの両方で同じ言語を使用できることです。これにより、学習曲線がより平坦になります。 最新のシェルには、フロー制御、関数、変数など、通常のプログラミング言語機能がすべて含まれています。 それらのいくつかは、連想配列のような高度なデータ構造さえ持っています。
それらの力にもかかわらず、シェルでのプログラミングにはいくつかの落とし穴があります。 最大の問題は、別のシステム上にない可能性のあるプログラムに依存するスクリプト、または特定のフレーバーのUnixまたはLinuxに依存するスクリプトを書くのが簡単すぎることです。 そのため、シェルスクリプトは、1つのシステムでのみ実行されることがわかっているプログラムに最適です。 移植性のあるものを作成しようとしていて、Cプログラムを書きたくない場合は、PerlやPythonなどの別のスクリプト言語で書くのが最善の策です。
Unix / Linuxコマンドラインの内部を覗く
Unix / Linuxコマンドラインの表面の下には、より多くの力が潜んでいます。 この記事では、お気に入りのシェルの内部を覗いて、実際に何ができるかを確認することをお勧めします。 シェルスクリプトを使用する場合は、Unix Power Tools and Learning the Bash Shellの書籍をご覧ください。 Stephen R. Bourneのシェルに関する最初の論文は、シェルスクリプトの世界が古くても、それを紹介するのにも役立ちます。
