Unix シェル

Mac OS X Leopard [1]デスクトップ上の tcsh および sh シェル ウィンドウ

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

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

コンセプト

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

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

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

初期のシェル

最初の Unix シェルはベル研究所Ken Thompsonによって作成されたThompson シェルshで、1971 年から 1975 年にかけて Unix のバージョン 1 ~ 6 とともに配布されました。[3]現代の基準からすると初歩的ですが、一般的な基本機能の多くが導入されました。これは、パイピング、を使用した単純な制御構造、およびファイル名のワイルドカードを含む、以降のすべての Unix シェルに適用されます。現在は使用されていませんが、一部の古代 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シェルshは、ベル研究所のStephen Bourneによって作成された新しい Unix シェルです。 [6] 1979 年に UNIX バージョン 7 のシェルとして配布され、ヒア ドキュメントコマンド置換、より汎用的な変数、より広範な組み込み制御構造など、その後のすべての Unix シェルに共通すると考えられる残りの基本機能が導入されました。ブロックの終わりをマークするための反転キーワードの使用を含むこの言語は、ALGOL 68の影響を受けています。[7] 伝統的に、Bourne シェル プログラム名はshで、Unix ファイル システム階層内のそのパスは/bin/shです。ただし、さまざまな改良や追加機能を備えた、互換性のある類似品も多数提供されています。多くのシステムでは、 sh は次のいずれかの代替リンクへの シンボリック リンクまたはハード リンクである可能性があります。

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

Cシェル

Cシェルcsh、制御構造と式文法を含め、C プログラミング言語をモデルにしています。これは、カリフォルニア大学バークレー校の大学院生であるBill Joyによって作成されBSD Unixとともに広く配布されました。[9] [より良いソースが必要]

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

設定ファイル

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

設定ファイル しー キシュ csh tcsh バッシュ zsh
/etc/.login ログイン ログイン
/etc/csh.cshrc はい はい
/etc/csh.login ログイン ログイン
~/.tcshrc はい
~/.cshrc はい はい[a]
~/etc/ksh.kshrc 整数。
/etc/sh.shrc 整数。[b]
$ENV (通常は~/.kshrc ) [12] 整数。[ CD] 整数。 整数。[e]
~/.ログイン ログイン ログイン
~/.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 はい
~/.zプロファイル ログイン
~/.zshrc 整数。
~/.zログイン ログイン

説明:

  • 空白は、ファイルがシェルによってまったく読み取られないことを意味します。
  • 「はい」は、起動時にファイルが常にシェルによって読み取られることを意味します。
  • 「login」は、シェルがログインシェルの場合にファイルが読み取られることを意味します。
  • 「n/login」は、シェルがログイン シェルでない場合にファイルが読み取られることを意味します。
  • 「INT」シェルが対話型の場合にファイルが読み取られることを意味します。
  1. ^ ~/.tcshrcが見つからない場合のみ
  2. ^ Bourne Shell の新しいバージョンのみ
  3. ^ 「ユーザー ポータビリティ ユーティリティ オプション」をサポートするシステムで利用可能。変数の値は絶対パスである必要があり、「ユーザーの実際のユーザー 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. ^ ab sh/ksh 互換モードのみ (bash、sh、ksh として起動された場合)
  7. ^ abc ~/.bash_profile~/.bash_login~/.profileの順で最初に読み取り可能なファイルshとして呼び出された場合、または POSIX 互換モード ( --posixまたは-o posixオプションを使用)で明示的に呼び出された場合、少なくとも Bash 4.2 以降では~/.profileのみ

その他の貝殻

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

こちらも参照

参考文献

  1. ^ ab トム・ヴァン・フレック (1995-02-05)。 「Unix と Multics」。マルチシアンズ.org 2012 年 8 月 14 日に取得
  2. ^ ボーン、スティーブン R. (1983 年 10 月)。 「Unixシェル」。バイト。 p. 187 . 2015 年1 月 30 日に取得
  3. ^ “V6 トンプソンシェルポート - 歴史”. V6shell.org 2012 年 8 月 14 日に取得
  4. ^ ルイ・プザン (2000-11-25)。 「貝殻の起源」。マルチシアンズ.org 2012 年 8 月 14 日に取得
  5. ^ ニコライ・ベズロウコフ(2015-08-13)。 「Unix シェルの歴史の紹介」。ソフトパノラマ。 2022-06-08 のオリジナルからアーカイブされました2016 年 8 月 21 日に取得
  6. ^ ボーン、スティーブン(2009-03-05)。 「プログラミング言語の AZ: Bourne シェル、または sh」 (インタビュー)。ハワード・ダーダによるインタビュー。コンピューターワールド2022-08-16 に取得
  7. ^ “Re:遅咲きの人々を再訪” . 2014 年9 月 20 日に取得
  8. ^ Korn, David G. (1994 年 10 月 26 日)、「ksh - An Extensible High Level Language」、USENIX 1994 Very High Level Languages Symposium の議事録、USENIX Association 、 2015 年2 月 5 日取得新しいスクリプト言語を発明する代わりにでは、Bourne シェルを変更し、必要に応じて組み込みコマンドを追加して、フォーム入力システムを構築しました。
  9. ^ Harley Hahn、Harley Hahn の Unix および Linux ガイド: Unix/Linux タイムライン。
  10. ^ "Windows 用ハミルトン C シェル リリース ノート 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. ^ 「シェルコマンド言語」.オープングループ.org 2015 年6 月 15 日に取得
  14. ^ "Bash リファレンス マニュアル: Bash 起動ファイル". gnu.org 2015 年6 月 15 日に取得
  15. ^ "FreeBSD ポート: シェル". Freebsd.org。 2014年3月30日。 2021年1月12日のオリジナルからアーカイブ2014 年 4 月 5 日に取得
「https://en.wikipedia.org/w/index.php?title=Unix_shell&oldid=1181033877#Configuration_files」から取得