> 第2回 簡単なコマンドとジョブ制御 > historyの使い方 > ファイル・システム概略 >  ディレクトリ,ファイル操作 >  ファイル保護と使用権 > リダイレクト,パイプ > バックグラウンド・プロセスの利用方法 ---------------------------------------------------------------- 簡単なコマンド [mkdir] UNIXではcdでディレクトリ間を移動することが出来ること は既に説明した。ディレクトリを作るためには、 mkdir を使う。MS-DOSのmd(mkdir)にあたるコマンドである。た とえば、 % mkdir work とすると、workというディレクトリがカレントディレクト リの下に作られる。UNIXのmkdirはMS-DOSのものとは違っ て、複数のディレクトリを一度に指定することも可能であ る。すなわち、 % mkdir bin lib とすると、カレントディレクトリにbinとlibというディレ クトリが作られるのである。 [rmdir] ディレクトリを削除するためには rmdir というコマンドを使う。これも、MS-DOSのrd(rmdir)と同 じようなコマンドである。ただし、mkdirのときと同じよ うにディレクトリは複数を同時に指定できる。 ただし、ディレクトリをrmdirによって削除するときは削 除するディレクトリの中が空でなければならない。もし、 空でないディレクトリをrmdirすると、 ???????? というメッセージが出力されてディレクトリは削除されな い。 [cp] UNIXでファイルのコピーをするためには cp というコマンドを使用する。cpは”Copy”のことを意味 していて、MS-DOSのCOPYに相当する動作を行う。 たとえば、.cshrcをsave.cshrcにコピーするためには、 % cp .cshrc save.cshrc とする。これで、ファイル.cshrcをファイルsave.cshrc にコピーすることが出来る。 また、 % cp .login .logout /tmp のようにすると、ファイル.loginとファイル.logoutをディレク トリ/tmpにコピーすることが出来る。 [mv] UNIXの mv はファイルの移動や名前の変更、ディレクトリ名の変更の ために使う。 % mv oldname newname はファイル名oldnameからファイル名newnameへの変更、ま たは移動をおこなう。ファイルnewnameが既に存在してい たときは、元の内容は消去され、ファイルoldnameの内容 で置き換えられる。oldnameがディレクトリの場合はその 名前を変えることが出来る。 % mv save.cshrc cshrc とすると、ファイル名save.cshrcをファイル名cshrcに変 更される。 % mv cshrc /tmp とすると、ファイルcshrcをディレクトリ/tmpに移動する ことが出来る。  また、workがディレクトリの時、 % mv work src とすると、ディレクトリ名workがディレクトリ名srcに変 更される。 [rm] UNIXでファイルを削除するためには rm を使う。これは、MS-DOSのdelに相当するコマンドである。 % rm cshrc とすると、ファイルcshrcが削除される。ファイルは複数 を指定することも可能である。 UNIXではMS-DOSとは違って、ワイルドカードを使ったとき も何も確認を求めてこないことに注意しなければならない。 すなわち、 % rm * などとすると、カレントディレクトリの中のファイルがす べて削除されてしまう。(ただし、ファイル名が . で始 まるものはこの場合は削除されずに残る。)MS-DOSには undelといった、delで消去したファイルを復活するツール があるが、UNIXにはそのような便利なツールはないので、 削除をするときには細心の注意を払うべきである。rmした ファイルは二度とは戻ってこない。このようなときのため に "-i" というオプションがある。これは指定されたファ イル一つずつについて本当に削除していいか確認をとるた めのものである。  rm では "-f" オプションをつけることによってディレ クトリごとすべて削除することも出来る。このときは、そ のディレクトリの中のファイルはすべて削除されて、その ディレクトリが削除される。 [ln] 同じファイルに対して違う複数の名前をつけることが出 来る。これはリンクと言い,lnコマンドを使う。 % ln origfile newfile とすると、newfileがorigfileと同じ物になるようにする。 このようにすると、ファイルorigfileとnewfileは同じ内 容を指しているので、newfileを変更するとorigfileも同 じように変更される。逆にorigfileを変更しても、 newfileも同じよう変更が行われる。ただし、rmで origfileを消去するとorigfileは消去されるが、newfile は消去されずに残る。逆に,newfileを消去した場合も同 じである。どちらも消去されたときに始めてディスク上か らファイルが消去される。ただし,lnコマンドは同一ファ イルシステム上でしか行うことが出来ない。ファイルシス テムと言うのはMS-DOSでいうドライブのことである。  lnコマンドには別の使い方がある。これはシンボリック リンクといいlnコマンドに -s というオプションをつける。 % ln -s origfile newfile シンボリックリンクの場合,単にnewfileはorigfileとい うファイル名を覚えているのにすぎないので,違うファイ ルシステム間でも行うことが出来るが,ファイルの実体は もとのファイルにしか存在しないので,もとのファイルを 消去するとシンボリックリンクは存在しないファイル名を 指すものとなる。 [head,tail] ファイルの内容を見るためにはcatやmoreを使うと説明し たが、ファイルの最初だけ、もしくは最後だけが見たい場 合も少なくはない。そのためのコマンドとして、headと tailがある。 % head /etc/passwd とすると、パスワードファイルの先頭10行を出力する。行 数を指定するためには % head -20 /usr/include/stdio.h のようにする。これで、ファイル/usr/include/stdio.hの 先頭20行が出力される。 tailはこれと逆でファイルの最後の部分を出力する。 % tail /etc/passwd とすると、パスワードファイルの最後の10行が出力される。 行数の変更もheadと同じように行う。 [file] UNIXではファイルの内容がテキストなのか、そうでないの かを判断するためのコマンドがある。それが、 file である。 fileは引数で与えられるファイルの型を分類を行う。ディ レクトリ、asciiテキスト、コマンドファイル(シェルス クリプト)、Cプログラム、実行ファイルなどに分類する。 fileの答えは常に正しいわけではないが、間違っていない ことのほうが多い。 ---------------------------------------------------------------- ファイル・システム概略  ディレクトリ,ファイル操作  ファイル保護と使用権 UNIXはMS-DOSと違って、すべてのファイルが一つの木構造 の一部となっている。 UNIXにログインすると最初はホームディレクトリがカレン トディレクトリとなっている。ここで、lsコマンドを使っ てカレントディレクトリを見てみると、例えば、 % ls -a -l total 5 drwxr-xr-x 2 komichi 512 May 5 11:33 . drwxr-xr-x 7 root 512 May 5 10:58 .. -rw-r--r-- 1 komichi 171 May 5 11:36 .cshrc -rw-r--r-- 1 komichi 197 May 5 11:38 .login -rw-r--r-- 1 komichi 30 May 5 11:29 .logout % ■ のようになっている。 ここで、total というのはこれらのファイルでどれだけディ スクを使っているかを表しているのである。次に . とい うディレクトリに付いての情報がある。 drwxr-xr-x 2 komichi 512 May 5 11:33 . 最初の d というのがディレクトリであることを表してい る。普通のファイルはここが-となっている。また,シン ボリックリンクのファイルはここがlになっている。 UNIXでは . というのはそのディレクトリ自身を指す ものである。したがって、 filename と ./filename は同じファイルを表す。 また .. というのはそのディレクトリの親ディレクトリを 指すのである。したがって、カレントディレクトリが /usr/tmpとすると、 filename ./filename ../tmp/filename ../../usr/tmp/filename はすべて同じファイルを表している。 さて、次の rwxr-xr-w というのはファイルの属性を表し ている。UNIXでは複数の人間が同じディスクを使うことが 出来るのだが、他人には書き込まれたり、見られたりする と困るようなファイルもあるので、そのようなファイルを 保護する必要があるのである。UNIXではこれを次の3種類 にわけて保護するようになっている。 rというのがそのファイルを読むことが出来ることを許 可してあることを表す。wというのはそのファイルに対し て書き込めることが出来ることを許可してあることを表す。 xというのはそのファイルが実行できることを許可してあ ることを表す。したがって、r--の場合は読むことだけが 可能、rw-は読み書きは出来るが実行は出来ない、rwxは読 み書き実行が出来る、r-xは読むことと実行は出来るが 書き込むことは出来ない、というふうに表す。なお、ディ レクトリの時はxは探索可能である、すなわちそのディレ クトリの下に行くことが出来ることを意味する。  このそれぞれをファイルの持ち主(owner)、ファイルの グループ(group)、その他の3種類の人間にわけて指定す ることが出来る。  例えば、 -rw-r--r-- 1 komichi 171 May 5 11:36 .cshrc の場合 rw-r--r-- なので、持ち主である komichi に対し ては rw-、すなわち読み書きは出来るが実行は出来ないこ とを表し、このファイルと同じグループの人には r--、す なわち読むことしか出来ないことを表す。またその他の人 についてもr--、すなわち読むことしか出来ないことを表 す。  このような属性のことをファイルのパーミッションとい う。自分のファイルのパーミッションは何時でも変更する ことが出来る。ファイルのパーミッションを変更するため にはchmodコマンドを使う。  例えば、.cshrc に自分自身が書き込めないようにする ためには % chmod u-w .cshrc とする。uというのがuser、すなわち自分自身であること を意味し、-wで書き込み許可を無くすことを意味する。 また、 % chmod u+rw,g+r,o-rw .login というのは、ユーザに読み書きの許可を与え、グループの 同じ人には読みの許可を与え、そのほかの人には読み書き の許可を無くすようにするのである。また、 % chmod +x foo というのは、誰もがこのファイルfooを実行できるように する。また、+,-のかわりに=を用いてパーミッションをセッ トすることが出来る。 -rw-r--r-- 1 komichi 171 May 5 11:36 .cshrc ファイルのパーミッションの次にある数字がリンクカウン トと呼ばれるものである。lnコマンドでリンクを張ってあ るコマンドはここの数字が1より大きい数字になっている。 リンクカウントの次にある文字列がこのファイルの持ち主 のユーザ名を表している。その次の数字がこのファイルの ファイルサイズである。その次がファイルの修正時間を表 している。最後にあるのがそのファイルのファイル名であ る。  なお,lsコマンドには -l や -a の他にもいろいろオプ ションがある。たとえば,-F オプションをつかうと,ディ レクトリの時はディレクトリ名の後に / をつけ,実行可 能のファイルのときはファイル名の後に * をつける。ま た,シンボリックリンクのときはファイル名の後に @ を つける。また,-g オプションを -l オプションと同時に 使うとファイルの持ち主の名前の横にファイルのグループ 名も表示する。 ---------------------------------------------------------------- ワイルドカード  UNIXではMS-DOSよりも強力なワイルドカードを使用する ことが出来る。  *は0文字以上の任意の文字列を表す。ただし、*だけで は . で始まるファイル名は表さない。 ?はある任意の一文字を表す。 []を使うことで、文字の種類を指定することが出来る。 例えば、[abc]とすると、aかbかcを表す。また、[a-z]と するとアルファベットの小文字を表す。 また、 /etc/{passwd,group} などのようにすると、これは /etc/passwd と /etc/group を表すことが出来る。  これらのワイルドカードはMS-DOSとは違いパス名、ファ イル名のどこで使っても構わない。ただし、曖昧な指定を すると予期せぬ動作をすることがあるので、注意する必要 がある。もし、どのようなファイル名に成るか前もって知り たいときは echo コマンドを使う。echoコマンドはファイ ル名を展開したものをそのまま表示するためだけのコマン ドです。  これらのワイルドカードのほかに ~ という省略記法が あります。これはホームディレクトリを表す。 ---------------------------------------------------------------- リダイレクト,パイプ  UNIXではコマンドの出力先をファイルにしたり、入力先 をファイルにしたりすることが出来る。このような機構を リダイレクションという。  たとえば、catコマンドはファイルの内容を見るコマン ドと言ったが、これはファイルをつなぎ合わせるためにも 使うことが出来る。 % cat .login .cshrc .logout > script とすると、ファイル.login、.cshrc、.logoutをつなぎ合 わせてその結果をファイルscriptに出力する。このように 出力先を変更するためには>をつかう。このとき、出力先 のファイルはコマンド実行直前に生成される。もし既に同 名のファイルが存在していた場合は元のファイルの内容は 無くなってしまう。ファイルに付け足して出力するために は>の代わりに>>をつかう。この場合はファイルがあれば その後ろに付け足して出力し、そのファイルがなければ新 しく作られる。  逆に入力先を変更するためには<を使う。 すなわち % cat < text とするとファイルtextの内容を画面に出力することが出来 る。  このように入出力先を自由に変えられるようになってい るのでUNIXのコマンドはそのような入出力を使っている。 このような入力先を標準入力、出力先を標準出力という。 UNIXのコマンドは標準入力から入力し、標準出力に出力す るコマンドがおおい。  ただ、コマンドによってはすべてを標準出力に出力する とまずい場合がある。例えば、エラーメッセージなどはリ ダイレクトによって変更されるとエラーに気づかないこと になってしまう。そのようなメッセージは標準エラー出力 という別の出力先に出力される。これは>でリダイレクト しても出力先は変更されない。ただ、このようなメッセー ジもリダイレクトしたくなる場合も多い。このような場合 は、 % cc aho.c -o aho >& err というように、>&をつかう。これで、ccコマンドの標準出 力と標準エラー出力はどちらもファイルerrに出力される。 ccというのはCコンパイラのことである。ccはCプログラ ムで見つかったエラーや警告を標準エラー出力に出力する ので、普通のリダイレクトではエラーはファイルに出力さ れずに画面に出力されてしまう。これも>と同じように元 のファイルは消えてしまう。ファイルに付け足して出力す る場合には、>&の代わりに>>&をつかう。  >&では標準出力と標準エラー出力が同じファイルに出力 されてしまう。これを別々のファイルにするためには、 % (command > out) >& err とすればよい。command の標準出力はファイルoutに出力 され、標準エラー出力はファイルerrに出力される。この ように、()で囲むとそれを一つのコマンドと見なすことに なる。  >や>&によるリダイレクトではうっかりしたミスで、ファ イルを消してしまったり、>>や>>&では違うファイル名の ファイルを作成してしまったりする場合がある。そのよう な間違いを防ぐために既に存在するファイルへのリダイレ クトをゆるさない、またファイルが存在しないときは追加 を行わないようにすることが出来ます。そのようにするた めには % set noclobber とする。このようにするとうっかりミスでファイルを消し てしまったりすることを避けることが出来る。 たとえば、ファイルlistが存在するとき、 % ls -l > list list: File exists というように、ファイルが存在するときは警告を出力し実 行を行いません。また、ファイルtodayが無いときに次の ようにしても、 % who >> today today: No such file or directory となる。もし本当にそのファイルに出力したいときはリダ イレクト記号の後に !をつけます。すなわち、 % ls -l >! list とすると、listが存在しても、ちゃんとそのファイルにリ ダイレクトを行う。また、ファイルerrが存在しなくても、 % cc aho.c -o aho >>&! err はファイルerrに標準出力、標準エラー出力の出力を書き 込む。  このような機構を止めるためには % unset noclobber とすればよい。  UNIXではあるコマンドの出力を別のコマンドの入力とし て与えることが出来る。たとえば、 % grep define /usr/include/stdio.h | more とすると、grep を実行した結果をmoreの入力とする。こ れをパイプという。MS-DOSとは違って、どちらのコマンド も同時に実行されるので、結果を早く見ることが出来る。 MS-DOSの場合は一つ目のコマンドを実行しその出力を一時 ファイルに出力し、そのコマンドが終了してから、二つ目 のコマンドがその一時ファイルを入力として実行する。 UNIXの場合はそのような一時ファイルを作成せず、直接コ マンドの出力を別のコマンドの入力と結びつけるのである。  標準エラー出力もパイプで別のコマンドに渡したいとき は | の代わりに |& とする。 ---------------------------------------------------------------- ジョブ制御 UNIXはマルチタスクのOSですから、複数のプログラムを同 時に実行することが出来ます。  コマンドラインから、普通にコマンドの実行を行うと そのコマンドが終了するまで次のコマンドを入力すること が出来ません。このように、終了を待たなければ行けない ジョブをフォアグランドジョブといいます。 これに対して、その実行の終了を待たずに次のコマンド を実行されることが出来るようにすることが出来ます。こ のようなものは、バックグラウンドジョブといいます。 バックグラウンドジョブを実行するためにはコマンドライ ンで最後にアンパーサンド記号(&)をつける。 たとえば、あるCプログラムのコンパイルをバックグラウ ンドジョブで行うときは、 % cc aho.c -o aho >& err & [1] 1234 コマンドをバックグラウンドで実行すると、Cシェルは角 括弧の中にジョブ番号(今の例では1)とプロセス識別番 号(今の例では1234)を表示します。そして、すぐにプロ ンプトを表示するので、すぐに次のコマンドを入力するこ とが出来ます。  バックグラウンドジョブは複数同時に実行することが可 能である。したがって、 % du > disk_storage & [2] 1244 % ls -l /bin /usr/bin > list & [3] 1250 とすると、3つのバックグラウンドジョブが同時に走るこ とになります。ここで、duコマンドはカレントディレクト リの下のすべてのサブディレクトリについてディスクの利 用状況を調べる。この出力はリダイレクトによってファイ ルdisk_storageに出力される。次のlsコマンドで、ディレ クトリ/binと/usr/binにあるファイルの一覧をつくり、こ れもリダイレクトによってファイルlistに出力される。 バックグラウンドジョブを実行する場合はこのように出力 をリダイレクトする。でないと、バックグラウンドジョブ の出力が画面に出力されてフォアグラウンドジョブの邪魔 になります。  各コマンド行の後にジョブ番号とプロセス識別番号が出 力されている。ジョブ番号はCシェル内で一意に割りつけ られ、プロセス識別番号はシステム全体で一意につけられ るものである。  バックグラウンドジョブを監視するためのコマンドとし て、jobsとpsがある。psコマンドで現在実行中のあなたの プロセスの状況を表示します。前に実行した3つのバック グラウンドジョブ(cc,du,ls)をpsコマンドでみると、 % ps PID TTY STAT TIME COMMAND ????? psコマンドでは現在実行中のプロセスについての情報を出 力します。COMMANDのフィールドがコマンドの名前です。 PIDのフィールドがそのコマンドのプロセス識別番号を表 す。TTYはそのコマンドを実行している端末、STATがその コマンドの現在の状態、TIMEがそのコマンドのCPU使用時 間を表す。STATがRのコマンドが現在実行されているコマ ンドである。STATがSのコマンドは何かを待っている状態 を表す。  もう一つ、jobsというコマンドがあります。これはバッ クグラウンドジョブの状態を表示する。前と同じように3 つのバックグラウンドジョブがある場合には、 % jobs [1] Running cc aho.c -o aho >& err [2] - Running du > disk_storage [3] + Running ls -l /bin /usr/bin > list となる。バックグラウンドジョブの状態は、次の状態があ ります。 ・実行中 (Run) ・停止 (Stop) ・終了 (Terminated) ・完了 (Done) ・異常終了 (Exit) 実行中と言うのはそのバックグラウンドジョブが現在実行 されていることを表す。停止と言うのはそのバックグラウ ンドジョブが実行を途中で一時停止させられていることを 表す。終了と言うのは何かによって途中でジョブをやめて しまったことを表す。完了はそのバックグラウンドジョブ が正常に終了したことを表す。異常終了はそのバックグラ ウンドジョブが異常終了したことを表す。  jobsコマンドはジョブ番号を角括弧の中に表示する。 "+" が付いているジョブがカレントバックグラウンドジョ ブと呼ばれるものです。これは大抵、もっとも最近にバッ クグラウンドジョブになったジョブです。次にカレントバッ クグラウンドジョブになるジョブに "-" がつきます。 ジョブ制御コマンドでジョブを制御するとき、カレントバッ クグラウンドジョブがその制御の対象の場合、省略形を使 うことが出来る。  フォアグラウンドジョブの場合、割り込みキーで、割り こんでそのコマンドを終了させました。バックグラウンド ジョブに対しては割り込みキーによる割り込みは効きませ ん。そこで、バックグラウンドジョブを終了させるために はkillコマンドを使う。  カレントバックグラウンドジョブである ls コマンドを 終了させるためには % kill % とするか、そのプロセス識別番号を使って % kill ????? とする。もしkillコマンドでこのバックグラウンドジョブ が終了すると [3] + Terminated ls -l /bin /usr/bin > list と表示される。カレントバックグラウンドジョブでないと きは kill % の代わりに % kill %2 とすることが出来る。ここで、2はジョブ番号である。 (もちろんカレントバックグラウンドジョブに対してもジョ ブ番号でkillすることが出来る。) カレントバックグラウンドジョブでないときも、プロセス 識別番号でkillしてもよい。  フォアグラウンドジョブを一時停止させるためには CTRL-Zを入力すればよい。すると、 Stopped % と表示されて、そのジョブは一時停止させられます。ま たこのジョブはそのときカレントバックグラウンドジョ ブと成ります。このジョブをフォアグラウンドジョブと して再開するためにはfg(foreground)コマンドを使いま す。 % fg とすると、カレントバックグラウンドジョブがフォアグ ラウンドジョブとして再開されます。このとき再開され たコマンドが何かを表示します。  カレントバックグラウンドジョブ以外をフォアグラウ ンドジョブとして実行するためには % fg %ジョブ番号 として、ジョブ番号でフォアグラウンドで実行するジョ ブを指定します。このとき、カレントディレクトリはそ の再開したジョブのカレントディレクトリになります。  バックグラウンドジョブとして再開する場合には bg(backgoround)コマンドを使います。 % bg とすると、カレントバックグラウンドジョブをバックグ ラウンドで実行を再開します。カレントジョブ以外を指 定する場合にはfgコマンドと同じように  % bg %ジョブ番号 とします。  フォアグラウンドジョブはCTRL-Zによって一時停止で きますが、バックグラウンドジョブを一時停止させるた めにはstopコマンドを使います。カレントバックグラウ ンドジョブを一時停止させるためには % stop % とします。stopコマンドは、fg,bgコマンドと違ってカ レントジョブの時でも、完全に省略することは出来ませ ん。  バックグラウンドジョブがキーボードからの入力が必 要になったときは画面に [1] + Stopped (tty input) コマンド と表示されそのジョブが入力待ちで一時停止状態になっ たことを表す。このようなときは、fgコマンドでそのジョ ブを再開させて適当な入力を行う。このジョブを再びバッ クグラウンドジョブとして実行する場合は、CTRL-Zで一 時停止させて、bgコマンドでバックグラウンドジョブと して再開させればよい。  バックグラウンドジョブはリダイレクトによって出力 先を変更しておかないと画面に表示されてしまう。これ を防ぐにはsttyコマンドを使って % stty tostop とする。tostop というのは Terminal output stop の 意味である。このようにしておくと、バックグラウンド ジョブが画面に出力しようとすると [1] + Stopped (tty output) コマンド と表示されてそのジョブが画面出力のために一時停止状 態になったことを表す。ここで、fgコマンドでそのジョ ブをフォアグラウンドジョブとして再開するとその出力 が画面に出力される。  この出力制限をやめるためには、sttyコマンドを使っ て、 % stty -tostop とすればよい。  バックグラウンド状態の変化の通知はプロンプトを出 す直前に行われます。これを状態が変化したらすぐに表 示させるためにはnotifyコマンドを使って % notify とします。こうすると、カレントバックグラウンドジョ ブの状態が変化した瞬間に画面に出力します。特定のジョ ブを指定するときは % notify %ジョブ番号 とします。すべてのバックグラウンドジョブについて通 知するようにしていするためには % set notify とします。これをやめるためには % unset notify とします。  一時停止したジョブがあるときにログアウトしようとす ると There are stopped jobs. と警告が表示されログアウトが出来ません。ここで再びロ グアウトするとジョブをすべて終了してログアウトしたこ とになります。 ---------------------------------------------------------------- historyの使い方  大抵のユーザは同じようなコマンドを何回も実行するこ とが多いものである。そこで、コマンドを再実行したり、 それを一部修正したりする機能がある。それがヒストリ (history)と呼ばれるものである。  ヒストリを使うためにはまず % set history = 20 とする。この場合は、20回分記憶しておくことを表す。次 のようにするとヒストリの番号をプロンプトに含めること が出来て便利である。 % set prompt='\!% ' このようにプロンプトを設定し、ヒストリを使うようにし た状態で次のようなコマンドを実行し 4% ls -la 5% cat .cshrc 6% who この後にhisotryコマンドを実行すると 7% history 2 set history = 20 3 set prompt = '\!%' 4 ls -la 5 cat .cshrc 6 who 7 history となる。これだけのコマンドをCシェルは記憶しているの である。  ヒストリを使ってコマンドを入力するときは ! を使っ て指定する。例えば、 8% more .login として、もう一度同じことがしたい時は 9% !! more .login とする。このときCシェルはコマンドを実行する前に表示 する。ここでヒストリの4番目のコマンドを実行するとき は、 10% !4 ls -la とする。ここで、もう一度 .loginの内容を見るときは 11% !m more .login とすればよい。これはmで始まる最近に行ったコマンドを 実行することを意味する。ここでこのファイルのサイズや 属性を見るときには 12% ls -la !$ ls -la .login とする。!$というのは直前のコマンドの最後の単語を意味 する。そのほかの単語は :数字をつけることで指定するこ とが出来る。例えば、 !!:2 は直前のコマンドの2つ目の単語を意味する。また、 !10:2-5 とすると、ヒストリの10番目のコマンドの2番目から5番目 のコマンドを意味する。 !ls:2-$ は最近実行したlsコマンドの2番目から最後の単語を意味 する。これは !ls:2* としてもよい。また !* は直前のコマンドのすべての引数を意味する。これを使う と 100% ls -l foo* bar* としてファイルを確認してから、 101% rm !* とすれば、lsコマンドで調べたファイルだけを削除するこ とが出来る。     また、 113% more /etc/password などのようにタイプミスしたときは 114% ^word^wd more /etc/passwd とすれば、タイプミスを簡単に修正することが出来る。