【シェルについて】


                 このHPはシェルについてまとめたもので す。


1-1 シェルについて

Linuxという言葉は厳密 には、OSの中核であ るカーネルの部分を指している。ユーザーが入力したコマンドをカーネルに伝え たり、コマンドの実行部分をカーネルから受け取って表示 したりするユーザーインターフェイス部分を処理するのは 、『シェル』と呼ばれるプログラム。

ユーザーは、シェルに対し コマンドを入力し、シェルが表示する結果を見ている。シ ェルが受け付けたコマンドの処理をLinuxカーネルに依頼し 、カーネルが返す結果シェルが受け取って表示する。






シェルにはいくつか種 類がある。Linuxの種類によって利用できるシェルは異なるが、代表的なものは以下のものがある。







Linuxでは主にBシェルを改良した『bash』と呼 ばれるシェルプログラムが利用されており、デフォルトのシェルとしてbashシェルが使え るようになっている。






1-2 ログインシェル

シェルは、ログインした時に自動的に動く。これをログインシェルと呼 んでいる。ログインシェルが動く からこそ、プロンプトが表示されコマンドが入力できる。

ユーザーごとのログインシェルは、/etc/passwdファイルに記述されている。次に示すのは/etc/passwdファイルの一部だが、ユーザー「suzuki」のログインシェルはbashになっている。(最後のフィールド)。










なお、ログインシェルとしてどの種類のシェルが動くかは、システム管理者がユーザIDを登録するときに決めている。
Linuxの場合,一般的にログイン・シェルとしてBashシェルが設定される。
bashであれば、/bin/bash が起動される。
bashの設定ファイルは以下のものがある。






ユーザーがログインすると、標準では次の順序で設定ファイルが実行される。


【ログインシェルの設定順序】

@/etc/profileがあれば実行

A~/.bash_profile、~/.bash_login、~/.profileのうち最初に見つかったものを実行する。
※Aのファイルの中から、~./bashrcを呼び出している。

B~/.profile_logoutがあれば実行して終了



■一時使用シェルの設定

ログインシェルではなく、一時的に使用する対話的シェルとして起動されたとき、つまりユーザーがコマンドラインに「bash」と入力したときなどは、次の設定ファイルが実行される。

【一時起動シェルの設定順序】

~/.bashrcを実行





1-3コマンドラインの構成要素とコマンドの実行


bashシェルを通してLinuxのカーネルに コマンドを実行させるには、コマンドラインに次の様な 形式で、コマンド名やオプション、引数を指定する。




冒頭の「プロンプト」はシェルがコマンドを受け付けられる 状態であることをユーザーに伝えるために表示される文字列。
一般的な環境では、一般ユーザーアカウントでログインした 場合は「$」が、スーパーユーザー(root)アカウントでログインした場合は「♯」が表示されるように設定されている。


次のコマンドには、実行したいプログラムやスクリプトの ファイル名を指定する。 例では、ファイルの情報を表示するlsコマンドを 指定する。

その『オプション』には、コマンドの振る舞いを指示するスイッチ を『-』に続けて指定する。例では、lオプションを指定している。


最後の「引数」は、コマンドに与えるパラメータ。例えば、テキストファイルを処理するコマンドで 、入力ファイルのファイル名を指定するために使用する。 例では、/etc/rc.dというディレクトリ名を指定している。







1-4 シェル変数と環境変数

bashシェルには、任意の文字列を一時的に記憶させることができる。そしてこの文字列を記憶する領域の事を「変数」という。
シェルは、ユーザーとLinuxシステムとの対話をつかさどる。そのためには、ユーザーのホームディレクトリやログイン名など、ユーザーに関する情報を保持していなければならない。Linuxでは、このような情報は変数に保存される。

bashシェルで扱うことができる変数には、【シェル変数】、【環境変数】の2種類がある。




■シェル変数

シェル変数はある値を保持するもので、これを使うことにより、シェルの動き方や見え方を調整したり、あるいはシェルスクリプトの中でのプログラミングに使われる。
シェル変数の有効範囲は、その変数を定義したシェルのみになる。

シェル変数はコマンドラインからユーザーが設定することができる。また現在のシェルの内容を見ることができる。

★変数の設定

シェル変数は、以下の書式で設定する。

【書式】

[変数名]=[値]

次の例では、変数名「linux」に「lpic」という値を設定している。

linux=lpic

