場合 - みる会図書館


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

1. UNIX MAGAZINE 2000年9月号

UN Ⅸ便利帖 宮下イ甫 WWW コンテンツを同期させる コンテンツの同期 図 1 ホーム・ディレクトリか甬 ふだん使っている計算機 インターネットの発展により、個人で WWW ページを もつ人が多くなってきました。継続的に WWW ページを 系財寺するとなると、そのコンテンツの管理か重要です。私 は大学の石幵究室のサーバーを利用していますが、このよう な場合、 WWW サーバーにログインしたときのホーム・ ディレクトリとふだん使っているホーム・ディレクトリ か共通で、 $HOME/public-html 以下か直接 WWW コ ンテンツになっているのカ立イ勺だと思います ( 図 1 ) 。 のような工竟では、 $HOME/public-htmI 内のファイル をエデイタで直オ欝糒集できるので、、、 WWW コンテンツ を編集結果に同期させる " という問題は起こりません。 しかし、 WWW サーバーから参照される自分のコンテ ンツが、ふだん使っているホーム・ディレクトリとは別の 場所に置かれている場合があります ( 図 2 ) 。たとえは、企 業などでファイアウォールの外側に WWW サーバーが ある場合、または一殳のプロバイダにダイヤルアッフて接 続して WWW コンテンツを転送している場合などか該当 するでしよう。このようなときには、ローカノ則のファイ ルをエデイタなどで作成、編集して、その結果をサーバー ヘアップロードする " 操作が必要になります。 今回は、このような目的に適したソフトウェアを紹介し ます。 rsync は rsh ( または ssh) を用いてローカル側とサー WWW サーバーでシェルが使える ( ログインできる ) バー側のファイルを同期させるソフトウェアです。同一 場合には、 rsync というアプリケーションカイ甦リです。そ ホスト内の異なるディレクトリの内容を同期させるのに うでない場合 (FTP でしかアクセスできないときなど ) も利用できます。オンライン・マニュアルに rsync には、 sitecopy というアプリケーションがあります。両 faster, flexible replacement for rcp と書いてあると 方とも、 GNUGPL に従って配布されているソフトウェ おり、 rsync は従来からある rcp というソフトウェアの マウント マウント ホーム・ディレクトリ 図 2 ホーム・ディレクトリか甬てない WWW サーバー ふだん使っている計算機 内容を同期させる ホーム・ティレクトリ rsync 107 UNIX MAGAZINE 2000.9

2. UNIX MAGAZINE 2000年9月号

彳難リをはたすのです。したがって、もしこれらのトークン が出現したのなら何かがおかしいことになります。この場 次は、状態を表すためのトークンの処理です。 います。 合、ラベル done に分岐することて彳刻台末の処理をおこな case case case case case EMPTY : BEGLINE : ENDLI NE : BEGWORD : ENDWORD : LIMWORD : NOTLIMWORD : BACKREF : mp の値は直前の要素の must 刎直の次の場所を指すよう になっています。 mp の値をデクリメントすることで、 こで処理する演算子の対象とすべき must の値を指すよう に変更しています。 mp を髜各したあとは、 must 刎直を 取り出し、代わりに新しい must の値を追加します。実 際にはリセットした must を積むことになるので、 reset- must 関数を呼び出してこの処理をおこなっています。 さきほども述べたように、尺の演算の場合は複雑な処 理となります。ますは、演算子の対象となる値がすくなく とも 2 つは積まれていることを石忍します。 case OR: case ORTOP : if ()p く &musts [ 2 ] ) resetmust (mp) ; break; を取り出し、演算子を適用した結果の must を積みます。 同様です。演算子の対象となる値に付けられた must の値 その結果の 3 を再度スタックに積みます。 must の処理も んだところで 2 つの値をスタックから取り出して計算し、 読み込む場合、 1 、 2 とスタックに積んでいき、十を読み込 値の計算をおこなうようなものです。たとえば 1 、 2 、十と 法で表現された数式を読み込みながら、スタックを使って タックのよ引リ用しています。これは、逆ポーランド記 ットしなけれはなりません。 dfamust 関数では、 mp をス トークンが * や ? の場合にも、同様に must の値をリセ 要素を空にします。 の関数は、 left 、 right 、 is をそれぞれ空文字列とし、ⅲの リセットするために resetmust 関数を呼び出します。 ん。そこで、これらのトークンの場合には、 must の値を の状態を表すトークンで、文字と一致することはありませ これらは行頭や単語の区切りなど、マッチする文字列 goto done ; / * " cannot happen" * / case STAR : case QMARK : if ()p く = musts) goto done ; resetmust (mp) ; break; / * "cannot happen ます、 mp 直が musts 以下になっていないかを詩・ヾ、 演算子の対象となる値があることを石忍しています。演算 子があるにもかかわらず、演算子の対象となる値がなけれ はエラーですから、 done に分岐します。 実際の処理としては、 mp の値をデクリメントしたあ と、 resetmust 関数を使ってリセットしています。現在、 92 こオ功忍できたら実際の処理に移ります。ます、演算 子の右の子の must を rmp 、左の子の must を lmp に ー尉寺します。このとき、最終的な言 t 算結果の値は lmp が lmp rmp lmp—>is [ 0 ] if (strcmp(lmp—>is, rmp—>is) ! = 0 ) / * Guaranteed tO be . Un1ike1y, but . 孑嗣ー場所にオ内されます。 rn = strlen(rmp->right) ; ln = strlen(lmp—>right) ; めやや複雑です。 一方、 right の計算は文字列の末尾からの上交になるた ます。 文字を代入することで、左端からの共通文字列を取り出せ か伺し文字のあいだは右へ進めます。異なるところでヌル 左辺と右辺をそれぞれ left の左端からみていき、両辺 lmp->left [i] 十十 ; lmp->left Ci] = = rmp—>left Ci] ) while (lmp—>left Ci] ! = , \ 0 , & & i = 0 ; 次は left の計算です。 馳の is を空文字列にします。 両者を strcmp で上交し、異なる場合には lmp ( 計算結 か等しいときにのみ値をもちます。 is は文字列ですから、 ます is の計算をおこないます。〕尺の場合、 is は両者 Ⅱ = In ; UNIX MAGAZINE 2000.9

