コマンドライン - みる会図書館


検索対象: UNIX MAGAZINE 2001年7月号
71件見つかりました。

1. UNIX MAGAZINE 2001年7月号

表 2 基本的なヒストリー参照命令 s なノ s 2 ! ! :gs/str1/str2/ 1 行前のコマンドライン ( ! ー 1 と同し ) ヒストリー番号れのコマンドライン れ行則のコマンドライン s なて始まるもっとも去も丘のコマンドライン str 、を含むもっとも描丘のコマンドライン 1 行前のコマンドライン中の文字列 strl を s 2 に置換 ( 置換されるのは最初の strl だけ ) 1 行前のコマンドライン中の文字列 strl を s な 2 に置換 ( すべての s 扉ノを置換 ) サーが成ったのは、そんなところに原因があるのかもしれ ません。とくに、シェルに不農れなユーザーはヒストリー 機能をほとんど使わないのではないでしようか。 とエラそうに書いている私も、率直に申し上げてほんの 一部の機能しか使っていません。というのも、 Emacs ふ うのキー操作を身体 ( 指 ) か檍えているため、あれこれ考 えすに指カ明手に動いてくれるからです。 とはいうものの、ときにはヒストリー機能を使うほうが 便利て早いこともあるので、「ヒストリー機能を憶える必 要はありません」と言いきることもできないわけです。そ こで、以降ではこれだけ知っていれば - ト分と思われる命令 俵 2 ) について説明します。 ヒストリー機能は、コマンドラインでの入力を減らすた めばかりでなく、、、自分が何をしたか " という言当求を残す うえでも有益です。たとえは、作った慮えのないファイル をみつけたり、それとは逆にあるはずのファイルがなかっ たりしたとき、 「誰がこんなファイル作ったんや、ガオー」 「誰か消したんや、ガオー」 「犯人はどこのどいつやー、ガオーガオー」 と吠える前に、 history コマンドで過去の操作履歴を表示 してみると犯人が分かることがあります。 サプシェルとして起動するのを忘れたときにも使えま す。 bash$ for i in do あわてて CtrI ー C で中断する done (for i in do ・ done) 「あっ・ 。僕なのね・・・ ・シ・・ヨッポ、ン」 この命令は、 1 行前に実行したコマンドライン文字列に 展開されます。これは、たとえは次のようにオプション UNIX MAGAZINE 2001.7 make CC=gcc bash$ ! ! CC=gcc あわてて Ct ル C で中断する bash$ make を付け忘れたときに便利です。 この命令は、ヒストリー番号れのコマンドライン文字 列に展開されます。ヒストリー番号は、 history コマン ドを実行すオしは調べることができます。たとえは、「昨 日はいい FTP サイトみつけたなあ。でも、ホスト名を メモするの忘れてしもた」というようなときに、私は、 bash$ history ー grep ftp 525 ftp あっち 581 ftp こっち 583 ftp でっち bash$ ! 581 ftp こっち のように使っています。 ヒストリー番号を直孑欝旨定するとイ甦リなこともあります が、「 3 回前に実行したコマンドやって分かってるんや ・・」というように、何回前という数字が分かっ けど・ ている場合は、いちいち history コマンドでヒストリー 番号を調べるのは面倒です。そんなときは、マイナス記 号で履歴を指定することかできます。 この命令は、 s なて始まるもっとも山も丘のコマンドライ ン文字列に展開されます。ただし、 str に空白文字を含 めることはできません。 たとえは、さきほどのテストプログラム pr 。 g の例で挙 げた 4 つのコマンドは、 !V ー Vi prog. c !gc → gcc —g ー 0 prog prog ・ c 75

2. UNIX MAGAZINE 2001年7月号

