UNIXの内部構造をみると、核となる部分はカーネル(Kernel) と呼ばれ、マルチタスクやファイルシステム、仮想記憶、入出力など、OSにとって重要な機能を司っている。ユーザーはカーネルを直接操るのではなく、あらかじめ用意されたインターフェイスを通して、カーネルに対してコマンドの実行を要求する。このインターフェイスの部分が"シェル"(shell) と呼ばれている。ユーザーからみると"シェルはUNIXを覆う貝殻のようなもので、内部構造を気にせずに利用できる"という意味がこめられている。
現在利用できるもっとも古いシェル。AT&Tのベル研究所で開発され、開発者の 1人であるSteven Bourne 氏にちなんで名付けられた。ほとんどすべてのUNIXで 利用できる標準的なシェルである。もっとも標準的なシェルであるため、シェルスクリプトの作成には Bシェル がよく使われる。
カリフォルニア大学バークレイ校のWilliam Joy氏が中心になって開発したシェルで、C言語に似た構文をもつのでこの名前が付けられている。Bシェルとくらべて、ヒストリー機能やジョブ制御、エイリアスなどの機能が付加されているため、対話形式で使用する場合に便利である。
MIT(マサチューセッツ工科大学)のBrian Fox氏が作成したシェルで、現在、GNUソフトウェアの一部として配布されている。bashは、本来 Bシェル において貧弱であったユーザーインターフェイスの機能を強化するため、ヒストリー機能、エイリアスなどが追加されている。
TC シェル :tcsh ;Cシェルの発展版
Korn シェル :ksh
Visual シェル :vsh
$ set
$ finger username
$ grep '^username:' /etc/passwd
$ chsh ( または ypchsh )次にログインするときには、変更したシェルが起動される。
多くのシェルは、lsやktermなどの独立したコマンドをコマンドとして実行するだけでなく、あらかじめシェルのプログラムに組み込まれているコマンドをいくつか持っている。このようなコマンドは"組み込みコマンド"と呼ばれ、以下のようなものがある。
echo,set,unset,alias,history,cd ,.....
☆helpコマンドを利用することによって簡単な組み込みコマンドの説明を得ることができる。(helpで説明できる)組み込みコマンドの一覧
$ help
組み込みコマンドの説明
$ help コマンド名
bashは、シェル自身の動作を定義する変数を持っている。シェルが内部で保持している変数を"シェル変数"と言う。
・現在設定されているシェル変数を見るには、set と打ち込む。例)プロンプトを変える。
$ PS1="\u " miumiu PS1="\d " Fri Nov 26 PS1="\s-\v\$ " bash-2.01$ |
シェル変数はシェルの中だけで使われる変数であるが、UNIXのコマンド全般に影響を与える変数として"環境変数"がある。(シェル変数より有効範囲が広い)
・現在設定されている環境変数を見るには、printenv と打ち込む。例)"yuji"という環境変数を値"bar"で設定する。
$ export yuji=bar $ printenv yuji bar $ |
*シェル変数、環境変数には、あらかじめ使い方が決められたものがあり、
注意して変更しなければならない。
コマンド入力で、複数のファイル名を"ある規則にしたがってまとめて表す"という試みのために用いられる文字のことを "メタキャラクタ" (ワイルドカード)と言う。メタキャラクタを用いると、タイプする文字数を減らすことができるので、効率的に入力が行える。
* | 任意の文字列を表す |
? | 任意の1文字を表す。?? は任意の2文字になる。 |
[ ] | [ ]内に含まれる文字にマッチする。[a-c]*はabcのいすれかで始まる任意の文字列を表す。 |
{ } | { }内に含まれる文字列にマッチする。test.{pl,gif,f}は、test.pl test.gif test.f と入力したことになる。 |
あるコマンドに対して、別名をつけたいときに用いる。
alias 別名=コマンド名
alias 別名='オプション付きのコマンド名'
お薦め) rm -i を rm と変更する。
bashでは、1つのシェルで複数のジョブを切替えながら、並行して作業を行うことができる。この機能をジョブ制御という。
通常シェルでコマンドを実行すると、そのコマンドが終了するまで次のコマンドを 実行することが出来ない。このようなジョブのことを"フォアグランドジョブと言う。
これに対して、コマンドの最後に & をつけると、シェルはコマンドの終了を待たずに、すぐ次のコマンドを受け付ける。このように & で指定されたジョブのことを"バックグランドジョブ"と言う。バックグランドジョブとして起動しているジョブを調べるには、jobs というコマンドを打ち込めばよい。
一度フォアグランドジョブとして起動されたコマンドを バックグランドジョブとして起動し直すには、コマンド行で Ctrl-z(コントロールキーを押しながら z キーを押す)として、まずジョブを中断させる。
$ kterm & $ xclock ^Z <- Ctrl-z を押す [2]+ Stopped xclock |
次に jobs と打ち込み、ジョブを調べる。
$ jobs [1]- Running kterm & [2]+ Stopped xclock |
xclock の実行の前に kterm が実行されていたので、上のような表示になる。[ ]の中の数字はジョブの番号を表す。+は "current job"、- は"previous job"と呼ばれ、ジョブの切替え対象となる順番を表している。bg コマンドを用いると、フォアグランドジョブをバックグランドジョブにすることができる。(bgの後に %ジョブ番号と入力する。)
$ bg %2 [1]- Running kterm & [2]+ Running xclock & |
バックグランドジョブをフォアグランドジョブにするには、fgコマンドを用いる。 (ジョブ番号の指定の仕方は、bgコマンドと同じ)
$ fg %1 kterm |
Tabキー を押す
bashの補完機能は、シェル変数、ユーザー名、ホスト名も補完してくれる。
☆ bashの機能には、この他にも様々なものがあり、いろいろ知っていると便利です。☆
上の例で設定したシェル変数、環境変数、aliasコマンドで定義したコマンドの別名などは、ログアウトするとすべて無効になってしまう。このため、次にログインしたときは、(必要であれば)再度これらを設定し直さなければならない。
いつログインしても常に同じ(自分の好みの)環境でシェルを利用するには、ホームディレクトリにある設定ファイルを書き換えればよい。
○ .bash_profile
○ .bashrc
書き換えた設定ファイルを有効にするには、
・ いったんログアウトし、再度ログインするか、
例) ログイン時から、"catコマンド" を" miru " という別名にしておくには?(エイリアスを設定ファイルに追加する)
1 ホームディレクトリにある .bashrc というファイルをemacsなどのエディタを使って開く。*設定ファイルの中に不正な記述があると、それ以降に記述したコマンドが実行されず、思いどおりの環境が作れなくなってしまうので注意が必要です。*
最終更新日: 2001/07/07 (三浦 優司) | Copyright © 2000 EPnetFaN |