|
この項目では、オペレーティングシステムの機能について記述しています。その他の用法については「シェル (曖昧さ回避)」をご覧ください。 |
シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。それだけではなく、この用語は非常にゆるやかに応用され、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザや電子メールクライアントはHTMLレンダリングエンジンの「シェル」といわれることがある。OSの内部(カーネル)とユーザーの間にある外殻であることから、このように呼ばれる。
目次
- 1 概要
- 2 歴史
- 3 シェルの機能
- 4 シェルスクリプト
- 5 テキストベースのシェル
- 5.1 Unixシェル
- 5.2 非Unixシェル
- 5.3 プログラミング言語のシェル
- 6 グラフィカルシェル
- 6.1 Microsoft Windows
- 6.2 X Window System
- 6.3 他のプラットフォーム
- 7 脚注
- 8 関連項目
- 9 外部リンク
|
概要
OSシェルは一般に、コマンドラインとグラフィカルの2つに分類される。コマンドラインシェルはOSのコマンドラインインタフェース (CLI) を提供し、Windows Shell[1][2][3] などのグラフィカルシェルはグラフィカルユーザインタフェース (GUI) を提供する。どちらにしてもシェルの主たる用途は、他のプログラムを起動することである。しかし、シェルはディレクトリの中身を見るなどの追加機能を備えていることが多い。なおGUI全体ではなく、プログラムの起動とディレクトリのビューという機能を備えたGUIプログラムのみをグラフィカルシェルと呼ぶこともある。
CLIベースのシェルとGUIベースのシェルのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作(ファイル群の移動など)を行う際にGUIよりもCLIの方が早いと主張する。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。実際にはユーザーの使い方によって最良の選択が決まってくる。サーバは専門の管理者がいてデータの転送や処理を行うことが多いため、CLIが最良の選択ということが多い。しかし画像や映像などのデータの開発や編集を行うコンピュータではGUIの方が適している。
シェルはUNIXで使用される呼称であり、より一般的にはコマンドインタプリタと呼ぶ。しかしUNIXの普及やMS-DOSなど他のOSでも使用されたことにより現在では一般的な名称となっている。ただし通常「シェル」と言った場合はPOSIX系のオペレーティングシステムにおけるシェルを指すことが多い。一方「コマンドインタプリタ」の名称で呼ばれる場合は単に「コマンドを解釈する者」の意であり、OSのユーザインタフェースとしての意味合いは失われていることが多い。
エキスパートシステムにおいては、特定用途の知識ベースを入れる前の「空の」エキスパートシステムをシェルと呼ぶ[4]。
Unix系オペレーティングシステムではシェルがユーザプログラムとして実装されており、また好きなシェルを差し替えて使用することができる。
歴史
最初のUnixシェルはケン・トンプソンが開発した sh (Thompson shell) である[5]。その手本になったのがMulticsのシェルで[6]、さらにその手本になったのがルイ・プザンがCTSS向けに開発したRUNCOMというプログラムである[7]。
事実上すべての現代のOSシェルは、対話モードとバッチモードで使用でき、後者はシェルスクリプトと呼ばれるファイルの名前を指定することでその中身を解釈実行する。バッチモードでは、制御構造、条件文、変数といったプログラミング言語的要素を利用できる。バッチモードでの必要に迫られてそういった機能を追加したシェルもあるが、もともと洗練されたプログラミング言語として設計されたシェルもある。逆に一部のプログラミング言語はシェルのような対話的利用が可能である。
シェルの機能
一般的なシェルの機能は以下のとおり(すべてのシェルが装備しているわけではない)。
- プログラム名(プログラム出力)を指定してアプリケーションを起動する。
- プログラムを終了する、フォアグラウンド・バックグラウンドを切り替える(ジョブコントロール)。
- プログラムの出力をファイルに出力する(リダイレクト)、他のプログラムの入力とする(パイプ)。
- プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照。
- 入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能(ワイルドカードの展開)。
- 入力履歴を呼び出す(コマンド入力ヒストリ)。
- コマンドに別名をつける(エイリアス)。
- 繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造。
- 入力時のファイル名などの補完機能
- まとまった一連の入力をシェルスクリプトとして実行する。バッチ処理とも呼ばれる。
シェルスクリプト
詳細は「シェルスクリプト」を参照
シェルの特徴は、コマンドラインの指示のための変数や制御構造を持っており、ある種のプログラミング言語と呼べる。たとえば、複数のファイルに対する処理をBourne Shellでは以下のように記述できる。
このシェルスクリプトはカレントディレクトリー上の.txtという拡張子を持つファイルのバックアップを作る。
#!/bin/sh
for file in *.txt
do
cp "$file" "$file.bak"
done
このような処理はコマンドラインとして入力することもできるが、ファイルに保存してシェルスクリプトとして実行することができる。
テキストベースのシェル
Unixシェル
詳細は「Unixシェル」を参照
歴史上有名なものやよく使われているUnixシェルとして、以下のものがある。
- Bourne Shell (sh)
- Almquist Shell (ash)
- Debian Almquist shell (dash)
- Bourne-Again shell (bash)
- Korn Shell (ksh)
- C Shell (csh)
- TENEX C shell (tcsh)
- Hamilton C shell(英語版) - Microsoft Windows 向け
- Emacs shell (eshell)
- Friendly interactive shell (fish)
- rc shell(英語版) (rc) – Plan 9 from Bell Labs および Unix 向け
- scsh(英語版) (Scheme Shell)
- Stand-alone Shell(英語版) (sash)
- BeanShell(英語版)
- Rhino shell
- rsh - 各種システムで使用可能なリモートシェル。一部システムでは Restricted shell を意味する。
- psh(英語版) - Perlベースの汎用シェル
- sqsh(英語版) - 対話型SQLクライアントとしてデータベースアクセスも可能なシェル
上述の一覧の一部は、DOSやWindowsでも利用可能であり、Unixとの相互運用性を様々なレベルで可能にする。主な例として、MKS Toolkit(sh, bash, ksh, csh, tclsh, rsh を利用可能)、UnxUtils、UWIN、Cygwin、DJGPP(英語版)、Interix などがある。Windows Services For Unix はほとんどのバージョンで Korn shell と C shell を提供しており、Perlもコマンドラインとして利用できる。
Unixシェルは OS/2 や OpenVMS といった他のOSでの利用可能である。また、VMSのシェルであるDCL(英語版)もDOS、Windows、OS/2、Unix系OSで利用可能となっている。
DOSや Windows NT のシェルもUnix系システムで利用可能となっているバージョンがある。
非Unixシェル
- 4DOS(英語版)、4OS2、4NT – JP Software が開発販売していた(それぞれ)DOS、OS/2、Windows NT 用のシェル。後継の Take Command は互換性を保ちつつGUIを使用したシェルである。
- Amiga CLI/AmigaShell - AmigaOS本来のグラフィカルシェルである Workbench の代替となるコマンドライン方式のシェル
- BASIC-PLUS – RSTS/E
- CANDE MCS – バロースのOS MCP 上のシェル兼エディタ
- CCP (console command processor) – CP/Mのユーザインタフェース
- cmd.exe – OS/2、Windows CE、Windows NT におけるメインのシェル。名前は同じだが、OSによって異なる。
- COMMAND.COM – DOSと Windows 9x系のシェル。その後の Windows にも存在する。
- Commodore DOS Wedge – コモドール64の BASIC 2.0 を拡張したもので、主なディスク操作の省略表現を使用可能
- DCL(英語版) – OpenVMS用標準シェル。DECの初期のOSが発祥
- DDT – DEC製PDP-10用デバッガだが、MITの Incompatible Timesharing System でコマンドシェルとして使用
- DROS – Java ME プラットフォームをベースとしたスマートフォン向けのDOS風シェル
- EFIシェル – オープンソースの Unified Extensible Firmware Interface コマンドシェル
- Google Shell – Google検索のオンラインのフロントエンドで、Unixシェル風に検索などが行える。
- iSeries QSHELL – IBM OS/400 でのUnix風シェル
- Macintosh Programmer's Workshop – かつての Mac OS でソフトウェア開発に使われていたコマンドライン環境
- Microsoft BASIC – かつての8ビットコンピュータでよく採用されていたオペレーティング環境
- REXX – IBMのスクリプト言語
- Singularity shell – Singularity用標準シェル
- Windows PowerShell – cmd.exe の後継のオブジェクト指向型シェル
- YouShell – YouOSのJavaScriptベースのコマンドプロセッサ
- 回復コンソール – Windows 2000、Windows XP、Windows 2003 にある機能
プログラミング言語のシェル
プログラミング言語の処理系には、シェルのような対話型コンポーネントを持つものがある。
- read-eval-printループ(英語版) - LISPが有名だが、他のプログラミング言語でも使われている。例えば Common Lisp 用のSLIME(英語版)がある。
- BeanShell(英語版) – Java用シェル
- Firebug (Chromebug)[8] – JavaScript のシェル兼デバッガ環境(Firefoxプラグイン)
- GMMLCMD - GML(英語版)(Game Maker でのスクリプト言語)のシェル
- irb – Rubyの対話版
- JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。[9]
- PHPsh – PHP用シェル
- Pythonの標準インタプリタはシェルモードでも起動可能
- Wish (GUI) と tclsh (CLI) - Tcl/Tk用シェル。他に tkcon もある。
- Windows Script Host
グラフィカルシェル
Microsoft Windows
現代の Microsoft Windows はシェルとして Windows shell を使用しており、その代表として Windows Explorer がある。Windows shell は、デスクトップ環境、スタートメニュー、タスクバーを含めた全体を意味し、Windows Explorer はファイル管理機能にアクセスするグラフィカルユーザインタフェースである。古いバージョン(Windows 3.x、95、NT)にはプログラムマネージャ (progman.exe) もグラフィカルシェルとして存在していた。
iTVmediaPlayerなどのデスクトップアプリケーションも、サードパーティのエンジンを使っているという意味でシェルと呼ばれることがある。同様に Windows Explorer のインタフェースに不満を持つ多くの個人や業者が機能や外観を変更するソフトウェアや代替のグラフィカルシェルを開発してきた。前者(外観改善)の好例として WindowBlinds がある。後者(代替)の例としては、LiteStep、SharpE、Emerge Desktop などがある。
相互運用プログラムや特定用途のソフトウェアにより、Windows上で後述のUnix系GUI環境を使用することもできる。また、Windows NT の一部バージョンにはOS/2サブシステムがあり、OS/2のプレゼンテーションマネージャと同等の環境を提供していた。
X Window System
グラフィカル (GUI) シェルは一般にウィンドウシステム上に構築される。X Window Systemの場合、ウィンドウマネージャのみを提供する場合と、ウィンドウマネージャを含むデスクトップ環境全体を提供する場合がある。
X Window System 環境(主にUnix系OS向け)として、以下のものがある。
- デスクトップ環境
- ウィンドウマネージャ
- Blackbox
- Fluxbox
- Ratpoison
- Xmonad
- dwm
- デスクトップシェル
- Enlightenment DR17
- Cinnamon(英語版)
- Beryl/Compiz
- Unity
- 狭義のグラフィカルシェル
- Nautilus - GNOME
- Konqueror - KDE
他のプラットフォーム
- Amigaの環境
- Ambient (MorphOS)
- Directory Opus
- ScalOS
- Wanderer (AROS)
- Workbench
- DOS Shell
- Finder (OS X)
- OS/2の環境
- Presentation Manager (OS/2 1.1 およびそれ以降、eComStation)
- ワークプレース・シェル (OS/2 2.0 およびそれ以降、eComStation)
脚注
- ^ Esposito, Dino. “New Graphical Interface: Enhance Your Programs with New Windows XP Shell Features”. MSDN Magazine (November 2001). http://msdn.microsoft.com/en-us/magazine/cc302214.aspx 2012年9月11日閲覧。.
- ^ Esposito, Dino (December 1998). Visual C++ Windows shell programming. Apress. ISBN 978-1861001849.
- ^ Seely, Scott (June 15, 2000). Windows Shell Programming. Prentice Hall PTR. ISBN 978-0130254962.
- ^ British Computer Society (2005). Pearson Education. p. 135. ISBN 0-13-147957-1. http://books.google.com/books?id=g8Bds8ssYYgC&pg=PA135&dq=%22shell+is+a+piece%22+%22expert+system%22&hl=sv#v=onepage&q=%22shell%20is%20a%20piece%22%20%22expert%20system%22&f=false.
- ^ “V6 Thompson Shell Port - History”. V6shell.org. 2012年8月14日閲覧。
- ^ Tom Van Vleck (1995年2月5日). “Unix and Multics”. Multicians.org. 2012年8月14日閲覧。
- ^ Louis Pouzin (2000年11月25日). “The Origin of the Shell”. Multicians.org. 2012年8月14日閲覧。
- ^ developer.mozilla.org/en/Setting_up_extension_development_environment
- ^ developer.mozilla.org/en/JavaScript_shells JavaScript shells
関連項目
- POSIX
- 擬似端末
- バッチファイル
- MS-DOS Shell
- IEコンポーネントブラウザ - Internet Explorer shell とも
- シェルスクリプト
- Unixシェル
外部リンク