特集リ N ー X の基礎知識② ホスト名リスト ホスト名 ューサー名リスト ューサー名 竟変数とシェル変数名リスト 工竟変数とシェル変数名 ファイル名リスト ファイル名 コマンド名リスト コマンド名 厩する文字列 表 1 bash の補完磁皀 キー齠乍 TAB Meta-! TAB TAB Ct rl-x ! TAB Meta-/ TAB TAB CtrI-x / TAB Meta-$ TAB TAB Ctrl-x $ TAB Meta- ~ TAB TAB Ctrl-x ~ TAB Meta-@ TAB TAB Ctrl-x @ カーソルの ( コマンドラインのう巨頁 任意 コマンドラインの頁 系する数 PATH 任意 コマンドの後ろ 任意 コマンドの後ろ 任意 $ て始まる文字列 任意 $ で始まる文字列 任意 ~ て始まる文字列 任意 ~ て始まる文字列 任意 @て始まる文字列 任意 @て始まる文字列 任意 そこで、 /etc/hosts の代わりにユーサーが用意したフ ァイルを bash に読み込ませることができます。それに は、 /etc/hosts と同じ書式で記述したテキストファイル を用意し、そのファイル名を工韆竟変数 HOSTFILE に設 定します。ただし、補完する際に bash は IP アドレスの 部分を無視するので、ホスト名と IP アドレスを正しく合 わせる必要はありません。適当に、、 0 " などと書いておけは よいでしよう。 ファイルの内容を変更したあとで HOSTFILE を再設 定すると、 bash はファイルを読み込みなおして内部のリ ストを明冓築します。 bash て利用できる補完機能を表 1 にまとめておきます。 bash のコマンドライン・インターフェイスには、過去 に実行したコマンドを参照する機能力鞴わっています。 同じコマンドを繰り返し実行したり、いくつかのコマン ドを順番に繰り返し実行する場合などに、毎回同し文字列 を入力するのはイ鮎力ですし、それだけて気力ヾ成入ってきま す。たとえは、小さなテストプログラム prog を書いたり テンヾッグしているときは、以下のようなコマンドをイⅱか ヒストリー機能 74 繰り返し実行するのか普通です。 bash$ vi prog ・ c bash$ gcc -g ー 0 prog prog ・ c bash$ . /prog bash$ gdb prog core これらのコマンド文冽を入力するときには補完機北カ ムヒゞ 使えますが、それでもかなりの文字数を入力しなけれはな りません。こんなとき、、、さっきのコマンド、簡単に実行 でけへんかなあ " とか、、、オプションをちょいちょいと書 き換えられたらええのに " と思うこともあるはすです。 bash には、少ないタイプ数で過去のコマンド履歴を呼 び出して実行したり、編集する機能が用意されています。 これがヒストリー皀です。 おそらく、次の節で説明する、、コマンドラインの行編 集 " の機能がなかった大昔には、ヒストリーはたいへん便 利な機能だったのでしよう。ところが、ヒストリー機能 ではタイフ。数は減らせますが、その代わりにちょっとした パズル的な思考と暗号のような命令を憶える必要がありま す。コマンドライン上の文字を Emacs のように編集でき るシェルの登場以来、ヒストリー機能を使いこなせるユー FIGNORE HOSTFILE UNIX MAGAZINE 2001.7

3. UNIX MAGAZINE 2001年7月号

特集 UN ー X の基礎知識② のユーサーのホーム・ディレクトリに各種の設定ファイル が自重加勺に作られます ( オプションを指定しないと作成さ れない場合もあります ) 。 このファイルは、ユーサー作成コマンドカ当 E 成するわけ ではなく、どこかにあるディレクトリからコピーされてき ます。このディレクトリは、手許にあるシステムで調べた ところ、 Linux や Solaris では /etc/skel 、 BSD 系の UNIX では /usr/share/skel でした。ただし、システム によって異なる可能性もあるので、正確な場所は useradd や adduser のマニュアルて十ヾてください。 ここにあるテンプレート・ファイルは、システムによっ て、、これやったら、なくても同じゃ " というものから、、 こまて世話焼いたら、自立じ、か育たん " というものまであ ります。いすれにせよそのまま使えるとは思いませんが、 システムに固有の設疋に関するヒントか書かれていること もあるので、すくなくとも 1 回は目をとおしておきましょ う。もちろん、設定ファイルをスクラッチから書くときの 彡としても使えます。 もっとシェルを使おう とも、このくらいは知っていないと困る " という程度のも ページ数が多くなってしまいましたが、内容は、、すくなく について説明しました。シェルの機能はたくさんあるので 今回は、コマンドラインでの bash の基本的な使用法 のにしたつもりです。 シェルは美しいグラフィックで彩られているわけでは なく、操作もキーポード中心で、わけの分からない記号を 使ったり、シェルか返すメッセージもまるで暗号のよう にみえます。そのため、シェルにれないうちは、たんな る、、ほかのプログラムを起動するための小道具 " として利 用しているのではないでしようか。しかし、使っているう ちに、シェルには万能ナイフのようにいろいろなツールが 備わっていることが分かってくるでしよう。シェルを使い こなせるようになると、複数のファイルを処理するときな どの作業効率は確実に上がります。そして、作業がスムー ズに進められるようになると、だんだん UNIX を利用す るのか楽しくなってきます。 こで説明したことをマスターしたら、次はせひマニュ アルを読んでください。 「たっ、こんなこともできるんか ! 」 と驚きの連続は必至で、シェルの世界から足を洗えなくな ってしまうでしよう。 コマンドラインでの操作に慣れたら、シェル・スクリ プトにも挑戦することをお勧めします。いままで、 やるんやったつけな。あ違うがな。こうやったかな。 " と長い時間をかけてやっていた作 あ、これも違った・・ 業をあっという間に、しかも間違いなく終えることができ るようになります。 UN Ⅸからみたハードウェア UNIX システム上で GNOME や KDE などの GUI 、 あるいは bash や tcsh といったコマンドラインからメー ルのやりとりや文書作成、ソフトウェア開発などをしてい ると、 UNIX か力いているハードウェアと妾かかわる作 業をすることはあまりないかもしれません。山も丘は OS の ハードウェア・サポートか充実し、インストール・プログラ ムも使いやすくなってきたため、 PC やワークステーショ ンに新たに UNIX をインストールする際のハードウェア 関連のトラブルも減ってきています。しかし、 UNIX で 80 最新のハードウェア、たとえば Gigabit Ethernet カー ドやビデオキャプチャ・カードなどを利川したり、最新の ノート PC に UNIX をインストールする場合には、ハー ドウェアに関する知ルフゞ必要になってきます。 以下では、 UNIX か動く PC を例にとってハードウェ アについて説明します。ただし、ハードウェアそのものや 取付け方法には触れません。 UNIX というソフトウェア からハードウェアがどのようにみえるのか、というところ を説明していきます。 UNIX MAGAZINE 2001.7

4. UNIX MAGAZINE 2001年7月号

特集リ N ー X の基礎知識② ・ /prog ! gd → gdb prog core のようにせいぜい 3 文字を入力するだけで実行できま す。 さらに、コンパイルまでに精力を使い果たし、プログラ ムを実行する余力が残っていない場合は、 gcc -g ー 0 prog P て og ・ c & & . /prog と書くこともできます。 この命令は、、を含むもっとも去も丘のコマンドライン 文字列に展開されます。前述の、、 ! 、 " と異なり、 s 扉に 空白文字が入っていてもかまいません。 、、 s なて始まる " ではなく、 、 s を含む " という点に注 意してください。よく考えすに str の文字列を指定す ると、ときどき思わぬコマンドラインにマッチし、 図しないコマンドが実行されてしまうということがあり ます。 私はこれで佃Ⅱ可カヨい目に遭ったことがあるので、コマ ンドラインの編集機能の逆方向インクリメンタル文字列 検索 (Emacs の CtrI-r と同し ) を好んで使用してい ます。 s ノ s な 2 この命令は、 1 行前のコマンドラインに含まれる文字列 s なノを、 2 に置換した文字列に展開されます。分かり ということです。 make CC=gcc bash$ AkaAkeA CC=gcc しまった。直すついでにオプションも追加しよう b ash : maka : command not f ound b ash$ maka にくいので、例を挙げて説明しましよう。 76 diff —c filel fi1e2 ー less bash$ *ff*ff —c- ありや、この形式の d 飛は読みにくい bash$ diff filel fi1e2 ー less てイ吏うこともあります。 いません。そのため、途中にオプションを挿入する目的 文字列 s なノと、 2 は、空白文字を含んでいてもかま する命令を使います。 当するすべての文字列を置換したい場合は、頁で説明 文字列の置換は、最初の s なノだけに適用されます。該 この命令はちょっとしたタイプミスを修正するために使 う場合が多く、上の例のように、、追加 " することはあま りないと思います。 後ろに文字列を追加しない場合は、最後の、、一を省略 することができます。つまり、ほとんどの場合は、 s 扉ノ s 2 という書式で実行します。 ・ ! ! :gs/strl/stf 、 2/ この命令は、 1 行前のコマンドラインに現れた文字列 strl をすべて、 2 に置換した文字列に展開されます。 sed や vi について匁第あると、なんとなく、 s 7 s 2 g ! ! : s/str1/str2/g のように書きたくなるのですが、これらの命令は最初の s な 7 しか置換しません。おまけに、コマンドラインの 最後に g というゴミを付けてくれます。その理山は、 次の一ド線部が 1 つの命令だということが分かれは理解で きるでしよう俵 2 の書式をじっくり眺めてください ) 。 s な 7 s 扉 2 g ! ! :s/str1/str2/g つまり、下線部分について置換処理がおこなわ s なノ が s 行・ 2 に置き換えられます。そして、最後の g は、 コマンドラインに追加された文字としてそのまま残り、 末尾に付いてしまうわけです。 ヒストリー機能の設定 bash には、ヒストリー機能の動作を設定する竟変数 がいくっか用意されています。そのなかから、代表的なも ・ HISTFILE ます。デフォルトは 500 です。 シェルがメモリ内に記慮するヒストリーの行数を設疋し ・ HISTSIZE のについて説明します。 UNIX MAGAZINE 2001.7 . bash-history です。 デフォルトは、ユーサーのホーム・ディレクトリの れます。 時には、このファイルから前回のヒストリーか読み込ま リーを書き出すファイル名を指定します。シェルの起動 シェルか終了するとき、メモリ内に記億しているヒスト

