トップQs
タイムライン
チャット
視点

シェル

ウィキペディアから

シェル
Remove ads

シェル英語: shell)とは、コンピュータプログラムの一種で、ユーザーへのインタフェースを提供するものを指す。オペレーティングシステム(OS)を持つ高機能なコンピュータにおいて、その機能への容易なアクセスを提供する。

Thumb
Bashスクリーンショット

他にも、この用語はゆるやかに応用されることもあり、特定のコンポーネントの周辺に構築された任意のソフトウェアを含むこともある。例えば、ウェブブラウザ電子メールクライアントHTMLレンダリングエンジンの「シェル」といわれることがある。コンピュータシステムとユーザーの間にある「殻」であることから、このように呼ばれる。

Remove ads

概要

要約
視点

コマンドラインシェルとグラフィカルシェルの2種類の形態へ大別される:

CLIとGUIのどちらが優れているかという議論はしばしば行われている。CLI支持派は、特定の操作(ファイル群の移動など)を行う際にGUIよりもCLIの方が速いと主張する。また、CLIには複数のコマンドを組み合わせて素早く高度な処理を行えるとの主張もある。一方GUI支持派は、グラフィカルシェルの方がユーザビリティが高くシンプルだと主張する。しかし、用途により適するものは異なる。たとえばサーバ管理はリモートのことも多く、VNCなどでGUI画面を転送してネットワーク帯域を浪費することは好ましくなかったり、そもそもセキュリティポリシー的にそのような接続は禁止されることもある。一方で、たとえば画像や映像などのデータの開発や編集にはGUIの方が適している。少なくとも、多くのCLIにはソフトウェアの連携においてGUIを圧倒する柔軟性を持つパイプライン機能が備わっており、慣れれば短時間で既存のソフトウェアを繋ぎ合わせて高度な処理を記述できる事と、OSがクラッシュして最小構成でしか起動できなくなった場合にはCLIしか利用できない事から、システム開発・運用・管理の現場ではCLIスキルは重要視されている。

Multics以前のOSでは、シェル的なユーザインタフェースの機能はOS本体と渾然一体なものとして考えられ、そのように実装されていた(今日でも簡易なモニタ的なものではそういった設計も多い)。Multicsはシェルをモジュール化して独立させる設計を示した。UNIXもその影響をうけて設計され、シェルは単なる1ユーザプロセスとして動作するもので、利用者の好みにより選択もできる(また内部実装の話としては、端末デバイス等が、そのようにしてシェルを独立したプロセスとして実装できるように機能が設計されている)。MS-DOSでも、あまり一般的ではないが、COMMAND.COM以外の、フリーソフトによるシェルなどもある。なお、MS-DOSの起動時の設定ファイルであるCONFIG.SYSにおいて「SHELL=C:\COMMAND.COM」といったようにして設定されるファイルは、その設定項目名の通りシェルであることが多いが、ブートの最後に、最初のプロセスとして実行するプログラムを指定するものであって、例えばアニメなどの架空のOSの起動画面を再現するプログラムなど、シェルでないものを指定することもある。

エキスパートシステムにおいては、特定用途の知識ベースを入れる前の「空の」エキスパートシステムをシェルと呼ぶ[1]

Remove ads

歴史

コマンドラインシェル

要約
視点

内部コマンドと外部コマンド

シェル自身が持つ機能に関係しており、シェル単体で処理が完結するコマンドが内部コマンドである。それに対し、他のプログラムにより実行されるコマンドが外部コマンドである。OSの外殻としてのシェルでは普通、外部コマンドを実行する機能は必須である。また、システムに異常がある場合、外部コマンドがほとんどあるいは全く使えなくなることもあるため、そういった場合に対処できるよう、外部コマンドで実装できるものでも内部コマンドが用意されることもある(Windowsのシェルは、MS-DOS時代にフロッピィディスクでの運用では外部コマンドが全く無いこともあったCOMMAND.COMの影響で、多数の機能を抱えており、一見では似ているUnix系のシステムに移行したユーザは、DIRコマンドに相当するlsコマンドなどすら外部コマンドであることに、しばしば戸惑う)。

コマンドラインシェルの機能

以下の機能のそれぞれを持つものもあれば、持たないものもある。

  • プログラム名(プログラム出力)を指定してアプリケーションを起動
  • プログラムを終了する、フォアグラウンド・バックグラウンドを切り替えといった、ジョブ制御
  • プログラムの出力をファイルに出力する(リダイレクト)、他のプログラムの入力とする、といったパイプ制御
  • プログラムの動作環境の設定に使用する環境変数、シェル変数の設定・参照
  • 入力コマンドライン中の特別な記法で指定した部分をファイル名としてパターンマッチさせて展開する機能(ワイルドカードの展開)
  • 入力履歴を呼び出す(コマンド入力ヒストリ)
  • コマンドに別名をつける(エイリアス)
  • 繰り返しコマンドを実行したり、条件に応じて実行させたりするための制御構造
  • 入力時のファイル名などの補完機能
  • まとまった一連の入力をシェルスクリプトとして実行する(次節)

シェルスクリプト

