ユーザはシェルを利用してコンピュータに命令を与えます. シェルはユーザの入力した文字列を解釈し, コマンドを実行します. また, コマンドの簡単な実行や同じ作業の繰り返し, 複数のプログラムの管理など, さまざまな機能を提供します.
シェルはユーザがコマンドを効率的に入力するために ユーザとコンピュータを仲介する役割を果たしています. 表11.1にシェルの機能を示します.
シェルには, コマンドやファイル名が長いときに, 最後まで入力しなくても残りの部分を補完する機能があります. これを ``補完機能'' といいます. コマンドやファイル名を途中まで入力して, <TAB>を押すと次のような補完機能を利用できます.
% ls <ENTER> report.tex report-all % rm re <TAB> % rm report_ % rm report- <TAB> % rm report-all_
ファイル名やコマンドを途中まで入力したところで, C-dを押すと, そこまで入力した内容に該当するコマンドやファイルが表示されます.
% ls <ENTER> report.tex report-all % rm re <C-d> report.tex report-all % rm re_ % rm report-<TAB> % rm report-all_ % dv <C-d> dvi2fax dvicopy dvilj dvilj4 dvilj6 dvips dviselect dvitype dvi2ps dvihp dvilj2p dvilj4l dvipdf dvired dvitomp % dv_
同じコマンドを何度も実行する際に, そのコマンドに簡単な別名 (エイリアス) を 登録することによって作業の効率化をはかれます. 次にエイリアスの登録,確認,削除について説明します.
エイリアスを登録するには, aliasコマンドを使用します. エイリアスには, コマンドそのものだけでなく コマンドにオプションや引数を指定して登録できるので, 自分がそのコマンドを使用する際に必ず指定するオプションなどが 決まっている場合には, それらもまとめて登録できます.
alias [別名] [エイリアスをつけたいコマンド]
次の実行例では,`ls -F' というコマンドを `dir' というエイリアスで登録しています.
% ls -F <ENTER> dir1/ file1 linkfile@ % dir <ENTER> dir: Command not found. % alias dir ls -F <ENTER> % dir <ENTER> dir1/ file1 linkfile@ % _
aliasコマンドを利用する前に, 登録する文字列がコマンドとして存在しないことを確認しておく必要があります.
エイリアスは, 基本的にaliasコマンドを実行したシェルでのみ有効です. そのため, exitやlogoutなどのコマンドで1度そのシェルを閉じてしまうと, 登録したエイリアスは失われてしまいます. そこで, 毎回同じエイリアスを利用する場合には, ホームディレクトリにある `.cshrc' という設定ファイルに aliasコマンドを書いておきます. `.cshrc' ファイルに aliasコマンドを書いておくと, その後に起動されるシェルすべてにそのエイリアスを適用できます.
現在登録されているエイリアスの一覧を見るには, aliasコマンドを引数なしで実行します. すると, 左側に登録されている別名, 右側に実際に実行されるコマンドラインを並べたリストが表示されます. このときaliasコマンドの引数として, 登録した別名だけを指定するとその別名の実際のコマンドラインが表示されます.
% alias <ENTER> dir ls -F rm rm -i % alias dir <ENTER> ls -F % _
1度登録したエイリアスを解除するには, unaliasコマンドを利用します.
% which dir <ENTER> dir: aliased to ls -F % dir <ENTER> file1 other@ report/ % unalias dir <ENTER> % dir <ENTER> dir: Command not found. % _
エイリアスをいくつも指定していると, エイリアスで設定した内容を再びエイリアスに指定してしまうことがあります. このときには,`Alias loop.' と表示され, そのコマンドを実行できなくなります. また, すでに存在するコマンドと同じ名前をエイリアスに設定すると, そのコマンドが実行できなくなります. このようなときには,aliasコマンドで重複しているエイリアスを確認し, unaliasコマンドで解除します.
% cat file.tex <ENTER> Alias loop. % alias <ENTER> cat more more cat % unalias cat <ENTER> % alias <ENTER> more cat % cat file.tex <ENTER> I can feel Something in the fall Nothing but blue sky % _
シェルは過去に実行したコマンドを記憶しています. これをシェルの ``ヒストリ機能'' といいます. ヒストリ機能を利用して過去に入力したコマンドを簡単に再実行できます.
ユーザが入力したコマンドは, 入力の順番と共に記憶されています. これを ``ヒストリリスト'' といいます. ヒストリリストを確認するには, historyコマンドを用います. ヒストリコマンドに引数として数字を指定すると, 最後に実行されたコマンドから数字分だけヒストリを表示します. 引数を省略した場合には, 記憶しているすべてのヒストリを表示します.
history [数字]
% ls <ENTER> % cd <ENTER> % pwd <ENTER> % history <ENTER> 1 15:34 ls 2 15:34 cd 3 15:35 pwd % history 2 <ENTER> 3 15:35 pwd 4 15:35 history 2 % _
ヒストリ機能を用いて, ユーザはコマンドを再実行できます. 再実行の方法には表11.2に示す4種類があります.
書式 | 意味 |
!!
|
直前のコマンドの再実行 |
!n
|
n番目 (ヒストリ番号) に実行したコマンドの再実行 |
!-n
|
もっとも大きいヒストリ番号からnを引いたヒストリ番号のコマンドの再実行 |
!str
|
指定された文字列 (str) ではじまる1番最近に実行したコマンドの再実行 |
% history 4 <ENTER> 10 15:18 ls 11 15:29 more history.txt 12 15:29 a2ps history.txt | lpr -Pnps2 13 15:32 history 4 % !! <ENTER> history 4 11 15:29 more history.txt 12 15:29 a2ps history.txt | lpr -Pnps2 13 15:32 history 4 14 15:33 history 4 % !a2 <ENTER> a2ps history.txt | lpr -Pnps2 % _
ヒストリ機能を利用してコマンドを実行する前に,
あらかじめコマンドの内容を確認できます.
ヒストリ指定の直後でスペースを空けずに `:p
' を入力すると,
ヒストリリストから指定されたコマンドを表示します.
そのままコマンドを実行する場合には,
続けて `!!
' を入力します.
次にヒストリ番号9のコマンドの内容を確認し,
それを再実行する例を示します.
% !9:p <ENTER> ls -l % !! <ENTER> ls -l total 2 -rw-r--r-- 1 s00000hf 13450 Nov 18 10:40 history.ps -rw-r--r-- 1 s00000hf 3402 Nov 22 09:35 report.tex % _
コマンドは, 入力してから<ENTER>を押すまでであれば内容を変更できます. 一度入力したコマンドを編集するには, 表11.3のキー操作を利用します.
目的 | キー | 動作 |
カーソルの移動 | C-b | カーソルを左に1つ動かす |
C-f | カーソルを右に1つ動かす | |
C-a | コマンドの行頭に移動 | |
C-e | コマンドの行末に移動 | |
文字の削除 | C-d | カーソル上の1文字を削除 |
C-h | カーソルの左の1文字を削除 | |
C-k | カーソルからコマンドの行末までを削除 | |
C-u | コマンド全体を削除 | |
ヒストリの呼び出し | C-p | 表示されているコマンドの1つ前のコマンドを呼び出す |
C-n | 表示されているコマンドの1つ後のコマンドを呼び出す |
基本的にシェルは1つのコマンドが実行されると,
そのコマンドの終了を待ち続けます.
その間,
プロンプトは表示されないので次のコマンドの入力はできません.
同じシェルで複数のコマンドを並行して処理するためには,
あらかじめ実行するコマンドに `&
' をつけて実行する必要があります.
`&
' をつけて実行されたコマンドは ``バックグラウンドジョブ'' といい,
コマンドの終了を待たずにプロンプトが表示されます.
コマンド名を入力して<ENTER>を押すと, シェルはコマンドの処理が終るまで次のコマンドを実行できません. この状態で実行されている処理を ``フォアグラウンドジョブ'' といいます. 次の例では,テキストエディタであるEmacs () を起動するコマンドを実行していますが, このEmacsはフォアグラウンドジョブで行っているため, Emacsを終了するまでプロンプトが表示されず, 他のコマンドを実行できません.
% emacs <ENTER> _
これに対して,
コマンドの処理が終るまで待たずにプロンプトを表示するような実行の仕方を,
``バックグラウンドジョブ'' といいます.
コマンドをバックグラウンドジョブとして起動するには,
コマンドの後に `&
' をつけて実行します.
次の例では, バックグラウンドジョブでEmacsを起動しているため, Emacsを使いながら他のコマンドを実行できます. フォアグラウンドジョブとして実行できるジョブは1つだけですが, バックグラウンドジョブとして実行することで, 複数のジョブを同時に実行できます.
% emacs & <ENTER> [1] 15895 % _
フォアグラウンドジョブとバックグラウンドジョブには, いくつかの違いがあります. フォアグラウンドジョブとバックグラウンドジョブの処理の結果の出力は, どちらも表示されます. しかし, シェルから情報を入力できるのは, フォアグラウンドジョブのみです. 引数として数値やファイル名などの情報を入力することが必要なコマンドを, バックグラウンドジョブとして実行すると,処理が中断されています. その時には, フォアグラウンドジョブにして必要な引数などを入力する必要があります.
シェルが現在実行しているジョブの情報を知るには, jobsコマンドを利用します.
% xclock & <ENTER> % less /home/s00000hf/file3 & <ENTER> <C-z> ^Z Suspended % xv & <ENTER> % jobs <ENTER> [1] - Running xclock [2] + Suspended less /home/s00000hf/file3 [3] Running xv % _
左端の `[ ]
' の中の数字は ``ジョブ番号'' といい,
シェルがジョブを処理する際にジョブにつける番号です.
ジョブを操作するコマンドは,
すべてこのジョブ番号を指定して行います.
その他の表示の意味を表11.4に示します.
表示 | 意味 |
左端の[ ] 内の数字
|
ジョブ番号 |
Running | バックグラウンドジョブで実行中のJob |
Suspended | 一時停止中のジョブ |
+
|
``currentジョブ'' (フォアグラウンドで最後に実行されたジョブ) |
-
|
``previousジョブ'' (currentジョブの前に実行されたジョブ) |
ジョブの操作には, 表11.5のようなコマンドを用います. いずれも引数としてジョブ番号を指定します. ジョブ番号が省略された場合, killコマンド以外はcurrentジョブが対象となります.
実行中のフォアグラウンドジョブを強制終了するには, C-cを押します. また, C-zを押すと, フォアグラウンドで実行されているジョブをサスペンド (一時中断) できます. さらに, サスペンドしたジョブはfgやbgなどのコマンドで復帰します. 例えばバックグラウンドで起動するジョブを 間違えてフォアグラウンドで起動してしまったときに, 一度サスペンドをしてbgコマンドを実行することで, バックグラウンドジョブに切り替えられます. 次にその実行例を示します.
% emacs & <ENTER> % mozilla & <ENTER> % jobs <ENTER> [1] + 実行中です emacs [2] - 実行中です mozilla % fg %2 <ENTER> mozilla <C-z> ^Z 中断 % jobs <ENTER> [1] - 実行中です emacs [2] + 中断 mozilla % bg %2 <ENTER> [2] mozilla & % jobs <ENTER> [1] + 実行中です emacs [2] 実行中です mozilla % fg %1 <ENTER> emacs <C-c> ^C % jobs <ENTER> [2] + 実行中です mozilla % _
CNSのUNIXでは, オンラインマニュアルやエラーメッセージなどは基本的に日本語で表示されます. 日本語で表示されない場合は, 次のようにロケール値を設定する必要があります.
setenv LANG [ロケール値]
表11.6にホストごとのロケール値の設定を示します.
次に実行例を示します.
% setenv LANG ja <ENTER> % _
ユーザは, ``環境変数'' を利用することで, シェルやコマンドの動作を操作できます. 現在設定されている環境変数の一覧を表示するには, printenvコマンドを実行します. printenvコマンドの後に引数として環境変数名を指定すると, その変数だけが表示されます. 環境変数を設定するには, setenvコマンドを, 解除するには, unsetenvコマンドを用います.
printenv [環境変数名] setenv [環境変数名] [値] unsetenv [環境変数名]
次の実行例では, LANG環境変数を `ja' から `ja.JP_EUC' に変更したのちに, LANG環境変数を解除しています.
% printenv LANG <ENTER> ja % setenv LANG ja.JP_EUC <ENTER> % printenv LANG <ENTER> ja.JP_EUC % unsetenv LANG <ENTER> % printenv LANG <ENTER> % _