プログラム - みる会図書館


検索対象: UNIX MAGAZINE 2000年12月号
45件見つかりました。

1. UNIX MAGAZINE 2000年12月号

IMAP 関連 RFC2971 lMAP4 ID extension lMAP4 の ID の拡張 PS. 、 T Showalter ・プログラムのサポート用 URL プログラムの製造元 ・フログラムを実行している OS のノヾージョン ・プログラムを実行している OS の名前 フログラムのノヾージョン ・フログラムの名前 以下に示す。 IMAP4 のクライアント・サーバー間で交換される情報を れにより、実装固有の問題の検出と追跡が容易になる。 報を交換する仕組みを追加する手法を規定している。 そこで、 RFC2971 では IMAP4 に実装固有の ID 情 生するとそ窈毆励咽難である。 定されていない。そのため、通信中に実装固有の問題が発 をクライアント・サーバー間で交換する標軸勺なガ去は規 る。現在の IMAP4 では、通信中に実装についての情報 IMAP4 はメールスプールの管理用のプロトコルであ 公開された。 現在の状態は、、標準化へ窈是唱 " である。 2000 年 10 月に 装ごとの ID 情報を交換するための手法を規定している。 Version4 revisionl) のクライアントとサーバー間で、実 IMAP4revI (lnternet Message Access ProtocoI MIME 関連 環境 (UNIX では環境変数、 Windows ではレジスト ・プログラムの実行時の引数 ・プログラムのコマンド名 プログラムのリリースされた日時 ・プログラムの製造元の住所 150 提案している。現在の状態は、、標準化への提唱 " である。 数の要素を含むメディア特徴表現を簡潔に記する手法を RFC2533 で定義されたメディア牛貿致表現について、複 PS. 、 G. Klyne 他 ( RFC2533 更新 ) 複数のメディア特徴のリ RFC2938 ldentifying Composite Media Features RFC2533 を更新する RFC として 2000 年 9 月に公開 された。 メディア特徴表現とは、メディア牛致タグを組み合わせ てコンテンツク芋徴を表現するもので、 RFC2533 ではそ の去を規定している。 RFC2938 では、複数の要素を含 むメディア特徴表現の符号化手法と、簡潔な表現手法を提 案している。 RFC2938 では、メディア特徴表現の簡略化の解譓具 困列窈是示、国際化に関する考察をおこなっている。また、 符号化手法として、 Base64 征号化に似た Base32 符号化 を導入している。 RFC2957 The application/whoispp-query Content- Type アプリケーション / wh 。 is 十十要求コンテンツタイプ fo. 、 L. Daigle 他 whois 十十の要求メッセージを MIME で表現するため の文法を規定している。、、広報 " として 2000 年 10 月に 公開された。 wh 。 is 十十はディレクトリ情報の取得に利用されるプロ トコルで、 RFC1835 で定義されている。 RFC2957 では、 whois 十十の、、要求メッセージ " を表 現するための MIME タイプとして以下を提案している。 ・ MIME タイフ名 : AppIication ・ MIME 副タイフ。名 : whoispp-query ・必須パラメータ : なし オフション・パラメータ : なし whois 十十の応答メッセージを MIME タイフ。で表現す るための去は、 RFC2958 て規定されている。併読する とよいだろう。 RFC2958 The application/whoispp-response Content-type アプリケーション / wh 。 is 十十応答コンテンツタイプ fo. 、 L. Da 回 e 他 wh 。 is 十十の応答メッセージを MIME で表現するため の文法を規定している。、、広報 " として 2000 年 10 月に 公開された。 RFC2958 では、 whois 十十の ) 芯答メッセージ " を表 現するための MIME タイプとして以下を提案している。 UNIX MAGAZINE 2000.12

2. UNIX MAGAZINE 2000年12月号

