実習はすべてコマンドを用いて行います。「端末」ウインドウを起動してください。
Unix/Linuxでキーボードから入力したコマンドを解釈実行するソフトウェアをシェル (shell) と呼びます。シェルにはいろいろな種類がありますが、当面は複数知っている必要はありません。多くのLinuxでユーザ用に標準となっているシェルにはbashという名前がついています。
シェルの基本的な仕事は、次の動作を(シェル自体の終了を意味するコマンドが実行されるまで)繰り返すことです。
- プロンプト(入力促進記号)を表示し、ユーザからの入力を待つ。
- ユーザからの入力があれば、それを読み込む。
- 入力を解釈し、コマンドを実行する。
- コマンドの実行終了を待ち、1に戻る。 本日の(及びたぶんこの後もずっと)実習資料ではプロンプトを
$
で表すことにします。(ドル記号+上では見えないが空白1文字)
したがって実行例で各行の先頭にある$
は入力する必要がありません。
コマンドとここで呼んだものは
- シェル組み込みコマンド(または内部コマンド、両者を同じ意味に用いる)
- 外部コマンド に分けられます。
シェル組み込みコマンドは、シェルのプログラムにその処理をする部分が含まれているコマンドです。それに対して、外部コマンドとは、/usr/bin
など にある実行可能なプログラムファイルに他なりません。
(実習)次のコマンドを実行し、何が起こったのか説明せよ。
$ exit
外部コマンドは、実は単なる単体のプログラムの名前です。/usr/bin
, /usr/sbin
, /bin
, /sbin
などのディレクトリにおさめられており、その名前をシェルに与えることでプログラムの起動が行われます。
外部コマンドがどこにあるかを調べるには(内部コマンドならその旨表示される)type
やwhereis
を使うこともできます。
(実習)whereis
を調べ、用例を試せ。which
という同種のコマンドもある。
上記のシェルの動作で、「3. コマンドの実行終了を待ち、1に戻る」とありましたが、実際には長時間かかるコマンドや、終了することを予定しないコマンドもあります。前者の例としては、複雑な数値計算を行うプログラムや、膨大なデータからの検索があげられます。後者としては、ウィンドウシステムで時計を表示するプログラムなどが考えられま す。このような場合、コマンドの実行を開始した後、すぐに先のループで1.に戻り、他のコマンドを続けて実行できる方がありがたい。これを実現するのが ジョブコントロールです。
(実習)次のコマンドを投入し、何が起きるか観察せよ。マウスを動かしてみること。このコマンドをなんども実行してみてもよい。
$ xeyes &
&
をつけて実行したり、^Z
で実行中断した後bg
で実行を継続したりする場合、バックグラウンドでの実行といいます。普通の実行(シェル がコマンドの終了を待っている)はフォアグラウンドでの実行です。
(実習)次を試せ。
$ xeyes # &をつけない
$ ^Z # Ctrl(コントロール)を押しながらZを押す
$ bg
$ fg
(実習)ico
というコマンドもある。これについて、上と同様のことを行え。
(実習)バックグラウンドジョブを管理する方法について。以下の一連のコマンドを投入し、観察せよ。
$ xeyes &
$ ico &
$ jobs
$ kill %1
$ jobs
$ kill %2
$ jobs
(実習)sleep
というコマンドは、引数で与えた秒数だけ待って終了するだけの動作をする。次の一連のコマンドを投入し、観察せよ。
$ sleep 5
$ jobs # すかさず実行すること
$ jobs # 何度かやってみる
この後のいくつかのトピックは別のページになっています。