多くのコマンドラインシェルが、対話的に利用するだけでなく、テキストファイルないしパイプからのテキストをコマンドとみなして処理できる。これにより、ある種のプログラミング言語のインタプリタのように利用できる。そのようなシェルスクリプトで利用する場合に便利な多くの機能は、対話的にも利用できることが多い(たとえばBourne Shellではそうなっている)。いっぽうでC Shellのように、設計時に対話的利用に重点が置かれすぎたため、シェルスクリプト・プログラミングが推奨されないとされているシェルもある(Csh Programming Considered Harmful[5])。逆にスクリプト言語としての設計が重視されたMicrosoft PowerShellのような例もある。あるいは、プログラミング言語のインタプリタとして、Lispなどの処理系でREPLと呼ばれるものもシェルに近い。

その他

なお、Unixのシェルには「インタラクティブシェル」と「ログインシェル」という概念がある。インタラクティブモードは専ら対話的な利用のためのモード、非インタラクティブモードは専らシェルスクリプト実行のためのモードで、一般にそのシェル自身の入出力が端末か否かなどにより変化するが、利用できるコマンド等がこれらで変化するわけではない。/bin/sh-iというオプションを付けると強制的にインタラクティブモードで起動されるが、主な違いは一部のシグナルを無視するようになること[6]、というようなシステム的な違いである。

一方ログインシェルとは、端末などにおいてログインした直後などの、最初のプロセスとしてのシェルのことである。通常の利用法ではログインシェルはインタラクティブシェルだが、そうでないこともある。たとえばsshのコマンドライン引数で指定されたコマンドを実行しているだけの、リモートマシンにおけるシェルはログインシェルだがインタラクティブではない。

具体例としてbashの場合、インタラクティブシェルでは起動時に~/.bashrcを読み込み、ログインシェルでは起動時に~/.bash_profileを読み込む。

コマンドラインシェルの一覧

要約
視点

Unixシェル

歴史上有名なものやよく使われているUnixシェルとして、以下のものがある。

上述の一覧の一部は、DOSやWindowsでも利用可能であり、Unixとの相互運用性を様々なレベルで可能にする。主な例として、MKS Toolkit(sh、bash、ksh、csh、tclsh、rshを利用可能)、UnxUtilsUWINCygwinDJGPPInterixなどがある。Windows Services For UnixはほとんどのバージョンでKornShellとC Shellを提供しており、Perlもコマンドラインとして利用できる。

UnixシェルはOS/2OpenVMSといった他のOSでの利用可能である。また、VMSのシェルであるDCL英語版もDOS、Windows、OS/2、Unix系OSで利用可能となっている。

DOSやWindows NTのシェルもUnix系システムで利用可能となっているバージョンがある。

Unix以外

プログラミング言語のシェル

プログラミング言語処理系に対するコマンドラインインタプリタも、一種のシェルである。OS的な機能へのインタフェースを持つものもある。

  • LISP
    • REPL(Read-Eval-Print Loop)- Lisp方面での原義としては、read(パーズ)し、データ化したフォームをeval(評価)し、結果をprintすることを繰り返す(loop)、トップレベルと呼ばれる対話環境である。Lispとは違いreadとevalが分離していないような言語でもREPLと呼称する意義は薄い。
      • SLIME - Common LispのREPLを強化したもの。リモート接続なども可能。
      • nREPL (Network REPL) - Clojureの強化されたREPL環境
  • BeanShell – Java用シェル
  • Firebug(Chromebug)[7] – JavaScript のシェル兼デバッガ環境(Firefoxプラグイン)
  • GMMLCMD - GML英語版Game Makerでのスクリプト言語)のシェル
  • irb – Rubyの対話版
  • JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。[8]
  • PHPsh – PHP用シェル
  • Pythonの標準インタプリタはシェルモードでも起動可能
  • Wish(GUI)とtclsh(CLI) – Tcl/Tk用シェル。
  • Windows Script Host
  • 一部例外を除くTeX処理系  但し実行後すぐは“原稿読み取り態”という特殊な状態[注釈 1]にある為、\relaxという命令を実行することでコマンドラインインタプリタとして利用できるようになる。
Remove ads

グラフィカルシェル

要約
視点

グラフィカルシェルは、グラフィカルユーザインタフェース(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 Windows

現代のMicrosoft WindowsのシェルはWindows shellである。ファイルマネージャとしてのWindows Explorerの他、デスクトップ環境(スタートメニュー、タスクバー等)を含めた全体を指してWindows shellという用語が使われている。古いバージョン(Windows 3.x、NT 3.x)ではプログラムマネージャ(progman.exe)がデフォルトのシェルであり、デフォルトでなくなった後もしばらくは残っていてシェルを切り替えることもできた。

iTVmediaPlayerなどのデスクトップアプリケーションも、サードパーティのエンジンを使っているという意味でシェルと呼ばれることがある。同様にWindows Explorerのインタフェースに不満を持つ多くの個人や業者が機能や外観を変更するソフトウェアや代替のグラフィカルシェルを開発してきた。前者(外観改善)の好例としてWindowBlindsがある。後者(代替)の例としては、LiteStepSharpEEmerge Desktopなどがある。

相互運用プログラムや特定用途のソフトウェアにより、Windows上で後述のUnix系GUI環境を使用することもできる。また、Windows NTの一部バージョンにはOS/2サブシステムがあり、OS/2のプレゼンテーションマネージャと同等の環境を提供していた。

X Window System

前述のようにグラフィカルシェルとして捉えられている範囲が一定していないため、ここではいくつかの類型に分類して示す。

その他のプラットフォーム

Remove ads

脚注

関連項目

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads