Unixシェル

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ
Mac OS X Leopard [1]デスクトップのtcshおよびshシェルウィンドウ

Unixシェルは、Unixライクなオペレーティングシステムにコマンドラインユーザーインターフェイス提供するコマンドラインインタープリターまたはシェルです。シェルは、対話型のコマンド言語スクリプト言語の両方であり、オペレーティングシステムが、シェルスクリプトを使用してシステムの実行を制御するために使用します[2]

ユーザーは通常、ターミナルエミュレーターを使用してUnixシェルと対話します。ただし、サーバーシステムでは、シリアルハードウェア接続またはSecureShellを介した直接操作が一般的です。すべてのUnixシェルは、ファイル名のワイルドカードパイピングヒアドキュメントコマンド置換条件テスト反復のための変数制御構造を提供します。

コンセプト

シェルという用語の最も一般的な意味は、ユーザーがコマンドを入力するために使用するすべてのプログラムを意味します。シェルは、基盤となるオペレーティングシステムの詳細を非表示にし、オペレーティングシステムのアプリケーションプログラミングインターフェイスの技術的な詳細を管理します。これは、そのオペレーティングシステムで実行されているプログラムが使用するオペレーティングシステムのレベルです。

Unixライクなオペレーティングシステムでは、ユーザーは通常、対話型セッション用のコマンドラインインタープリターを多数選択できます。ユーザーがシステムに対話的にログインすると、セッションの間、シェルプログラムが自動的に実行されます。ユーザーごとにカスタマイズできるシェルのタイプは、通常、ユーザーのプロファイル、たとえばローカルのpasswdファイル、またはNISLDAPなどの分散構成システムに保存されますただし、ユーザーは他の利用可能なシェルをインタラクティブに実行できます。

macOSのようなウィンドウシステムを備えたホストでは、一部のユーザーはシェルを直接使用しない場合があります。Unixシステムでは、シェルは歴史的に、ウィンドウシステムを起動し、ネットワークを構成し、他の多くの重要な機能を構成するプログラムを含む、システム起動スクリプトの実装言語でした。ただし、一部のシステムベンダーは、従来のシェルベースのスタートアップシステム(init )をsystemdなどのさまざまなアプローチに置き換えています。

初期のシェル

最初のUnixシェルは、ベル研究所Ken Thompsonによって作成され、1971年から1975年までUnixのバージョン1から6で配布さたThompsonシェルshでした。パイピング、 andを使用した単純な制御構造、ファイル名のワイルドカードなど、それ以降のすべてのUnixシェルに適用されます。現在は使用されていませんが、一部のAncientUNIXシステムの一部として引き続き使用できます。 ifgoto

これは、1965年にアメリカのソフトウェアエンジニアであるGlendaSchroederによって開発されたMulticsシェルをモデルにしています。SchroederのMulticsシェル自体は、RUNCOMプログラムのLouisPouzinがMulticsチームに示したものをモデルにしています。一部のUnix構成ファイル(たとえば、「。vimrc」)の「rc」サフィックスは、UnixシェルのRUNCOM祖先の残骸です。[1] [4]

PWBシェルまたはMasheyシェルshは、Thompsonシェルの上位互換バージョンであり、 John Masheyなどによって拡張され、1975年から1977年頃にProgrammer's WorkbenchUNIXで配布されました。特に大規模な共有コンピューティングセンターで、シェルプログラミングを実用的にすることに焦点を当てました。シェル変数(環境変数の前駆体)を追加しました、$ PATHに進化した検索パスメカニズムを含む)、ユーザーが実行可能なシェルスクリプト、および割り込み処理。制御構造は、if / gotoからif / then / else / endif、switch / breaksw / endsw、およびwhile / end / break / continueに拡張されました。シェルプログラミングが普及するにつれて、これらの外部コマンドはパフォーマンスのためにシェル自体に組み込まれました。

しかし、初期のUnixシェルの中で最も広く分布し、影響力を持っていたのは、BourneシェルCシェルでした。両方のシェルは、拡張機能セットを備えた多くの派生シェルおよび類似シェルのコーディングベースおよびモデルとして使用されています。[5]

ボーンシェル

Bourneシェルshは、 BellLabsStephenBourneによる新しいUnixシェルでした[6] 1979年にUNIXバージョン7のシェルとして配布され、ヒアドキュメントコマンド置換、より一般的な変数、より広範な組み込み制御構造など、後のすべてのUnixシェルに共通と見なされる残りの基本機能が導入されました。ブロックの終わりをマークするための逆キーワードの使用を含む言語は、ALGOL68の影響を受けました。[7] 従来、Bourneシェルプログラム名はshであり、Unixファイルシステム階層でのパスは/ bin / shただし、さまざまな改善や追加機能を備えた、互換性のある類似の機能も多数用意されています。多くのシステムでは、shはこれらの選択肢の1 つへのシンボリックリンクまたはハードリンクである可能性があります。

POSIX標準では、標準シェルを、Bourneシェルの拡張バージョンであるKornシェルの厳密なサブセットとして指定してますユーザーの観点からは、Bourneシェルは、その特徴的なデフォルトのコマンドラインプロンプト文字であるドル記号($)によってアクティブになると、すぐに認識されました。

Cシェル

Cシェルcsh制御構造と式の文法を含むCプログラミング言語でモデル化されました。これは、カリフォルニア大学バークレー校の大学院生としてビル・ジョイによって書かれ、 BSDUnixで広く配布されました。[9]