連載 / UN Ⅸ便利帖ー① リスト 1 ユークリッドの互ド去 (gcd) 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 # ! /usr/bin/perl use integer ; if ($#ARGV く 1 ) { print "Usage : exit 1 ; $a = $ARGV[O] ; $b = $ARGV[I] ; while ()r > 0 ) { print "$b\n" exit 0 ; $ 0 integer integer\n" アルゴリズム ュークリッドの翁去を文章て書くと、次のようになり ことができ、 gcd ( 39 , 15 ) = 3 であることが分かります 1 。 たとえば、 39 と 15 の最大公約数は以下のように求める 3. そうでなけれは、佖← 6 、 6 ← 7 、として 1 に戻る。 2.7 、が 0 なら、わを出力して終了する。 1. 佖をわて割った余りをとする。 味です。 ます。ここで、。← 6 はわの値を佖に代入するという意 6 = 3 x 2 十 0 9 = 6 x 1 十 3 15 = 9 x 1 十 6 39 = 15 x 2 十 9 UNIX MAGAZINE 2000 ユ 2 1 gcd は Greatest Cornmon Divisor ( 最大公約数 ) を未します。 アルゴリズムの停卍性も証明できます。 7 、が、上記の例のように単調減少の数列であることから、 成り立っことから証明できます。また、途中で求められる られるということと、そのとき gcd(), の = gcd(), のが 十 7 、 ( 0 7 、 < のとなるような整数 9 と 7 、カ噫に求め ズムの正しさは、佖とわがどんな自然数であっても佖 = ることを証明するのですが、これは省略します。アルゴリ が正しく最大公約数を求められることと、かならす停止す アルゴリズムの教科書なら、次にユークリッドの互去 プロクラム このユークリッドの互去を PerI で実現した例がリス ト 1 で、 gcd という名前で作成しました。左端の数字は説 明のための行番号です。 このプログラムは、、、引数として 2 つの自然数を与えら れるとそれらの最大公約数を出力して終了する " という仕 様で作成しました。 1 行目は、前述したように Perl インタープリタを指定 するためのものです。 2 行目では、このプログラム内での 演算はすべて整数演算として扱うように指示しています。 この行がないときは、 PerI はすべての演算を浮動小数点 演算として扱います。 3 ~ 6 行目で、 - 学えられた引数の個数が 2 つより少なか ったら、このプログラムの使い方を出力して終了します。 PerI では@ARGV という配列に引数かオ褓内され、その配 列の大きさは $ # ARGV で知ることができます 2 。また、 $ 0 という変数には起動されたプログラム名かオ褓内されて います。 7 、 8 行目ではプログラムの入力となる自然数を、それ ぞれ $ a 、 $b という変数に代入しています。しつかりした プログラムを作成するには、 こで引数が自然数であるか どうかなどのチェックが必要となりますが、今回は省略し ています。また、 9 行目では前述したアルゴリズムの 1 に あたる動作をおこなって、 $r を求めています。 10 ~ 14 行目がメインループです。 $r の値が 0 になれ ばこのループを抜け出し、 15 行目で $ b を出力して終了し ます。 この gcd を実行してみると次のようになり、正しい結 果カ咄力されています。 % chmod + x gcd % ・ /gcd . /gcd integer integer Usage : % . /gcd 39 15 3 また、プログラム中できちんとチェックをしていないの で、次のようなこともできます。 % . /gcd ー 39 ー 15 ー 15 2 配列の添は 0 から始まるので、実際には $#ARGV で諸改」の大き さ -1 " カ斫られます。また、 PerI ではプログラム名自体は@ARGV に含まれません。 129

3. UNIX MAGAZINE 2000年12月号

連載 / IJN Ⅸ便利帖ー⑩ 表 1 ⅵのコマンドモードでのおもなキー操イ乍 カーソルを左 , 可カかす h カーソルを下 , カかす カーソルを上 , 可肋、す k カーソルを右可カかす I カーソルの右に文字を挿入する a カーソルの左に文字を挿入する 1 カーソノ立置の文字を削除する x ZZ 編集内容を保存して終了する 編集内容を保存せずに終了する とすると表示されます。 入力モードでは、キーを叩けばその文字が入力されま す。コマンドモードへ移行するには [Esc] ( 工スケープキ ー ) を入力します。 こオけごけで、ⅵがとりあえす使えると思います。その他 のキー操作や設定ファイルなどについては、オンライン・ マニュアルを参照してください。 ファイルの属性 Perl は、 C などのようにコンパイルを必としません。 そのため、テキストファイルとして作成したプログラム ( スクリプトとも呼はれます ) をそのまま実行できます。 プログラムを動作させるには、 Perl インタープリタに プロクラミンク 引数として与える以外に、そのプログラムのファイル名を そのままコマンド名のように入力するガ去があります。そ プログラムの話を始める前に、 UNIX でプログラムを のためには次巣作が必要となります。 作成 ( プログラミング ) するときに必要な知識について説 明します。 1. プログラムの 1 行目を、 #!/usr/bin/perl" とする。 工テイタ これは PerI インタープリタの場所を宣言するものです から、 PerI インタープリタが /usr/local/bin/perl な 使い慣れたエデイタがあれば、それを利用するのがいち どのときは、もちろんそれを指定します。 はんストレスか溜まらなくてよいでしよう。ここでは、ⅵ 2. chmod コマンドでファイルに実行属性を付ける。 についてすこしだけ紹介しておきますにれだけ應えてお けば、、とりあえす " ファイルをⅵで編集して終了できる、 カレント・ディレクトリはコマンド・サーチパス という程度の紹介です ) 。 ($PATH) には含まれていないことが多いので、注意が必 ⅵには、、、コマンドモード " と、入力モード " の 2 不頁 要です。とくに、プログラムをちょっと作って即座に試 のモード ( 動作伏態 ) があります。入力モードでは文字の すような場合などは、うつかり、、 h 。 i " とファイル名だけ 入力のみが可能で、コマンドモードでは文字の入力以外の を入力してしまい、 操作ができます。現在よく使われているエデイタの多くに ho i : Command not f ound は、このようなモードは存しません。私はこれが、初じ、 者がⅵを遠ざける理由の 1 つだと思っていますが、いっ と怒られたりしがちです。こういうときは、 、 . / h 。 i " のよ たん慣れてしまえばなんともいえす使いやすいものになる うに入力してください。また、コマンド・サーチパス上 でしよう。 に同名のプログラムが存在する場合も要注意です。たとえ ⅵは、起動した直後はコマンドモードになっています。 ば、 test という名前のプログラムを作って、、、 . /test" で このモードでは、ほはすべてのキーがなんらかの操作を意 はなく、、 test" とだけ入力すると、 /bin/test か川乍して 味しますから、うかつにキーを叩かないほうが無難です。 しまうことがあります。 コマンドモードから入力モードへ移行するには a か、、 i " を入力する、と憶えておけはよいと思います。また、描匠 ユークリッドの互除法 はカーソルを動かすのにカーソルキーが使えることも多い のですが、キーポード上の、、 h " から、、 1 " までのキーを使う ュークリッドの互去は、数学の教科書にも出てくる有 のが伝糸勺に正しいガ去です。それぞれのキーの意味は表 名なアルゴリズムで、 2 つの自然数佖とわ ( 0 < わ佖と 1 のとおりです。 します ) の最大公約数を求めるものです。 128 UNIX MAGAZINE 2000.12

4. UNIX MAGAZINE 2000年12月号

Daemons & Dragons— 64 スクリプトも、システム時刻とはまったく別に年の値を リか時間の操作を独占しているわけではない。シェル・ どれもこの値を正しく操作しているだろうか。ライプラ ることを思い出してほしい。自作の Perl スクリプトは、 プログラムから localtime 関数と gmtime 関数を使え んなことはない。 PerI も C のライプラリを利用し、 PerI 危ないのは C や C 十十のプログラムだけだろうか。そ リスク を正しく計算したあと、それを 10 進数として出力する。 tm-year)" が正しい。この式は、 ( 1900 を足して ) 西暦 トするなら、当然ながら printf( ” %4d" , 1900 十 tm. 西暦を 19100 と表示してしまう。この値をフォーマッ これは数字の 19 に年値を追加するだけで、 2000 年には % 02d ' , tm. tm-year)" といった構文で値を出力する。 printf(" 19 ないからだ。一部のプログラムは単純に がある。すべてのプログラムが対応しているわけでは るプログラムは、この値を扱えるようにしておく必要 ただし、これで終りではない。 tm 構造体を使用す 石忍しなければならない。 たときにライプラリが 100 以上の値を返すかどうかも には 100 という値が含まれる。また、次の世紀が始まっ 年の tm-year には 99 という値が、 2000 年の tm-year 、、 1900 年からの年数 " と定義している。すなわち、 1999 そこで、現在の UNIX システムではこのフィールドを には、関数の戻り値を 4 桁にするわけにはいかない。 かし、既存のソフトウェアとの互換性を維持するため 以降も正しい値を返すかどうかを調べる必要がある。し らない。具体的には、システム・ライプラリが 1999 年 UNIX べンダーは 2000 年に備えて対処しなければな なくなる。これがもっとも重要な修正点の 1 つであり、 ご存じのように、これは 2000 年を境に正しく動作し 含まれており、、、西暦の末尾 2 桁 " と説明されている。 tm 構造体の定義には tm-year というフィールドが 落し穴 必要な形式に適したかたちて情報か供されるからだ。 ラムは、 localtime を使ってユーサーに情報を提供する。 UCT を提供するものだ (gmtime)o ほとんどのプログ ムゾーンを考慮するもので (localtime) 、もう 1 つは 扱える。このスクリプトが年値を 2 桁の数値として使用 または保存するとしたら、 2000 年にトラブルに見舞わ れるのは確実だ。 2000 年に備え、システム管理者はすべてのパッチが 最新であることを石薩忍しなければならない。これらのパ ッチは、 OS に付属するライプラリ ( 必要であれば ) 、ド キュメント、アプリケーションを修正する。だが、 で安じ、するのはまだ早い。べンダーのパッケージも調べ る必要がある。具イ村勺には、データベース・システムや サードバーティーのバックアップ・システム、ドキュメ ントのフォーム、グラフィックス・ライプラリなどだ。 こうしたパッケージの多くは、年が明けても問題ないだ ろう。 2000 年問題への準備は、べンダーに確認するだ けでもいい。ただし、確認漏れがないように注意してほ しい。 サードバーティーのアプリケーションのほかには、各 種のカスタム・スクリプトがある。これにはすべての自 動化ツールが含まれる。はとんどのシステム管理者が作 業を予定どおりに進めるために自分たちで開発したもの だ。シェル・スクリプトや awk スクリプト、 sed スクリ プト、 Perl プログラムをひとつ残らす確認してほしい。 2038 年問題 UNIX 上で動作する多くのプログラムには、 2000 年の時刻を誤って解釈する危険があるが、 OS 自体は 間題ないだろう。タイムカウンタが 946684799 から 946684800 に増えても、カーネルはびくともしない。し かし、次の変わり目にはそうはいかない。 Windows ユ ーザーは 2000 年に脅えているが、 UNIX に詳しいユー ザーは 2038 年を恐れている。 2038 年 1 月 19 日に 一部の UNIX システムはそれ以時間を表せなくなる。 時間値はこれまで、 32 ビットの符号付き数値として保 存されてきた。つまり、 2147483647 ( 231 ー 1 ) までの 値しか処理できない。カウンタはこの数値を超えると負 数に変わってしまう。具体的には、 2038 年 1 月 18 日 3 時 14 分 7 秒 (UCT) が間題の時刻である。 この問題を回避するガ去は 2 つある。まず、時間値を 符号なしの数値として処理できる ( すでにそうなってい るが ) 。これで、運命の日がやってきても、カウンタは 22 世紀へ向けて時を刻み続けることができる。ただし、 UNIX MAGAZINE 2000.12