5. UNIX MAGAZINE 2001年7月号

特集リ N ー X の基礎知識② のように、一当里のコマンド実行を定義することも - 可能です ( 誌面の都合長て才斤り返しています ) 。 ェイリアスはたしかに便利ですが、むやみに使うと落し 穴にはまってしまうことがあります。以下に、工イリアス 展開についての注意点を挙げます。 ・同し工イリアスは適用されない いったん展開された文字列は、さらに同しェイリアスで 置き換えられることはありません。 たとえば、一屬己の ls の例では、 ls 1s ls ls —F -F ls を展開 ls を展開 ls を展開 -F -F -F ls を展開 ていて、同じものを 2 回適用することはありません。 ませんが、 bash は過去に適用した工イリアスを記慮し のように無限に展開されるのでは・・・・と思うかもしれ のため、 alias aaa alias bbb— alias ccc= alias ddd= ="bbb A" " ddd C " B " D" ・ヒストリーには、ェイリアス展開前のコマンドラインが コマンドライン・ヒストリー ( コマンド実行の履歴 ) に 登録されるのは、ェイリアスによって置き換えられた文 登録される リダイレクトとバイプ 字列ではなく、展開される前の文字列です。 き、操作コマンドは端末から読み取られ、結果は同しく端 実行すると、以下のように対話式に操作できます。このと れています。たとえば、 nslookup コマンドを引数なしで (stderr) は、そのコマンドを実行した端末に結び付けら 標準入力 (stdin) や標準出力 (stdout) 、標準ェラー出力 通常、シェルのコマンドラインから実行したプロセスの 出力を任意に変更する機能です。 リダイレクトとは、コマンドへの入力、コマンドからの リダイレクト > ww . ni c . ad ・ j p Address : 127 . 0 . 0 . 1 Defau1t Server: localhost . iij ・ ad ・ jp bash$ nslookup 末に表示されます。 のようにループしたェイリアスを作っても、無限ループ コマンドとして aaa を実行すると、次のように展開さ にはなりません。上の例のように定義されている場合、 れます。 bbb A ccc B A ddd C B A aaa D C B A aaa を展開 bbb を展開 ccc を展開 ddd を展開 実行 Address: Name : Address : A1iases : しかし、 入出力を、 localhost . iij ・ ad ・ jp 127.0.0. 1 wwwl . nic. ad ・ jp 202. 12 .30.144 www. nic. ad ・ jp リダイレクトの機能を利用すると、 プロセスの 最後の aaa は、すでにいったん置き換えられている こで展開処理は終了し、その結果が実行され ため、 ます。 ただし、このような工イリアスの定義は混乱のもとにな るので、やめておいたはうが隹です。 ・エイリアスとして展開されるのはコマンド名だけ 引数やオプションは工イリアス展開の対象にはなりませ ん。つまり、 basål$ echo ls の、、 ls " は展開されません。 68 ・ファイル ・ソケット ・ヒアドキュメント ( 入力のみ ) に結び付けなおすことができます。 標準入力のリダイレクト 標準入力をリダイレクトする書式を以下に示します。 bash$ mail く五 / e れ 07 れ e UNIX MAGAZINE 2001.7 —s ” he110 " kirin く五 e110. txt たとえば、次のように使います。

