EP Net Fan
1999年11月26日座学編レジュメ

bash(Bourne Again Shell)入門
(最低限UNIX)


1.シェルって何?

UNIXの内部構造をみると、核となる部分はカーネル(Kernel) と呼ばれ、マルチタスクやファイルシステム、仮想記憶、入出力など、OSにとって重要な機能を司っている。ユーザーはカーネルを直接操るのではなく、あらかじめ用意されたインターフェイスを通して、カーネルに対してコマンドの実行を要求する。このインターフェイスの部分が"シェル"(shell) と呼ばれている。ユーザーからみると"シェルはUNIXを覆う貝殻のようなもので、内部構造を気にせずに利用できる"という意味がこめられている。

  • シェルのたとえ話



    2.主なシェル


  • Bourne シェル(Bシェル) : sh

    現在利用できるもっとも古いシェル。AT&Tのベル研究所で開発され、開発者の 1人であるSteven Bourne 氏にちなんで名付けられた。ほとんどすべてのUNIXで 利用できる標準的なシェルである。もっとも標準的なシェルであるため、シェル ・スクリプトの作成には Bシェル がよく使われる。

  • C シェル :csh

    カリフォルニア大学バークレイ校のWilliam Joy氏が中心になって開発したシェル で、C言語に似た構文をもつのでこの名前が付けられている。Bシェルとくらべて 、ヒストリー機能やジョブ制御、エイリアスなどの機能が付加されているため、 対話形式で使用する場合に便利である。

  • BASH(Bourne Again SHell) :bash

    MIT(マサチューセッツ工科大学)のBrian Fox氏が作成したシェルで、現在、GNUソ フトウェアの一部として配布されている。BASHは、本来 Bシェル において貧弱で あったユーザーインターフェイスの機能を強化するため、ヒストリー機能、エイリ アスなどが追加されている。

  • その他のシェル

    • TC シェル :tcsh ;Cシェルの発展版
    • Korn シェル :ksh
    • Visual シェル :vsh
  • 現在利用されているシェルは、基本的に Bシェルの流れをくむものとCシェルの流れをくむものの2種類があり、この2つの利用方法を知っておくことで多くのシェルを利用できることになる。


    3.自分のシェルは何?(シェルの確認と変更)


  • 現在、自分がどのシェルを使っているか調べる方法

    • set
    • finger ログイン名
    • grep '^ログイン名:' /etc/passwd

  • 自分のログインシェルの変更方法

    • chsh ( または ypchsh )

    次にログインするときには、変更したシェルが起動される。
    (管理者の設定により無理な場合がある。)


    4.bash の機能


  • シェルの組み込みコマンド
  • 多くのシェルは、lsやktermなどの独立したコマンドをコマンドとして実行するだけでなく、あらかじめシェルのプログラムに組み込まれているコマンドをいくつか持っている。このようなコマンドは"組み込みコマンド"と呼ばれ、以下のようなものがある。

    echo,set,unset,alias,history,cd ,.....

    ★helpコマンドを利用することによって簡単な組み込みコマンドの説明を得ることができる。

    ・help                (helpで説明できる)組み込みコマンドの一欄
    ・help コマンド名      組み込みコマンドの説明
    

  • シェル変数
  • Bashは、シェル自身の動作を定義する変数を持っている。シェルが内部で保持している変数を"シェル変数"と言う。

  • 現在設定されているシェル変数を見るには、set と打ち込む。
  • シェル変数の設定と変更は、"="を使う。(シェル変数名=シェル変数の値)
  • シェル変数の値を調べるには、echo $変数名 と打ち込む。
  • シェル変数の削除は、unset コマンドを使う。(unset シェル変数名)

    例)プロンプトを変える。

    bash-2.01$ PS1="\u "         (\:バックスラッシュ)
    miumiu PS1="\d "
    Fri Nov 26 PS1="\s-\v\$ "
    bash-2.01$ ■
    

  • 環境変数
  • シェル変数はシェルの中だけで使われる変数であるが、UNIXのコマンド全般に影響を与える変数として"環境変数"がある。(シェル変数より有効範囲が広い)

  • 現在設定されている環境変数を見るには、printenv と打ち込む。
  • 環境変数の設定と変更は、exportコマンドを使う。
  • シェル変数の値を調べるには、printenv 変数名と打ち込む。

    例)"yuji"という環境変数を値"bar"で設定する。
    bash-2.01$ export yuji=bar
    bash-2.01$ printenv yuji
    bar
    bash-2.01$ ■
    

    *シェル変数、環境変数には、あらかじめ使い方が決められたものがあり、注意して変更しなければならない。

  • メタキャラクタ(ワイルドカード)
  • コマンド入力で、複数のファイル名を"ある規則にしたがってまとめて表す"という試みのために用いられる文字のことを "メタキャラクタ" (ワイルドカード)と言う。メタキャラクタを用いると、タイプする文字数を減らすことができるので、効率的に入力が行える。

    基本的なメタキャラクタ
    *任意の文字列を表す
    ?任意の1文字を表す。?? は任意の2文字になる。
    [ ][ ]内に含まれる文字にマッチする。[a-c]*はabcのいすれかで始まる任意の文字列を表す。
    { }{ }内に含まれる文字列にマッチする。test.{pl,gif,f}は、test.pl test.gif test.f と入力したことになる。

  • エイリアス(別名)機能
  • あるコマンドに対して、別名をつけたいときに用いる。

    ・alias 別名=コマンド名
    ・alias 別名='オプション付きのコマンド名'
    
    お薦め) rm -i を rm と変更する。

  • ジョブ制御
  • bashでは、1つのシェルで複数のジョブを切替えながら、並行して作業を行うことができる。この機能をジョブ制御という。

  • フォアグランドジョブ

    通常シェルでコマンドを実行すると、そのコマンドが終了するまで次のコマンドを 実行することが出来ない。このようなジョブのことを"フォアグランドジョブと言う。

  • バックグラントジョブ

    これに対して、コマンドの最後に & をつけると、シェルはコマンドの終了を待たずに、すぐ次のコマンドを受け付ける。このように & で指定されたジョブのことを"バックグランドジョブ"と言う。バックグランドジョブとして起動しているジョブを調べるには、jobs というコマンドを打ち込めばよい。

  • fg, bg, jobs, & の使い方

    一度フォアグランドジョブとして起動されたコマンドを バックグランドジョブとして起動し直すには、コマンド行で Ctrl-z(コントロールキーを押しながら z キーを押す)として、まずジョブを中断させる。

    bash-2.01$ kterm &
    bash-2.01$ xclock 
    ^Z                                           <- Ctrl-z を押す
    [2]+  Stopped          xclock
    

    次に jobs と打ち込み、ジョブを調べる。

    bash-2.01$ jobs
    [1]-  Running          kterm &
    [2]+  Stopped          xclock
    

    xclock の実行の前に kterm が実行されていたので、上のような表示になる。[ ]の中の数字はジョブの番号を表す。+は "current job"、- は"previous job"と呼ばれ、ジョブの切替え対象となる順番を表している。bg コマンドを用いると、フォアグランドジョブをバックグランドジョブにすることができる。(bgの後に %ジョブ番号と入力する。)

    bash-2.01$ bg %2
    [1]-  Running          kterm &
    [2]+  Running          xclock &
    

    バックグランドジョブをフォアグランドジョブにするには、fgコマンドを用いる。 (ジョブ番号の指定の仕方は、bgコマンドと同じ)

    bash-2.01$ fg %1
    kterm
    
  • ファイル、コマンド名の補完機能
    • Tabキー を押す

    bashの補完機能は、シェル変数、ユーザー名、ホスト名も補完してくれる。



    ★bashの機能には、この他にも様々なものがあり、いろいろ知っていると便利です。★



    5.bashの設定ファイル

    上の例で設定したシェル変数、環境変数、aliasコマンドで定義したコマンドの別名などは、ログアウトするとすべて無効になってしまう。このため、次にログインしたときは、(必要であれば)再度これらを設定し直さなければならない。

    いつログインしても常に同じ(自分の好みの)環境でシェルを利用するには、ホームディレクトリにある設定ファイルを書き換えればよい。

  • 主なbashの設定ファイル

    • .bash_profile
    • .bashrc

  • 書き換えた設定ファイルを有効にするには、

    • いったんログアウトし、再度ログインするか、
    • sourceコマンドを用いて、"source ファイル名" と打ち込めばよい。

    例)
    ログイン時から、"catコマンド" を" miru " という別名にしておくには?(エイリアスを設定ファイルに追加する)
    1. ホームディレクトリにある .bashrc というファイルをemacsなどのエディタを使って開く。
    2. .bashrcのプログラムに alias miru=cat という行を付け足して保存する。(最後の行に書き込むと無難)
    3. source .bashrc と打ち込み、設定ファイルを有効にしてから確認する。

    *設定ファイルの中に不正な記述があると、それ以降に記述したコマンドが実行されず、思いどおりの環境が作れなくなってしまうので注意が必要です。*





  • <参考文献>

    1999.11.26 三浦 優司