5. UNIX MAGAZINE 2000年12月号

otice NetWorId 十 lnterop 2000 AtIanta 月林ロ真 写真 1 Georgia 、 VorId Congress Center 9 月 24 日 ~ 29 日の 6 日間、米国アトランタで秋 の NetWorId 十 lnterop ( 以ード、 N 十 I) か開催されまし た ( 展示会は 26 日 ~ 28 日の 3 日間 ) 。ここ数年、春 に開催されるラスベガスの N 十 I は訪れていたのですが、 秋の N 十 I は初めてでした。ということで、今月はアト ランタからのレポートです。 会場の GWCC (Georgia World Congress Cen- ter) への交通は、地下鉄か N 十 I のオフィシャル・ホ テルからの無科シャトノレヾスを利用します。主催者の発 表によれは、 3 日間の展示会には 5 万人を超える来場者 があったそうです。来場者数、出展者数ともラスベガス の N 十 I と上交するとやや少なめですが 1 、折からの IT プームもあって会場の熱気はかなりのものでした。 ・ 12 / 2000 写真 2 Conference 会場への案反 Conference 今回の N 十 I では、 ASP Summit と Linux Busi- ness Expo カイ并イ崔されていました。 Conference のメ ーも、これに合わせて広範用な技術分野をカバーし、 活気に満ちていたようです ( ラスベガスのときと同様、 私自身は展示会場を見てまわるのに精一杯で、 Confer- 表 1 VoIP Day のプログラム ence を直接見聞きする時間はありませんでした ) 。 lntroduction and Overview 8 : 30 ~ 8 : 45 ます、教育プログラムとして、 VPN Day や VoIP Legacy Telephony 8 : 45 ~ 9 : 30 Day 、 Service Creation Day 、 Network Forensics VoIP Protocols 9 : 30 ~ 10 : 30 Day のように、まる 1 日 ( - 早朝からタ方まで ) をかけ Quality of Service 10 : 45 ~ 11 : 30 Enterprise VoIP Part 1 11 : 30 ~ 12 : 15 て 1 つの技術に絞った講義を連続して受けられるプロ Lunch 12 : 15 ~ 13 : 15 グラムが用意されていました ( たとえは、 27 日に開かれ Enterprise VOIP Part 2 13 : 15 ~ 13 : 45 た VoIP Day のプログラムは表 1 のようになってい Carrier VoIP 13 : 45 ~ 15 : 15 Fut ures Panel 15 : 30 ~ 16 : 45 ました ) 。もちろん、おなしみのインターネット技術を Interoperability/iLabs 16 : 45 ~ 17 : 15 テーマとした Tutorials and Workshops や GeneraI Recept ion 17 : 30 ~ 18 : 30 Conference も充実しています。 れませんが ) とくに Linux に焦点を絞ったセミナーが 一羽崔された Linux Business Expo や ASP Summit の Conference のプログラムも多彩で、 ( 当り前かもし 数多く開かれていました。このところの Linux プーム の景グか、かなりの人気を集めていたようてす。この 2 1 5 月に翩崔された N 十 1 2000 Las Vegas では、出展者数が 850 、 つのイベントは、イ剏崔とはいっても Keynote Speech 来場者は約 6 万人でした。 11 UNIX MAGAZINE 2000.12

6. UNIX MAGAZINE 2000年12月号

Daemons & Dragons るという人もいるだろう。だが、 30 年前のプログラマー 多くのプログラムは、これが符号付きの数値という前提 も同しことをいっていた。デッドラインはだいぶ先のよ でコンパイルされている。したがって、時刻は正しく比 較されす、 2039 年の月日は 2035 年の月日よりも古い うに思えるが、延期や遅延はない。時間は万物の基礎な のである。 と解釈されてしまう。 もう 1 つの解決策は、 32 ビットシステムを 64 ビット [ 参考文献 ] システムに置き換えることだ。 64 ビットシステムはコン [ 1 ] K. Harrenstien, DoD lnternet 丑 os カ TabIe Specifica- ピュータ・システムの進化における次のステップだが、 0 れ , RFC952, October 1985 まだ登場して日が浅い。価格が適正なレベルに落ち着く [ 2 ] R. Braden, Requirements 和 7 、 lnternet 丑 os な - ス - にはあと数年かかるだろう 3 。現在の大半のシステムは、 〃 ca 0 れ 0 〃 d S ? 卑 0 鷓 RFC1123 , Oct0ber 1989 8 ビット、 16 ビット、 32 ビットで表される数値を処理 [ 3 ] D. Libes, C ん 00S 9 佖 Name 和 7 、 Your Computer, する。プロセッサが直接操作できる最大数値は 32 ビッ RFC1178 , August 1990 トで表される。それを超える数値を処理するには、特別 [ 4 ] Jay R. Ashworth, The ル m 4 可 os な , RFC2100 , ApriI 1997 なソフトウェアが必要になる。当然のなりゆきとして、 時刻には 32 ビットの数値が使用される。プロセッサを 64 ビットの値を解釈するものにアップグレードすれは、 時間も同じように簡単に処理できるだろう。このピット 数をもってすれば、 UNIX システムは太陽か新星になっ ても時刻を計り続けられる。 2038 年が問題になるまでには、まだ十分な時間があ 3 訳注 : 現時点では、新しく発売される UNIX システムの多くは 64 ピット対応になりつつある。 JANOG7 ミーティング開催のお知らせ なお、今回の JANOG7 ミーティングの模様は、 JANOG (JApan Network Operators' Group : 日本 lnternet ◆ Week 2000 の実行委員会のご協力を得て、インターネット上 ネットワーク・オペレーターズ・グルーフ ) は、 12 月 18 日 でライプ中継される予定です。 ~ 21 日に開かれる lnternet Week 2000 の一環として、 12 ー己の開催要領をお読みのうえ、せひご参加ください。 月 21 日に「 JANOG7 ミーティング」を開催します。これ は、 ISP やネットワーク機器べンダーの技術者で構成される 日時 : 2000 年 12 月 21 日 ( 木 ) 9 : 30 ~ 17 : 00 JANOG の発表セッション・プログラムです。 会場 : グランキュープ邸反 ( 大阪琲祭会言昜 ) メインホー ノレ JANOG は、インターネットにおける技術、およびその運 大阪市北区中之島 5 ー 3-51 用管理に関するさまざまな頁を言菰紹介することにより、 (Tel 06 ー 4803 ー 5555 ) 日本のインターネット技術者や利用者への貢献を目孑嗣フルー http://www.gco.co.jp/index-j.html ◆ プです。営利活動を目的としないかぎり、参加資格などの制限 はありません。インターネットにおける技術や運用管理手法 勠ロ費 : 無斗 をはしめ、インターネットにかかわるあらゆる情報について討 参加申込み方法 : lnternet Week 2000 の Web ページより 畆本寸したい方であれは・どなたでも参加できます。 お申し込みください。 現在のところ、 JANOG の活動はメーリングリストを中心 http://iw2000.nic.ad.jp/ とし、ワーキング・グループを結成するなどして、最新の技術・ 動旬について活発に言義しています。 JANOG の言田は、下 問合せ先 : JANOG7 ミーティング実行委員会 記の Web ページをご参照ください。 E-mail: meeting-7@janog ・ gr ・ JP ・ http://www ・ janog ・ gr ・ jp/ 「 (_)n Names 」 「 Time Waits For No One 」 Performance Computing 1999 年 8 月号 ~ 9 月号より ◎ 1999 , Performance Computing (). S. A. ) 65 UNIX MAG AZINE 2000.12

7. UNIX MAGAZINE 2000年12月号

38 return プログラミング・テクニック int digit—optind = 0 ; int C ; —getopt—internal (argc , argv , optstring, (const struct , 。 option * ) 0 , (int * ) 0 , 0 ) ; getopt 関数として利用する場合には長い形式のオプシ ョンは不要ですから、関連する部分に 0 を指定していま す。 テスト用関数 プログラムとしてはこれで終りですが、この後ろには getopt 関数のテスト用に main 関数があります。この ファイルをコンノヾイルする際に、—DTEST というコンノヾ イル・スイッチを指定するだけでこの部分か有効になり、 ファイル単体で getopt 関数の重加乍を石忍できます。 #ifdef TEST int main (argc , argv) int argc ; char * * argv ; 簡単なプログラムですが、単体でテストできるのはたい へん便利です。手間もはとんどかからないので、複雑な関 数を作成する場合にはぜひ見習いたいですね。 ☆ 今回は、 grep コマンドで使われている GNU の getopt 関数を紹介しました。ソースプログラムは getopt. c だけ で 1 , 000 行を超える巨大なものです。一方、ライプラリ関 数の getopt のソースコードはわずか 117 行でした。 の点だけからも、 GNU の getopt 関数がいかに複雑な処 理をしているかが分かりますね。 ( たしみ・ひさかす ) Linux Conference 2000 FaIl Perl/Ruby Conference 開催のお知らせ 日本 Linux 協会 (JLA) は、 11 月 29 日 ( 水 ) ~ 12 月 1 日 ( 金 ) の 3 日間、国立京者際会館で「 Linux Conference 2000 FaII 」を開催します。「 Perl/Ruby Conference 」 ( 主催 : オ ライリー・ジャパン ) も崔されます。 Linux や Perl 、 Ruby などをテーマに、カンファレンスやチ ートリアル、ワークショップなど多彩な催しがおこなわれます ( プログラムなどの言田は右記の Web ページをご覧ください ) 。 E-mail: lc-info@linux.or.jp (Tel 03 ー 5298-4670 / FAX 03-529 & 4671 ) ・ PerI/Ruby Conference 運営事務局 ・ Linux Conference 2000 Fall 運営事務局 日本 Linux 協会イベント・セミナー部会 問合せ先 . 東京都千代田区タ籵申田 2-15 ー 2 辛申田ピル 7F http://www.joho-kyoto.or.jp/KICH/ 京都市左京区宝ヶ池 (Tel 075-705 ー 1234 ) 会場 . 国立京者際会館 UNIX MAGAZINE 2000 ユ 2 、 veb ページ ( 参加申込みも受け付けています ) ・ Linux Conference 2000 Fall http://lc.linux ・ or ・ jp/ ・ PerI/Ruby Conference http://perlruby-con.opensource.gr ・ jp/ 参加費 3 日甬し券 JLA 会員 8 , 000 円 14 , 000 円 JLA 会員 4 , 000 円 7 , 000 円 チュートリアル ( 1 セッション十 1 日券 ) JLA 会員 12 , 000 円 1 日券 学生 15 , 000 円 7 , 000 円 91

8. UNIX MAGAZINE 2000年12月号

遠隔オフィスとの接続 荒井美千子 SOHO からの接続 ( 6 ) 前回は、ダイヤルアッフ鮟続について、設定やインター ネットまたは遠 ; 鬲オフィスにつないだときの失敗のなかか ら、おもにネットワーク・プロトコルと関係バ架いものを とりあげました。 今回も、ダイヤルアップ接続に関する失敗談を紹介し ます。 インターネットやリモートオフィス間でファイルを転 送する場合には、 FTP (File Transfer Protocol) がよ く使われます。これは、 同一サイト内での転送に適した rcp (Remote CoPy) ・セキュリティを強化した scp (Secure CoPy) などのコマンドとともにポピュラーなファイル中幻手段な ので、たいていの方はご存しでしよう。 FTP は、 歴史か古く、有償・無賞のさまざまなプログラムがある ・ほとんどの Web プラウザが FTP クライアントの機能 をもっている ・アクセス制限を柔軟に設定できる ・イ寸寺定多数のユーザーカ畤別な設定なしでファイルをダ ウンロードできる anonymous FTP 機能がある ・ SITE コマンドにより、 FTP クライアントから実行で きる機能を搦長するイ督はみがある などの特徴を備えています。そのため、とくにインターネ ット上でのファイル転送や、 Web 上で公開されているド ライバ類のダウンロードによく使われます。 TFTP の T は Trap の T? 66 A 君 : あれ ? この節のタイトルって、 FTP しゃなくて TFTP ですよね・・ 私 : おや、そこに気つ、くとは冷静 A 君 : そんなことはいいですから、さっさと失敗談を話し てくださいよ。さっきからすっと待ってるんですから。 今回の失敗談のテーマは TFTP です。 TFTP は、 TriviaI FiIe Transfer Protocol の頭文字からとったも ので、日本語にすると、、簡易版ファイル転送手順 " といっ たところでしようか。けして、、、 Tr 叩 ( 落し穴 ) ファイル 中幻医手順 " ではないはすですが・ tftp コマンド ftp コマンド ( FTP のクライアント・プログラム ) に は農れていても tftp コマンド ( TFTP のクライアント・ プログラム ) は使ったことがない、という方もいるでしょ う。そこでます、 tftp コマンドの簡単な使い方を紹介しま 図 1 は、リモートホスト abyss に接続し、 ・ファイルのダウンロード ・ファイルのアップロード という 2 不頁の操作をおこなった例で、下線部分がユー サーの入力です。 1. 起動 tftp コマンドは引数なしか、 起動します。 ・引数なしで起動する $ tftp リモートホストを指定して ・リモートホストを指定して起動する UNIX MAGAZINE 2000 ユ 2

9. UNIX MAGAZINE 2000年12月号

ステーションの電源を切ってしまい、ファイルシステムを 壊して、先生や」 : : 級生に怒られた経験のある人もいること でしよう。 Linux もシャットダウンせずに電源を切ると、次回の プート時にファイルシステムのチェックをおこないます。 運かいと「なんだかどこかがおかしいような気がするか ら手作業で直してね」というメッセージが表示され、と たんに心のなかはムンクの「叫び」て溢オ功、えってしまい ます。 それでは、 LAMB ルータは同じ Linux システムなの に、なぜいきなり電源を切ってもいいのでしようか。答は、 「そのように作ってあるから」 です。これだけでは答になっていないので、もうすこし詳 しく説明しましよう。 いきなり電源を切れる UNIX を作るには、一勺には 次の 2 つのガ去を使います。 ・メモリ上にシステムのイメージを置く。 ・ファイルシステムを read-only でマウントする。 どちらか一方だけで実現することもありますが、上記の 2 つを組み合わせるガ去もあります。 最初の方法では、すべてがメモリ上に置かれているの で、いつ電源を切ってもかまわないというのは昇できる でしよう。メモリの内容といっても、しよせんはどこか からコピーしてきたものなので、 「形あるものはいつかは消える。なんともはかないものよ のう・ とつぶやきながら、次に電源を入れたときにシステムのイ メージをもう 1 度メモリ上に作ればいいのです。そのイ メージをどこから取ってくるのかは、あとで説明します。 次のガ去でも、ファイルシステムを read-only でマウ ントしているため、いつ電源を切ってもかまいません。そ もそも、 UNIX マシンの電源をいきなり切ってはいけない のは次の理由からです。システムがディスクにデータを書 き込んでいる途中儺しい言葉を使うとトランザクション の途中 ) で電源を切ってしまうと、ファイルシステムに不 整合カ起きてしまうからです。しかし一信己のガ去ではフ ァイルシステムを read-only でマウントしているため、デ UNIX MAGAZINE 2000.12 個人の常時接続環境を考える ( 6 ) イスクには何もデータを書き込みません ( 書き込めない ) 。 ですから、不整合カ吽しるはすがないのです。 しつは、いつでも電源を切れる UNIX は珍しくありま せん。いままでに UNIX を自分でインストールした経験 のある人ならば、このような UNIX を使ったことがある はすです。 UNIX をインストールする過程で、プートフロッピー や CD-ROM から起動した UNIX はメモリ上で動いて います。このとき、インストール・プログラムや設定ファ イルなどはフロッピーや CD-ROM から読み込まメ モリ上に作られたファイルシステムに展開されます。 CD-ROM から OS をインストールする場合は、途中 で CD-ROM をマウントするので、上記の 2 つを組み合 わせたタイプとなります (CD-ROM には書き込めないの で必然的に read-only となります ) 。 Linux には、 1 枚のフロッピーに収まるディストリビ ューションがいくつかありますが、これらもメモリ上で動 く UNIX 刎列です。 1 枚か 2 枚のフロッピーから起動さ れた UNIX なので、もちろんコマンドの数は限られてい ます。しかし、特別な用途 ()S のインストールなど ) で あればそれでも十分です。 話を LAMB ルータに戻しましよう。 LAMB ルータの電源を入れると、カーネルか立ち上が り、そこからⅲ it プロセスを起動します。このとき、デ フォルトのカーネルは次の順番でプログラム・ファイルの パスを探し、最初にみつかったプログラムを実行します。 1. /sbin/init 2. /etc/init 3. /bin/init 4. /bin/sh つまり、上から順番に起動を試みていき、失敗したら次 のファイルを試みます。けっきよくⅲ it プログラムがみ つからなければ、最後は /bin/sh を起動します。 /bin/sh も起動できなければ、カーネルは「どうしたらええねん」 とパニックします。 LAMB ルータのカーネルは、この順番を次のように変 更してあります ( 言田を知りたい人は init/main. c を読ん 1. /bin/init でください ) 。 33

