データベース - みる会図書館


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

1. UNIX MAGAZINE 2003年7月号

にヌ寸応つ、けて扱います ( 160 個の文字コードのうち、 0X20 未満の 32 個はさきほど紹介したオフセットやエスケープ コードなどに用いられています ) 。 locate データベース中 に 0X80 以 - ヒの文字コードの文字か現れた場合には、 の先頭に置かれたデータから 2 文字に拡張して解釈され ます。 しかしこの方法では、文字コードが 0X80 以 E の文字が ファイル名として使われているときにそのままデータベー スに格納すると、その文字も 2 文字の組に展開されてし まうことになります。そこで、このようなケースに対処す るためにエスケープ文字が用意されています。ファイル名 にこれらの文字が使われている場合、データベースには文 字コード 31 (0x1f) の文字を書き出してからその文字を 書き出します。つまり、 31 という文字があるときは、次 の文字の文字列への展開はおこなわないという未になり とあれは q0X81 ] は文字コードが 0X81 である 1 文字を /b [ 0X81 ] /li [ 0X83 ] いう文字列を表します。 h t i Ⅱ i 1 s t . h d e ・ g m 1. たとえは、データベースの先頭のはうに ます。 とオ内されている場合、 0X80 は ht 、 0X81 はⅲ、 こでデータベース中に /bin/list 表します ) 、これは、 を表すことになります。 /tmp/ あ を意味し、最終的に、 /tmp/ C0xa4] C0xa2] と書いてあれば、 /tmp/ [0x1f] [0xa4] COx1f] C0xa2] いる場合、データベース中に また、ファイル名の文字コードとして EUC を使って を表していることになります。 ァータベースの作成 それでは、データベースの作成去についてみていきま UNIX MAGAZINE 2003.7 プログラミング・テクニック・ 66 /etc/peri0dic/weekIy/310. locate データベースは定期的に更新しなければなりません。 のデータベースには、ある時点でファイルシステムに存 在するすべてのファイルのパス名かオ褓内されますが、これ らのファイルの状態は日判りとともに変化します。したがっ て、適当なタイミングてデータベースを更新しないと、す でにファイルシステム上にはない古いファイルか登録され たままになったり、新たに作成したファイルがいつまでも 登録されないことになってしまいます。 このような間題カ起こらないように、 FreeBSD ではシ ステムの設疋ファイルで weekly-locate-enable という変 数を指定できます。この変数は、 /etc/periodic. conf ファ イルや /etc/periodic. conf. 10Ca1 ファイルのなかで使い ます。とくに指定しなければ、デフォルトで YES となり ます。この値が YES の場合には、 locate データベース が 1 週間に 1 回自重加勺に更新されます。 実際に起動されるのは、 /etc/periodic/weekly ディレ クトリにある 310. locate ファイルです。このファイルで は、ます設定ファイルを読み込んだあと、次のようなコー 73 しながら実行します。さらに重要なのは、このファイルを りへの景を考えて nice コマンドにより優先順位を変更 めのコマンドが /usr/libexec/locate. updatedb で、周 れは、 locate データベースの更新をおこないます。そのた つまり、 weekly 」 ocate-enable 変数のイ直が YES であ chmod 444 $locdb Ⅱ rc=3; nice ー 5 su -fm nobody Ⅱ rc=3 ech0 /usr/libexec/locate . updatedb ー疇 - cd / chmod 644 $locdb Ⅱ rc=3 chown nobody $locdb Ⅱ rc=3 touch $locdb & & rc=O Ⅱ rc=3 locdb=/var/db/locate . database echo "RebuiIding locate database : echO " CYy] [Ee] [ss] ) case "$weekly—locate—enable" in 以ート 1 司様 ) ドを実行します ( 誌面の都合上、で折り返しています。

2. UNIX MAGAZINE 2003年7月号

プログラミング・テクニック・ 図 2 作成されたデータベースが正しいかどうかをテストするコード then case X" ' $find $tmp —size ー 257C —print ( X) cat $tmp > $FCODES; 1 Ⅱ * ) echo "updatedb: locate database $tmp is empty' exit 1 登録す , ヾき元データを作成します。このとき、 find コマン ドに -s オプションを付けることで、ファイルシステムを アルファベット順に探索するように指定しています。 if $f ind —s $SEARCHPATHS $excludes —or - —print 2>/dev/nuII ー $mklocatedb —presort > $tmp こうして得られたデータを -presort オプショ さらに、 ンを付けて locate. mklocatedb フログラムに渡し、実際 のデータベースを作成します。 locate. mklocatedb プログラムは、正常にデータベー スが作成できた場合に真を返します。そこで、できあがっ たファイルが正しいものかどうかを図 2 のコードでテスト します。 図 2 では、作成されたデータベースが 257 バイト以 . E かどうかを確認しています。ここで実行される find コマ ンドは、データベースが 257 バイト以 - ヒであれば何も表 示しません。データベースでは、文字列のテープルのため に 256 バイトを使います。正しいデータベースであれば テープル以外にもデータか存在するので、 257 バイト以 E になるはすです。ここではそれを検査し、検査に合格した らデータベースを正式なファイルにコピーしています。 usr/libexec/locate. mklocatedb locate. mklocatedb プログラムもシェノレ・スクリプト です。オフションとして指定されている一 presort は、入 力がすでに整列されていることを示します。今回渡される 入力は、 find コマンドに一 s オプションを指定して出力し たものであり、すでに整列した状態になっているため、 のオプションカ甘旨定されています。 それでは、 -presort オフションカ甘旨定されている場合 のこのシェル・スクリプトの動作をみてみましよう。ま す、オフションか指定されていることを石忍し、オフショ UNIX MAGAZINE 2003.7 ンを読み飛まします。 次に、仮の文字列テープルを作成します。 # create an empty file true > $bigrams 正しい文字列テープルを作るには、データベース全体を "X—presort " ] ; then if [ X " $ 1 " shift ; 75 タベース刎宿に用いる文字列を決定します。 ます。この出力の : 麪頁から 128 行ぶんを取り出して、デー べれは、出現回数の多い文字列順に並ひ替えることができ 出力されるため、ツ頁のカラムを数値とみなして逆順に並 です。 1 つの文字列ごとに出可数と文字列自身が 1 行に 列と、その文字列が何回出現するかを表す値を並べたもの bigram の出力は、データベースに含まれる 2 文字の文字 れている locate. bigram コマンドを実行します。 locate. テープルを作成します。それには $bigram 変数にオ内さ ることができます。これを使って、今度は正しい文字列 パスに含まれます ) 、この処理ですべてのパス名を出力す に一致するので ( / ( ルート・ディレクトリ ) はすべての 指定して locate コマンドを実行すれば、すべてのパス名 こで作成されたデータベースと、パターンとして / を る locate. code プログラムを利用します。 す。データベースの作成には、 $code 変数に↑褓内されてい いので、ここて読み込んで圧縮したデータベースを作りま この段階では標準入力からまだデータを読み込んでいな $code $bigrams > $filelist Ⅱ exit 1 ) 宿します。 次に、この仮の文字列テープルを使ってデータベースを テープルを作成しているわけです。 ファイルシステム上に保存するために、最初は空の文字列 で、文字列テープルを使わない状態でも圧縮した形式で ルシステム上に一寺しなければならなくなります。そこ 孑欝作するとなると、このデータベースをそのままファイ 調べる必要があります。そのために元のデータベースを直

3. UNIX MAGAZINE 2003年7月号

指定するパターンによっては、たいへん多くのファイ ル名と一致することがあります。たとえは、パターンとし て、、 . " を指定すると、拡張子をもっすべてのパス名が出力 されます。また、パターンとして、、 / " を指定した場合は どうでしよう。 UNIX におけるすべての絶対パス名には ルート・ディレクトリが含まれます。つまり、 / はすべて のパス名にマッチするため、ファイルシステム中の全ファ イルのパス名カ咄力されることになります。このような場 合に一 1 オプションを指定すれば、出力行を制限すること か可能です。 その他のオプションは、それぞオし以下のような未をも ちます。 -S : データベースに関する糸 fr を出力してプログラムを終 了します。データベースは圧縮された状態でイ尉寺されて いますが、このオプションを指定すると、どの程度 ) 宿 されているかなどの糸兤日青幸咄力されます。このオプ ションを使うときは、パターンを指定する必要はありま せん ( 引数を指定しても無視されます ) 。 -c : パターンにマッチしたパス名をすべて出力するのでは なく、マッチするパス名の数を出力します。 -i : 大文字と小文字を区別せす ( ンヾターンマッチをおこな います。 ーⅡ 1 ンヾターンマッチの際に mmap システムコーノレをイ吏っ て処理をおこないます。 mmap システムコールを使え ば、通常のファイルアクセスよりも高速にファイルの 内容を読み取ることができます。 mmap システムコー ルか利用できる場合にはそれがデフォルトてイ吏われるた め、このオプションを指定する必要はありません。 —s : パターンマッチの際に mmap システムコールを利用 せす、標準入出力ライプラリを用いるようになります。 データベースの構造 locate コマンドで利用されるデータベースは、どのよ うな構造になっているのでしようか。このデータベースに は、ファイルシステム上に存在するすべてのファイルのパ ス名かオ褓内されますが、一ヨ勺なデータベースとは性質が 異なります。レコードにはパス名しか含まれないため、そ れ自体がキーともなっています。すなわち、キーしか存在 しないことになるわけです。 UNIX MAGAZINE 2003.7 プログラミング・テクニック・ この状況は前回 ( 5 月号 ) の最後にすこし触れた、 db- open ライプラリ関数か供するデータベースを集合のよ うに使うガ去とよく似ています。ただし、データベースを 検索する際にキーの値のみで検索するのではなく、キーの 値に対するパターンマッチをおこなう点が異なります。 このデータベースを実現するもっとも単純な手法として は、ファイルシステム上の全ファイルのパス名を 1 行に 1 っすっ言当したテキストファイルを用意するガ去が考え られます。このようなファイルを作成しておけは、あと は grep コマンドを適当に使うことで 1 。 cate コマンドを 実現できます。パターンマッチは grep コマンドの得 : 支 ですから、このガ去を使えはかなり高速なシステムが作れ ます。 しかし、この力法にはすこし間題があります。データを そのまま登録すると、データベースのサイズがかなり大き くなってしまうのです。手許のシステムで調べたところ、 すべてのパス名を 1 行に 1 っすっ書き出すと 14A4B 程度 になります。去も丘はハードディスクが大容量化しているの で、それはど問題にならないかもしれませんが、ディスク 容量にあまり余裕がない場合にはすこしでも削りたいとこ ろです。ディスク容量だけではなく、処理速度カ墹題にな ることもあります。 CPU の速度にくらべてハードディス クかイの場合、ハードディスク上に必要な情報をすべて 書き込むよりも、なんらかの方法で疇宿した状態で書き込 んでおき、利用するときに復元しながら読み出したほうが 高速に処理できることもあります。 事実、 locate コマンドが使うデータベースは圧縮され た状態でハードディスク上にオ内されています。圧縮には 次の 2 つの去カイ吏われています。 1. 直前のパス名と異なる部分のみをイ尉寺する。 2. よく出現する 2 文字を 1 文字で表現する。 以降では、この 2 つの圧系支術をみていきます。 差分のみの保持 ますは、直前のパス名と異なる部分のみをイ尉寺するガ去 です。データベースには、すべてのファイルのパス名か整 列した状態でオ内されています。そのため、連続した 2 つ のパス名の地頁部分は共通する場合が多く、すべてを言求 するよりも、異なる部分だけを言当求したほうが必要な容量 71

4. UNIX MAGAZINE 2003年7月号

図 3 locate —S コマンドの実彳デ列 (角、 eeBSD 4.8-STABLE の場合 ) % locate -S Database : /var/db/locate . database Compression: Front: 15 .79 % , Bigram: 66 . 11 % , T0taI: 11 . 79 % Fi1enames : 309626 , Characters : 14818696 , Database size : 1747522 Bigram characters : 592230 , lntegers : 4839 , 8—Bit characters : 266 locate —d $filelist / ー $bigram ー - $sort —nr ー head ー 128 ー perl -ne ) た \ s * [ 0 ー 9 ] + \ s ( .. ) $ / & & print $ 1 Ⅱ exit 1 ) > $bigrams Ⅱ exit 1 Ⅱ孫宿に用いる文字列は、 128 セット、 256 文字が一一列に 並んでいなけ川まなりません。その処理のために perl コ マンドを使っています。ここでは、 perl コマンドの引数 として処理を指定しています。このようにしてできた 256 文字の並びを bigrams にオ褓内しているわけです。 これで正しい文字列テープルカイ乍成できたので、データ べースを作りなおします。 locate コマンドの引数にさき ほど作ったデータベースとパターン / を指定して、すべて のファイルのパス名を出力します。これに対し、今度は正 しい文字列テープルを使って locate. code プログラムを 呼び出すことで、正式なデータベースを作成します。 locate -d $filelist / ー $code $bigrams Ⅱ exit 1 以 - E が元のデータベースがすでに整列しているときの処 理です。整列していない場合には、 sort コマンドでデータ べースを整列し、あとは同様の処理をおこないます。 if $sortcmd $sortopt > $filelist ; then $bigram く $filelist ー $sort —nr ー ただし、異なる部分もあります。さきはどは、先頭か ら 128 行を取り出すことでテープルに追加する文字列を 〕尺していましたが、今回はとくにそのような処理をおこ なっていません。このままでは文字列テーフルカ吠きすぎ て処理できなくなるのではと思うかもしれませんが、い cate. code フログラムで文字列テープルを読む際に、先頭 の 256 文字だけを使うようになっているため、 bigrams ファイルのサイズカ墹題になることはありません。 print $ 1 Ⅱ exit 1 ' > $bigrams Ⅱ exit 1 else 76 $code $bigrams く $filelist Ⅱ exit 1 echo " 'basename $ 0 ( : cannot build - locate database" > & 2 exit 1 最後に、これら刎石宿の効果をみるために、 locate コ マンドに—S オプションを指定して実行してみましよう。 前述したように -S はデータベースに関する糸兤 f 情報を 出力するためのオプションです。このオフションを付け て locate コマンドを実行すると、図 3 のような出力か得 られます。 データベースのパス名がデータベースの名則になってい ます。 ) 噌宿に関しては、最初の Front ) 宿カ嗟分のみを イ尉寺することによる ) 宿の効果を、次の Bigram 圧縮が 文字列テープルの利用による日孫宿の効果を示しています。 文字列の差分のみを一寺する方法では、全体の容量が 16 % 程度までに抑えられていることが分かります。文字列 テープルを用いた日宿でも、データベースのサイズを 3 分 の 2 にする効果があることが分かります。ごく簡単な処 理しかおこなっていないのですが、予想タ V ) 効果を上げて いることに驚かされます。これらの ) 宿技術を適用するこ とで、データのサイズは 12 % 程度まで宿できています。 元のデータベースのサイズは約 15MB ですが、実際のサ イズは 1.7MB 程度です。また、このデータベースには 31 万近くのパス名かオ褓内されていることも分かります。 山背の行の Bigram characters は、文字列テープノレの 文字列カ可回使われているかを表します。この値が大きく f i f i データベースを作成できなかった場合にはその旨を出力 し、 exit 1 て終了してコマンド自身の実行ステータスを偽 とします。 データベースの統計情報 UNIX MAGAZINE 2003.7

5. UNIX MAGAZINE 2003年7月号

連載 /Cyber Kansai Project— 図 15 映像のリアルタイム里システム MPEG 工ンコーダ 映像テータベース・サーバー JPEG ファイルを生成 カット点 JPEG ファイル カット点検出時刻・ JPEG ファイル名を DB に登録 工ンコード開始時刻・ MPEG ファイル名を DB に登録 MPEGI 工ンコード MPEG ファイルを生成 映像解析 カット点検出 中 映像情報 継 映 像 . 円 映像テータベース Oracle9i 中継映像を検索 ツ : ワ : ク 三有 MPEGI ファイルの切出し MPEGI ファイル 爪点・ OUT 点決定 編集端末 公開シーンの PEG17 アル MPEG 保存用ファイルサーバー 図 16 AgiIity のタ里 きます。公開したいシーンを決めたら、オペレータはあら かしめ決められた規則にもとづいたファイル名を付けて保 存します。編集端末では、 MPEG ェンコーダでエンコー ドされた MPEGI ファイルから指定の部分を切り出しま す。そして、 MPEG 保存用のファイルサーバーに公開用 シーンの MPEGI ファイルとして保存します。これらの 処理の手順を図 15 に示します。 今回の中継では、 MPEG 工ンコーダを本番用と予備用 にそれぞれ 1 台、映像データベース・サーバーを 1 台、編 集端末を 3 台用思しました。 MPEG ェンコーダは、 1 試 合ごとにスタート、ストップさせました。 2 台あるため、 万一どちらかが停」 E した場合も作業自体は続けられます。 璽ニ当 0 ン : 00 物 ~ ト . 撃当当ト当当ト当豊当」 . トさ当 , 」当 : 咆ー . 」、ゝ当生 = 」、・よ」ー「 オンテマンド映像については、 1 試合につき 2 名のオペ ezmovie については lnternet Video processor を利用 レータか担当し、 IN 点・ OUT 点の切出しをおこないま しました。 Agility では、入力された映像ファイルをどうエンコー 自動工ンコード・ FTP 処碑 ドしてどのサーバーに FTP 転送するかを、、 Job Profile" として定義します。さらに、 Job Profile とフォルダを 映像リアルタイム処理システムによって切り出された 関連づける、、 Folder Attendant" という機能もあります。 MPEGI ファイルは、事前に指定したフロファイルにも これは、指定したフォルダに映像ファイルが入ると自重加勺 とづいて Windows Media や RealMedia などの形式に にそれを検知し、関連づけた Job Profile にもとづいて 自重加勺にエンコードさオ L 、さらに各配信サーバーに FTP 工ンコードと FTP の処理を実行するものです ( 図 16 ) 。 転送されます。今回のエンコード処理および FTP 転送 今回は、この FoIder Attendant 機能を利用し、公開す は、 Windows Media 8 と ReaIVideo 9 については る MPEGI ファイルが MPEG ファイル保存用ファイ Agility で、夫験的に作成した携帯電話用の i モーション、 3 ! ィ第 : を覊響、いな、 : い、礬ミレ しま上ん ン刀第製をい を 0 なヨい、・ 1 第 ,. ・皞 : 5 : 4 は 0 ーい、第をれ上いいし 量う朝戛 189 UNIX MAGAZINE 2003.7

6. UNIX MAGAZINE 2003年7月号

ロプログラミンク・テクニック ca e コマンド 多治見寿和 ファイルの用途など ) を埋め込むようにしました。こっし 前回まで、簡易型データベースを扱うための dbopen ておけは、あとでファイル名を頼りに目的のファイルを探 関数について説明してきました。この関数はたしかにデー し出せます。このようなとき、 locate コマンドはたいへん タベースを扱いますが、通常のデータベースよりも、いわ 役に立っています。ただし、もうすこし複雑になるとファ ゆるデータ構造をファイル上に展開するためのイ督はみと捉 イル名だけでは対応できなくなるでしよう。そのときには えたほうがよいでしよう。また、ファイルと対施の。けすに また別のガ去を考えなけ川まなりません 1 利用することもでき、この場合には awk や PerI などに 本題に戻りましよう。 1 。。。ン「の書式は、オン おける迅想配列を実現するための仕組みともみなせます。 ライン・マニュアルて調べると次のようになっています。 今月もデータベースの話題ですが、すこし趣を変えて 1 。 cate データベースをとりあげます。 locate [-Scims] [ ー 1 ] C—d database] 佖、れ 引数には、前述したシェルのワイルドカード文字を含む パターンを複旨定できます。複数のパターンを指定した locate コマンドは、引数としてパターンを指定すると、 場合、パターンを 1 つでも含むパス名はすべて表示され そのパターンに一致するすべてのパスを画面に表示しま ます。 す。パターンには、シェルで利用可能なワイルドカード -d は、データベース・ファイルを指定するためのオフ 文字 ( * 、 ? 、 \ 、 [ 、 ]) が使えます。これらのワイルドカー ションです。 locate コマンドでは、あらかじめファイル ド文字が含まれないたんなる文字列を引数として指定した システム上に存在するファイルの一覧をデータベースとし 場合には、その前後に * か補われて解釈されるため、指定 て登録しておき、ユーサーから間・迂があると、このデー した文字列を含むパス名がすべて表示されます。 タベースを調べてパス名を返します。そのため、同様な処 私は去も丘、この locate コマンドをよく利用しています。 理をおこなう find コマンドよりもかなり高速な処理カ呵 お恥ずかしい話ですが、所有するファイルか増えて、その 能です。間題はデータベースの作成ガ去です力まこれにつ すべてを把握するのか難しくなってきたためです。階層型 いてはあとで説明します。なお、一 d オプションとその引 ファイルシステムを利用しているのですから、適当なディ 数を複委財旨定すれは、複数のデータベースを利用すること レクトリ構造を作り、そこに分類してオ褓内しておけは簡単 も可能です。 にみつかるはずです。しかしうまく分類できないファイル -I オプションは簡単です。引数に数値を指定すると、 も多く、ついその場の思いつきでファイルを分類してディ cate コマンドはその数以 - E のパス名を出力しなくなりま レクトリの興架くにイ内してしまうため、いざそのファイ す。言い換えれは、 locate コマンドは最大でもここて指 ルが必要になったときにどこに置いたのかが分からなくな 定された個数までのパス名しか出力しません。 ることがよくあります。そこで、やや面倒ではありますが、 1 たとえは、 Namazu を使って自分のホーム・ディレクトリ以下すべて ファイル名に多くの情報 ( ファイルを作成した日付やその を管理するなど、やってみたい気はあるのですが cate コマンド 70 UNIX MAGAZINE 2003.7

7. UNIX MAGAZINE 2003年7月号

図 1 locate ・ updatedb の実行に必要な変数の言聢 ${FCODES :=/var/db/locate . database} ${mklocatedb:=locate . mklocatedb} # make locate database program # the database ${SEARCHPATHS : = " / " } # directories to be put in the database "/tmp /usr/tmp /var/tmp"} # unwanted directories $ {PRUNEPATHS : ${FILESYSTEMS : ="ufs" } ${find : =find} nobody 権限で実行する点です。 # allowed filesystems もともとのファイルは ro 。 t 権限で実行されます。 root の権限があると、各ューザーがファイルのパー ツン・ヨ ンを落としているにもかかわらす、そのファイルがデータ べースに登録されてしまうことになります。このような事 故か起きないように、誰よりも権限が少ない ( と考えられ る ) nobody として処理をおこないます。 プログラミンク上のテクニックとしておもしろいのは、 以前紹介したことがありますが、論理和演算や論璢寅算 を条件分岐に利用している点です。 touch $locdb & & rc=O Ⅱて c = 3 という行では、 locdb に対して touch コマンドを実行し ますが、これが成功すれば rc を 0 に、失敗した場合には rc を 3 に設定します。 & & は、前のコマンドの結果が成功 している場合にのみ後ろを評価するため、 touch コマンド が成功したときのみ rc=0 か実行されます。一方、 touch コマンドが失敗すると、 & & で結はれた rc=O までが失敗 します。その場合はⅡの出番です。Ⅱは、前のコマンド の結果が失敗している場合にのみ後ろを評価します。この 例では、 touch コマンドか失敗したときだけ rc=3 か実行 されることになります。 usr/libexec/locate. updatedb locate データベースを更新するように成疋していれは、 このファイルが実行されます。このファイルはシェル・ス クリプトなので、中身を見ることができます。さっそく内 容をみていきましよう。 このファイルでは、ます locate コマンドの重川乍を規定 するファイルを示す LOCATE-CONFIG 変数の設定を おこなっています。 ${LOCATE_CONFIG="/etc/10cate . rc"} if [ —f "$LOCATE_CONFIG" —a —r 疇 - "$LOCATE_CONFIG" ] ; then $LOCATE_CONFIG f i 74 最初の行は、 LOCATE-CONFIG 変数に値が設定さ れていればそれがそのまま使われ、設定されていない場合 にはデフォルト値として /etc/locate. rc が使われること を示します。値を設定したあとは、シェルの . コマンド を使ってそのファイルの内容を読み込んでいます。 locate コマンドの重川乍を規定する locate. rc などのファ イルでは、以降で設定する変数の値を定義しておくことが できます。たとえば、 locate. updatedb ファイルを実行 するために重要となるいくつかの変数のデフォルト値が、 図 1 のように定義されています。 図中の : は、引数を評価するカ躾際には何もおこなわ ないというシェルのコマンドです。今回のように、変数に 対して初期値をえたい場合などによく使われます。 : を 使わすにいきなり変数の値を評価してしまうと、評価した 結果の値をコマンド名とみなしてそれを実行しようとして しまいます。ここでは変数の値を正しく修正したいだけな ので、 : コマンドの引数とすることでこの効果を得ていま す。 mklocatedb には、 locate データベースを作成するた めに利用するプログラム名を指定します。 FCODES に は作成するデータベースのパス名を指定し、 SEARCH- PATHS はどのディレクトリ以下のファイルのパス名を データベースに追加するかを示します。複数のディレク トリを指定したい場合には、空白で区切って列挙します。 PRUNEPATHS には、データベースに登録しないファ イルカ哈まれるディレクトリ名を指定します。 FILESYS- TEMS には、データベースに登録するファイルがあるフ ァイルシステムの形式を指定します。通常は、ローカル・ ファイルシステムを表す ufs です。これも複委財旨定する場 合には空白で区切ります。最後に、データベースの元デー タを作成するために用いる find コマンドを指定しておき ます。 次に、これらの値をもとに find 関数にケえる引数を作 成し、最終的には find 関数を呼び出してデータベースに UNIX MAGAZINE 2003.7

8. UNIX MAGAZINE 2003年7月号

連載 / UN Ⅸの道具箱ーの 図 6 ホスト認証の手順 クライアント ①接続要求 - 3 受信した鍵がデータベース のものと同じかを確認 サーバー ②ホストの公開鍵を送イ 4- 4- ④共通鍵を交換 ( 以後の 通信は暗号化される ) 同じかな ? ホスト公開鍵 データベース 後の通信に使える暗号化方式の不頁が多く、より安全な通 この情報をもとに次の照合がおこなわれます。 信が可能という点です。なお、プロトコル 1 とプロトコ 3. ホスト公開鍵を受け取ったクライアントは、自分がもっ ル 2 には互換生がありません。したがって、通信の際に ているデータベースを用いて照合します。データベース はローカルのマシンとログイン先のマシンの SSH のバー には過去に接続した言 t 算機のホスト公け艀建のリストがあ ジョンをよく石忍する必要があります。 ります。このリストと送られてきたホスト公開鍵を上肆交 し、変更されていないことを石忍します。 SS Ⅱでの認証の仕組み もし以前とホスト公開鍵が違っていれば、現在接続し ている相手は、、なりすまし " をしている可能陸がありま SSH での認証のイ目みを説明します。 SSH での認証に す。初めて接続するホストの場合は、データベースにそ は、、ホスト言正 " と、、ユーサー認証 " の 2 段階があります。 のホストの公開鍵がありませんから、データベースにホ 順番にみていきましよう。 スト公開鍵を登録します。 4. ホスト公開鍵が正しいものであ川ま、共通多音号に用い ホスト認証 る鍵を交換します。そして、これ以降の通信は共通多音 SSH での接続を試みると、接続先のサーバーとのあ 号方式による暙引ゞおこなわれます。共 j 建の交換方 いだでます計算機どうしの認証がおこなわれます。これ 法は SSHI と SSH2 で異なります。 を、、ホスト認証 " といいます。ホスト認証はローカルホス SSHI ではクライアントか共 j 建を生成します。そして トから接続先のリモートの言 t 算機に対して、、、本当に自分 サ→ヾーのホスト公開鍵を用いて暗号化し、サーバーに か接続したい計算機なのか " を確認するためにおこなわれ 送信します。サーバーはホスト秘密鍵を使って復号する ます。 ことで共通の鍵か碍られます。 これは、、、 SSH で接続されると思われる計算機になり SSH2 では、 Diffie-Hellman の Key assignment に すまし " て SSH のアクセスを受け付け、ユーサー情報を よりサーバーとクライアントで共通の鍵を得ます。 盗むという攻撃などから身を守るために有効です。 ホスト認証の手順を図 6 に示します。 ユーザー認証 ホスト認証カ鮗ると、続いてユーザー認証がおこなわれ 1. ます、クライアントが SSH による接続要求をおこない ます。ューザー認証とは、通常のログインのときと同様 ます。 に、、ユーザーがその計算機にログインする権限があるか " 2. 接続要求を受けたサーバーは、ホスト認証用の、ホスト の確認てす。 公開鍵 " をクライアントに送ります。ホスト公開鍵には IP アドレス ( もしくはホスト名 ) の情報カ咐いており、 SSH でのユーザー認証の方法は複数あり、 SSHI と 90 UNIX MAGAZINE 2003.7

9. UNIX MAGAZINE 2003年7月号

プログラミング・テクニック・ 66 図 4 locate —S コマンドの実彳デ列 (FreeBSD 4.7-RELEASE の場合 ) % locate —S Database : /var/db/locate . database Compression: Front : 20.93 % , Bigram: 60 .44 % , Tota1 : 14.99 % FiIenames : 151905 , Characters : 6276574 , Database size : 941387 Bigram characters : 372459 , lntegers : 3265 , 8—Bit characters : 0 図 5 locate —S コマンドの実彳デ列 (FreeBSD 5. O-RELEASE-p7 の場合 ) % locate —S Database : /var/db/locate . database Compression: Front : 18.54 % , Bigram : 62.32 % , Tota1: 13.47 % Fi1enames: 177071 , Characters : 7753501 , Database size: 1044328 Bigram characters : 393477 , 工 ntegers : 4188 , 8—Bit characters : 0 なるはど、文字列テープルを用い宿の効果も高くなり ます。 次の lntegers は、差分のみをイ尉寺するための処理で、 通常のオフセットでは対応できなかった回数を表していま す。オフセットで対応できる場合には 1 文字ぶんの領域 で対応可能ですが、整数を各内しなけれはならない場合に はより大きな領域が必要になります。このデータベースで は、 5 , 000 個程度のパス名 ( 約 1.6 % ) がオフセットでは 対応できなかったことが分かります。 最後の 8-Bit characters は、データベース中に 8 ビッ ト目を使っている文字 ( 今回の例では日本語の文字 ) がい くつあったかを表しています。日本語では 2 バイトで 1 文 字を表すので、 133 個の全角文字が存れすることが分かり ます。しつは、この糸 1 情報を出力したマシンは Samba サーバーも兼ねており、そちらで追加されたファイルに日 本語のファイル名をもつものがあるため、この値が 0 では なくなっています。 図 3 の出力を得たマシンは OS が FreeBSD 4. & STABLE で、多数のユーサーが利用しています。特定 のマシンの出力だけで宿の性能を論しるのはやや乱暴な ので、別のマシンでも調べてみました。すこしバージョ ンは旧いのですが、ユーザー数の少ない FreeBSD 4.7 ー RELEASE のマシンで調べたところ、図 4 のような出 カか得られました。元のデータベース・サイズが半分以下 で、 ) 石宿率も若干悪化していますが、それでも全体として 15 % 凵宿できているのは優秀な結果だと思います。 さらに、 5.0-RELEASE-p7 のマシンでも調べてみま UNIX MAGAZINE 2003.7 した ( 図 5 ) 。こちらも、はかのマシンとさほど変わらない ☆ 値か得られています。 んでした。次回は、これらのコマンドの言岩田をみるところ . bigram や locate. code コマンドについては説明しませ 今回は、データベースを作成するときに利用する locate ではないでしようか。 のですが、これほど高い効果カ斫等られるとは意外だったの かりました。 ) 宿に利用しているアルゴリズムは簡単なも テムでいすれも 15 % 以下にまで圧縮できていることが分 工夫か施されています。実際に調べてみると、 3 つのシス という 2 つの技術を使ってデータベースのサイズを抑える する 2. 文字列テープルを使って 2 文字の並びを 1 文字て表現 1. 差分のみを言当求する しで寺するのではなく、 locate コマンドでは、元データをそのままファイルと 明しました。 コマンドて利用されるデータベース・ファイルについて説 名を調べるのに便利な 1 。 cate コマンドをとりあげ、この 今回は、ファイルシステム上に存在するファイルのパス から始めたいと思います。 77 ( たじみ・ひさかす )