6. UNIX MAGAZINE 2001年7月号

特集リ N ー X の基礎知識② れます。イ料去というと、なんだか格式張った感しを受けま シェルは、ユーサーからコマンド入力を受け取り、そ の入力文字列を解釈して UNIX カーネルに命令を発行し、 す。プログラムを実行したあとで「結構なお手前で」とか、 「こちらはどちらの作で ? 」「 GNU でございます」といっ プログラムを起動したり、一日亭止や強制終了などのプロ た受け答えをしなければいけないと思うかもしれませんが セス制御をおこないます。つまり、シェルはユーサーと UNIX カーネルのあいだを仲介しューザーの命令をカー ( そんな人はいない ? ) 、 UNIX の場合はオプションの書き 方や、標準入力と標準出力の使い方のことです。つまり、 ネルに送ったり、カーネルからのメッセージをユーザーに UNIX 上のほかのプログラムと上交したとき、 ( 悪い未 伝えたりします。 で ) 異彩を放っプログラムを書かないための知識を養うと 一方、シェルには変数と変数展開、関数定条件分皮 いうことです。 やレープなどの制御文を処理できる機能があります、たん 山も匠の UNIX では GUI アプリケーションが充実して にコマンドラインでプログラムを実行するだけでなく、複 きたので、 Windows などと同様な使い方をしている人も 雑な処理を実現するプログラム言語としてのインターフェ いるでしよう。もちろん、特定の GUI アプリケーション イスをユーザーに提供します。このような、シェルを用い を利用しておこなう作業が寸イ本ならは、そういった使い方 て実行するプログラムをシェル・スクリプト ( またはシェ をしてもかまいません。しかし、場合によってはコマンド ル・プログラム ) と呼びます。 ラインで操作をせざるをえなかったり、コマンドラインで ところで、なぜ、、シェル ( shell) " と呼はれているので の作業のほうが GUI よりも楽なこともあります。それに しようか。石油会社を思い浮カべる人がいるかもしれませ もかかわらす、「僕はもともと Macintosh のユーザーで んが、まったく関係ありません。シェルは、カーネルと すから」とか、「自宅では Macintosh しか使っていませ ューサーのあいだに位置し、カーネルを覆う、、殻 " である ん」と胸を張り、いつまでもコマンドラインに農れようと ことからこう名付けられたそうです。 しないユーサーも困りものですが・ UNIX の牛致の 1 つは、カーネルとシェルカ材懾造的に 去も丘は Linux や FreeBSD などの PC UNIX か普及 分離されているため、ユーサーが独自のシェルを作った したこともあって、いわゆる、、新人君 " でもコマンドライ り、インストールしたり、自分がデフォルトで使うシェ ン・インターフェイスに慣れている人が多くなってきまし ルを容易に変更できる点にあります。 た。それはそれでいいのですが、たいていは、、僕 (8J0 の そのため、 UNIX では数多くのシェルカ咄発されてき 言算機 " しか知らすに過ごしてきたため、 OS が異なる計 ました。ューサーは、そのなかから好みに合ったものを選 算機でのシェル環竟の設定ガ去が分からす、、、僕 ( 稠の び、用途に応して使い分けることができます。いままでに 算機 " 環竟に閉しこもる傾向カ襁いようです。 作られたシェルを細かく分類すると、おそらく数十不頁に 今回は、代表的なシェルの 1 つである bash を例にと なると思いますが、現在使われているシェルは大きく B り、その基本的な使い方と、複数の OS を使いこなすため シェル ( sh ) 系と C シェル ( csh ) 系の 2 つに分けられま の設定ガ去について説明します。 す。そして、ほとんどのシェルは、既存のシェルになん らかの機能を付け加えたものと考えてよいでしよう。たと えは、 bash は sh を、 tcsh は csh を孑長したものです。 変わったところでは、データベース・サーバーに接続し、 シェルのコマンドライン・インターフェイス上で SQL を 実行できるものもありますが、これも既存のシェルに機能 を追加したものです。 bash とは bash (Bourne-Again SHell) は、 GNU OS の標準シ ェルとして開発されたものです。その名前から孑則できる 一卩 シェルと bash UNIX におけるシェルは、おもに次の 2 つの彳齬リをもっ ています。 ・ OS 上でプログラムを夫行するインターフェイスをユー サーに提供するためのコマンド言語 ・ほかのプログラムを組み合わせて実行し、複雑な処理を 実現するためのプログラム言語 52 UNIX MAGAZINE 2001.7

7. UNIX MAGAZINE 2001年7月号

ヒストリーをファイルに書き出さない場合は、この竟 ・ HISTCONTROL ます。デフォルトは 500 です。 シェルがファイルに書き出すヒストリーの行数を設定し ・ HISTFILESIZE 変数を unset します。 UNIX MAGAZINE 2001.7 く同しなので、説明しません。 カーソルを横方向に動かすコマンドは Emacs とまった 横方向の移動 です。 オプションが用意されているのも、なんともニクイところ 今回は紹介しませんが、 vi と同オル ) キー操作に変更できる Emacs を使っているユーザーなら違和感はないはすです。 に示したようにキー操作はほとんど同じなので、ふだん ンを Emacs と同しように編集できることでしよう。表 3 bash の便利なところは、なんといってもコマンドライ コマンドラインの行編集 よくなります。 登録されなくなるので、無駄なことをして喜はなくても も、 1 行前と同しコマンドライン文字列はヒストリ を設定します。すると、何回 lpq や mailq を実行して 的な決楽になってしまうので、工竟変数に ignoredups その喜びを味わうのもいいのですが、一歩間違えは自虐 したくらいの喜びが溢オ L てきます。 ものか表示されたときは、炎の硼莫でオアシスを発見 ろう " と思いながら CtrI-p を入力し続け、ついに違う ンか延々と表示されます。、、いったいどこまで読くのだ 何回入力しても、いつまでも経っても同じコマンドライ はホントです ) 。たとえは、行・編集コマンドの Ctrl ー p を ヒストリー機能が使いにくくなってしまいますにちら くされ ( ウソです。かなり講長しています ) 、その結果、 と、ヒストリーの内容がこれらのコマンドだけて哩め尽 コマンドは、しばしば佃も続けて実行されます。する たとえは、 lpq や mailq などのキューをチェックする じ場合はヒストリーに登録されなくなります。 を設定すると、コマンドラインの文字列が 1 行前と同 この環境変数の値として、、 ignoredups" という文字列 表 3 コマンドラインの行コマンド (Emacs 編 ) Ctrl-b Ctrl-f Meta-b Meta-f Ctrl-a Ctrl-e 縦方司の多動 Ctrl-p Ctrl- n Meta- く Meta-> ・向び多動 ヒストリーの Ctrl-s Ctrl-r 1 文字左に移動 1 文字右に移動 1 単語左に移動 1 単語右に移動 行豆比多動 行末一多動 1 行前のヒストリーを表示 1 行先のヒストリーを表示 もっとも旧いヒストリーを表示 もっとも新しいヒストリーを表示 ヒストリーの前方インクリメンタル検索 ヒストリーの後方インクリメンタル検索 文字列畭とペースト Ctrl-d BS Ctrl-k* Ctrl-u* Ctrl-w* Meta- / Meta-d* Meta-BS* CtrI-y キーポードマクロ Ctrl-x e Ctrl-x Ctrl-x カーソル位置の 1 文字を削除 カーソルの直前の 1 文字を削除 カーソル位置から行末までを削除 カーソルイ立置から行頭までを削除 カーネルの直前から空白までを削除 カーソル位置と前後の空白を削除 カーソル位置以降の単語を削除 カーソル位置以前の単語を削除 カーソル位置にペースト マクロ呼出し マクロ定冬・了 マクロ定用始 縦方向の移動 bash における縦方向のカーソル移動は、ヒストリーの 参照として扱われます。つまり、 Ct ル p はヒストリーを 1 つ戻り、 CtrI-n はヒストリーを 1 つ進みます。もちろ ん、戻った先のヒストリーを編集し、それを実行すること もできます。 ヒストリーの検索 Emacs でのインクリメンタル文字検索は、ヒストリー に対してもいに実行することかできます。 ところが、一殳に CtrI-s は端末の表示を一時的に停止 するキーに割り当てられていることが多く、そのままでは 前方検索は実行できません。使用したい場合は、どちらか の設定を変更してください。 77