10. UNIX MAGAZINE 2000年12月号

連載 / UN Ⅸ便利帖ーの リスト 4 バカレソート (bubble) 4 , 7 ) 4 , 7 ) 4 , 7 ) 4 , 7 ) 4 , 7 ) 4 , 7 ) 4 , 7 ) 4 , 7 ) 7 , 8 ) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 5 26 2 7 # ! /usr/bin/perl use ; sub printelements { my $i, print " ( " for ()i = 0 ; $i く $ Ⅱー 1 ; print $aC$i] , print $a[$n ー 1 ] , $n = 10 ; f or ( $ i = 0 ; $i く $ Ⅱ ; printelements ; exit 0 ; printelements ; $tmp ; for ($i printelements; int (rand($n) ) ; グラムは終了します。 このプログラムを実行すると次のようになります。前述 したとおり、最初は明の位置にあった 7 か右のほうへ移 動していく様子が分かります。 . /bubble ( 4 , ( 3 , ( 3 , ( 3 , ( 3 , ( 3 , ( 3 , ( 3 , 3 , 4 , 1 , 1 , 1 , 1 , 1 , 1 , ( 中略 ) ( 1 , 2 , 1 , 1 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 7 , 7 , 7 , 7 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 7 , 2 , 2 , 2 , 4 , 2 , 2 , 2 , 2 , 2 , 7 , 5 , 5 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 7 , 7 , 5 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 基本的なプログラム バブルソートを PerI で実現したものがリスト 4 です。 これは bubble という名前で作成しました。 132 取に 26 行目で、整列されたデータ列を出力してプロ EA / 点でのデータ列を出力します。 を交換しています。そして、 23 行目で各ループの終了時 すべきデータがみつかると、 19 ~ 21 行目の部分でその値 16 ~ 25 行目がノワルソートのメインループです。交換 行目でデータ列の内容を出力します。 を int 関数て切り捨てて整数に変換しています。その後 15 って 0 以に $ n 以下の任意の値を得て、その値の小数部分 個々のデータを任意の整数とするために、 rand 関数を使 11 ~ 14 行目で、入力となるデータ列を生成しています。 力するときに利用します。 す。これは入力となるデータ列や途中綉茴、結果などを出 その配列の内容を 1 行に出力するためのサプルーチンで 変数にイ翻タし、値は 10 としてあります。 3 ~ 10 行目は、 配列として実現しました。その配列の大きさは $ n という このアルゴリズムの入力となるデータは a という名前の また、次のようにするとループの回数カ吩かります。 wc は文字数などを数えるためのコマンドで、引数、、一に 47 . /bubble ー wc ー 1 を与えると行数を数えて出力します。 bubble では最初と すこし工夫したプログラム ます。 ですから、上の例では 45 回のループが生じたことになり 出力の行数 = ノレープの回数十 2 最後のデータ列も出力するので、 2 れ ( れ一 1 ) れ一 1 は、 おき、ループの終了時点で 1 度も交換がおこなわれてい は、データカ咬換されたかどうかをループごとに見張って これを実現するにはいくつかの去があります。ここで のです。 こから先のループは必要ないのてやめてしまおう、という すでにデータは整列済みであるといえます。それなら、そ データの交換がまったくおこなわれなければ、その時点で その工夫とは次のようなものです。何回目かのループで 回数を少なくできます。その例を説明します。 となります。しかし、ちょっとした工夫を施すことでこの パフルソートでは、入力にかかわらす全体のルーフ回数 UNIX MAGAZINE 2000.12