典型的な対処方法 爐変に、攻撃された場合にどのように対処すべきかを順 ーの一とはなかったことにしよう " と記慮から しよっ。 消してしまうのは、それからでも遅くはありません。 を追って説明します。 1. 落ち着く さきはど書いたように、 2. 証拠を集める これがもっとも重要です。 できれば、ディスク全体のバックアップをとるか、その ディスクを外してイ慕しておきます。それが無理でも、 せめてログファイルはすべて残しておきましよう。 攻撃に成功した場合はログをいっさい残さないタイプも あるので、ログファイルだけでは判断できないこともあ ります。 余裕があれば、システムの設定ファイル (/etc ディレ クトリ全的を残し、さらに、不審なファイルを探し出 してそれも保存しておきます。たとえば、 て始まるディレクトリに見置れないファイルが置かれて いることがよくあります。以下に、こういったディレ クトリを探すコマンドの実彳列を示します。 f ind / —name , . * ' —type d —print このコマンドを実行すると、ディレクトリのアクセスタ イムか変更されてしまいます。しかし、アクセスタイム まて調べることはめったにないので、あまり気にしなく てもいいでしよう。 また、一日判勺な流行だったのかもしれませんが、侵入時 に /tmp/bob というファイルを作成する攻撃フ。ログラ ムか数多く作られたこともありました。ただし、このよ うな流行モノはセキュリティ動旬を白寉に把屋していな いと発見するのは難しいと思います。 3. 被害状況の判断 集めた証拠から、被害の程度と深刻さを判断します。 の段階になると、響知識と最新動旬に関する情報が必 要になります。したがって、性格占いでよくある、、こう やって、こういけばあなたは A タイプ " のような、誰 でも簡単に判断できるルールは作れないと思います。お 気楽なセキュリティ情報サイトでは、このような場合 は「 OS を再インストールしたらええやん」とばかり UNIX MAGAZINE 2001.4 物 - 個人の常時接続環境を考える ( 9 ) に、お気楽に、、最悪でかなり深刻 " と判断するように勧 めています。たしかに、どう判断してよいのか分からな い場合は、とりあえずたと考えておくのがよいのか もしれません。しかし、そんな忠告にまじめに従ってい ると、毎日毎日 OS の再インストールに明け暮れること になり、「いったい、なんのためにインターネットに接 続しているんや ? 」と自問したくなるにちがいありませ ん。ファイアウォールを適切に構築しておけば、ファ イアウォールの内側を攻撃される確率はぐっと下がり ます。その意味でも、ファイアウォールの導入は重要 と、私もお気楽にファイアウォールか重要だという結論 を書いておきます。 4. 攻撃元へ絡 ( オプション ) 多くの場合、攻撃元 ( のようにみえる ) サイトにクラッ カーがいることはなく、そのサイトの言 t 算機も侵入され て踏み台に悪用されていると考えられます。そこで、可 能であればそのサイトの管理者に連絡し、注意を促すと よいでしよう。しかし、面倒だとか、自サイトか攻撃 の害を受けたことを第三者に知られたくないといった 理由から、現実には叫各しないことのはうが多いようで す。 これとは逆に、自分の計算機か踏み台に使わ他サイ トへ畋撃を仕掛けオ」亦をみつけた場合も、可能ならそ のサイトの管理者に連絡するほうか望ましいのですが、 これもまた同様の理由で連絡をとらないことが多いよう です。 そんなときに便利なのが、さきほど紹介した CERT/ cc です。比較的丘のインシデントである、被害のお よふ布間用力吠きい、被害を受けた場合の景が架刻であ るなどと判断した場合に限るようですが、連絡をし てくれます。しかも無料です。さらに、希望すればセ キュリティに関するアドバイスも仰げます。これを利 用しない手はありません。 5. 復旧 必要なファイルをインストール・メディアから書き戻し たり、セキュリティ・パッチを当てたり、最悪の場合 は、一から OS を再インストールします。 このようなときは、 OS のインストール後に次のような 作業をかならすおこないます ( 同し過ちを繰り返さない 107
連載 UNIX Communication N0tes—O 増えてきた。さらに、定型業務を Web アプリケーション としてまとめた、「サイボウズ O 用 ce 」などのパッケージ・ ソフトウェアも登場している。 こまでをまとめると次のようになる。 ・定型業務はコンピュータ処理と相性がよい。 ・定型業務に必要な情報が生成された点で、コンピュー タに取り込むようなシステムにすると、無駄な処理か発 生しにくい。これには、情報の散逸を防ぐ未合いもあ る。 山も匠のシステムでは、データベースの利用とネットワー ク環霑、、の対応が当り前となっている。とくに、 Web を用いたシステム構築は急漣に一殳化しつつある。 定型業務の発見と情報整理 この、、情幸賻各理の技術 " シリーズでは、情報の管理に利 用できる技術を紹介してきた。これまでにとりあげたの は、次のようなものである。 無秩序に蓄積されているファイルのなかから、目的とす るものを探し出すためのツール。その具イ列として、高 速なファイル検索ツール GIimpse をとりあげた ( 2000 年 11 月号 ) 。 ・ファイルとして情報が生成されていく段階で、情報更 新の履歴を、、見渡しのよい状態で " 管理するためのバー ジョン管理システム。これについては、 RCS ( 2000 年 12 月号 ) と CVS ( 2001 年 1 月号 ) を紹介した。 ネットワーク上の複数のシステムでバラバラに管理され ている情報 ( ファイル ) を効率よく同期させるための機 構。その一例として、 CVS を用いて単一のリポジトリ で管理されている情報を複数のシステムて利用するガ去 を紹介した ( 2001 年 2 月号 ) 。そして前号では、 recor ト ciliation の考え方にもとづいてファイル同期をサポー トする Unison というツールも紹介した。 以上をみれは分かるように、これまでにとりあげたの は、すでに生成された情報 ( ファイル ) をいかにうまく管 理するかに焦点を絞った技術ばかりである。 4 帯長を生成す る段階での管理については、ほとんど触れていない。 こで、もう一度自分自身のホーム・ディレクトリの なかを覗いてみる。開全中のソフトウェアや書きかけの 論文などのためのファイル、あるいは自分か管理している UNIX MAGAZINE 2001.4 Web ページのデータを置いたディレクトリがあったりす る。そのなかには、作った目的すら思い出せないような、 メモ代わりのファイルか数多くあるのではないだろうか。 私自身を例にとると、電話の内容をまとめたメモをエデ イタで作り、、、あとで見よう " といったんファイルに保存 したことで安じ、してしまい、メモの存在自体を忘れてしま うことがよくある。イ腰になったファイルを削除せすに後 生大事にとっておき、後日、なんのためのものだったか が分からなくなってしまう場合もある。あるいは、忘れな いようにとファイルを電子メールに添付して自分自身に送 り、けっきよくメールポックスにふたたび保存したまま になることも多い。 こういった状況は、本来は定型業務にできるにもかかわ らす、その手続きを町寉化していないために情報が無秩序 に作らそのまま放置されているものが多いと考えられ る。このような、定型業務にできそうな個人の作業はたく さんあるのではないだろうか。ふたたひ私自身を例にとる と、次のようなものがある。 ・メモ とくに、電話を受けたときに作るメモのファイルは、頭 カ鯒くなるはどホーム・ディレクトリに昔蛞 L している。 ーティングのたびに内容をまとめたメモを作るのだ が、作っただけで、そのまま放置しているものがたく さんある。 是出書類 これは大学の特徴かもしれないが、事務局に提出しなけ ればならない類がたくさんある。 Word で作成してい たり、ときには I を使っていたりと、作り方も利 用ガ去もバラバラである。 ・ FAX 送伺状 これもまた W 。 rd で作ったり、い TEX で作成したりと 一貫していない。さらに、ディレクトリもあちこちに分 かれていて、我ながら始末に終えない。 これらはいすれも定型化できるはすだが、それを放置し たためにうまく管理できなくなっているのである。 今回は、 web を用いて、この種の情報を効率よく管理 するガ去をみていこう。 57
連載 / IJN Ⅸ便利帖ー リスト 4 total ・ php く ! DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4. OI//EN"> while (isset($$q)) { $q—seq; $q—seq = 1 ; く ?php く hl > アンケート結果く / hl > く body> く /he ad> く tit1e>Tota1 く /title> content="text/html ; く meta http—equiv="Content—Type" く he ad> く tm1 lang="ja"> charset=ISO-2022—JP"> echo " く p>Q . $q-seq く /p>\n" while ( !flock($fd, LOCK—EX)) sleep(l) ; $c—seq = 0 ; while ( ! feof ($fd)) $buf [ + + $c-seq] chop(fgets($fd, 16 ) ) ; //server/Q/ となります。この例では、ファイルか存在し なかったときなどのエラー処理を大幅に省略しています。 PHP でテキストファイルの内容を読み込むには、まず fopen() でファイルをオープンし、 fgets() で 1 行すっ内 容を読み込み、 fclose() でファイルを閉じるという手順を 踏みます。 chop() 関数は perl などでおなしみの、、、文 字列から末尾の空白や改行を削除する " というものです。 また、リスト 2 では、変数 $q-seq に間題番号を、変数 $c-seq ロ尺肢の番号をオ褓内しています。〕尺肢は。 1 要 素 ( 番号付き箇条書き ) を使って表示します。 このページ (http://server/Q/) にアクセスすると、 リスト 3 のような結果カ等られます。もちろん、 WWW プラウサでアクセスすれは普通の HTML ファイルと同し ように解釈されて表示されるはずです。 アンケート集計ページ 今度は、アンケート結果を集計するべージを作成しま す。さきほどの index. php では、集言 t 用スクリプトとし て total.php を form 要素から指定していました。 UNIX MAGAZINE 2001.4 if ($$q > 0 and $$q く $c-seq) rewind($fd) ; 1 ; $i く $c-seq; $ i + + ) { for ($i fputs($fd, $buf [$i] ) ; fputs($fd, "\n") ; flock($fd, LOCK-UN) ; fclose($fd) ; echO " く 01 > \ n " for ()i = 1 ; $ 土く $c-seq; $ i + + ) echo " く li>$buf C$i] く /li>\n" ・ echo " く / 01 > \ n " $q—seq; く /html > く /body> く /p> く a href= く p > でアンケートに、、アジ " 、、 3 月 ' 、蜜柑 " と回答すると、集 "index. php"> アンケートへ戻るく / a > 127 まわないよう、 ck ( ) などを用いてファイルをロック 複数のプロセスカ祠しファイルを邱にオープンしてし をおこなえるような属性を設定しておく。 なわれるので、ファイルにはそのユーザーが必要な操作 に対する操作も nobody というユーサーの権限でおこ うューザーの権限で動作している。そのため、ファイル ・前回言殳定したように、 Apache httpd は nobody とい 次の 2 点に注意が必要です。 スクリプトでファイルを書込み用にオープンする場合は、 いるのがもっとも簡単だと思います。しかし、このような 各尺肢が選ばれた回数を言求するには、ファイルを用 なります。 いて各〕尺肢か選ばれた回数をカウントすればよいことに これカヾ度されたら、 total.php ではそれぞれの問題につ http : //server/Q/t0ta1. php?q—1=1&q-2=3&q—3=2 択肢の内容力鍍されます。 計用に呼び出される total.php には次のような URI で選
す物信等 : 信等島す物等物にけ物第信霊工い第 3 響第島 3 : 第工等を第等等物等信 ? 第に ' 冫等第第日第に信勢 3 す : 。 Newsgroups: fJ.unix Subject: なぜ UNIX のファイルシステムではデフラグ か要無いのでしようか。 先日、 NTFS の Windows 2000 でデフラグを実行し てファイルの断片化を解消したらかなりパフォーマンス が改善しましたが、 UNIX のファイルシステムではなぜ デフラグかイく要なのでしようか、という疑間記事です。 これに対して、『 UNIX 4.3BSD の言と実装』 ( 丸 善 ) やその 4.4BSD 版 ( 邦訳なし ) 、 BSD 系 UNIX の /usr/share/doc/smm/05. fastfs などにある、、 FFS (Fast File System)" のドキュメントに理山か書かれて いる、大雑把に説明すると、、、同じディレクトリのファ イルをなるべく近いディスクプロックに置くことでアク セスを高速化し、その性質が壊れないように異なるディ レクトリのファイルは離れたディスクプロックに置く。 これを効率よく処理するためにファイルシステムに 5 ~ 10 % の空き領域を用意する " という言により、状態の悪 化をかなり防いでいる、 Windows のようにデフラグが あるものは連続運用を考えていないのだろう、サーバー 用のマシンの場合はデフラグなどのサービスを止めるメ ンテナンスが必要だと、運用上かなり制約を受けてしま う、 Linux には ext2 ファイルシステム用のデフラグが ある、 FFS であってもディスクがいつばいの状態で長く 使っていると断片化が進むので匪能は落ちてくる、その ような場合はファイルシステム内の全ファイルをバック アップしてから戻すとある程度改善する、 dump や re- store だとそんな効果はないような気がする、 dd でディ スクイメージごとバックアップする場合はデフラグにな らないが、 dump 、 newfs 、 restore の順に実行するので あれば多少は効果がある、ディスクがいつばいになって きたときはハードディスクを追加して容量を増やしたほ うがよい、といったフォローがきました。 Newsgroups: 月 . comp. miSC . OS. ms-windows. Win98 カ . questions. unlX Subject: テキストの差分をとるツール 行単位の差分なら diff を使えばよいのは分かっていま すが、文字単位でテキストファイルの差分を調べてくれ るツールを探しています。何かよいものはないでしよう か、という質問記事です。 これに対して、、、単語単位 " の差分であれば wdiff とい UNIX MAGAZINE 2001.4 うツールがあり、ソースは FreeBSD の distfiles アーカ イプなどにある、これは diff へのフロントエンドになっ ているので、同し要領でスクリプトを作れは文字単位の差 分も調べられるのではないか、 docdiff というツールもあ るそうだ、 PerI で自作するなら AIgorithm::Diff という モジュールがある、ファイル内のすべての文字が 1 行に 1 文字となるように修正してから diff を実行す川まよい、 Windows 2000 用の商用ソフトだが MarkDiff はイン テリジェントな上交や差分出力ができるようである、価 格は 88 , 000 円なのでイ固人て購入するには高い、同しメー カーが開発した EagIe Compare というシェアウェアも ある、 GNU Emacs 上で ediff-files や ediff-buffers を 使うというカ 1 去もある、 PerI て書かれた cdif というツー ルもある、といったフォローがきました。 Newsgroups: . unix Subject: syslog. conf の設定方法について教えてくださ NetNews サーバー INN の稼動ログをとりたくて sys- 10g ・ conf に設定を加えたのですが、指定した /usr/local/ Ⅱ ews / 10g / * ではなく /var/adm/syslog/syslog ・ log に 書き出しているようです。何が悪いのでしようか、とい う質間記事です。 これに対して、指定したファイルがないのではないか、 syslogd を起動していないのではないか、 logger の実 行結果を確認すると何か分かるかもしれない、というフ ォローがきて、元記事の投稿者から、ファイルはあるし syslogd も再起動した、 logger の実行結果は、、ファシリ ティ名 : news が未定義です " のようになった、というフ ォローがありました。これからさらに、 sysl 。 g のファシ リティに news" がないのだろう、 INN の config. cache のファシリティ名のところを確認し、 LOG-LOCALI な ら news ではなく locall を使うとよい、というフォロー がきました。 Newsgroups: fj.sys. sun Subject: shutdown と initO の違いについて Solaris マシンのシャットダウンをおこなう手段には 、、 shutdown -i0 —g0 -y" と、、 init 0 " がありますが、か なり以前に、、 init 0 " は使ってはいけないといわれたこと があります。ところが、山も丘になって SoIaris の操作を 憶えた人はたいてい、、 init 0 " を使っているようです。誰 155
ログやインデックスなど アクセス頻度が高いファイル HOt files Hot file を ExceIIerator に入れた場合の一 / 0 ア Data files 通常の場合の一 / 0 ー Hot f ⅱ e を Exce Ⅱ e 「 ato 「に置くだけで、 50 % 以上のパフォーマンス向上が期待できます。 14 (sw) spuooes 三 0 90 % Faster! Actuator 4 R0tationaI Latency 2 Data Transfer 0 SSD DiSC Drive ・機械的な動作を行わないため、通常のティスクドライプに比較して、 90 % 以上高速なファイルアクセスが可能です。 従来にない高速性・高信頼性を実現。 Excellerator Ultra Family シリーズは、従来の RAID システムとは異 なり、機械的な動作を必要としない DRAM を搭載した半導体ディス クのため、高いランダムアクセス性能・ 1 / 0 トランザクションを実現し ます。それは、新しい発想のファイル・キャッシング・ソリューション。 例えばデータベースのインデックスファイルやメールサーパーにおける メッセージキューイングなど、アクセス頻度の高いファイル / アプリ ケーションを ExceI 厄 rat 。 r に移行するだけで、 18 % のキャッシュ・ヒット によりシステムのパフォーマンスを向上。 D B アクセス、バッチ 処理等を高速化し、 e-b u s i n e s s など企業ビジネスを加速します。 ・・◆ ◆◆◆ ま、 = = 00 0 、 00000 000 ~ , 、← 0000 = 14mic 「 osecond の高速テータアクセスを実現 最大 12 , 000 / 秒のリ 0 トランサクションを実現 ※プロックサイズとホストのオーバーヘッドによる ExceIIerator UItra FamiIy SOIid State Storage System 〒 102-8166 東京都千代田区富士見 1 -11 -5 TEL. 03-5226-1706 FAX. 03-5226-1669 http://www.ctc-g.co.jp E-mail : soliddata@ctc-g.co.jp
連載 / UN Ⅸ便利帖ー⑩ リスト 1 qdata. txt 好きな魚はどれですか。 イワシ サバ サンマ 好きな月はどれですか。 1 月 2 月 3 月 4 月 5 月 好きな果物は ? バナナ 蜜柑 りんこ ます 5 。つまり、前回のようなインストールをおこなった を探し、その行に index. php というファイル名を追加し vi などのエデイタで DirectoryIndex というキーワード して求します。具ー勺には、スーパーユーサーになって、 まれた HTML ファイルを、そのような彳齬リのファイルと 今回は、 index. php という PHP スクリプトが埋め込 ことかできます。 ファイルの内容を返すように Apache httpd を設定する カ甘旨定されたときに、 index. htm とか index. asp などの 更したり追加したりすると、ディレクトリ名だけの URI うキーワードで当求されているファイル名です。これを変 Apache httpd の成疋ファイル 4 に DirectoryIndex とい ファイルの内容を WWW プラウサに返します。これは、 ュ ) のときには、 httpd が自動的に index. html という http://server/のように URI の末尾が / ( スラッシ となっている部分を、 DirectoryIndex index. 五 tml ときには、 UNIX MAGAZINE 2001.4 み込まれます。 6 こうすると、 index. html と index. php の両方がある場合は前者カ毓 5 標ー純勺なインストールでは index. html だけカ求されています。 4 前回、 /usr/local/www/conf/httpd.conf としました リプトを利用して、念のため言ファイルの去をチェッ このように変更したら、前回紹介した apachectl スク と変更します 6 。 DirectoryIndex index. html index. php リスト 2 index. php く ! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4 .01 / / EN " > く html lang="j a" > く he ad> く meta http—equiv="Content—Type" content="text/html ; charset=ISO-2022-JP"> く tit1e>Questionnaire く /title> く /he ad> く body> く hl > アンケートく / hl > く form action="total ・ php く ?php $fd = fopen("qdata. txt" $q—seq = 1 ; while (!feof($fd)) { chop(fgets($fd, $buf method= 256 ) ) ; get " > $buf ech0 " く p>" echO " く 01 > \ Ⅱ " ・ $c-seq = 1 ; chop(fgets($fd, 256 ) ) ; $buf $buf = chop(fgets($fd, 256 ) ) ; value=\"$c—seq\"> く /li>\n" ・ name=\"q-$q-seq\" echo " く li>$buf く input type=\"radio\" while ( !feof ($fd) & & strcmp($buf , ” " ) ! = 0 ) { echo " く / 01 > \ Ⅱ " ・ fclose($fd) ; く p> く input type= く /form> く /body> く /html > " submit " value= " 回答提出 " > く / p > クしたあと Apache httpd を再起動します。工ラーカ可 も発生しなければ次のような結果になるはすです。 # cd /usr/local/www/conf # vi httpd. conf ( 上記の変更を加える ) # .. /bin/apachectl configtest Syntax OK # .. /bin/apachectl graceful 最後の graceful という引数は、 Apache httpd の停止 restarted . /bin/apachectl graceful : httpd gracefully と起動を一度におこなうためのものです。 125
連載 / UN Ⅸ便利帖ー $a = array(), 2 , 3 ) ; foreach ()a as $v) というふうに使うことかできる。また、連想配列に対し print " current value Of て、 array ( " 0 Ⅱ e ” wo " 2 , "three foreach ()a as $k = > $v) のように用いることも可育邑 ・ break ( コロン ) と、、 endif ; " などの組 , せによってプロックを囲 for ルーフ。、 foreach ループおよび switch 構文では、 プロックを囲むことができますが、 if 構文、 while ループ、 PHP では c 言語などと同様に { と } ( 中瓜 ) で せるかを指定できる。 数として整数を与えると、いくつ殞則のループを終了さ ループの残りを飛ばして終了させるために利用する。引 ・ cont inue きる。 なったプロックからいくつ外側へ抜け出すかを指定で めに用いる。引数として整数を与えることで、入れ子に for や while ルーフ、 switch のプロックを抜け出すた むことも可能です。たとえば、 if ($a print $ a 十十 ; else : pr int endif ; とか、 1 s not 5 . while ()i く 5 ) : print "\$i is $ 十十 ; endwhile ; のように書けます。中刮瓜によるプロックは、たいへん長 UNIX MAG AZINE 2001.4 なくなると思います。 りますが、この書式を利用すればそういう類の不都合カ眇 とがあります。これはバグの発見を難しくする原因にもな いプロックがあるときなど場合によっては見づらくなるこ C 言語の、、 #include" に似た動作をするものとして、 include() と require() があります。 include() と require() は両方とも、引数として与え られた名前のファイルをそ刎立置に読み込むための命令で す。読み込まれるファイルが PHP スクリプトの場合は前 述したタグで中身カ咽まれていなければなりません。これ は、ファイルを読み込む直前で PHP スクリプトカ絲冬了す ることになっているからです。 include() と require() の 違いは、 include() はその命令か実行された点でファイ ルカ売み込まれるのに対して、 require() は実行されるか どうかにかかわらすファイルか読み込まれる、という点に あります。 require() の場合は、ファイルか読み込まれた 時点ではその内容は実行されません。 include() と require() は、たんにファイル名を引数 として与えると、ローカルなファイルを読み込みます。 方、引数として、 ftp://server/file.php" のような URI を与えると、そのアドレスから取得した結果を読み込んで くれます。これは、 f 叩 e Ⅱ () などファイル操作をおこなう 関数に共通したイリな性質です。 関数 ューサー定義数は次のような書式で定義します。 function 五 0i ($argl , $arg2) { echo " I am in the function . return $argl + $arg2 ; PHP のバージョン 3 では、すべての関数は参照される 前の部分で定義されている必要がありましたが、バージョ ン 4 ではこの制限はなくなっています。またバージョン 4 では、 C 言語の printf() 関数のように引数の数か動的 に変化する関数カ硬えたり、 "hoge") ・ function hoi ($argl のように宣言して、引数のデフォルト値を指定することが できます。この場合、この関数を、、 h 。 i ( ) " のように引数な しで乎び出すと、、、 hoi("hoge ” )" と同し意味になります。 引数は標準で、、値渡し (passing by value)" となりま す。つまり、関数には引数の値のみか渡さ関数内でそ の引数に別の値を代入してももとの変数の値は変化しませ ん。 123
連載 /lnside Cygwin— の NetBSD よりも圧倒的によいのは明らかにおかしい。 ubench では処理にかかった時間を clock tick 、すなわ ちタイマー割込みの回数で言欟リしている。 CPU をフル稼 動しているあいだに、 NetBSD が clock tick をとりこ ばしているか、 VMware が正しく clock tick を生成し ていないかのいずれかで、時間カく計測されている可能 性か高い。この傾向は VMware の実行プライオリティを High に上げても変わらなかった。 NetBSD のメモリまわりの生能が、 VMware 上かどう かにかかわらす Cygwin よりも低くなっている。このべ ンチマークには ma Ⅱ oc と free か交ざっており、 Cygwin と NetBSD の malloc の実装方針の違いが原因である可 能生か高い。 ubench の malloc と free の利用パターン はごく単純なもので、 malloc の性能評価に使える代物で はない。この数ネを見て、 Cygwin のほうが速いなどとい う判断はしないほうがよい。 lmbench の測定結果 lmbench の測定結果を表 4 に示す。この表は lmbench の getsummary スクリプトの出力をもとに作成した。本 来 getsummary が出力しない、ディスク上のファイルに 対する select の結果も、おもしろいものになっていたの で入れてある。以下、 Cygwin て特勺な項目について考 察する。 システムコールとプロセスの悍延 空システムコーノレ 空システムコールの遅延は、ほかとくらべて圧倒的に小 さくなっている。このべンチマークが用いている getppid システムコールは、 Cygwin DLL でⅥーⅲ 32 API を呼 ばすにエミュレーションされているので、システムコール に関するコストが生じていない。シグナルハンドラの設疋 が速いのも同じ理由だ。 st at 冒頭で触れたとおり、やはり stat は遅い。 VMware 上 の NetBSD に対して 12 倍、 PC 上の NetBSD に対し て 29 イ雹屋い結果になっている。日頃の速度からする と、もっとひどい数字でもおかしくない。このべンチマー クは同しファイルに対して繰り返し stat を実行するので、 134 対象となるファイルがキャッシュされている。そのおか げで、いくらかましな数字になっている可能生がある。 open 十 close open 十 close の遅延もかなり大きい。 open の際に、フ ァイル子に関する UNIX の振舞いをエミュレーショ ンするために用いている、自前のファイル言当子テープル にエントリを作成したり、 Cygwin 上のパス名を Win- dows 上のパス名に変換したりするコストがかかるので、 これくらい遅くても不思議はない。 ファイルの select Cygwin の select は、ディスク上のファイルについて 実質的には何もしていない。ファイル記述子がオープンさ れているかを調べて、すぐに読み書き可能という結果を返 している。たったそれだけのことで、これはどの遅延カ吽 している。ビットべクトルで与えられた指示を糸杉リスト に変換してから処理するなど、とても性能を考慮している とは思えない実装になっているのが、その原因である。 TCP の select TCP の select はとんでもなく遅くなっている。このべ ンチマークでは、 100 個の TCP のソケットについて書込 みか可能かどうかを select て調べている。 Cygwin DLL の select は、ソケットはいつでも書込み可能であると想 定して、本当に書けるかどうかだけを Winsock の select を使って調べている。このとき普通に Winsock の select を使っていればいいのだが、なんとファイル記子を 1 個 すっ指定して、ファイル記述子の数だけ呼び出していた。 したがって、この場合は Winsock の select が 100 回呼 ばれていることになる。し一ざす ! シグナルの取扱い シグナル・ハンドリングの遅延も大きい。 VMware 上 の NetBSD に対して 12 倍、 PC 上の NetBSD に対 して 34 倍という、なかなかすごい数字だ。 W ⅲ 32 サプ システムは UNIX のシグナルと同凵懾を提供していな いため、 Cygwin DLL ではセマフォを使ってシグナル をエミュレーションしている。シグナル・ハンドリング は、プロセスごとに作成されたセマフォを監視するスレッ ドがおこなっている。ネイテイプにシグナルの概念をもつ UNIX MAGAZINE 2001.4
第冫信信等 : 信等 33 信勢 : 島 3 第臼 : ? 鬲等物等槲等物霊に信 : を霊第に島を信第臼工に等第信を信を信信信を信信第 Subject: ファイル検索の方法 カレント・ディレクトリ以下から特定の名前のファイ ルを探すときは、、ⅱⅡ d . —name ”ファイル名” -print ' のようにするものだと思っていましたが、『 UNIX プロ グラミンク竟』 ( アスキー ) を読んで、、、 du ー grep ”ファイル名” " というガ去があるのを知りました。このよ うなときは find より du のほうが一イ勺なのでしようか、 という質間記事です。 これに対して、自分の竟で実際に測ってみたところ、 OS によって違いはあるがⅱ nd のはうが速かった、ただ しこちらのはうが CPU 資源をよけいに使うような気が する、このような上交をするときは time(l) コマンドを 使うとよい、 find を使うときは -name オプションでは なく、、 find . -printl grep ' ' ファイル名” " のようにする ほうがよい、それだと探している名前を含むディレクトリ も引っ掛かってしまうので、やはり -name オプション を使うべきである、『 UNIX プログラミンク竟』には、 、、 du コマンドを使ってファイル階層中のファイルを探す のはこのコマンドの目的とはかけ離れている " という趣旨 の言当がある、 grep では find の—name オプションにく らべて強力な畤殊記法 ( 正規表が使えるので役に立っ こともある、 find にも正規表現を使うための -regex オ フションがある、去も丘の主要な UNIX 系 OS で -regex オフションが使えるのは Linux だけである、 NetBSD の find にもある、環境か整っていれば 1 。 cate を使うほ うが工倒的に速い、といったフォローがきました。 Newsgroups: fj.unix Subject: 見た事なし嘱性 . ローカルホスト名取得 . 自分の AIX を使っていて、、、 ls ー 1 " でファイルの属性をヾ たときに rwx ではなく s や S という属性を目にした のですが、これは何を意味するのでしようか。また、ロ ーカルのホスト名を取得するコマンドはどれでしようか。 whoami で自分のユーサー名が分かりますが、自分のグ ループ名と使用端末名などを調べたいときはどうすれば よいのでしようか。いすれも man などで調べたのです が、よく分かりませんでした、という質間記事です。 これに対して、 s や S については chmod や ls の man に載っていると思う、ローカルホスト名の取得には h 。 st ー name を使えばよい、はかに、 uname -n" を使う方法も 154 ある、グルーフ名や端末名の場合は id や groups 、 tty を 使う、といった質問の内容そのものに対するフォローが きました。 このほかに、本当に man を見ても分からなかったの か、、、 man man" を実行す川ま、、 man —k キーワード " て調べられることは分かると思う、 OS の不頁やその設定 によっては一 k オプションが使えないことがある、英語 で表示されて拒否反応を起こしたのではないか、大学か楽 に英語を勉強できる最後のチャンスなのにそれに気づい ていない人が多い、 /bin や /usr/bin などにあるコマン ドを man て忍してから 1 っすっ実行すればいろいろ と憶えられる、 Windows とは違い、一般ューサーの権 限で実行するぶんにはシステムがクラッシュする心配は ないのでどんどん試してみるとよい、といったフォロー がきました。 Newsgroups: fj.sys. sun Subject: ゼロて初期化したファイルか欲しい ゼロで初期化した任意のサイズのファイルを作りたい と考えています。、、 head —c サイズ /dev/zero > ファ イル名 " のように必要なサイズのぶんだけ /dev/zero か らコピーすればいいと思ったのですが、 Solaris の head はバイト数の指定ができません。標準のコマンドだけで この間題を解決する方法はないでしようか。やはりプロ グラムを作らなけれはならないのでしようか、という質 問記事てす。 これに対して、、、 /bin/dd if=/dev/zero of= ファ イル名 bs=l count= サイズ " のようにすればできる、 、 bs = サイズ count = 1 " のほうがよいかもしれない、則 者はサイズが 4GB 未満であれは確実に実行できるが効 率はかなり悪い、後者は十分なメモリがあれは効率的で ある、読み出したときにすべて 0 になっていれはよいの なら、、、 dd if=/dev/zero seek=99k bs=lk count=l > ファイル名 " でもできるだろう、標準コマンドだけで もそのような処理をおこなう csh スクリプトは書けるが、 この場合は、、標售コマンドだけを使って解決した " と、、プ ログラムを作って解決した " のどちらになるのか、 csh を 使うのであれば、、 repeat サイズ glob > ファイ ル名 " でできる、 SoIaris なら mkfile コマンドが使える、 といったフォローがきました。 UNIX MAGAZINE 2001.4
ー、で k% 潯′ 0 川 0 、ロ i ( 第 面を y : を w 、 ( 0 Stu&s 連載 /JavaServer Pages— 図 5 ライセンス条項の表示 上カ 0 集表示 ) お知こ入りツールへ非フ ッドしス 0 切 p / / “、市 / ト b れ” nba ( 朝 Term s and conditi ons of the license & export for JavaServer(TM) Web DeveIopment Kit 1.0.1 はそれぞれ次のとおりです。 Windows 用 : jswdkl-()-l-win. zip UNIX 用 : jswdkl-()-l-solsparc. tar. Z これでファイルが入手できました。次に、インストー ノレ 作業へ進みましよう。 インストール インストール作業はいたって簡単で、インストール先の ディレクトリでダウンロードしたアーカイプ・ファイルを 展開するだけです。 Windows では、 ZIP 形式のファイ ルに対応した展開ツールを使います。 UNIX では次のコ マンドで展開します。 % zcat jswdk1—O-1—s01sparc. tar. Z ー tar xvf アーカイプ・ファイルを展開すると、、 jswdk -1.0.1 " と いうディレクトリが作成され、その下に JSWDK のファ イルやサプディレクトリが作成されます。展開後のディレ クトリ構成は図 7 のようになります。 jswdk-l. 0.1 ディレクトリの直下には、 Web サーバー を起動するためのスクリプト・ファイルや設定ファイルが あります。 etc ディレクトリには、 SimpleStartup ・ java という Java のソースファイルが 1 つあります。これは、 Web サーバーを Java から起動するためのプログラムのサンプ ルです。 examples ディレクトリは、 JSP や Servlet のサンプ ルコードを集めたディレクトリです。このディレクトリに 収められているサンフ。ルについては、あとでもう一度とり あげます。 lib ディレクトリは、 Java のクラスファイルの置き場 所です。 jswdk-l. 0.1 をインストールした直後には、 ・ Jspengme ・ Jar ・ servlet. j ar xml. j ar 新同に 、心 3 可の「 ( ”新山・鷲い 0 ! 十だ缸心き 3 き町な′ J'V ′臂 ) しい等田れ一、は 101 ー材第誕明い郊円 You vee sent 。 dJavaSe ”・ r(T 裕 Deyeloøment Kit 1.0 日 i n•ry COde し一 0 を n 0 翫「第 00 を READ THE TERMS OF THIS AGREE"ENT 駅 0 ム、 Y PROVIOED SUPPLE"ENTAL LICENSE TERMS (COLLECTIYELY "AGREE- YENT ・ ) CAREFULLY BEFORE OPENI NG THE SOFTTARE "EDIA PACK AGE. BY OPENING THE を 0F1 RE YEDIA E , YOU GREE 10 THE TERUS OF TH AGREEUENT . IF YOU ÅRE CCESSING THE SOFT'ARE ELECTRONICÅLLY. ー、 0 ー CA OIJR ACCEPTANCE OF THESE S BY SELECTING HE •ACCEPT• BUTTON 義ー THE 0 OF に AGREEUENT. IF YO し 00 AGREE TO ÅLL THESE T 鱸 . PROMPTLY RETURN THE UNUCED SOFTVARE TO YOUR PLACE OF PURCHÅSE FOR A REFUND 新 THE ー 3 ACCESSED ELECTRONI 鴃は Y. 図 6 Windows 版 JSWDK のダウンロード用のべージ アイ非 ) を仮 ) 表示お刃こ入り内ツールヘルプ アドレス 0 切 h " 0 / 。畆面・幻 丁日 E SOURCE FOR JAVA* TECHNOI.OGY JAVA D ownload JavaServer(TM) Web DeveIopment Kit ( 0 ( A 円一 0 飄 li れ 0 p 戸 ( 0 5 れ 同ロ 画物にみ」」・当 3 引、「い ) 可 0 れ化けい ! 1 月 1 - M 一口い引 E- トロ印 You v d25 ・ ht0d9 物記 Ja Se er<T ん 0 we De 0b0E00t Kit 1 愈 丁 d ” m d 3 ofthef js 1 -0-1- win 乞 p 第 763.414 ト FTP downlced from 3u08 れ HyOu&e beh d ル &1deM れ 0 ー 800 ou 「 FTP ーー p ト 0 第 try 市 0 HTTP 鹵ー b め挫 ト Alterrate FTP mi 0 「 s ダウンロードのページには、いくつかの FTP サーバー と、 HTTP サーバーが 1 つ表示されています。通常は FTP サーバーのはうが通信の信頼生か高く効率もよい ので、こちらを利用するとよいでしよう。 ただし、インターネットとのあいだにファイアウォー ルがあったり、 NAT を使っていると FTP が失敗する こともあります。そのような場合は、 HTTP サーノヾー からダウンロードしてください。 4. ファイルの石寉認、 最後に、ダウンロードしたファイルの名前とサイズか図 の 3 つの JAR ファイルカ哈まれています。 6 のページに表示されているものと一 - 数しているかを確 認します。ただし、プラウサの不頁や操作によって、フ webpages ディレクトリは、 Web サーバーで公開する ドキュメントを置くための標準のドキュメント・ルート ァイル名カ嘯き換わってしまうこともあるので注意して です。もちろん、設定ファイルに言当することにより、ド ください。 Windows 用と UNIX 用のファイルの名前 71 UNIX MAGAZINE 2001.4