3. UNIX MAGAZINE 2000年9月号

Daemons & Dragons— 表 1 ファイルの瑟頁を示す記号 contents ファイルは、パッケージの情報を詳しく知り 記号種類 たいときに役立つ。 pkginfo コマンドの場合、ノヾッケー キャラクタ・スペシャルファイノレ ジ自体の情報は得られるが、それを構成するファイルの ディレクトリ d 編集された (edited) 一覧は表示されない。一覧を取得するには、 contents フ ファイノレ f ァイルに対して grep コマンドを実行する。 grep を使え ードリンク 1 ば、あるファイルをインストールしたパッケージも分か シンポリック・リンク る。 contents ファイルは pkgadd と pkgrm が管理す 流動的 ( 変更が予想される ) る。このファイルがなくなったり壊れたりすると、どち bar" は、 FOObar というノヾッケージを /tmp/pkg で検 らのコマンドも正しく動作しない。 索し、このパッケージに関する情報をすべて表示する。 パッケージの内容 パッケージの構築 ローカルでコンパイルしたソフトウェア製品をパッ ケージ化すると便利な場合が多い。これなら、企業本 インストールされたファイルは /var/sadm/install/ での製品管理がかなり楽になる。 GNU C コンパイラ contents に記録される。 UNIX の慣例に従い、このフ (gcc) 、 Emacs 、 ssh など、フリーの中 ~ 大容量のソフ ァイルは ASC Ⅱテキストである。各行は 1 つのファイ トウェアをパッケージにしておくと便利である。たとえ ルを表し、空白文字で区切られたフィールドから構成さ ば、 http://www.sunfreeware.com/にはあらかしめコ れる。最初のフィールドはインストールされたファイル ンパイル、ノヾッケージ化された SoIaris 用のフリー の名前である。リンク ( ハードリンクまたはシンポリッ フトウェアが大量にある。 ク・リンク ) の場合、ここには等号で区切られた 2 つの名 gcc での例をみてみよう。 gcc では、コンパイル時 前か第己述される。たとえば、、 /bin=/usr/bin" は、 /bin にファイルの最終的な格納場所を指定する必要がある。 が / usr / b ⅲへのリンクであることを示す。 2 番目のフ こでは格納場所を /opt/FSFgcc とし、パッケージ ィールドはファイルの種類を表す。これは ls の出力に に、、 FSFgcc" という名前を付ける。これは、 Sun の慣 使われる文字指示子である ( 表 1 ) 。 s がシンポリック・ 例に従って付けたものだ。 gcc をコンパイルするには、 リンクを、 1 がハードリンクを表す。 3 番目のフィールド . /configure ー—prefix=/opt/FSFgcc" のようにプレ はつねにインストール・クラスで、通常は 11 。 ne である。 フィックスを指定しなけれはならない。コンパイルか完 各行のはかの部分のフォーマットは、ファイルの種 了したら、、、 make insta Ⅱ " でパッケージをインストー 類によって異なる。すべての行に共通しているのは最後 ルする。これで、最終的な製品に関連づけられたファイ こにはファイルを作成したパッ のフィールドである。 ルだけが置かれる。 ケージの名前か記述される。ディレクトリなどの場合に パッケージの構築手順は以下のとおりである。 は複数のパッケージが列挙される。これは、ファイルが 複数のパッケージで使われることを示す。 1. pkgproto コマンドで断彡ファイルを作成 シンポリック・リンクとハードリンクの場合、たんに 2 ・ pkginfo ファイルを ( 手作業で ) 作成 リンクを作成したパッケージが列挙される。ディレクト 3. 雛形ファイルを編集 リのエントリであれば、ファイルのモード、所有者、グ 4. pkgmk コマンドを実行 ループが並ぶ。通常のファイル ( 流動的なファイルや編 5. 必要に応して pkgtrans コマンドを使用 集されたファイルを含む ) なら、モード、所有者、グル ープに続いてファイルサイズ、チェックサム、最終変更 pkgproto コマンドは雛形ファイルを作成する。この 日か列挙される。キャラクタ・スペシャルファイルの場 ファイルには、パッケージに含まれるすべてのファイル 合は、メジャーデバイス ID とマイナーデバイス ID の か列挙される。コマンドはディレクトリのリストを再帰 的に検索する。ディレクトリ内のファイルはすべて、現 後ろにモード、所有者、グルーフ。か読く。 128 UNIX MAGAZINE 2000.9