※変数を設定する際、=の左右にスペースは付けてはいけない。

設定した変数は、先頭に$をつけて$[変数名]で参照できる。以下では、上記で設定した変数を参照し、
echoコマンドで表示している。

echo $linux

lpic


★シェル変数の一覧表示

シェル変数一覧を見るときは、「set」コマンドを実行する。grepと組み合わせると特定の変数の設定状況を見ることができる。

「echo $変数名」では、変数の値を表示するが、setでは「変数名=値」の形式で表示される。

★シェル変数の削除

シェル変数が不要になった時は、「unset」コマンドで削除できる。


echo $linux(変数linuxの表示)

lpic

unset linux(変数linuxの定義を削除する)

echo $linux(登録されていないので表示されない)


◆組み込み変数

setコマンドを実行すると、ユーザーが設定した覚えはないのに、最初から用意されている変数がたくさん表示される。
これらはシェルの動作を左右する特別の役目を持つ変数。これを『組み込み変数』と呼んでいる。







◆コマンド検索パス(PATH)
シェル変数「PATH」には、コマンドを実行する際にシェルがコマンドの実体ファイルを探すディレクトリを指定する。
コマンドを実行する際に、シェルがコマンドの実体ファイルを探すディレクトリを指定する。
この変数には、シェルがコマンドを探すディレクトリを「:」区切りで連結した文字列が設定されている。


◆シェル変数PATHの内容

echo $PATH
/usr/local/bin:/user/bin:/usr/local/sbin:usr/sbin:/bin:/sbin

PATHには、通常はディストリビューションごとに適切な値がすでに設定されている。
しかし、個別にインストールしたアプリケーションや、自分で作成した独自のディレクトリをコマンド検索パスに含めたいときは、PATH変数の値を変更することで、コマンドをフルパスで実行する必要がなくなる。

Linuxでは自分で独自のコマンドを作成することができる。これらのコマンドを配置する場所としては、~(チルダ)/binというディレクトリがよく使われる。
そこで、次の様に設定すると、~(チルダ)/binをコマンド検索パスの最後に追加することができる。

PATH="$PATH:~(チルダ)/bin"

これで、~(チルダ)/binの下に配置したコマンドも、フルパスを指定せずにそのまま実行できるようになる。






■環境変数

環境変数とは、シェルの中から実行する様々なプログラムに情報を与えるために用いる。つまり、シェル変数はシェルの動作の制御のためだけに使用されるが、環境変数は、シェルだけでなく、その他のプログラムの動作制御にも使用する。


主なな環境変数は以下の通り



シェルからは様々なコマンドを起動するが、このうち実行ファイルとしてファイルシステム上に存在するコマンドを『外部コマンド』と呼ぶ。
これに対して、シェル自体に内蔵しているコマンドを『組み込みコマンド』と呼ぶ。

あるコマンドが外部コマンドか、組み込みコマンドかを判別するには、「type」コマンドが利用できる。

次の例では、setコマンドは組み込みコマンドであり、rmコマンドは/bin/rmというファイルとして存在するため外部コマンドであることがわかる。


●typeコマンドによる外部コマンドの判別

$ type set
set はシェル組み込み関数です

$ type rm
rm   は/bin/rmです。









定義されている環境変数を一覧表示するには、「env」コマンドまたは、「printenv」コマンドを使用する。
また、環境変数とシェル変数を両方表示したい場合は、「set」コマンドを使用する。


★環境変数の設定

環境変数を自分で設定するには、「exportコマンド」を利用する。
シェル変数は、新たに起動したbashからは参照できないが、exportコマンドでエクスポートすることで参照できるようになる。
exportコマンドの書式は以下のとおり。この場合も変数名の先頭に『$』記号はつけない。


【書式】<指定したシェル変数を環境変数にする>

export <シェル変数名>


以下に、シェル変数と環境変数の違いを確認してみる。


$ VAR=linux(VAR変数を定義)

$ echo $VAR(VAR変数をechoで確認)

linux(linuxが出力)

$ bash(bashを新たに起動)

$ echo $VAR(VAR変数をechoで確認)

(定義されていないため、何も出力されない)

$ exit(新たに起動したbashを終了)

$ export VAR(VAR変数をエクスポート)

$ bash(bashを新たに起動)

$ echo $VAR(VAR変数をechoで確認)

linux(新たに起動したbashでも「linux」と表示される)