シェルには大きく分けて3つの役割があります。
主要なシェルには以下のようなものがあります。
$ set
$ finger username
$ chsh (または ypchsh)
次にログインするときに、変更したシェルが起動されます。 (管理者の設定により無理な場合があります)
多くのシェルは、ls や kterm などの独立したコマンドを実行するだけでなく、 あらかじめシェルのプログラムに組み込まれているコマンドを幾つか持っています。 このようなコマンドは"組み込みコマンド"と呼ばれ、以下のようなものがあります。
echo, set, unset, alias, history, cd, ...
help コマンドを利用すると、これら組み込みコマンドの、簡単な説明を得られます。
$ help
$ help [コマンド名]
bashは、シェル自身の動作を定義する変数を持っています。 この、シェルが内部で保持している変数を、"シェル変数"と言います。 シェルスクリプトや、コマンドの入力の際に、 値を一時的に格納して後で再利用できるようにするための変数でもあります。 後述する環境変数と違い、シェル以外のプログラムからは参照できません。
基本的に、変数名をつける際は、好きなようにつけて構わないのですが、すでに定義され ている変数とは重ならないように指定した方が無難です。
例として、プロンプトの表示を変えてみましょう。 プロンプトの表示は、シェル変数"PS1"を用いて設定することが出来ます。
$ PS1="\u% " inex% inex% PS1="\d$ " Fri Nov 26$ Fri Nov 26$ PS1="\s-\v\$ " bash-2.01$ |
シェル変数はシェルの中だけで使われる変数ですが、 こちらは、アプリケーションやコマンドなどの動作を統一的に制御するために 、ユーザーが設定する変数です。
環境変数名 | 意味 |
---|---|
USER |
ユーザ名 |
HOST |
ホスト名 |
LANG |
言語環境。日本語ならば ja_JP.ujis、英語ならば C。 |
PATH |
コマンドサーチパス。 |
HOME |
ホームディレクトリ。 |
シェル変数・環境変数には、 あらかじめ使い方が決められたものがあり、 変更には注意が必要です。
例として、以下の4つのコマンドを順番に入力してみてください。
$ export LANG=C $ man man $ export LANG=ja_JP.ujis $ man man |
これを実際に試してみると、 一度目の man man と二度目の man man で出力される結果が違うのが、 確認できると思います。 環境変数とはこのように、 あらかじめ設定していた文字列によってプログラムの動作を規定する為のものです。 (プログラム側で対応していない場合は効果ありません)
次に以下のコマンドを実行して下さい。
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11: $ pwd /home/hogehoge $ export PATH="" $ pwd bash: pwd: command not found $ /bin/pwd /home/hogehoge |
< 環境変数 PATH を表示させます > hogehoge さんのホームディレクトリに居ます. < 環境変数 PATH を空にします. > pwd コマンドは無いと言われました. < pwd コマンドの絶対パスを指定しました. > hogehoge さんのホームディレクトリに居ます. |
すると最初は存在していたはずの pwd コマンドが存在しないと言われるでしょう. コマンドもファイルですから本来は絶対パスで書かねばならないのですが, PATH 環境変数にコマンドの置かれているディレクトリを指定しておくと コマンド名そのもので実行できます.
コマンド入力の際に、 複数のファイル名を「ある規則にしたがってまとめて表す」という試みのために用いられる文字のことを、 "メタキャラクタ"(ワイルドカード)と言います。 メタキャラクタを用いると、タイプする文字数を減らすことができるので、 効率的に入力が行えます。
メタキャラクタ | 意味 |
---|---|
* |
任意の文字列を表す。 |
? |
任意の1文字を表す。?? は任意の2文字になる。 |
[ ] |
[ ] 内に含まれる文字にマッチする。 例えば [a-c]* は abc のいすれかで始まる任意の文字列を表す。 |
{ } |
{ }内に含まれる文字列にマッチする。 例えば test.{pl,gif,f} は、test.pl test.gif test.f と入力したことになる。 |
この機能は便利で, * (アスタリスク)は良く使います.
$ cp *.txt work/ $ rm *.txt |
< カレントディレクトリ内で末尾が .txt という ファイルを work 以下に移動させる. < カレントディレクトリ内で末尾が .txt という ファイルを消去する. |
但しいくら便利だからといって以下のコマンドを実行してはいけません. 筆者はこのせいで卒論の原稿を半分消してしまったことがあります.
$ rm * |
絶対に禁止!!! |
あるコマンドに対して、別名をつけたいときに用います。
alias 別名=コマンド名
alias 別名='オプション付きのコマンド名'
お薦め: rm -i
を rm
と変更
$ echo "hello world" > hello.txt $ rm hello.txt $ echo "hello world" > hello.txt $ alias rm='rm -i' $ rm hello.txt |
< hello.txt ファイルを作成 < hello.txt ファイルを削除 < hello.txt ファイルを作成 < rm -i を rm として登録 < hello.txt ファイルを削除 |
ジョブ(Job)とは、ユーザがコンピュータに行なわせる仕事の単位です。
似た意味を持つ言葉に、タスクとプロセスがありますが、 この2つは共にマルチプログラミングの目的で、 コンピュータがCPU(中央演算処理装置)に行わせる仕事の単位です。 ジョブは、複数のジョブステップから構成されることがありますから、 ジョブとタスクは一致するとは限りません。
bash には、1つのシェルで複数のジョブを切替えながら、 並行して作業を行う機能があります。これをジョブ制御と呼びます。
上記2種のジョブを制御するために、 bash には fg, bg, jobs コマンド、そして & が用意されています。
はじめフォアグランドジョブとして起動されたコマンドを、 バックグランドジョブに変更するには、 (フォアグランドジョブが実行されているために)プロンプトが表示されていない状態の端末で、 Ctrl-z(コントロール・キーを押しながら z キーを押す)として、 ジョブを中断させます。
$ kterm & $ xclock ^Z [2]+ Stopped xclock |
< Ctrl-z を押します > ジョブ番号[2]の xclock が停止しました |
次に jobs と打ち込み、現在このシェルから実行中のジョブ一覧を表示させます。
$ jobs [1]- Running kterm & [2]+ Stopped xclock |
> ジョブ番号[1]の kterm が実行中です > ジョブ番号[2]の xclock が停止中です |
xclock より前に kterm が実行されていたので、上のような表示になります。 [ ]の中の数字はジョブの番号を表します。 +は "current job"、- は"previous job"と呼ばれ、 ジョブの切替え対象となる順番を表しています。
bg コマンドを用いると、 フォアグランドジョブをバックグランドジョブに切り替えることが出来ます。 (bg の後に % ジョブ番号と入力)
$ bg %2 [1]- Running kterm & [2]+ Running xclock & |
> ジョブ番号[1]の kterm が実行中です > ジョブ番号[2]の xclock が実行中です |
逆に、バックグランドジョブをフォアグランドジョブに切り替えるには、 fg コマンドを用います。(ジョブ番号の指定の仕方は、bg コマンドと同様)
$ fg %1 kterm |
bash には、途中まで打ち込まれた内容を元に、 ファイルやコマンドを補完する機能が備わっています。 具体的には、目的の文字列を何文字か入力し、Tab キーを押します。 複数候補が存在する場合は、Tab キーを2回押すことで、 その一覧を表示させることが出来ます。 この機能は他にも、シェル変数、ユーザー名、ホスト名なども補完してくれます。
キー操作 | 意味 |
---|---|
Esc ? |
補完候補のリストを一覧する。 |
Esc / |
ファイル名として補完を行なう。 |
Esc ! |
コマンドとして補完を行なう。 |
Esc Tab |
以前に実行したコマンドの補完を試みる。 |
Bash を例にして設定の方法をみてみましょう. システム自体の Bash の 設定ファイルは /etc/profile です. そこには環境変数 PATH やシェル変数 PS1 が定義されています.
個人で環境変数やシェル変数を変更する場合, ホームディレクトリ以下に 存在する .bashrc, .bash_profile を編集します. 例えば自分の作成したプログラムやスクリプトの置場にも PATH を通す場合, .bashrc や .bash_profile を編集する必要があるでしょう. この 2 つのファイルの役割は以下のようになっています.
ファイル名 | 役割 |
---|---|
.bash_profile |
ログインシェルの設定. |
.bashrc |
ログインシェル以外のシェルの設定 |
ログインシェルとはユーザがログインした時直後に起動されるシェルのことです ターミナル(kterm 等)を起動すると一緒にシェルも起動されますが, そのシェルは .bashrc を読み込んでいます. 2 つ設定ファイルがあって紛らわしいかもしれませんが, 混同しないように しましょう.
.bash_profile,.bashrc 共に「シェルスクリプト」になっています (シェルスクリプトに関しては後述します. ). それらのファイルの中身はコマンドが羅列してあると考えて下さい. ですから ls --color を ls にエイリアスし, LANG 環境変数を日本語に したかったらファイル内に以下の 2 行だけ書いておけば良いです.
$ alias ls='ls --color'
$ export LANG=ja_JP.ujis
最終更新日: 2011/04/27(山下達也) | Copyright © 2011 inex |