4. UNIX MAGAZINE 2000年9月号

いつでも使えるインターネット クセスが発生します。そして、これらのポート番号を事前 に予測するのは不可能です。つまり、 IP masquerade を 利用するルータでインターネットに接続している場合は、 パッシプモードをサポートできないことになります。 一方、凾のモードの場合は簡単です。内向きの 21 番 ポートへのアクセスと、外向きの 20 番ポートからのアク セスを許可すればよいのです。 最後に、 FTP サーバーもクライアントに IDENT の 問合ををおこなうことが多いので、ポート 113 番の通信 も許可するように設定しておきます。この通信をフィルタ で落とすと、 FTP のコマンドチャネルの接続カ蔀寉立する までに、よぶんな時間がかかってしまいます (IDENT が タイムアウトするまで侍たされるからです。おそらく 5 ~ 6 不呈度 ) 。 FTP の通信に使用されるアドレスとポートの一覧を ロ設定例 表 6 に示します。 たいへん長らくお待たせしました。お勉強はこれで終り 端末型接続 ( 公開サーバーなし ) です。いよいよ、設定作業を始めます。 44 NATØ'I*-J で説明するようにこういった働きはありませ b)o 一方、 SLII には、末尾の「 MN128-SOHO SLII— 対に、、デフォルト許可 " の方針でもよいでしよう ( 図 16 ー バケットは捨てられる " という働きを利用できるので、反 querade を利用している場合は、、、変換テープルにない とることをお勧めします ( 図 16 ー a ) 。 RTA52i で IP mas- 本とし、許可するバケットのルールを j 助日していく去を この場所でのフィルタリングは、、デフォルト拒否 " を基 いへん重要です。 られてくることがあります。ですから、このチェックはた インターネットからは、ときに悪意のあるバケットが送 です。 かに入れるバケットと入れないバケットを選別するわけ ックをおこないます。つまり、関所の入り口で、関所のな これをルータ内部で処理する前に、フィルタによるチェ ルータがインターネットからバケットを受信したとき、 インターネットからルータへの ( 内向き ) バケット ん。したがって、かならす、、デフォルト拒否 " にする必要 があります ( 図 17 ) 。 どちらのルータを使っている場合も、次のルールはかな らす設定します。 ・拒否 : 始点アドレスカワライベート IP アドレス ・拒否 : 終点アドレスカワライベート IP アドレス そもそも、 IP バケットの始点アドレスかプライベート IP アドレスだと、返信バケットを送り返せません。このよ うなバケットは、どう考えてもありそうにないのですが、 現実には流れてくることがあります。その理由は、設定ミ ス鬪織内のプライベート・ネットワークにつないでいた ・算機を、誤ってグローバル IP アドレスのネットワーク につないでしまった ) か、攻撃 ( またはいたすら ) を意図 しているかのどちらかです。いすれにせよ、受け取るべき バケットではないので、積昀にフィルタで落とします。 2 番目の、、終点アドレスにプライベート IP アドレスが 書かれているバケット " は、響各制彳卸の観点からいって送 られてくるはすはありません。万一、このようなバケット を受け取った場合は、プロバイダのルータの糸習各テーフル に異常があります。しかし、送られてこないはすだからと いって知らんぶりを決めこむのもよくありません。これも ィ / にヨコ 0 居いワ こういろ、 む、つで UNIX MAGAZINE 2000.9

5. UNIX MAGAZINE 2000年9月号