10. UNIX MAGAZINE 2003年7月号

第新ト 連載 /Cyber Kansai Project オンデマンド胙システムの構成 図 13 中 MPEG 工ンコーダ 継 映 像 . 円 編集端末 MPEG 工ンコーダ 映像ァータベー MPEG 保存 フル 編集端末 動画サーバーへ 編集端末 Agility Workgroup ド ~ ワ ッ 0 lnternet Video processor 写真 8 映像リアルタイムタ里システム 図 14 OutIiner Editor 豊」 L 上」 第 4 「当 要第を をイ←】日 をし第 -3 ・材ま日 に Anystream の Agility [ 6 ] 、 IBE の lnternet Video Processor を利用しました ( 図 13 ) 。 映像リアルタイム里システム このシステムは、次の 4 つの機能から構成されていま す。 』を上当戔回三 静止画ファイル名などを映像データベース・サーバーに登 録します。オペレータは、編集端末から映像データベース を検索し、その点で MPEGI ファイルになっている中 系央像から IN 点・ OUT 点を自由に決定することができ ます ( 図 14 ) 。 MPEG 工ンコーダ この「ド業の過程で重要なのは、 MPEGI ファイルへの 映像データベース・サー 工ンコードを中すに IN 点・ OUT 点の決定を可能に 編集端末 することです。そうすれは、 MPEGI ファイルになった ・ MPEG 保存用ファイルサーバー 中継映像をすぐに編集できるので、実際の試過にそれ ほど遅れすに公開シーンカ鴃められます。 ます、中継映像・音声を MPEG 工ンコーダに入力し また、中糸央像・音声が入力されているのは MPEG 工 ます。 MPEG 工ンコーダでは、リアルタイムに MPEGI ンコーダだけで、映像データベース・サーバーや編集端末 形式にエンコードし、ファイル化するとともに、映像の変 は LAN 工韆竟で知力しているため、複数の編集端末から 1 り目である、、カット点 " を検出します。カット点を検出し たら、そのときの映像を静止画として保存し、時刻情報・ つの MPEGI ファイルを同時に開いて編集することもで 188 UNIX MAGAZINE 2003.7