Cシェルは、履歴編集のメカニズム、エイリアスディレクトリスタックチルダ表記cdpathジョブ制御パスハッシュなど、インタラクティブな作業のための多くの機能も導入しました多くのシステムでは、cshは、Joyの元のバージョンの改良版であるTENEX Cシェル(tcsh)へのシンボリックリンクまたはハードリンクである可能性があります。cshのインタラクティブ機能は他のほとんどのシェルにコピーされていますが、言語構造は広くコピーされていません。唯一の類似したものはハミルトンCシェルです、Nicole Hamiltonによって書かれ、1988年にOS / 2で、1992年からWindowsで最初に配布されました。 [10]

構成ファイル

シェルは、さまざまな状況で構成ファイルを読み取ります。これらのファイルには通常、シェルのコマンドが含まれており、ロード時に実行されます。これらは通常、 $ PATHなどの実行可能ファイルの検索に使用される重要な変数や、シェルの動作と外観を制御するその他の変数を設定するために使用されます。このセクションの表は、一般的なシェルの構成ファイルを示しています。[11]

sh ksh csh tcsh bash zsh
/etc/.login ログインする ログインする
/etc/csh.cshrc はい はい
/etc/csh.login ログインする ログインする
〜/ .tcshrc はい
〜/ .cshrc はい はい[a]
〜/ etc / ksh.kshrc int。
/etc/sh.shrc int。[b]
$ ENV(通常は〜/ .kshrc)[12] int。[c] [d] int。 int。[e]
〜/ .login ログインする ログインする
〜/ .logout ログインする ログインする
/ etc / profile ログインする ログインする ログインする ログイン[f]
〜/ .profile ログインする ログインする ログイン[g] ログイン[f]
〜/ .bash_profile ログイン[g]
〜/ .bash_login ログイン[g]
〜/ .bash_logout ログインする
〜/ .bashrc int。+ n / login
/ etc / zshenv はい
/ etc / zprofile ログインする
/ etc / zshrc int。
/ etc / zlogin ログインする
/ etc / zlogout ログインする
〜/ .zshenv はい
〜/ .zprofile ログインする
〜/ .zshrc int。
〜/ .zlogin ログインする

説明:

  • 空白は、ファイルがシェルによってまったく読み取られないことを意味します。
  • 「yes」は、ファイルが起動時に常にシェルによって読み取られることを意味します。
  • 「ログイン」とは、シェルがログインシェルの場合にファイルが読み取られることを意味します。
  • 「n / login」は、シェルがログインシェルでない場合にファイルが読み取られることを意味します。
  • 「int」シェルがインタラクティブである場合にファイルが読み取られることを意味します。
  1. ^ 〜/ .tcshrcが見つからない場合のみ
  2. ^ BourneShellの新しいバージョンのみ
  3. ^ 「ユーザーポータビリティユーティリティオプション」をサポートするシステムで利用可能; 変数の値は絶対パスである必要があり、「ユーザーの実際の有効なユーザーIDまたは実際の有効なグループIDが異なる場合」は無視されます。[13]
  4. ^ $ ENVは、BourneShellの新しいバージョンでは$ HOME /.shrcです。
  5. ^ shと同じ動作ですが、 sh(bash 2+)として呼び出された場合、、POSIX互換モード(オプション--posixまたは-o posixを使用)で明示的に呼び出された場合のみです。[14]
  6. ^ a b sh / ksh互換モードのみ(bash、sh、kshとして呼び出された場合)
  7. ^ a b c〜 / .bash_profile〜/ .bash_login〜/ .profileの順で最初に読み取り可能なファイルまた、 shとして呼び出された場合は〜/ .profileのみ、POSIX互換モードで明示的に呼び出された場合は少なくともBash 4.2以降(オプション--posixまたは-o posixを使用)

その他のシェル

BourneシェルまたはCシェルから派生していないUnixシェルの概念のバリエーションには、次のものがあります。[15]

も参照してください

参考文献

  1. ^ a b トム・ヴァン・ヴレック(1995-02-05)。「UnixとMultics」Multicians.org 2012年8月14日取得
  2. ^ Bourne、Stephen R.(1983年10月)。「Unixシェル」BYTEp。187 2015年1月30日取得
  3. ^ 「V6トンプソンシェルポート-歴史」V6shell.org 2012年8月14日取得
  4. ^ ルイ・プザン(2000-11-25)。「シェルの起源」Multicians.org 2012年8月14日取得
  5. ^ ニコライ・ベズロウコフ(2015-08-13)。「Unixシェルの歴史の紹介」ソフトパノラマ2016年8月21日取得
  6. ^ 「ボーンシェル、またはsh」スティーブボーンへのインタビューComputerworld2009-03-05 2016年8月21日取得
  7. ^ " Re:後期ブルーマーの再訪" 2014年9月20日取得
  8. ^ Korn、David G.(1994年10月26日)、「ksh-拡張可能な高級言語」USENIX 1994超高級言語シンポジウムの議事録、USENIX Association 、 2015年2月5日取得、新しいスクリプト言語を発明する代わりに、Bourneシェルを変更し、必要に応じて組み込みコマンドを追加して、フォーム入力システムを構築しました。
  9. ^ Harley Hahn、 HarleyHahnのUnixおよびLinuxガイド
  10. ^ 「Windowsリリースノート4.0用のハミルトンCシェル」2014年9月20日取得
  11. ^ 「異なるUNIXシェル」unixnote.com。2010 2016年8月21日取得
  12. ^ SCO Unix Group、 SCO Unixware 7のドキュメント、2004年4月22日、2012年10月18日取得
  13. ^ 「シェルコマンド言語」opengroup.org 2015年6月15日取得
  14. ^ 「Bashリファレンスマニュアル:Bashスタートアップファイル」gnu.org 2015年6月15日取得
  15. ^ 「FreeBSDポート:シェル」Freebsd.org。2014-03-30 2014年4月5日取得