Daemons & Dragons— ン数を示す。 を実行するとプート時を起点とする統計値が最初に出力 されるはずだ。これらの数値は無視して、短い間隔で報 memory のカラム ( または、、 sar ー r " の出力 ) は、スワ 告を繰り返すようにするほうがよい。 ッフ。領域と物理メモリの空き容量を示す ( 、、 free" という ラベルが付いている ) 。あらかじめ設定された物理メモ これらのコマンドの出力はいたって単純で、システム リの最少残量 ( 通常は IKB 前後 ) に達すると、システ の各デバイスへの読取りと書込み時の転送量が表示され ムは物理領域を増やすためにメモリページをディスクに る。ディスクのスルーブットの限界が分かっているなら、 移し始める。システムの稼重加間に関係なく空きメモリ これらの数値からディスクの使用率を割り出せる。しか はこの値に近づくが、それ自体はまったく正常である。 し、通常はもっと簡単な指標が使える。サービス時間 UNIX では必要に迫られるまでページを物理メモリか ( たいてい、、 svc-t" か、、 serv" と表示される ) と待ち時間 ら移動しないからだ。ただし、スワップ容量の不足はメ をみるのである。サーピス時間は、リクエストを処理す モリ割当て要求の失敗につながる。これはなんとしても るための平均所要時間である (I/O キューでの待ち時間 避けたい。 を含む ) 。この数値が 50 ミリ秒以上の場合、ディスク がリクエストでいつばいになっている可能生がある。待 べージングの糸値 (sar-p) は、 1 秒あたりのページ ち時間は、リクエストが処理されるまでの待機時間の合 イン / ページアウトを KB 単位で表示したものである。 計である。待ち時間が長い場合もディスクの飽和状態を vmstat では pi" と、 p 。 " て示される。これにより、シ ステムで実行されているべージング量を感覚的に擱むこ 示す。 とができる。高い数値はよくないが、それでおしまいで 想定される状況として、何台かのディスクのサービ はない。 SoIaris では、、短期的なメモリ不足 " と呼ばれる ス時間と待機の割合か高い数値を示しているが、各ディ ものが報告される。これは vmstat の出力の、、 de" に該 スクの転送率は比較的低い場合がある。言い換えれば、 当し、メモリの使用傾向を示す。高い数値は、メモリが I/O リクエストの処理に時間がかかっているのに、と 急速に消費されていることを示す。 1 つまたは複数のプ くににしいディスクはみあたらないという状況だ。これ ロセスが、高い割合でメモリを割り当てているというこ はおそらく、コントローラのいすれかがふさがっている とである。 ことを示す。サービス時間の数値か高いディスクを調べ て、それらが同しコントローラに接続されているかどう もっとも重要な数値は、べージデーモンのスキャンレ かを石忍しよう。 ート、すなわち、、 sr " である。この数値はページデーモン の作業量を示す。物理メモリが少なくなると、ページデ ネットワーク I / O ーモンはべージの再生利用を始める。丘参照されてい ネットワークの輻輳がシステム・ノヾフォーマンスの ないページを調べ、それらのページアウトのスケジュー 問題として顕在化することもある。これは、間題の原因 リングをおこなうのである。べージデーモンの作業量が がシステムになくても起こりうる。ネットワークで問題 多いようなら、メモリを増設する必要がある。一般に が発生すると、ネットワーク・アプリケーションやネ 毎秒 200 ページを超える場合は問題とみなされる。 ットワークを介したディスクアクセス (AFS や DFS 、 ディスク I / O NFS など ) に支障が生しる。この場合、システムの統 計値を調べてもポトルネックを示すものはないにもかか ディスク操作の監視は、ほとんどの UNIX システム わらす、依然としてパフォーマンスが低下しているよう で簡単におこなえる。難しいのは、ディスク I / 0 カ蒴加 に感しられるだろう。 した原因を特定することである。現在では、 I/O の糸兤 値が得られる各種のコマンドか揃っている。 SystemV ネットワークのパフォーマンス・チューニングについ から派生したシステムでは、一般に、、 sar—d" で I/O の て述べると長くなるので、こでは簡単なチェック項目 をいくつか紹介しておく。まず、疑わしいシステム上で 統計値を取得できる。ほかのコマンドとしては、 iostat netstat-i" を実行し、ネットワーク・インターフェイ と dkstat がある。 vmstat と同様に、 iostat と dkstat 135 UNIX MAGAZINE 2000.9

6. UNIX MAGAZINE 2000年9月号

