Unix シェル

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

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

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

コンセプト

一般に、シェルは、テキスト コマンドに応答して他のプログラムを実行するプログラムです。洗練されたシェルは、名前付き変数、パラメーター リスト、または入力ソース を渡すことによって、他のプログラムが実行される環境を変更することもできます。

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

macOSやデスクトップLinux ディストリビューションなど、ウィンドウシステムを備えたオペレーティング システムでは、シェルを直接使用しないユーザーもいます。Unix システムでは、シェルは歴史的にシステム起動スクリプトの実装言語であり、ウィンドウ システムの起動、ネットワークの構成、その他多くの重要な機能を実行するプログラムが含まれます。ただし、一部のシステム ベンダーは、従来のシェルベースの起動システム ( init ) をsystemdなどの別のアプローチに置き換えています。

初期の砲弾

最初の Unix シェルはThompson シェルshベル研究所Ken Thompsonによって書かれ、1971 年から 1975 年にかけて Unix のバージョン 1 から 6 とともに配布されました。パイプ、およびを使用した単純な制御構造、およびファイル名のワイルドカードを含む、以降のすべての Unix シェルに。現在は使用されていませんが、 Ancient UNIXシステム の一部としてまだ利用できます。ifgoto

これは、1965 年にアメリカのソフトウェア エンジニアGlenda Schroederによって開発されたMulticsシェルをモデルにしています。Schroeder の Multics シェル自体は、Louis Pouzinが Multics チームに示したRUNCOMプログラムをモデルにしています。一部の Unix 構成ファイル (「.vimrc」など) の「rc」サフィックスは、Unix シェルの RUNCOM 系譜の名残です。[1] [4]

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

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

ボーンシェル

Bourne シェルshBell Labs のStephen Bourneによる新しい Unix シェルです。[6] 1979 年に UNIX バージョン 7 のシェルとして配布され、ヒア ドキュメントコマンド置換、より一般的な変数、より広範な組み込み制御構造など、後のすべての Unix シェルに共通であると考えられる残りの基本機能が導入されましたブロックの終わりを示す逆のキーワードの使用を含む言語は、ALGOL 68の影響を受けました。[7] 伝統的に、Bourne シェル プログラム名はshであり、Unix ファイル システム階層でのそのパスは/ビン/shしかし、さまざまな改善や追加機能を備えた互換性のある類似製品も数多く提供されています。多くのシステムでは、sh は次のいずれかへのシンボリック リンクまたはハード リンクである場合があります。

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

C シェル

C シェル( csh ) は、制御構造や式の文法など、C プログラミング言語をモデルにしています。カリフォルニア大学バークレー校の大学院生だったBill Joyによって書かれ、 BSD Unixとともに広く配布されました。[9]

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

構成ファイル

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

構成ファイル ksh csh tcsh バッシュ zsh
/etc/.login ログインする ログインする
/etc/csh.cshrc はい はい
/etc/csh.login ログインする ログインする
~/.tcshrc はい
~/.cshrc はい はい[a]
~/etc/ksh.kshrc 整数。
/etc/sh.shrc 整数。[b]
$ENV (通常~/.kshrc ) [12] 整数。[ハ] [ニ] 整数。 整数。[へ]
~/.login ログインする ログインする
~/.logout ログインする ログインする
/etc/プロファイル ログインする ログインする ログインする ログイン[f]
~/.profile ログインする ログインする ログイン[g] ログイン[f]
~/.bash_profile ログイン[g]
~/.bash_login ログイン[g]
~/.bash_logout ログインする
~/.bashrc int.+n/ログイン
/etc/zshenv はい
/etc/zprofile ログインする
/etc/zshrc 整数。
/etc/zlogin ログインする
/etc/zlogout ログインする
~/.zshenv はい
~/.zprofile ログインする
~/.zshrc 整数。
~/.zlogin ログインする

説明:

  • 空白は、ファイルがシェルによってまったく読み取られないことを意味します。
  • 「yes」は、ファイルが起動時にシェルによって常に読み取られることを意味します。
  • "login" は、シェルがログイン シェルの場合にファイルが読み取られることを意味します。
  • 「n/login」は、シェルがログイン シェルでない場合にファイルが読み取られることを意味します。
  • 「イント」シェルが対話型の場合、ファイルが読み取られることを意味します。
  1. ^ ~/.tcshrcが見つからない場合のみ
  2. ^ Bourne Shell の新しいバージョンのみ
  3. ^ 「User Portability Utilities オプション」をサポートするシステムで利用可能。変数の値は絶対パスでなければならず、「ユーザーの実ユーザー ID と実効ユーザー ID、または実グループ ID と実効グループ ID が異なる場合」は無視されます。[13]
  4. ^ $ENV、新しいバージョンの Bourne Shell では$HOME/.shrc です。
  5. ^ shと同じ動作ですが、 shとして呼び出された場合(bash 2+)、または bash 4.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のみ、または少なくとも Bash 4.2 以降では、POSIX 互換モードで明示的に呼び出された場合 (オプション--posixまたは-o posixを使用)

その他のシェル

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

も参照

参考文献

  1. ^ a b Tom Van Vleck (1995-02-05). 「Unix と Multics」 . Multicians.org 2012 年8 月14 日閲覧
  2. ^ ボーン、スティーブン R. (1983 年 10 月)。「Unix シェル」 . バイトp。187 . 2015年 1 月 30 日閲覧
  3. ^ "V6 トンプソン シェル ポート - 歴史" . V6shell.org . 2012 年8 月14 日閲覧
  4. ^ Louis Pouzin (2000-11-25). 「貝殻のはじまり」 . Multicians.org 2012 年8 月14 日閲覧
  5. ^ ニコライ・ベズロウコフ(2015-08-13). 「Unix シェルの歴史の紹介」 . ソフトパノラマ。2022-06-08にオリジナルからアーカイブ2016 年8 月 21 日閲覧
  6. ^ ボーン、スティーブン(2009-03-05). 「プログラミング言語のAZ: Bourneシェル、またはsh」 (インタビュー)。ハワード・ダーダによるインタビュー。コンピューターワールド2022年8月16日閲覧
  7. ^ Re: 遅咲き再訪. 2014年 9 月 20 日閲覧
  8. ^ Korn, David G. (1994 年 10 月 26 日)、「ksh - An Extensible High Level Language」Proceedings of the USENIX 1994 Very High Level Languages Symposium、USENIX Association 、 2015 年2月 5 日検索、新しいスクリプト言語を発明する代わりに、必要に応じて組み込みコマンドを追加し、Bourne シェルを変更してフォーム入力システムを構築しました。
  9. ^ Harley Hahn, Harley Hahn's Guide to Unix and Linux .
  10. ^ "Hamilton C shell for Windows Release Notes 4.0" . 2014年 9 月 20 日閲覧
  11. ^ "さまざまな UNIX シェル" . unixnote.com。2010. 2016-04-03のオリジナルからのアーカイブ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。2021-01-12にオリジナルからアーカイブ2014 年4 月 5 日閲覧