シェル
シェル (英語: shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。それだけではなく、この用語は非常にゆるやかに応用され、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザや電子メールクライアントはHTMLレンダリングエンジンの「シェル」といわれることがある。OSの内部(カーネル)とユーザーの間にある外殻であることから、このように呼ばれる。
目次
1 概要
2 歴史
3 コマンドラインシェル
3.1 内部コマンドと外部コマンド
3.2 コマンドラインシェルの機能
3.3 シェルスクリプト
4 コマンドラインシェルの一覧
4.1 Unixシェル
4.2 Unix以外
4.3 プログラミング言語のシェル
5 グラフィカルシェル
5.1 Mac OS
5.2 Microsoft Windows
5.3 X Window System
5.4 その他のプラットフォーム
6 脚注
7 関連項目
8 外部リンク
概要
大まかに2種類に大別すると、キャラクタユーザインタフェース(CUI)ベースのコマンドラインインタプリタ(CLI)の形態をとる「コマンドラインシェル」と、グラフィカルユーザインタフェース(GUI)ベースでいわゆる「デスクトップメタファ」等の環境へのユーザインタフェースという形態をとる「グラフィカルシェル」に分けられる。
CLIとGUIのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作(ファイル群の移動など)を行う際にGUIよりもCLIの方が早いと主張する。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。しかし、そもそも「どちらが優れているか」という問いがナンセンスであり、愚かな議論である。たとえばサーバ管理はリモートのことも多く、VNCなどでGUI画面を転送してネットワーク帯域を浪費することは好ましくなかったり、そもそもセキュリティポリシー的にそのような接続は禁止されることもある。一方で、たとえば画像や映像などのデータの開発や編集にはGUIの方が適している。
Multics以前のOSでは、シェル的なユーザインタフェースの機能はOS本体と渾然一体なものとして考えられ、そのように実装されていた(今日でも簡易なモニタ的なものではそういった設計も多い)。Multicsはシェルをモジュール化して独立させる設計を示した。UNIXもその影響をうけて設計され、シェルは単なる1ユーザプロセスとして動作するもので、利用者の好みにより選択もできる(また内部実装の話としては、端末デバイス等が、そのようにしてシェルを独立したプロセスとして実装できるように機能が設計されている)。MS-DOSでも、あまり一般的ではないが、COMMAND.COM 以外の、フリーソフトによるシェルなどもある。なお、MS-DOSの起動時の設定ファイルである CONFIG.SYS において「SHELL=C:COMMAND.COM」といったようにして設定されるファイルは、その設定項目名の通りシェルであることが多いが、ブートの最後に、最初のプロセスとして実行するプログラムを指定するものであって、例えばアニメなどの架空のOSの起動画面を再現するプログラムなど、シェルでないものを指定することもある。
(エキスパートシステムにおいては、特定用途の知識ベースを入れる前の「空の」エキスパートシステムをシェルと呼ぶ[1])
歴史
最初のUnixシェルはケン・トンプソンが開発したThompson Shellである[2]。その手本になったのがMulticsのシェルで[3]、さらにその手本になったのがルイ・プザンがCTSS向けに開発したRUNCOMというプログラムである[4]。
事実上すべての現代のOSシェルは、対話モードとバッチモードで使用でき、後者はシェルスクリプトと呼ばれるファイルの名前を指定することでその中身を解釈実行する。バッチモードでは、制御構造、条件文、変数といったプログラミング言語的要素を利用できる。バッチモードでの必要に迫られてそういった機能を追加したシェルもあるが、もともと洗練されたプログラミング言語として設計されたシェルもある。逆に一部のプログラミング言語はシェルのような対話的利用が可能である。
コマンドラインシェル
内部コマンドと外部コマンド
シェル自身が持つ機能に関係しており、シェル単体で処理が完結するコマンドが内部コマンドである。それに対し、他のプログラムにより実行されるコマンドが外部コマンドである。OSの外殻としてのシェルでは普通、外部コマンドを実行する機能は必須である。また、システムに異常がある場合、外部コマンドがほとんどあるいは全く使えなくなることもあるため、そういった場合に対処できるよう、外部コマンドで実装できるものでも内部コマンドが用意されることもある(Windowsのシェルは、MS-DOS時代にフロッピィディスクでの運用では外部コマンドが全く無いこともあったCOMMAND.COMの影響で、多数の機能を抱えており、一見では似ているUnix系のシステムに移行したユーザは、DIRコマンドに相当するlsコマンドなどすら外部コマンドであることに、しばしば戸惑う)。
コマンドラインシェルの機能
以下の機能のそれぞれを持つものもあれば、持たないものもある。
- プログラム名(プログラム出力)を指定してアプリケーションを起動する。
- プログラムを終了する、フォアグラウンド・バックグラウンドを切り替える(ジョブコントロール)。
- プログラムの出力をファイルに出力する(リダイレクト)、他のプログラムの入力とする(パイプ)。
- プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照。
- 入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能(ワイルドカードの展開)。
- 入力履歴を呼び出す(コマンド入力ヒストリ)。
- コマンドに別名をつける(エイリアス)。
- 繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造。
- 入力時のファイル名などの補完機能
- まとまった一連の入力をシェルスクリプトとして実行する。
シェルスクリプト
コマンドラインシェルの一覧
Unixシェル
歴史上有名なものやよく使われているUnixシェルとして、以下のものがある。
Bourne Shell (sh)
Almquist Shell (ash)
Debian Almquist shell (dash)
Bourne-Again shell (bash)
KornShell (ksh)
Z Shell (zsh)
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 はほとんどのバージョンで KornShell と 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 が開発販売していた(それぞれ)MS-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のユーザインタフェース
COMMAND.COM – MS-DOSのシェル。
cmd.exe – OS/2、Windows CE、Windows NTのシェル。
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 – Classic Mac OSでソフトウェア開発に使われていたコマンドライン環境
Microsoft BASIC – かつての8ビットコンピュータでよく採用されていたオペレーティング環境
REXX – IBMのスクリプト言語
Singularity shell – Singularity用標準シェル
Windows PowerShell – cmd.exeの後継のオブジェクト指向型シェル- YouShell – YouOSのJavaScriptベースのコマンドプロセッサ
回復コンソール – Windows 2000、Windows XP、Windows 2003 にある機能
プログラミング言語のシェル
プログラミング言語処理系に対するコマンドラインインタプリタも、一種のシェルである。OS的な機能へのインタフェースを持つものもある。
LISP系
REPL (Read-Eval-Print Loop)(Lisp以外の言語の処理系にも多いが)
Common Lisp 用のSLIME
BeanShell – Java用シェル
Firebug (Chromebug)[5] – JavaScript のシェル兼デバッガ環境(Firefoxプラグイン)- GMMLCMD - GML(Game Maker でのスクリプト言語)のシェル
- irb – Rubyの対話版
- JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。[6]
- PHPsh – PHP用シェル
Pythonの標準インタプリタはシェルモードでも起動可能- Wish (GUI) と tclsh (CLI) - Tcl/Tk用シェル。他に tkcon もある。
- Windows Script Host
- 一部例外を除くTeX処理系 — 但し実行後すぐは“原稿読み取り態”という特殊な状態[7]にある為,
relax
という命令を実行することでコマンドラインインタプリタとして利用できるようになる。
グラフィカルシェル
グラフィカルシェルは、グラフィカルユーザインタフェース(GUI)による and・or デスクトップ環境などといったGUI環境へのユーザインタフェースとしてのシェルである。コマンドラインシェルと違い、形態がそれほど明確には固まっていない。
たとえば、X Window Systemなどのグラフィックシステムなどを含んだかなり広い範囲を含んで捉えられることもあれば、GNOMEデスクトップ環境のGNOME Shellのように、その提供するUIのほとんどの機能は他のプログラムを通じて提供される本当にごく薄い「シェル」に徹しているものもある。また、X Window Systemの環境ではウィンドウマネージャをデスクトップ環境も兼ねたシェルとして使うこともあったり(Xウィンドウマネージャ)、Windows 3.x時代のプログラムマネージャや、Mac OSにおけるFinderのように、ランチャーやファイルマネージャがベースのグラフィカルシェルもある(Windows shell(en:Windows shell)も、プログラム自体はExplorerである)。
Mac OS
Mac OS では、System Software(あるいは単に "System")と呼ばれていた Classic Mac OS 時代の、68k Macintosh 用のバージョン1から、2017年現在の現行版である macOS のバージョン10.13(High Sierra)に至るまで一貫して、Finder がグラフィカルシェルである。Microsoftのようにウェブブラウザと統合する等というような小手先の「高機能化」等をせず、独自アーキテクチャであった Classic Mac OS から、Unix系のコアを持つ Mac OS X(現: macOS)への移行という大きな変動すらも、ユーザに対しては Finder というシェルによりかなり隠蔽されているということなどは、最初の設計時の先見性と言える。
Microsoft Windows
現代の Microsoft Windows のシェルは Windows shell である。ファイルマネージャとしての Windows Explorer の他、デスクトップ環境(スタートメニュー、タスクバー等)を含めた全体を指して Windows shell という用語が使われている。古いバージョン(Windows 3.x、NT 3.x)ではプログラムマネージャ (progman.exe) がデフォルトのシェルであり、デフォルトでなくなった後もしばらくは残っていてシェルを切り替えることもできた。
iTVmediaPlayerなどのデスクトップアプリケーションも、サードパーティのエンジンを使っているという意味でシェルと呼ばれることがある。同様に Windows Explorer のインタフェースに不満を持つ多くの個人や業者が機能や外観を変更するソフトウェアや代替のグラフィカルシェルを開発してきた。前者(外観改善)の好例として WindowBlinds がある。後者(代替)の例としては、LiteStep、SharpE、Emerge Desktop などがある。
相互運用プログラムや特定用途のソフトウェアにより、Windows上で後述のUnix系GUI環境を使用することもできる。また、Windows NT の一部バージョンにはOS/2サブシステムがあり、OS/2のプレゼンテーションマネージャと同等の環境を提供していた。
X Window System
前述のようにグラフィカルシェルとして捉えられている範囲が一定していないため、ここではいくつかの類型に分類して示すものとする。
ウィンドウマネージャ(Xウィンドウマネージャの記事も参照。単独で動作するものもあれば、GNOMEやKDEの環境が前提のものもある)
- uwm(en:Ultrix Window Manager)〜X11R3における標準
twm X11R4〜における標準- mwm(en:Motif Window Manager)MotifおよびCDEの標準
- FVWM
- qvwm(en:Qvwm)Win95風(qvのqを9、vは5の意)ないしWin98風(漢数字の八を上下ひっくり返すとv)のデスクトップ画面を提供する
- Blackbox
- Fluxbox
- Ratpoison
- Xmonad
- dwm
Beryl/Compiz
- KDE環境用
- KWin
- GNOME環境用
- Sawfish(en:Sawfish (window manager)、〜GNOME2.2)
Metacity(GNOME2.2〜GNOME2.x)
Mutter(GNOME3〜)
デスクトップ環境
- CDE
- GNOME
- KDE
- Xfce
- LXDE
Unity(著名なゲームフレームワークとは無関係)
- デスクトップ環境のシェル
- GNOME
GNOME パネル(GNOME 2)
GNOME Shell(GNOME 3)
- KDE
- KDesktop(en:KDesktop、〜 KDE 3)
Plasma(KDE 4 〜)
- GNOME
- その他
Enlightenment(デスクトップ環境と言えるほどにまで拡張されたウィンドウマネージャ)
Cinnamon(GNOME Shellからのフォークで、GNOME3のようにGTK+3ベースだが、GNOME3と違いごく軽量なデスクトップ環境を提供することが目標)
その他のプラットフォーム
Amigaの環境
Ambient (MorphOS)- Directory Opus
- ScalOS
- Wanderer (AROS)
- Workbench
- DOS Shell
OS/2の環境
Presentation Manager (OS/2 1.1 およびそれ以降、eComStation)
ワークプレース・シェル (OS/2 2.0 およびそれ以降、eComStation)
脚注
^ 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
^ ファイル名を入力するとすぐにそのファイルの処理を開始する。これは引数を解釈できない(つまり$ tex foo.tex
というコマンドライン処理が行なえない)OS上で効率良く原稿を読み取らせることが目的だった。そもそも「ファイル名」という概念字体,TeX開発の初期段階では曖昧であったようである。
関連項目
- POSIX
- 擬似端末
- バッチファイル
- MS-DOS Shell
IEコンポーネントブラウザ - Internet Explorer shell とも- シェルスクリプト
- Unixシェル
外部リンク
- Bourne Shell自習テキスト
|