けつまきびっ U 図 1 NcFTP の Web ページ が、 FTP のはうか作業が速いしすっきりしていてよいの に、と思っています。 、 Veb ページに求めるもの WWW のイ督目 . みが分かってくるにつれて、私にとって の Web ページの想は、 ・軽くてシンプルで分かりやすくて正しいこと になりました。 情報を伝達するメディアで一番重要なのは内容ですが、 それを見てくれる相手がいらいらしないことも大事です。 そこで、不要な画面構造 ( デザインとしての表の使用 ) や http://www.ncftp.com/ 画像は使わないとか、見やすい色にするように・じ掛けてい ターネットで、 HTML ファイルだけに専用のアフリケー ます。一般的なおしゃれな web ページとは逆行してい ションを使う必要はない、ということでした。 るような気もしますが、時間をかけて送られてきた画像が NcFTP を使う 「いらっしゃいませ、この画像を押すとホームページに飛 びます」などというものではうんざりします。 師匠に具体的なアフリケーション名を教わり、簡単で 正しい HTML を使いたいと思い、最新の HTML 標 機能の多そうな NcFTP ( 図 1 ) を使うことにしました。 準を読んでみたりもしました。もっとも、その成果を反映 FreeBSD の場合、インストール自体はパッケージを利用 させる余裕がなく、 いまだに自分の Web ページは間違っ できるので簡単です。使い心地もふだんコマンドラインで たままです。 コマンドを入力する場合と変わらないので、すぐに使える 現在の私の Web ページには日本語のコンテンツしかな ようになりました。 いのに、なぜかたまに国外から反応があります。インター ふだん利用している ls や cd などのコマンドかイ吏えるの ネットは世界規模なんだとあらためて感じて、英語のペー は FreeBSD の標準の ftp コマンドと同しですが、さら ジも作るべきだと考えています。 にファイル名やディレクトリ名などの補完か利くのカイ叫リ です。ログアウトした場戸励当求され、ふたたび同しサー を ーにログインすると前回ログアウトした場所に自重加勺に 移動してくれるのも気に入りました。ローカルのディレク 山も丘の電器店には高品質のデジタルカメラがたくさん並 トリを参照するときは、コマンドの前に 1 を付けて lls 、 んでいて、その人気の高さを実感します。普通のカメラに lcd などとします。 も人によってさまざまな用途があるように、デジタルカメ FTP アフリケーションでは、自分カ甘旨示している操作 ラの使い方もいろいろでしよう。ラインナッフを見てみる や、作業の釜がよく分かるところか気に入っています。 と、プロのカメラマンでも使えるような大きくて重いもの 最初は Web コンテンツのアップロード用だけに使い始め や、デジタルズーム付きの手頃なもの、、、押すだけ " の簡 ましたが、そのうちにあらゆる場面て利用するようになり 単なカメラ、とそれぞオ特徴があります。 ました。 WWW でファイルを取得できる場合も、可能で 私も 2 年ほど前からデジタルカメラを使っています。お あれば FTP を使います。最初は FTP サーバーがどこ もに記憶を補うためのメモ用として使っているので、デジ にあるか分からす困っていましたか : そのうちに自分がよ タルカメラに求める機能や特徴は、 く使う FTP サイトは應えてしまい、必要な FTP サイト 窈架し方もなんとなく分かってきました。描丘はファイル ・小さくて軽い 中幻医の中心が WWW に移りつつあるという話も聞きます 起動やキ彡速度が速い V 引 0n2 を 20 日 b,k. ドを & ツ、を・ i 引扣 wav 一いぜ , 9.2 供第 ) 第 V 町 5i0n301 0 い厂 , ア ( 第朝謇信 mv.'ava ⅱ曲い ! Theth Ⅳ dma 「 versionoftheppularfreeFTPclient ds 試甲 p ) わ「日肥 w い intelligent な 0 ⅲ . ba: 「 0 [ の」ⅵまゴれド ( 、 e ⅱ . M に「 80 W ⅱⅵ 0 る . 印ⅵ more. ( Ma ′朝 28.2 火第 ) 第 Ne Ⅳい t Ⅳ ( ド戸 S ~ ハ , do : um 印載 ion : を第飛滯 A 諍 安当当。第ゞ ( F をレな電 Y8.2 侊基り 第 V Si0n2430 い . 嶬ゾ・をゞ「 i55 ⅱ llav 一に ( ぐ物は 99 め テジタルカメラの使い途 119 UNIX MAGAZINE 2000.9

7. UNIX MAGAZINE 2000年9月号

たさない場合には、左辺の le れはそのままですが、現在左 辺を表している lmp がけっきよくは言算後の値をイ尉寺す ることになるため、とくに処理は必要ありません。 right の計算は、右辺の is が分かっていれはその前に 左辺の right を ; 叫吉したもの、右辺の is が空文字列の場 合には右辺の right となります。 if (rmp->is [ 0 ] lmp—>right [ 0 ] icatalloc(lmp—>right , rmp—>right) ; lmp—>right if (lmp->right = = NULL) goto done ; 右辺の is が空文字列ではない場合、右辺の right は右 辺の is と同一です。したがって、左辺の right と右辺の right を連結することで目的の文字列カ碍られます。右辺 の is が空文字列なら、左辺の right を空文字列としてし まうことで、 is か空文字列ではない場合と同一の文て計算 できます。 is は、両辺の is か空文字列ではない場合にかぎり計算 できます。この場合、両辺を連結したものを is とします。 if (1mp—>isCO] ! = icatalloc(lmp—>is , rmp—>is) ; lmp—>is if (lmp—>is = = NULL) goto done ; else lmp—>is [ 0 ] break; いずれか一方が空文字列の場合には、結果として得られ る is も空文字列とします。 ラム自身の重川乍がおかしくならないように、ここで検査し END よりも小さなトークン値が使われた場合に、プログ りえません。しかし、プログラムのどこかカ墹違っていて も大きな値となっているため、普通はこのような状況はあ オ褓内されていた場合です。トークン値はすべて END より ます。ますは、トークン値として END よりも小さな値が これら以外の場合は、まとめて default 節て扱ってい 94 goto done ; if (t く END) default : ておきます。 else if (t goto done ; トークン値としてヌル文字かオ褓内されていた場合も、何 かがおかしくなっているので後処理に分岐します。 文字クラスカ甘旨定されている場合には、文字クラスの詳 細は調べす、すべてを空文字列とするために resetmust 関数を呼び出します。 else if (t > = CSET) resetmust (mp) ; トークン値が CSET 以上のものは、すべて文字クラス を表しています。 上記以外の場合は通常の文字の処理となります。 reset- must 関数を使っていったんそれぞれの値をネ加月化しなお したあと、 is 、 left 、 right をその 1 文字からなる文字列 とします。また、ⅲにはその 1 文字からなる文字列を追 mp->right [ 1 ] mp—>is [ 1 ] = mp->left [ 1 ] mp->right [ 0 ] mp->is [ 0 ] = mp->left [ 0 ] resetmust (mp) ; else 加します。 enlist (mp—>in, mp—>is, if (mp->in = = NULL) goto done ; break; 1 ) ; これで switch 文は終了です。この後ろには、 #ifdef DEBUG—#endif で囲まれたデバッグ出力用のコード カきます。そして、 1 つのトークンを処理して次のトー クンの処理に移行するために、 mp の値をインクリメント しています。これで、すべてのトークンを処理するための for ループは終了です。 十十 mp , この後ろには、 switch 文のなかからも何回か分岐先ラ ベルとして使われていた done ラベルか読き、関数の後処 理になります。 UNIX MAGAZINE 2000.9

8. UNIX MAGAZINE 2000年9月号

連載 / IJN Ⅸ便利帖ー⑨ 代わりを務めてくれます。 ・ CVS ( リビジョン管理システムの 1 つ ) などか作業 . 用 ・コピーの対象から外したいファイルを指定できる。 ッションをコピーできる。 ・リンクやデバイス、ファイルの所有者、グルーフ、パー 以下のような特徴をもっています。 原稀卍印引点 : での rsync の最斤バージョンは 2.4.3 で、 rsync はローカル側とサーバー側の両方にインスト インストール 詳しくは http://rsync.samba.org/を参照してくださ ・ rsync サーバーを利用できる。 ・ rsh 以外に ssh も利用できる。 に使うファイルをコピー対象から外すことができる。 ーノレ rsync は /usr/bin/rsync としてインストールされま # rpm —i rsync—2.4.1 ー 2 . rpm ケージを次のようにインストールすれはよいでしよう。 インストールされていない場合は、上記の RPM パッ 2. rpm という RPM からインストールされていました。 で、 rpmfind コマンド 1 てオ索したところ、 rsync-2.4.1ー かしめインストールされていました。バージョンは 2.4.1 今回使用した Red Hat Linux には、 rsync があら Red Hat Linux たものです。 、、 GNOME ワークステーション " としてインストールし FreeBSD が 4. O-STABLE です。 Red Hat Linux は イ屯用した OS のノヾージョンは、 Red Hat Linux が 6.2J 、 できます。今回はそれらを使ってインストールしました。 が、 Linux や FreeBSD の場合叫リなパッケージを利用 rsync はもちろんソースから作成することも可能です ルだけを説明します。 ことになるでしよう。ここではローカル側へのインストー のインストールについては、一ヨ麹勺には管理者にイ嶽頁する ンストールできる権限があればよいのですが、サーバーへ する必要があります。サーバー側にアプリケーションをイ す。 108 1 http://rpmfind.net/linux/rpm2html/rpmfind.html FreeBSD FreeBSD の場合は、 ports か package か利用できま す。 システムに ports コレクションがインストールされて いるときは、以下の操作をおこないます。 # cd /usr/ports/net/rsync # make install すると、 FTP サーバーから rsync のソースや必要な パッチがダウンロードさアフリケーションの作成、イ ンストールまでがおこなわれます。該当する ports のメ ンテナーがマメな人であり、かっ ports コレクションの アップデートがきちんとおこなわれている場合は、これだ けの操作て、最新版がインストールされます 2 。 ports コレ クションのアップデートについては「 FreeBSD ハンド ブック」の第 19 章を参照してください 3 システムに ports コレクションがインストールされて いないときは、以下のようにして package を利用するこ とができます。 近隣の FTP サーバー (ftp4.jp.freebsd.org など ) か ら rsync の package をダウンロードし、 pkg-add でイ ンストールします。原稿執筆時 . 点での package の最新版 は 2.4.1 でした ( 誌面の都合 - E 、て折り返しています。 以ー・ト扣 ) 。 # fetch ftp://ftp4.jp.freebsd.org/pub/ FreeBSD/ports/i386/packages—4. O—re1ease/A11/=> rsync-2.4.1. tgz # pkg-add rsync-2.4.1. tgz こ菓作は次のように 1 行ですますこともできます。 # pkg—add ftp: //ftp4.jp.freebsd.org/pub/=> FreeBSD/ports/i386/packages-4. O-re1ease/A11/ rsync—2.4.1. tgz インストールされる場所は /usr/local/bin です。 rsync はローカル側とサーバー側のやりとりに rsh ま たは ssh を利用するので、そのための設定が必要になり ます。 2 感謝しましよう。 3 これは http://www.jp.freebsd.org/www.FreeBSD.org/ja/ handbook/cutting-edge. html て第売むこともできます。 UNIX MAGAZINE 2000.9

9. UNIX MAGAZINE 2000年9月号

Daemons & Dragons— 委任することもできる。各サブドメインの適切な DNS さらに注意が必要なのは、どのアドレスプロックに対 サーバーの名前は、顧客がそれぞれ ISP に通知する。 してもクラスレス委任は一度しかできないことだ。 ISP があるアドレスプロックをクラスレス委任にすると、 ISP がゾーンを作成したら、各サブドメインで有効な のプロックはそれ以上分割できない。プロックをさらに PTR (pointer) レコードを用意するのは顧客の責任と 分割するには、 CNAME が別の CNAME を指すよう なる。このようなゾーンファイルは、通常の逆ドメイン にしなければならない。 ISP の CNAME は、プロック のゾーンと同様のものにみえるだろう。あるアドレスに の 2 回目の分割時に作成される顧客の CNAME を指す 対応する PTR レコードがなければ、存在しないレコー ことになる。ほとんどのネームサーバーは、最大で 8 つ ドを指す CNAME レコードか検索される。ネームサー の CNAME レコードのチェーンを処理するが、 DNS ーは、このような場合にも、 nosuchdomain' といっ の仕様には、これが正しい設定ではないことが明記され たエラーを返すなどしてうまく対処する必要がある。 ている。プロックをさらに分割する必要がある場合は、 ほかのドメインへの委任 親のネームサーバーの協力を得たはうがよいだろう。 この方法を使えば、小さな IP アドレスのプロック CNAME レコードがかならずしもサブドメインを指 を手際よく委任できる。一度確立された親のゾーンは、 している必要はない。名前空間の別の部分の名前を指し ネームサーバーの変更時にのみ変更が必要となる。親か ていてもかまわない。実際、ドメインが in-addr. arpa らみて、メンテナンスの負担はほかのゾーンと変わらな の一部でなければならないわけではない。 PTR レコー い。委任を利用すれば、名前管理は本来の場所、つまり ドは名前空間のどの部分にあってもよい。 CNAME レ 実際のアドレスを管理するシステム管理者の手に戻る。 コードが、 subnet0.9.168.192. il ト addr. arpa の代わり に addr.mydom.com を指すこともありうる。この場 合、 PTR レコードは A(address) レコードと同じゾー ンに定義される。これを運用上のメリットとみるユーザ ーもいるだろう。企業のドメインでの変更の大半は、逆 ドメインの変更もともなうからである。 システム・ / ヾフォーマンスの改善 ューザーもシステム管理者も、コンピュータ・システ ムから最高のパフォーマンスを引き出したいと考えてい る。パフォーマンスの低いコンヒュータは使いにくく、 管理も難しい。システム管理者がもっとも恐れるトラブ ルの報告は、システムのンヾフォーマンスが低い " こと この方法を用いる際に注意すべき点がいくつかある。 を示すものである。 旧いバージョンの DNS サーバーのなかには、 CNAME パフォーマンスの間題は、システムに直接ないし間 レコードカ甘旨すドメインを参照しないものがある。サー 接的に関連するものなら、まさしくありとあらゆる原因 バーがそのドメインのレコードを ( キャッシュまたは権 で発生する。メモリの速度からネットワークの使用状況 威データの一部として ) すでにもっている場合に、ドメ にいたるまで、すべてがシステムのノヾフォーマンスを左 インに関する情報のみを提供するのである。理想的な解 右する。パフォーマンスを改善するには、間題の原因を 決策は、当然ながらネームサーバー・ソフトウェアを 突き止めなけれはならない。ところが、報告されるパフ 最新版にすることだ。しかし、この問題は IP アドレ ォーマンスの間題にはどうにも厄介な一面がある。それ スを検索するインターネット・ユーサーに影響をおよば は、全体のパフォーマンスを厳密には測定できないこと す可能性があり、ソフトウェアのインストールをすべて だ。間題は、具体的なものではなく感覚的なものである 管理することはできない。この間題に対処するには、親 ことが多い。あるユーサーが遅いと感じたとしても、は の ( この場合は ISP の ) ネームサーバーを CNAME レ かのユーザーは十分と考えているかもしれない。 コードで参照されるドメインの権威として動作させる必 要がある。親のネームサーバーを各サブドメインのセカ システムの動作の改善とは、突き詰めればポトルネッ ンダリ・サーバーにすれば、これを簡単に実現できる。 クを特定してそれを軽減することである。パフォーマン 点 意 132 UNIX MAGAZINE 2000.9

10. UNIX MAGAZINE 2000年9月号

ら本の値を計算することができます。 left 、 right 、ⅲの値は、それそれ対象となるパターンの left 、 right 、 in と同一です。これらは、十か対象となる パターンの 1 回以上の系区しであることから明らかでしょ う。パターン本を表す文字列である is は、縄区し回数 か決まらないかぎり固定文字列とはならないので、この場 合には空文字列とします。 パターンの連結の場合はすこし複雑です。 p と q とい う 2 つのパターンを連結する例を考えてみましよう (p が 前です ) 。できあがるパターンの左端から始まる文字列は、 もちろん p の左端からの文字列です。つまり、全体の left は p の left となります。このとき、パターン p か表す全 体の文字列である is が分かっていれは、それに q の左端 からの文字列を連結したものとすることができます。この 処理では、できるかぎり長い文字列を得たはうがその後の 処理の効率が上がります。したがって、 p の is が空文字 列でなけれはこれに q の left を連結したもの、空文字列 なら p の left とします。 right についても、 p と q を入れ替えて left の代わりに right を用いると、 left の場合とまったくです。つま り、 q の is が空文字列でなければこれの前に p の right を連結したもの、空文字列なら q の right とします。 パターンを連結する際の is は、これらにくらべると簡 単です。 p と q の is カ吩かっていれば、それらをつなげ たものになります。どちらか一方が空文字列の場合には、 本の is も空文字列とします。 最後のⅲは、ほかの値とは型か異なります。たとえば、 a[bc]d というパターンには文字列 a や d がかならす含ま れなければなりません。これまでの左端からの文字列、右 端からの文字列、パターン本を表す文字列は 1 つしかあ りませんが、かならす含まれなければならない文字列は 1 っとはかぎりません。そのため、ⅲは複数の文字列を一墹寺 できるような型となっています。これらは、すべての文字 列か有在しなければならないという意味になります。 実際に連結をおこなう場合のⅲは案外簡単です。 p の ⅲと q の in を加え、さらに p の right と q の left を連 結したものを加えます。ただし、この処理も屯におこな うわけにはいきません。たとえば文字列のパターン a と b を連結した場合、一己のとおりに処理すると a 、 b 、 ab の 3 つの文字列となってしまいます。文字列のパターン a と UNIX MAGAZINE 2000.9 表 1 ⅲの計算例 p の in abc abc abc abc abc 、 abd abc 、 cbd abc 、 cbd def bcd b cd abd abc プログラミング・テクニック bc bc ab c plq の in ab 、 bd abd 、 cbc ab 、 bd 、 bc 、 cb b のⅲですから、文字列 ab だけが必要なデータで、あ 89 ます。ポトムアップとは、冓造の葉のはうから計算を始 このようにして、ポトムアップに 4 つの値を求めていき 集めます。 さきほどの連結の場合と同様に、重複ぶんに注意しながら 合を検査します。その結果得られる共通部分文字列を、 に m 個、 q のⅲにれ個の文字列があれば、 m x れの組 それぞれについて共通部分文字列を検索します。 p のⅲ します。複数の文字列がⅲに登録されている場合には、 基本的には、両者のⅲに共通した部分文字列を取り出 ばならない文字列か司算されています。 のパターンのどちらが〕尺されてもかならず含まれなけれ 算をおこなえばよいか分かるでしようか。いすれも、 2 つ えてみましよう俵 1 ) 。これらの例から、どのような計 尺演算子のⅲの言 1 算はたいへん複雑です。実例で考 はその文字列に、そうでなければ空文字列にします。 is は、両方のパターンの is を調べ、両者か 1 司ーの場合に あれば、本としても abc となります。つまり、尺の p と q か伺ーの文字列の場合です。たとえば abcl abc で を表す文字列が 1 つに決まらないのです。唯一の例外は、 plq は p と q のいすれかを意味するため、パターン本 選択の場合の is は、基本的には一意に定まりません。 の右端からみて共通な部分文字列となります。 が plq の left となります。 right も同様に、両者の right aab なら、どちらにも含まれる左端からの文字列である a 分となります。つまり、 p の le れが abc で、 q の left が p の left と q の left の左端からみたときの共通文字列部 るパターンにかならす必要になる左部分文字列ですから、 いうバターンを考えましよう。 left は、結果として得られ 最後ば尺を表す寅算子のノードの場合です。、、 q " と 理も必要になります。 との 2 つは不要です。したがって、これらを削除する処