Bashスクリーンショット

シェル英語: shell)とは、主にUnix系オペレーティングシステム(OS)で発展した、OSと利用者との間に位置するプログラムであり、利用者の入力を解釈してOSの機能を呼び出す役割を担う。

1970年代のUNIXにおいて確立され、コマンド入力による対話的操作およびスクリプトによる処理自動化を可能にする。通常はカーネルとは独立して動作し、ファイル操作やプログラム実行などの処理を仲介する。転じて、特定の機能を包み込み外部との接点を提供するソフトウェアを指して「シェル」と呼ぶ場合もある。

概要

編集

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

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

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

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

歴史

編集

コマンドラインシェル

編集

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

編集

シェル自身が持つ機能に関係しており、シェル単体で処理が完結するコマンドが内部コマンドである。それに対し、他のプログラムにより実行されるコマンドが外部コマンドである。OSの外殻としてのシェルでは普通、外部コマンドを実行する機能は必須である。また、システムに異常がある場合、外部コマンドがほとんどあるいは全く使えなくなることもあるため、そういった場合に対処できるよう、外部コマンドで実装できるものでも内部コマンドが用意されることもある(Windowsのシェルは、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(GameMakerでのスクリプト言語)のシェル
  • irb – Rubyの対話版
  • JavaScript shell – この名前でJavaScriptの対話型実行を可能にするプログラムがいくつかある。[8]
  • PHPsh – PHP用シェル
  • Pythonの標準インタプリタはシェルモードでも起動可能
  • Wish(GUI)とtclsh(CLI) – Tcl/Tk用シェル。
  • Windows Script Host
  • 一部例外を除くTeX処理系 — 但し実行後すぐは“原稿読み取り態”という特殊な状態[注釈 1]にある為、\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 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

編集

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

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

編集

脚注

編集

注釈

編集
  1. ^ ファイル名を入力するとすぐにそのファイルの処理を開始する。これは引数を解釈できない(つまり$ tex foo.texというコマンドライン処理が行なえない)OS上で効率良く原稿を読み取らせることが目的だった。

出典

編集
  1. ^ British Computer Society (2005). The BCS glossary of ICT and computing terms. Pearson Education. p. 135. ISBN 0-13-147957-1. https://books.google.co.jp/books?id=g8Bds8ssYYgC&pg=PA135&dq=%22shell+is+a+piece%22+%22expert+system%22&hl=sv&redir_esc=y#v=onepage&q=%22shell%20is%20a%20piece%22%20%22expert%20system%22&f=false 
  2. ^ Tom Van Vleck (1995年2月5日). “Unix and Multics”. Multicians.org. 2012年8月14日閲覧。
  3. ^ Louis Pouzin (2000年11月25日). “The Origin of the Shell”. Multicians.org. 2012年8月14日閲覧。
  4. ^ V6 Thompson Shell Port - History”. V6shell.org. 2012年8月14日閲覧。
  5. ^ https://harmful.cat-v.org/software/csh
  6. ^ https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html#tag_20_117_09
  7. ^ developer.mozilla.org/en/Setting_up_extension_development_environment
  8. ^ developer.mozilla.org/en/JavaScript_shells JavaScript shells

関連項目

編集

📚 Artikel Terkait di Wikipedia

C Shell

C shell(シーシェル、csh)は、カリフォルニア大学バークレー校の大学院生だったビル・ジョイが1970年代後半に開発したUnixシェルである。1978年にジョイが配布を始めた 2BSD という BSD UNIX のリリースで広く配布されることになった。他にアイデアやコードに貢献した者としては

シェルソート

edu/cscd300/Topic/AdvSorting/p30-shell.pdf.  ^ a b c Knuth, Donald E. (1997). “Shell's method”. The Art of Computer Programming. Volume 3: Sorting and

和製英語

decrease」という。 次に既存の語形を省略して作ったものを含めることもある。「ワープロ (word processor)」「パソコン (personal computer)」「エンゲージリング (engagement ring)」のようなものである。 広い解釈では、形はほぼ同じものが英語にあっても、意味が英語と

通信プロトコル

Protocol Gnutella ピア・ツー・ピアのファイル交換プロトコル DNS Domain Name System SSH Secure SHell NTP Network Time Protocol Gopher World wideな文書共有システム Finger 登録ユーザのプロファイル情報の取得

Open Cascade テクノロジー

Shell)など)、ソリッドモデルを表現するクラスおよびソリッドモデルを用いて、ブーリアン演算(空間領域構成法)を行なったり、容積計算、重心位置計算、表面積計算を行なったりするといった、三次元幾何学計算で用いる概念、計算をサポートしている。 OCCTの元となったCAS.CADE("Computer

Berkeley Software Distribution

Distributionは、1977年から1995年までカリフォルニア大学バークレー校 (University of California, Berkeley, UCB) の Computer Systems Research Group (CSRG) が開発・配布したソフトウェア群、およびUNIXオペレーティングシステム (OS)

コンピュータ言語

Lisp、Google Apps Script、Groovy、JavaScript、Lua、Perl、PHP、Python、REXX、Ruby、PowerShell、SKILL、Tcl、TypeScript、VBScript などがある。 多くのプログラミング言語はテキストのソースコードでプログラムが記述さ

Microsoft Azure

Resource Manager テンプレート Azure Service health Azure Site Recovery Cloud Shell Azure Cost management Azure Billing Azure Log Analytics Microsoft Azure