シェル(shell)について

シェル(shell)について | qazqaz noteシェルとは、ユーザーが入力したコマンドを解釈してカーネルに処理を依頼するためのアプリケーション。通常、シェルは各ユーザがログインする 度に起動され、ログアウトの際に終了する。ログインすると、端末上にプロンプトを表示する。プロンプトとはユーザへコマンドの入力を促す記号で、例えば “qazqaz$” のように表示される。UNIXライクなOSではシェルがユーザプログラムとして実装されており、好きなシェルを選んで使用することができる。

シェルの機能

(1) コマンドの解釈・実行(コマンドインタプリタ)

シェルの一番基本的な機能。ユーザがキーボードから入力したコマンドの解釈を行い、コマンドとして入力された名前のプログラムを探し出して起動する。このようなコマンドの逐次解釈を行うプログラムをコマンドインタプリタと言います。この機能はどのシェルも持っています。

lsコマンドやcpコマンドなどは、プログラムファイルが存在しシェルはそれを探し出して起動する。中には、pwdコマンドやcdコマンドのように独立したファイルではなくシェル内部に組み込まれたコマンドもある。こういったコマンドはシェルコマンドと呼ばれる。

(2) コマンド履歴の記録(ヒストリ)

入力・実行されたコマンドの履歴を記録する機能。history コマンド(シェルコマンド)を利用して過去に実行したコマンドとその実行時刻を確認することができる。

(3) コマンド入力・編集の支援

ヒストリ機能を利用して、過去に実行したコマンドをコマンドライン上に再度呼び出すことができる。過去に入力した長いファイル名などを再度入力する手間が省ける。

  • ひとつ前のコマンドを呼び出す  Ctrl-p または上矢印 (↑)
  • ひとつ次のコマンドを呼び出す  Ctrl-n または下矢印 (↓)
(4) リダイレクトとパイプ

リダイレクトは、コマンドの出力をファイルに書き出したり、既にあるファイルに書いてある内容をキーボード入力の代わりに利用する機能。

リダイレクトの書式

コマンド > ファイル名   // 新しくファイルを作成してコマンドの出力を保存
コマンド >> ファイル名  // 既存のファイルの末尾にコマンドの出力を追加
コマンド < ファイル名   // ファイルの内容をコマンドに入力

パイプは、あるコマンドの出力を別のコマンドに入力する機能。このパイプを利用することで、複数のコマンドを組み合わせた処理を簡単に行えます。パイプを複数使えば、幾つものコマンドを連携させて実行させることも可能。

パイプの書式

コマンド1 | コマンド2    // コマンド1の標準出力をコマンド2の標準入力とする
(5) メタキャラクタの解釈

シェルでは、*(アスタリスク)や?(クエスチョンマーク)は特別な意味で扱われ解釈される。これらをメタキャラクタと呼ぶ。*(アスタリス ク)は任意の長さ(長さ0を含む)を持つ文字列を表す。例えば、a* と書けば「aで始まる文字列(aのみを含む)」と解釈される。この * は特別にワイルドカードとも呼ばれる。たくさんのファイル名を一度で扱いたい場合などに便利。?(クエスチョンマーク)は任意の1文字を表す。例えば、 a??.txt と書けば、「aで始まって2文字続いた後に.txt で終わる文字列」と解釈される。

(6) その他の機能
  • 環境の設定: シェル変数や環境変数を用いてユーザ独自の環境を設定できる
  • ジョブ管理: ジョブとは、コマンド行より1行で入力された処理のこと。コマンド行の後に&を入力すると、バックグラウンドジョブとして実行することができる。これをうまく利用することで、効率よく作業することができる。
  • 連続処理: 複数のコマンドを;でつないで入力して一度に実行することで、コマンドを連続して処理させることができる。ただしパイプとは違い、前のコマンドの出力を次のコマンドに渡すわけではない。
  • コマンドファイル(シェルスクリプト): コマンドファイルは一連のコマンドを書き込んだファイルであり、それを呼び出すと一連の操作をキーボードから入力する代わりに、ファイルの記述内容を順次 解釈して実行します。if 文や while 文など制御文が利用でき、C言語で行うような複雑な処理もプログラムとして作成することが可能。

シェルの種類

  • sh (Bourne shell): 現在利用できるもっとも古いシェル。 AT&T のベル研究所で開発され、 開発者の1人であるSteven Bourne 氏にちなんで名付けられた。ほとんど全てのUNIXで利用できる標準的なシェルであるため、シェルスクリプトの作成にはよく用いられる。
  • csh (c shell): FreeBSDの標準シェル。シェルスクリプトを書くときの構文がC言語に似ていることからこの名前が付けられている。 Bourneシェルに比べ、ヒストリー機能やジョブ制御、 エイリアスなどの機能が付加されており、対話形式で使用する場合に便利である。
  • bash (Bourne Again shell): Linuxの標準シェル。その名前は前身のUnixシェルであるBourneシェルとborn again(生まれ変わり)に引っかけた洒落である。コマンド文法はかなりの部分をBourneシェルと後方互換性を持たせている。Bourneシェルにおいて貧弱であった、 ユーザーインターフェイスとしての機能を強化するため、 ヒストリー機能やジョブ制御、 エイリアスなどの機能などが追加されている。
  • その他: csh の拡張版である tcsh(TC shell)や、zsh、ksh などがあります。

現在使用しているシェルの確認方法

# printenv SHELL
/usr/local/bin/bash

シェルの変更方法

% printenv SHELL                  // 変更前のシェルを確認
/bin/csh                          // cshだということがわかる
% chsh -s /usr/local/bin/bash     // chshコマンドを実行してシェルをbashに変更
Password:
chsh: user information updated
% exit                            // ログインし直すと変更後のシェルが起動される
$ printenv SHELL                  // 変更後のシェルを確認
/usr/local/bin/bash               // シェルがbashに変更されたことがわかる

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください