使っ - みる会図書館


検索対象: UNIX MAGAZINE 1994年5月号
150件見つかりました。

1. UNIX MAGAZINE 1994年5月号

UN Ⅸへの招待 2 ンドを繰り返すことになっています。リスト 1 の for コ マンドでは、この機能を利用してⅲ以降を省略したとい うわけです。 文 :you 君、分かりましたか ? 生徒 You 等。では、次の質問いいですか ? リスト 1 では、存雀しないファイルが 1 つでもあれはプログラ ムを終了するという目的で file-err をフラグにして いますが、こんな面倒くさいことをしなくても存在し ない ( あるいは読めない ) ファイルがみつかった時点 でプログラムを終了してもいいんしゃないですか ? そ うするとリスト 1 の 5 ~ 17 行目は、こんなふうにすっ done exit 3 no such file or gan't read" 2 > & 1 echO "$comname : $i: then do for # ファイルの存在チェック [ "$stdin" = "off" ] then ています ) 。 きりすると思うんだけど ( 誌面の都合上て折り返し ルをいくつ力指定して cat コマンドを実行すると、す こしこだわったんだなあ。たとえば、存在しないファイ 文先生 : ふむ、それでもかまわないと思うけど、先生はす べてのファイルに関するエラーメッセージを出力する ても、 こういうところも UNIX の流儀に従っておいた ほうがいいでしょ ? 生徒 You : なるほどお。しゃあ、最後の質間。 17 行目の exit の引数が 4 になってますけど、これは 3 の間違い しゃないのですか ? 先月のプログラムでは、 1 と 2 を 使ったでしょ ? だから、次は 3 だと思うのだけど。 文 : はいはい、 3 でもいいですよ。終了ステータス (exit の引印は正常終了は 0 にするけど、異常終了 のときはエラーの種類が分かるように、それぞれの工 ラーごとに違う番号を使えば何番を使ってもかまいま せん。前回もそう説明したよね ? 先生には、 1 、 2 、 4 、 8 、 16 、 、という順番で使う癖があるだけです。じ でしよう ? % cat n a i cat: Ⅱ : NO such cat : a: NO such cat : i : NO such fi1e file file directory 0 て directory directory 0 て or ほらね ? たいていの UNIX コマンドは、引数で指定 されたすべてのファイルについて存在を検査して、存 在していないファイルすべてについてエラーメッセー ジを出力してくるわ。 1 つだけ謌べて、それカ在しな いからといって終了はしない。 label コマンドは、これ を真似たということなの。プログラムが多少吠きくなっ 170 ゃあ、もう質問はいいかな ? 生徒 You :OK です。 文 : それでは次に進みましよう。 獰 X のプリアンカレの作成 シェル・プログラムとは関係ありませんが、 (label コマンドに関係があるので ) INIbX の入力ファイルの形 式について説明しておきましよう。 I*TFfX では、整形 する文書を INIÉX のコマンド \begin{document} と \ end { d 。 c Ⅷ e Ⅱ t } のあいだに言己します。また、 \begin {document} の前には、さまざまな宣言力己できます。 この部分を、、プリアンプル " と呼びます。これらをファ イルに言すると、ファイル全体は次のようになります。 プリアンプル \begin{document} 文書 \end{document} さて、 label コマンドではプリアンプル部分でラベル用 紙の大きさなどを定義し、文書部分にラベルになるデー タを置きます。プログラムの次のステップでは、これら のデータを作成します。 1 寉には、マクロ " です。マクロにも宣言などいくっカ不職頁があ りますが、ここでは説明を簡単にするため、コマンド " と総称します。な お、マクロは先頭が \ て始まります。 UNIX MAGAZINE 1994.5

2. UNIX MAGAZINE 1994年5月号

23 emaCS 入門 春の夜の夢の浮橋とだえ たんなる情景詩とも妙に色つばい歌とも捉えられるこの 歌、でもいまの気分しやどっちにもならない。だってこっ ちは春の昼間の夢が途絶えたんだもの。 いい気分でお昼寝してたのよ。ああ、だってきようはも うなんにも予定がない。仕事も家事も片づけたし、集金は ひととおり払ってしまったし。だからこのままゆっくりお 日様が陰るまでお昼寝をするはすだった。なのに、なんで いまごろ電話のベルが ? このまま出ないでおこうか。いやいやもしかしたら重要 な用件かもしれない、それにもし電話に出なかったがため に損をしたらもったいない ! えーい、頑張って起きるぞ。 「あ、失礼しました ( ガチャン ) 」 「はあ、こちら若い女性ではありませんけど」 ンケートをお願いしているのですが ? 」 「こちら XXXX という雑誌ですが、独身の若い女性にア 「ふあい、もひもひ」 UNIX MAGAZINE 1994.5 向いても、縦向いても、本を読んでもなんだか眼が冴えて んが寄ってきてくれません。ごろんと寝っ転がっても、横 そうして、怒りに燃えてしまったあとでは、もう睡魔さ だわ。 胸に沸きたつ大きな怒り どころか、 峰に別るる横雲の空 電話に出てしまうなんて、なんてもったいない。 ないだろうなあ。それともいたすら電話だろうか。こんな うーなんだったんだあ。手当たり次第に電話したんしゃ 荒井美千子 しまった。うーん、仕方がない。最後の手段だ。計算機に 向かおう。原稿でも書いていれはきっとまた眠くなるにち がいない。 ・・ということで、眠れなくなってしまった筆者にしば らくおっき合いください。ところで、皆さんは寝る前に何 かおましないをしていますか ? 寝酒、寝煙草なんかはポピ ュラーですよね。筆者は寝マンガが好きですが。え、寝 UNIX MAGAZINE の方もいるんですか ? それはそれ は。でも、あれは枕にするにはちょっと低いし、積み重ね ると滑ってしまいますよ。 それでは、寝物語に MuIe で外字を使うためのさまざま な方法をお話ししましよう。外字を使うといっても目的や どのような環境で使うかで実装方法も異なります。たとえ ば、 、、ちょっと試してみたいだけなので、とにかく簡単にク 、、ひろくューザーに使ってもらうために、なるべく汎用的 とか、 今回は実装の難易度を考えて、 などが挙げられます。 135 表示する作業はそれほど難しくないので、安じ、してお昼寝 の順に説明します。たとえ途中で寝てしまっても、外字を 4. 新規にコード系を作る する 3. 既存のコード系の文字セットを外字の文字セットと交換 2. 既存の文字セットを外字の文字セットと交換する 1. 既存の文字セットに数文字の外字を追加する

3. UNIX MAGAZINE 1994年5月号

もとの argv[O] になります。 errno が ENOEXEC であ ることを確認していますが、これは、ファイルは存在し たがバイナリ形式の実行ファイルではなかった " こと を示しています。その場合には、 INTERP マクロに定義 されているシェルを実行します。 リスト 1 のプログラムではシェルと同様な操作をおこ ないましたが、インタープリタ形式のファイルが連鎖し ているときに、それらを次々と調べて実行するプログラ ムを作ることもできます ( リスト 2 ) 。このプログラムに ついて簡単に説明しておきましよう。 execve に失敗して、かっそのときの errno の値が ENOEXEC の場合にのみ実行することや、何かに失敗し たときに execve のエラーコードである一 1 を返すのは、 リスト 1 のプログラムと同様です。ファイルがインター プリタ形式のものならば、引数の準備をして interp を 再帰的に呼び出しています。再帰的に呼び出すために、 同しファイルをインタープリタとして呼び出さないよう な工夫もしています。この関数を実行した場合、 errno の値が execve の設定するものと異なることがあるので 注意してください。 ちょっと脱線してしまいました。話をファイルの実行 に戻しましよう。シェルでは、シェル自身は生き続けな がらはかのプロセスを起動しますが、 exec だけを用い たのではこれは実現できません。このためにシェルは、 fork と exec を組み合わせて使っています。 fork により 子プロセスを作り、子プロセスがすぐに exec を実行す #include く stdio . h> たとえば、次のようになります。 るのです。 main ( ) int pid; if ((pid = fork()) く 0 ) { fprintf (stderr , exit(l); 土 f ・ (pid = execlp("/bin/ls" " ,/vmunix" fprintf (stderr , ( char "fork く "exec failed\n") ; 164 exit ( 0 ) ; printf ( "Parent\n" ) ; exit(l); このプログラムでは、 fork で作成した子プロセスで execlp を実行しています。そのため、親プロセスでは ほかの処理がおこなえます。ここではメッセージを出力 しているだけですが、シェルでははかのプロセスを起動 したりューサーからの入力を待ったりしています。 メモリの節約 さきはどの例では、 fork した直後に exec を実行しま した。 fork を実行すると、現在のプロセスのイメージが そのまま子プロセスにコピーされます。しかし、すぐに exec を実行してその内容を破棄してしまうのであれは、 このコピーはむだです。このような場合には、 fork の代 わりに vfork システムコールが使えます。 vfork システムコールは、基本的には fork システム コールと同様に働き、戻り値も rk システムコールと 同じ意味をもっています。また、子プロセスとして新た にすべてのコピーを作成するのではなく、親プロセスの 一部を使いながら処理を続けます。そのため、 vfork は fork にくらべてかなり軽くなっています。 しかし、いくら f 。 rk と同様に機能するとはいっても、 1 つのアドレス空間を親プロセスと子プロセスが共有す るのでいくつかの制限はあります。子プロセスが exec するか exit するまで、親プロセスは動作しません。ま た、子プロセスは vfork を呼び出した関数を終了するこ とはできません (return を実行すると最悪の場合暴走す るおそれがあります ) 。 しかし、プロセスが巨大でなおかっすぐに exec して メモリの内容を捨ててしまうのであれば、 vfork を使っ たほうがよいでしよう。さきはどの例では、 fork の代わ りに vf 。 rk を用いることができます。 標準入出力と終了方法 こまでの説明では、親プロセスと子プロセスの標準 入出力に関しては触れませんでした。これらはどうなっ ているのでしようか ? 親プロセスと子プロセスの両方が 標準出力に対して出力をおこなうとき、親プロセスはも ともとのプロセスなので標準入出力が通常の状態になっ ていると容易に想像できます。では、子プロセスの標準 入出力はどうでしよう ? 結論からいうと、標準入出力 ( と標準ェラー出力 ) は親プロセスのものをそのまま受 け継いでいます。 fork により作成された子プロセスは、 UNIX MAGAZINE 1994.5

4. UNIX MAGAZINE 1994年5月号

連載 UNIX Communication Notes—O す技術も必要になる。多くの研究者がこれらの技術の開発 に挑戦しているが、これはという角夬カ 1 去はまだできてい ない。事実、筆者も Mosaic を利用していて使いにくさを 感しることがある。たとえば、かなりの数の WWW サー バーが世の中にあることは分かっているが、各サー にどのような情報か蓄えられているかを矢可間にかっ白寉 に孑巴屋する方法はいまのところない。たしかに、 anony- mous FTP アーカイフて提供されているファイル群を効 率的に発見するためのオ冓として、 X. 500 ディレクトリ・ サービスを用いたシステムか試作さ独自の機構を用い たシステムもいくつか開発されている。しかし、それらの システムがひろく普及しているわけではない。情報資源を 発見する技術の確立を強く願っている。 ほかの世界との融合 もう 1 つ、最近の注目すべき動向として、 AppIeTaIk や NetWare など、 TCP/IP とは異なる世界と共存共栄 するための技術がさかんに開発されていること力げられ る。たとえば、 AppleTalk と TCP/IP の共存を実現す るシステムとしては、フリー・ソフトウェアとして提供さ れている CAP か有名である。これを使えば、 AppleTalk て接続されたプリンタを共有したり、 UNIX ワークステー ションを Macintosh のファイルサーノヾーにすることが できる。また、 NFS/NetWare ファイルサーバー・プロ トコル変換ゲートウェイも、商品として市販されるように なった。 こういった、異なるプロトコル・ファミリー間での融 ・ X ウインドウ・システムエ竟の共有 ・プリンタなどの周辺機器共有 ・ファイル共有 支術には次のようなものがある。 26 よりいっそう一ヨ殳化することを期待している。 壜冓築を進める者にとって魅力的であり、この種の技術が ーズに合った工竟か構築できるようになる。これは、環 いた UNIX システムと PC の世界が融合し、利用者の これらの技術かンヨ殳化すれは、いままて憫係か聨色して 交換など ) ・メールの交換 (RFC822 メールと Lotus cc メールの ネットワーク管理 ネットワーク管理では、 SNMP を用いたシステムが一 般に利用されるようになってきた。たとえば、 Sun Net- manager などを使って、組織内ネットワークの監視と管 理をおこなっている組織も増えてきた。描丘のネットワー ク機器の大半は SNMP に対応しているため、 SNMP を 使えばネットワークのだいたいの管理かできるようになっ てきている。ネットワーク管理ツールもウインドウ・シス テムを用いた強力なものが多く、管理者がネットワークを 構成する機器の状態を詩ヾたり、設定を変更したりといっ たことか簡単にできるようになった。 ネットワーク管理の内容を大別すると、 ・構成管理 ・障害管理 ・セキュリティ管理 などに分けられる。 SNMP では、障害管理のうちのシス テムの監視機能と、簡単な設定変更ができる機能を提供し ているにすぎない。したがって、残りの機能をどのよう に実現するかカ吠きな間題となる。これらを麪爰するシス テムも、わすかではあるか登場しつつある。たとえは構成 管理では、ネットワークの回糸霜 - fl 画が適切かどうかをチェ ックするシステムか市販されるようになった。障書管理に ついても、エキスパート・システムを利用して、問題解 決を自重川ヒするシステムが開発されている。このような、 SNMP の枠から外れた部分でのネットワーク管理ツール の充実が、今後必要になるであろう。 おわりに 今回は、筆者の豸斤と偏見にもとづく、、蜷丘の注目すべ き技術 " を駆足て眺めてきた。もちろん、言田に説明した わけではないので、分かりにくい面も多かったと思う。し かし、ご安じ、を。今回紹介した技術については、今後の連 載のなかで偵次とりあげていく予定である。 ( やまぐち・すぐる奈良先端科学オ麪析大学ギ完大判 UNIX MAGAZINE 1994.5

5. UNIX MAGAZINE 1994年5月号

emacs 入門 ,//\、/ N 「原稿書きに疲れたときにちょっと遊びたいなあ」 $ xrdb —load リソースファイル名 と思いたった人がついつい Mule の上で作ったとします。 を実行すると、現在設定されているリソースを捨ててリソ 1 枚のカードを示すのに、、ハートの 5 〃や、、クラブの 3 ク ースファイルに記述された内容がロードされます。つまり、 という書き方をしてもかまわないのですが、どうしても文 現在のリソースがリソースファイルの内容と入れ替わりま 字列カ張くなってしまうのと、本物のトランプに慣れた眼 す。 -load の代わりに -merge を指定すると、現在のリソー には、、ハートクや、、クラブ〃が読みにくくって仕方があり スにリソースファイルの内容をマージします。図 6(b)(c) で リソースファイルをロードする前後の状態を確認してくだ ません。そこで、 さい。 ◆ ▽文字セットへの外字の追加 長々とイ泉を敷きましたが、いよいよ本題の外字の話題 の 4 文字を半角の外字として表示させる方法についてお に移りましよう。 舌ししましよう。 、、手段は間わないから、とにかく MuIe で既存の文字セッ ちょっと間借り方式 トにない外字を使いたい〃 外字の作り方ですが、 という要求があったとしましよう。ひと口に、、外字を使い たい〃といっても、 1 . 既存の文字セットの空き領域に外字を追加する 1. 勝手に外字に対応する文字コードを設定して、自分のプ 2. 変更した文字セットに対応するフォントに外字のフォン ログラムのなかだけで使えれはよい トを追加する 3. 新しく作った文字セットとフォントをもとの文字セット のか、あるいは、 とフォントの代わりに使う 2. はかのプログラム ( プロセス ) との通信で、特殊な意味を 表すコードとして使用したい とすれはなんとかなりそう。名付けて、、ちょっと間借り方 式クです。 というのか、はたまた、 外字をどの文字セットに追加するかは、少々悩むところ 3. 文字コードなんてどうでもいいから、とにかくある形を ですね。迷ったときは、 表示したい ・空きがあってほかに影響を与・えない文字セット かによって、問題解決へのアプローチが違ってきます。 ・ ( プログラムが使用する ) コード系が使う文字セット こでは、 1 と 3 の動機が組み合わさった場合、すなわち、 の 2 点を考慮して文字セットを選んでください。 ・自分のプログラムだけが解釈できる外字コードを設定し、 以降の例では、日本語の EUC 系のコードを使うことを MuIe のバッフアにそのコードを書き込んだときには対 前提とします。ということは、手を加える文字セット ( フォ 応する外字フォントを表示する ント ) は、 を目的としましよう。 ・半角アスキー文字 具↑純勺なイメージを思い浮かべるために、トランプゲー ・半角カタカナ ムを作る例で考えてみます。トランプゲームといえば、ふ つうならウインドウ上や端末上で動作するものを作ると ・全角漢字 ・補助漢字 ころですが、 一三ロ 141 UNIX MAGAZINE 1994.5

6. UNIX MAGAZINE 1994年5月号

してください。 ・ X サーバーのなかで管理するウインドウやピクセルマッ それでは次に本題へ・・・・・つと、いつもならここですぐさ プなどの資源 ま外字を追加する話に入るところなのですが、その前にも ・ユーサーがカスタマイズ可能な要素 う 1 つ別の話題ーーー X ウインドウ・システムのリソースに ついてお話ししておきましよう。 今回紹介するリソースは後者で、、、ユーサー・フリファレ ンスクと呼ばれることもあります。 「外字を使う話なのに、どうして X のリソースがでしやば 以後の節では、 X のリソースを利用してさまざまな設定 ってくるの ? 」 をおこなう方法や、リソースを設定するためのコマンドに 「それはね、 MuIe で外字フォントを使う話の伏線なんだ ついて説明します。また、同じ設定を初期化ファイルに記 述した場合とリソースに設定したときの違いについても触 れることにします。 Emacs の話題からはすこし逸れてし まいますが、道草を楽しんでください。 リソースとリソースファイル ウインドウ・システム上のアプリケーションには、ユー ザーがカスタマイズしたくなる要素が溢れています。たと リソースは、リソース・データ ~ ース " と名付けられ 0 えば、ウインドウの大きさや位置、タイトルバーやスクロ データベースに保存されていて、、、リソース・マネージャー ールバーの形状や色文字の大きさやフォントの種類など が管理しています。ただし、リソース・データベースもリ など。アプリケーションのなかには、複数のウインドウを ソース・マネージャーも概 ] 勺なものです。ー殳のデータ 開いたりメニューやボタンを備えているものもあるので、 べース・システムのようにファイルシステム上にデータベ ウインドウやメニュー、ボタンの数が増えるとそれだけカ ース・ファイルを作ったり、データベースを管理するプロ スタマイズできる要素も多くなります。 グラムが走りまわるわけではありません。強いていえば、 X のアプリケーションのはとんどは、カスタマイズ可能 X ウインドウ・システムのなかに存在する情報と、その情 な要素をコマンド行オフションで指定できるようになって 報にアクセスする処理の集合のことです。 います。 リソースは X ウインドウの世界に存在する情報なので、 ふだんはユーサーの眼に触れることはありません。ューザ 「それはそれはけっこうな、ユーサーの自由度が増えてよ ーから見えないものを、ユーサーにカスタマイズさせよう かったしゃん」 というのはちょっと無理な話ですね。そこで、一殳的には いえいえ、現状を考えると手放しで喜んでばかりはいら リソースファイルにリソースの記述をおこない、このファ れません。ウインドウやメニューが増えれは、ユーサーが イルをリソース・データベースに読み込むようにしていま カスタマイズできる対象がそれだけ飛躍的に増加してし す。リソースファイルのほうは UNIX のファイルシステ まうからです。 ム上のファイルなので、ユーザーは普通のファイルと同様 に内容を見たり編集することが可能です。 たとえば、 X ウインドウ上のあるプログラムは、 100 不頁 を超えるカスタマイズ可能な要素をもっています。これだ リソースファイルをリソース・データベースに読み込む けの数のカスタマイズをコマンド行オフションだけに頼る には、コマンド、 のは、もはや現実的ではありません。そこで、 X ウインド xrdb ウ・システムではアプリケーションに対して与えるオプシ ョンを管理する仕組みを提供するようにしました。これが を使います。 xrdb はリソースファイルをリソース・データ 、、リソース〃と呼ばれるものです。 べースに翫み込む以外に X ウインドウ・システムの世界ではリソースを 2 不亟頁の 意味で使っています。 ・現在のリソース・データベースの内容を表示する ・特定のリソースを追加 / 削除する UNIX MAGAZINE 1994.5 emacs 入門 VX のリソース 136

7. UNIX MAGAZINE 1994年5月号

ennacs 入門 図にコード系の定義の例 ・ junet(JIS) コード (make—coding—system ) *junet* 2 ?J "Coding—system used fo て communication with mai1 and news in Japan nil (list lc—ascii lc—invalid lc—invalid lc—invalid '*sjis—dos* 1 (make—coding—system シフト JIS コード ( DOS のファイル ) ?S "Coding—system of Shift-JIS used in Japan '*SJIS* 1 (make—coding¯system シフト JIS コード ) short 'ascii—eol 'ascii—cntl 'seven)) ?E "Coding-system of Japanese EUC (Extended Unix C0de) . " ' *euc—J apan* 2 (make—coding¯system ・ EUC( 日本語 ) 2 ) ?s "Coding-system of Shift-JIS with CRLF at e01. ” nil (list lc-ascii lc—jp lc—kana 1c—jp2 'short 'ascii—eol 'ascil¯cntl)) 文字列の形式を指定します。この値が nil なら制御文字列 は ISO 2022 の標準的な形式、 く ESC> $ ( く文字 > だけを使います。また、 く ESC> $ く文字 > のように、、、 ( 〃文字を省略した形式を使うときには nil 以外 の値を指定してください。図 11 は ' sh 。社なので、 く ESC> $ く文字 > の形式です。 リストの 6 番目の要素は、行末の文字セットの種類を表 します。行末でアスキー文字セットを G0 集合に指示する ときには nil 以外の値を、そうでなければ nil を指定しま す。ここでは 'ascii-eol(nil 以外 ) なので、行末はアスキー 文字セットにします。 リストの 7 番目の要素は、く TAB 〉ならびにく SPC 〉の直前 でアスキー文字セットを G0 集合に指示するかどうかを表 すフラグです。図 11 の 'ascii-cntl のように、 nil 以外の値 を指定したときにはく TAB 〉やく SPC 〉の直前でアスキー文 150 字セットにします。 リストの 8 番目の要素は、 7 ピットの環境 ( 7 ビットの文 字セットを使う ) かどうかを表すフラグです。図 11 では指 定していませんが、省略した場合には 7 ビット環境ではあ りません。 JIS コード系のように 7 ビットの文字セットだ けを使うときには、 nil 以外の値を指定します。 リストの 9 番目の要素は、 G2 集合、 G3 集合を使うとき にロッキングシフト ( く SI 〉、く S 〇〉 ) を使うかシングルシフ ト ( く SS2 〉、く SS3 〉 ) を使うかを表します。ロッキングシフト を使う場合には nil 以外の値を、シングルシフトを使うと きには nil を指定します。図 11 のように、この要素を省略 した場合にはシングルシフトを使うものとみなされます。 リストの 10 番目の要素は、アスキー文字セットを使う か JIS ローマ字セットを使うかを指定します。 JIS ローマ 字を使用する場合には nil 以外の値を指定します。省略し た場合や nil が指定されれば、アスキー文字セットを使い ます。 リストの最後の要素は、漢字セットとして新 JIS(JIS X0208 ー 1983 ) を使うか、旧 JIS (JIS X0208 ー 1976 ) を使う かを指定するフラグです。旧 JIS を使用する場合には nil 以外の値を指定します。省略した場合や nil が指定されれ は、新 JIS を使います。 図 12 は日本語で使用される一般的なコード系の例です。 UNIX MAGAZINE 1994.5

8. UNIX MAGAZINE 1994年5月号

LJN Ⅸへの招待 坂本文 label コマンドーその 2 則回は、 label コマンドのうち、 Usage 処理、 getopt によるオプション角斤、オプション処理、オプションに ともなう引数の省略値設定、ならびに正当・性検査の部分を 作成しました。これらは、いわはフ。ログラムの前座です。 今回はいよいよ、メインの部分に突入しましよう。作成 ・ awk プログラムの準備と実行 ・いÉX のプリアンプルの作成 ・割込み処理 ・入力ファイルの存在チェック するのは、次の処理です。 前回の最後に紹介したオプション処理には、次のプロ 入力ファイルの存在チェック 用紙刎列も紹介します。 プログラム完成後には、 label コマンドで作ったラベル bre ak stdin— stdin=off else then グラムが含まれていました。 ー 0 Ⅱ 168 あればそれを入力として使い、なけれは驃準入力からの入 してください ) 。 label コマンドは入力ファイルの指定が れているかどうかを調べるものです信田は、前号を参照 これは、 label コマンドに対して入力ファイルカ甘旨定さ 力を読み込みます。変数 stdin は、入力がどちらである かを、、メモ " するためのフラグです。この値は、引数カ甘旨 定されていれば。仕 ( 標準入力を使わない ) 、指定されて いなければ。Ⅱ ( 標準入力を使う ) になります。 次のステップでは、変数 stdin が。仕の場合、すなわ ち引数カ甘旨定されたときに、指定されたファイルか実在す るかどうかを調べます。リスト 1 を見てください ( 説明の ために行番号を付けています ) 。変数 stdin が。仕に等し ければ ( 1 ~ 2 行目 ) 、 then ( 3 行目 ) —else ( 21 行目 ) ま でのあいだで次の処理をおこないます ( 19 ~ 23 行目につ いては後します ) 。 ・引数で指定されたすべてのファイルに対して ( 5 行目 ) 、 ファイルの存在を検査する ( 7 行目 ) 。 ・ファイルがなければ、 then ( 8 行目 ) ~ 升 ( 11 行目 ) を 実行する。 こでは、 echo で、、ファイルが存在しない か言翹えりができない " というメッセージを出力し ( 9 行 目 ) 、変数 f 土 le ー e てての値を on にする。 ・引数すべてに対してファイルの存在を検査したあとで ( 12 行目以降 ) 、変数 file-err の値が。 n ならば ( 14 ~ 15 行目 ) 、 exit でシェル・フログラムを終了する ( 17 行目 ) 。 ファイルの存在は、 test コマンドのオプション -r と 否定の演算子、、 ! " を使って調べています。 -r を使うと、 test は、、ファイルか有雀し、かっ言翹 ( り可能 " であれば真 ( 0 ) を返します。否定の演算子 ! を使うと逆になるので、 、ファイルが存在していないか言翹りか不可能 " な場合に 0 カ亟ります。 ファイルの存在は、このほかにも一 f ( 通常のファイ ル ) 、一 ( 書込み可能 ) 、 -x ( 実行可能 ) 、 -s 伏きさが 0 UNIX MAGAZINE 1994.5

9. UNIX MAGAZINE 1994年5月号

UN Ⅸへの招待 2 形式 (I*1bX コマンドを含んだデータ ) に変換します。 \mylabel{ 〒郵便番号 \ \ 氏名殿 } 所属部署 2 \ \ 所属部署 1 \ \ 会社名 \ \ ビル名 \ \ 住所 \ \ 特定のデータが、空の場合も考えられます。たとえば、 ピル名や所属部署 2 がないなどです。この場合は、デー タも行末の \ \ も出力しないことにします 3 。 %d %B %Z dasuzo—k@ascii %T 03 ー 5351 ー 8199 %N 広告出好蔵 %D 広告部 %C 株式会社アスキー 151 ー 24 たとえば、 ・ co ・ JP というデータであれは、次のような出力結果を作成しま 広告出好蔵殿 } 広告部 \ \ 株式会社アスキー \ \ 〒 151 ー 24 \ \ \mylabel{ す。 好き " という理由で awk を選びました。 します。何を使ってもかまわないのですが、私は、、一番 さて、この変換には sed 、 awk などを利用することに 形式 2 : awk -f ' awk プログラムを記述したファイル ' 形式 1 : awk ' awk プログラム ' 入力ファイル すが、次の 2 通りがあります。 UNIX への招待』などを参照 ) 。ます awk の入力形式で よう ( 言岩田は過去の連載あるいは、『たのしい UNIX awk については、必要最低限の知識だけを復習しまし 入力ファイル 3 では \ \ で改行カ起こります。 余分な空イ励咄力されてしまいます。 174 もしデータなしでこオ功ゞあると、 形式 1 はコマンド行に awk のプログラムを入力し、形 式 2 ではそれをファイルに言己します。 awk のプログラムでは、多くのシェルのメタキャラク タに利用する文字と同しものを使います。プログラムの 一部である文字がシェルのメタキャラクタとして解釈さ れないように、前者では awk プログラムを引用符で括ら なけれはなりません。たとえば、 であれは、 $ 、 * 、 { 、 } が Bourne シェルのメタキャラ クタなので、本を単一引用符て括りこれらの働きを打ち 消します。 た a. * / {print $ 2 } , 二重引用符では、 $t や \ の働きを打ち消すことができ ません。上のリストを、 とすると、 $ 1 は位置パラメータの値に置き換えられてし まいます。しかしこの引用は、変数の値を awk プログラ ム中て使いたいときには便利です。 awk のプログラムが長くなる場合は、形式 1 を用いる よりも形式 2 を使ったほうがシェル・プログラムも awk プログラムも見やすく、間違いも少なくてすみます。そこ で label コマンドでは、形式 2 を使って awk プログラ ムを実行することにしました。 label コマンドのような状況では、 awk のプログラムは シェル・プログラムと同じファイル中に言己したほうが いいでしよう。もちろん、プログラムとは別のファイル に言当してもかまわないのですが、その場合は、シェル・ プログラムがきちんと動くように、 ・ awk プログラムを、所定の位置に置いておく ・シェル・プログラム中では、 awk プログラム・ファイ ルの存在位置を ( 糸寸パス名などを用いて ) 明確に しなけれは・ならない ・シェル・プログラムを配布するときは、 awk プログラ ムも忘れすに付ける $ 1 ~ た a. * / {print $ 2 } " $ 1 ~ た a. * / {print \ $ 2 } " UNIX MAGAZINE 1994.5

10. UNIX MAGAZINE 1994年5月号

めには、出力ファイル名をカンマで区切って倥白を入れ る ) 書き並べます。たとえば、 dump 0f /dev/rstO , /dev/rstl , /dev/rst2 /usr/src とすると、 3 つのテーフ。装置を順に使用します。装置の台 数以の巻数のテーフ。が必要な場合には、最後に指定した 装置か不足する巻数ぶんだけ繰り返し使われます。 OSF/I 不劫ゞ調べたのは DEC の Alpha AXP 用 OSF/I VI. 3 ですが、同 bDEC の Ultrix の dump とはまったく異 なるようです。 4.3BSD の dump と機能的にはかなり似 ています。とはいえ、マニュアルページは一から書き直さ れているし、バークレイのクレジットがどこにも入ってい ないので、おそらく dump コマンド自体も一から書き直 されたのでしよう。 変わっているのは、引数の形式です。 dump —Ou —f /dev/rmtOh —B —S 600000 /usr という普通の形式に変わっています。ただし、従来の dump と同じ形式でも受け付けるようになっていて、 れは第 1 引数がマイナスて始まっているかどうかで決ま ります。上と同等な引数は、 dump OufBS /dev/rmtOh 600000 /usr -B -S 600000 " は、ポリュームの記・慮容量を 600 , 000 KB と指定します。 -B フラグがないときは、 -s は -s と 同じです。 DEC がサポートしているテーフ。装置に関しては、テー プの言求密度は自重加勺に判別されます。 dump のスケジュール ファイルシステムのバックアップをとる目的は 2 つあ ります。 1 つは、ハードディスクの嶂などでファイルシ ステムカれたときにその内容を復旧するためです。ほと んどの場合、バックアッフ。の目的はこれです。もう 1 つ の目的は、ファイルの内容の保存です。つまり、ファイ ルを間違って消したり変更したりした場合に、昔の内容を 112 取り戻すためです。 す。たんなるディスク・クラッシュ対策ならは、フルダ 前者と後者の違いは、古いダンプテープの保存期間で ンプをとった点でそれまでのダンプテープはすべて不要 になり、次のダンプのために再使用できます。後者の場合 には、バックアップしたテープを保存しなけれはならず、 新しいテープを順次消費します。 既述のように dump はレベルを 10 もっていますが、 通常はこれを全部は使いません。ー殳に、ダンフ。のレベル を多く使うと、ダンプテープの量カ眇なくてすみます。そ の代わりディスク・クラッシュからの復旧をおこなうに は、全レベルのダンプテープを順次書き戻さなければなら す手間がかかります。 たとえば、毎月 1 日にはフルダンプをおこない、この テープは永久保存することを考えます。そして毎日終寺 : にバックアップをおこない、過去 1 週間のあいだはどの 日の状態にでも、 1 週間前から 4 週間前までは瞿の状態 には戻せるようにしたいとします ( 週休 2 日を想定 ) 。 もっとも簡単なのはテープを 10 組使い、毎日フルダン プをとることです。数 IOMB の小さなファイルシステム ではこれでもいいでしようが、大きなファイルシステムで は日肋ゞかかりすぎます。 そこで、 - 翁瞿にはレベル 1 、そオリ丿、外はレベル 4 のダン プをおこなうことを考えてみましよう。つまり、金曜には 1 日からの差分を、それ以外の日は翁瞿からの差分をバッ クアップします。このようにすると、月、火、水、 : 瞿日 の dump はあまりテープを消費しません。 ダンプレベルは 0 、 1 、 4 の 3 不鶤頁を使っていますから、 ファイルシステムの復旧には 3 段階の ( 乍業が必要です。た とえば 3 月 17 日材瞿日 ) にディスクの古章か起きたと します。新しいディスクを newfs して、ます 3 月 1 日の フルダンプ、 3 月 11 日 ( 瞿日 ) のレベル 1 ダンフ。、 16 日のレベル 4 ダンプのテープを順に戻すと、ディスクの内 容は 16 日の状態にまて彳夏旧できます。 dump とペアになる restore もとりあげたかったので すが、誌面が足りないようです。次回は、 rdump などダ ンフ闕連の残りと restore をとりあげます。 0 ( さいとう・あきのり : 邸反大学 ) UNIX MAGAZINE 1994.5