8. UNIX MAGAZINE 2001年7月号

特集 UN ー X の基礎知識② 文字の削除とペースト ↓ ます。しかし、コマンドラインのように編集する対象が 1 と同様のイ ( リージョンの削除 ) に変更することもでき キーバインドをカスタマイズすれば、 CtrI-w を Emacs bash$ command ーー 1 。Ⅱ g ー■← Meta-BS を入力した ← CtrI - w を入力した bash$ commandU bash$ command ——long—optionn の違いがあります。 す。また、 Meta-BS (Backspace) とは次のような動作 除します。オプションや引数だけを消したいときにイ叫リで Ctrl-w は、空白文字で区切られた 1 つの文字列を削 のようにコマンドラインの文字列か削除されます。 bash$ ロ の状態で CtrI-u を入力すると、 bash$ c ommand ー opt i on annakot 0 s 0 取取 akOt 0 ■ にイ叫リです。たとえは、 変わった場合、コマンドラインをきれいさつばり消すとき CtrI-u は、コマンドラインを入力している途中で気が 動きをするので注意しましよう。 ただし、 Ctrl-u と Ctrl-w の 2 つは Emacs と異なる と同様です。 録された文字列が Ctrl-y でペーストできる点は Emacs ング " に登録されることを表しています。キルリングに登 表 3 で * 印を付けた操作は、削除した文字列が、、キルリ いいます ) も同様におこなえます。 文字の削除とペースト (Emacs 用語では、、ヤンク " と ルチ・プラットホームでの設定 ードマクロも Emacs とい膕に言立できます。 どのように使え ( 叫リなのかは分かりませんが、キーポ キーポードマクロ 行しかない場合には、あまり役に立たないと思います。 場合は、、、僕 ( 私 ) の計算機 " という環境に閉しこもって れています。そして、そのような竟で f 士事や研究をする さまざまな不軽頁のアーキテクチャや OS のホストが運用さ 大学や企業など、ある程度の規模のネットワークでは、 78 はいられません。さらに、共同でプログラムを開発すると きは、、、僕 ( 私 ) の引・算機では動いた " では許されないで しよう。 共同作業をする際には、ファイルの共有はもちろん、指 定された開発マシンの上て、作業をおこなわなけ川まならな かったり、開発マシンのアーキテクチャや OS か複数あっ たりするのは、、よくあること " です。 こで作業しなさい " と指定された引算 このように 機では、たいていの場合、自分のシェルを指定する程度の わがままは聞いてもらえるはすです。 ときどき、、、僕 ( 私 ) の計算機 " では器用に操作してい るようにみえるのに、共用計算機ではぎこちなく作業して いるユーサーをみかけることがあります。理由を訊くと、 ふだん使っているシェルではないとか、シェルの設定を していないといった答カ亟ってきます。そして、シェル の設定をしない理由の多くは、、シェルの設定ファイルがそ の計算機ではうまく動かない " からなのだそうです。 「これはこれでれました」 と明るく答える人もいますが、コマンドラインの操作は 依然としてぎこちなく、効率よく作業できるとは思えま せん。 、、僕 ( 私 ) の言算機 " 以外のホスト上でストレスなく作業 を進めるには、ふだんと同様のシェル環境が使えるように しなければなりません。それには、計算機環境の相違を判 別し、環竟変数やシェル変数をそれぞれに合わせる設定フ ァイルを用意する必要があります。 このような設定ファイルを書くときに注意すべきポイン トを説明します。 ・ bash のノヾス Linux を除いて、 bash はシステム標準のシェルではあ りません。そのため、 bash がインストールされるディ レクトリは工竟ごとに異なります。 サイト内で統一したポリシーに従って管理されているの であれは間題はないのですが、一貫性が保たれていな いところで NIS を使っていると、あるホストにログ インできないことがあります。たとえば、あるホスト では bash コマンドが /bin/bash に、別のホストで は /usr/local/bin/bash にあるといったような場合、 NIS に登録されている内容によって、一方のホストに UNIX MAGAZINE 2001.7

9. UNIX MAGAZINE 2001年7月号

特集リ N ー X の基礎知識② 反対に、最初のコマンドが失敗したときに次のコマンド を実行してはしいこともあるでしよう。この場合は、 2 本 の糸贈奉 ( Ⅱ ) で区切ってコマンドを記します。使用例は リスト 1 を参照してください。 以上のようにしてコマンドを実行すると、プログラムが 終了するまでシェルのプロンプトば区ってきません。つま り、次のコマンドを実行するには、実行中のプログラムの 終了を待たなけれはなりません。 「そんな悠長なこと、やってられへん」 という、、いらち " な人は、バックグラウンド・プロセスと して起重丿けるといいでしよう。以下の例のようにコマンド の最後に、、 & " ( アンパサンド ) を 1 つ付けると、そのフ ログラムはバックグラウンドで実行されるため、すぐに次 のコマンドが入力できます。 bash$ xdvi article . dvi & 複数のコマンドを & で区切って言当すれば、各プログ ラムを同時に起動することもできます。たとえは、 bash$ make orld & vmstat 15 とすると、 make はバックグラウンドで、 vmstat はフォ ジョブ制御 アグラウンドで実行されます。 62 グラウンド・プロセスに相当します。そして、 bash でも フォアクラウンド・プロセス、脇に伏せてある本がパック 本をプロセスに置き換えると、手に持って読んでいる本が 開を繰り返しながら読み進んでいくでしよう。机を端 を読むときには、机の上に何冊かの辞書を置き、中断と再 て続きを読み始めます。このように、辞書を引きながら本 ます。漢字と言葉の意味を、冬えたら、最初の本に戻っ あった場合は、その辞典を開いたまま漢和辞典を取り出し たりします。国語辞典の語義説明の部分に読めない漢字が はしおりを挟むなり、開いたままの状態で伏せて脇に置い きたら国語辞典を引くでしよう。ヾているあいだ、本に たとえば、本を読んでいて意 3 未の分からない言葉カ咄て です。 ることができます。この機能がジョブ制御 (job control) アグラウンドとバックグラウンドを往ったり来たりさせ bash のコマンドライン上で起動したプロセスは、フォ 、、手に持っている本を置く " 、そして、、脇に置いてある本 を手 0 コ ( る " に相当する操作が可能なのです。 シェルの操作に農れていないユーザーがコマンドを実行 する様子を観察していると、しばしば次のような光景に遭 遇します。ます、開いているいくつかの kterm ウインド ウのなかからコマンド入力待ち状態のものを探し、みつか ればその上でコマンドをフォアグラウンド・プロセスとし て実行します。一方、すでになんらかのプロセスか実行さ れていてコマンド入力待ち状態の kterm がない場合は、 新しい kterm ウインドウを開き、やはりその上でコマン ドをフォアグラウンド・プロセスとして実行します。これ では、フォアグラウンド・プロセスの数だけ kterm がある ことになり、さきに実行したコマンドを探すだけでも大変 です。このような状態は、 UNIX を使っているというよ り、使われているといったほうが当たっているでしよう。 ジョブ制御の機能を活用すれは、 1 つのシェルのなかで 複数のプロセスを制御し、一漣の操作を効率よくおこなう ことができます。なによりも、 UNIX を使いこなしてい るような気分になれるのカ鱚しいところです。 プロセスの中断と再開 フォアグラウンド・プロセスとは、コマンドラインから & を付けすに起動したプログラムのことです。ューザー は、フォアグラウンド・プロセスの入力要求に応えてキー ポードから入力したり、 CtrI-C を入力してプロセスを強 制的に終了させたりすることができます。 プロセスを終了させてしまうのではなく、 「ちょっと、どいといて」 と一印判勺に処理を中断 ( 一日舸亭止 ) させたい場合もありま す。たとえば、ファイル名を入力しようとして、、あフ ァイル名なんやったつけ " とか、ファイルを書き込むディ レクトリを入力するときに、、ところで、ディスク容量は足 りるんかいな " というような場合、フォアグラウンド・プ ロセスに向かって、 「別のことしたいから、しばらく休んどき」 と言いたくなることがあります。 こんなときは、 CtrI-Z を入力してプロセスを強制的に 中断させることができます。 プロセスを中断させたシェルは、プロンプトを表示して UNIX MAGAZINE 2001.7

10. UNIX MAGAZINE 2001年7月号

とおり、 sh (Bourne shell) との互換生を保ちつつ、 ksh (Korn shell) や csh か引リな機能を採り入オ L 、さらに 機能を拡張したシェルです。また、 POSIX 1003.2 とい う規格も満たしています。 以下に、 bash の代表的な特徴を簡単に紹介します ( 各 ・ヒストリー ( コマンド履歴 ) ふうにカスタマイズすることも可能です。 ンクリメンタル検索などができます。キーバインドをⅵ Emacs と同様な操作で文字列編集やカーソル移動、イ ・コマンドライン編集 機能の言田はあとで説明します ) 。 UNIX MAGAZINE 2001.7 Windows などを含む数多くの OS 上て使えます。ほ イプサイトに置かれています。ソースコードは不身直生に優 bash のソースコードは、世界各地にある GNU アーカ を実行すると、、 H20 " と表示されます。 e cho H$ ( ( 1 くく 1 ) ) 0 をコマンドに反映させることができます。たとえば、 シェルの内部で四則演算やビット演算をおこない、それ ・数価寅算 タマイズするための命令が数多く用意されています。 bash には、プロンプトとして表示される文字列をカス ・プロンプトのカスタマイズ る機能です。 、、別名 " を定義しておき、文字入力を減らすことができ えやすくなります。ェイリアス (alias) とは、これらの 合など、たくさん文字を入力するのは面倒ですし、間違 コマンド名が長かったり、つねに指定する引数がある場 ・エイリアス ( 別名定義 ) ことで、 1 つの端末で多くのプロセスを制御できます。 プロセスをフォアグラウンド俵 ) にもってきたりする ックグラウンド ( 裏 ) で実行したり、バックグラウンド・ プロセスの実行を一判勺に停止させたり、プロセスをバ ・ジョブ制御 (job control) ル変数や竟変数名をキー 1 って補完する機能です。 コマンド名、ファイル名、ホスト名、ユーザー名、シェ ・自重丿黼完 た、その文字列の一にを編集する機能もあります。 それまでに実行したコマンド文字列を参照できます。ま とんどの UNIX では、 configure と make を実行するだ けでコンパイルできるでしよう。 ログインと設定ファイル UNIX システムを使い始めるときには、 login: unixmag Password : のような、、ログイン・プロンプト " か表示されます。 こで正しいユーザー名とパスワードを入力し、認証を 経ることを一般に、、ログインする " といいます。そして、 ログインしたときに起動されるシェルが、、ログインシェ ル " です。このシェルはユーザーの操作に従う形式て処理 を実行していくため、、、対話型シェル " とも呼はれます。 こで、 bash を起動してみましよう。 bash$ bash bash$ プロンプトか変わらないので何も起きなかったようにみ えますが、じつは bash の上で bash か力いています。 のとき、 2 つ目の bash はログインシェルではありません が、ユーザーは対話的な操作がおこなえます。ですから、 このシェルは、、 ( ログインシェルではない ) 対話型シェル " です。 もう 1 つ、ログインシェルでも対話型シェルでもない シェルがあります。これが、シェル・スクリプトを実行 しているシェルです。 シェルの夫行形態と、それぞれのシェルか読み込む設定 ファイルについて説明しましよう。 シェルの 3 形態 上で述べたように、シェルには次の 3 不鶤頁の実行形態 があります。 ・ログインシェルである対話型シェル ・ログインシェルではない対話型シェル ・対話型シェルではないシェル もったいぶった書き方をしましたが、内容はとくに難し くありません。 対話型シェルは、ユーサーにコマンドライン・インター フェイスを提供し、ユーサーが入力した文字列を解釈して 53