連載 /FreeBSD のブートプロセスをみる 図 2 ELF セクションの禾 ( その 1 ) ・ mam.c #include く stdio . > extern VOid *__start_unixmag; extern VOid *__stop_unixmag; int main() void **start = & void **stop = VOid **ptr; f0 て (ptr = start ; void (*func)() func(); return 0 ; VOid init—main() ptr く stop; ptr + + ) &——stop—unixmag; start unixmag ; *Ptr ; することはできません。しかし、 GNU C コンパイラで は、図 2 のように変数亘言で --attribute-- と --section- を指定すると、リンカは、、 u Ⅱⅸ mag " という名前の領域 ( セクション ) を作成し、変数 init-main-unixmag の領 域をそのセクションのなかに配置します。そして、自動的 に --start-umxmag と --stop-unixmag という変数を定 義し、それをそのセクションの先頭と次のセクションの先 頭に配置します。 testl に作られた unixmag セクションの配置アドレス を確かめるには、次のように objdump コマンドを実行し てセクションリストを表示します。そして、 --start-unix- mag と -stop-unixmag のアドレスをくらべてみます。 % objdump ー testl printf("enter init—main()\n VOid *init_maxn_unxxmag —attribute—_( (——section__(" init_main; 図 3 ELF ファイルの構造 ELF ヘッダ プログラムヘッダ プログラムヘッダ セグメント セグメント セクションヘッダ セクションヘッダ VMA LMA unxxmag ldx Name 12 unixmag 13 . eh_frame 00000004 C ONTENTS , 00000004 08049634 08049634 ・ ALLOC , LOAD , DATA 08049638 08049638 ・ を作成すると、そのなかにはかならずテキスト・セグメン トとデータセグメントカられます。この場合、 ラが自動的に作成するセクションもありますが、 マーが自由に作ることもできます。 プログラ コンノヾイ UN 工 X MAGAZINE 2004.6 され、プログラマーがその配置アドレスをコントロール 数の領域はリンカによってデータ領域の、、どこか " に配置 通常、 C プログラムに大域変数を宣言すると、その変 % nm testl ー egrep —(startl stop)—unixmag 08049634 A __start—unixmag 08049638 A __stop_unixmag 以上の結果から、 12 番目に unixmag セクションカ られ、その開始アドレスは 08049634H で、セクション のサイズは 4 バイトであることが分かります。さらに --start-unixmag は unixmag セクションの先頭アドレ スに、 --stop-unixmag は . eh-frame セクションの先頭ア ドレスに配置されていることも分かります。 さて、以上の実験でセクションの作り方と、そのセク ションに変数を格納する方法が分かったはすです。次に 図 4 の 2 つのファイルを作成し、以下のように実行します。 % gcc —c mod—a. c mod—b. c % gcc ー 0 test2 main. 0 mod—a. 0 mod—b. 0 % . /test2 enter init—main() enter init—module—a() enter init-module—b ( ) 以 E の結果から、 main() から 3 つの初期化ルーチンが実 行されたことが分かります。一方、以下のように mod-a. 。 をリンクしなければ init-module-a() は呼び出されませ % . /test3 % gcc ー 0 test3 main. 0 mod—b. 0 ん。 169
連載 /FreeBSD のブートプロセスをみる 図 4 ELF セクションの禾 ( その 2 ) ・ mod—a. C #include く stdio . 五 > void init—module—a() printf ( "enter init_module VOid *init_module_a_unixmag attribute__( (——section_ init_module_a; ・ mod-b. c #include く stdio . h> VOid init—module—b() printf ("enter init_module VOid *init—module—b_unixmag attribute__( (——section_ init_module_b; enter init—main() enter init—module—b() ( "unixmag ( "unixmag 図 5 ELF セクションの不 ( その 3 ) ・ sysinit. h struct sysinit { int priority; void (*func) ( ) ; ・ malll. C #include く stdio . h> #include く stdlib . h> #include "sysinit . h" extern VOid *__start_unixmag ; extern VOid *__stop_unixmag ; int compare (const VOid *a, const VOid *b) ( (struct sysinit *)a)—>priority; int X int y = ( (struct sysinit *)b)—>priority; この実験で重要なのは、 main. c ファイルを書き換えて いないことです。つまり、 mod-a. 。をリンクするだけで、 main() カ剛乎び出す初期化ルーチンが追加できるわけです。 反対に、 ん。 リンクしなくても、、未定義工ラー " は発生しませ if (x return 0 ; if (x > y) { return 1 ; return ー 1 ; int main( ) struct sysinit *start (struct sysinit * ) & struct sysinit *stop (struct sysinit * ) & struct sysinit *ptr; start—unixmag ; stop—unixmag ; main() カ鮃び出す初期化ルーチンの順番は、リンクの 順番で制御することができます。 % gcc ー 0 test4 mod—b. 0 main % . /test4 enter init—module b() enter init—main() enter init—module—a() . 0 mod_a. 0 170 % gcc —C main. C mod_a. C mod_b. C ルーチンカ鮃び出されるはずです。 は、リンクの川頁番にかかわらず、つねに同じ順序で初期化 ファイルの編集が終ったら実行してみましよう。今度 sysinit. h は新たに作成します。 ファイルを図 5 ~ 6 のように書き換えます。ファイル みましよう。 納し、 for ループの直前にこれをソートする処理を追加して そこで、ポインタのほかに優先度を表す数値を配列に格 えてくると順番の管理が大仕事になってきます。 ージョンに依存するかもしれませんし、ファイルの数が増 しかし、リンクと配列の順番の関係はリンカの種類やバ qsort(start , stop ー start , sizeof (struct sysinit) , for (ptr start ; ptr く stop; ptr—>func() ; return 0 ; VOid init—main ( ) printf ("enter init—main()\n") ; compare) ; struct sysinit init_main—unixmag -attribute-—( (——section——("unixmag") ) ) { 0 , init—main} ; % gcc ー 0 test5 main. 0 mod—a. 0 mod—b. 0 % . /test5 enter init—main() enter init—module—a() enter init—module—b ( ) % gcc ー 0 test6 mod—b. 0 main. 0 mod—a. 0 % . /test6 enter init—main() enter init—module—a() enter init—module—b() main() のなかで実行している qsort() は、 sys init 構 UNIX MAGAZINE 2004.6
連載 /Services for UNIX 図 14 file コマンドによる半拐リ /dev/fs/C/WINDOWS/system32/notepad. exe: Windows NT PE format (EXE) , executable not stripped lntel $file /dev/fs/C/WINDOWS/system32/notepad. exe Windows—GUI DOS executable (EXE) 図 15 wvisible コマンドを使用したスクリプト ( 抜粋 ) case "$(file $PROG)" in *Windows—GUI*) wvisible Ⅱ errmsg " ${PROG} " *Windows—CUI* ー *NT—native*) doscmd ${cmd} " $@" esac 図 16 パスの変換 $winpath2unix " c : *ascii*unixmag /dev/fs/C/ascii/unixmag $unixpath2win /dev/fs/C/ascii/unixmag C:*ascii*unixmag すが、 file コマンドと wvisible コマンドを使ってアプリ ケーションの動作の可否を判定しています。 すでに解説したように、 lnterix では UNIX と同等のフ ァイルアクセスを実現するために、シングルルート・ファイ ルシステムを提供しています。 Windows アプリケーショ ンとの連携には UNIX/POSIX 形式のパスと Windows 形式のパスの変換が必要になりますが、 lnterix にはそのた めに unixpath2win と winpath2unix という 2 つのコ マンドが用意されています。図 16 は、 Windows 形式の c:*ascii*unixmag と UNIX/POSIX 形式の /dev/fs/ C/ascii/unixmag をそれぞれ変換しています。 Win32 環境との連携では、ほかにもシンポリック・リ ンクやファイル名の大文字 / 小文字の判別などに注意する 必要があります。いずれも lnterix 環境ではサポートして いますが、 w ⅲ 32 竟からは正しく扱えません。 lnterix 以外の UNIX コマンド SFU には、 lnterix で提供される UNIX 環境に加え、 Win32 のネイティフュ境で使えるコマンドも用意されて います。 Win32 環境でそれらが優先的に使われるように するため、 %SFUDIR%*cornmon に配置されています。 用意されているコマンドは、以下のとおりです。 basename cat chgrp chmod chown cp cut date diff dirname du egrep fgrep find grep head iconv kill ⅲ 124 ls mkdir more mv nice Od paste printenv printf ps pwd renice rm rmdir sdiff sed sleep sort split strings su tail tee top touch tr uname uniq uudecode uuen- COde Vi wait Ⅵ℃ WhiCh xargs iconv コマンドは lnterix 環境にもありますが、 W ⅲ 32 環境から使える UNIX コマンドとしても用意されていま す。 lnterix 環境の iconv はロケールの文字セットを引数 にしますが、Ⅵⅱ n32 環境の iconv は Windows のコード ページを使った変換になります。 932 が Shift JIS のコー ドベージ、 20932 が EUC-JP のコードベージになります。 下の例では、 Shift JIS のファイルを EUC-JP に変換し ています。 C:*>iconv -f 932 -t 20932 sjis . txt eucjp. txt また、 dos2unix と unix2dos の 2 つのコマンドは、 Windows 形式のテキストファイルと UNIX 形式のテキ ストファイルを変換します。こ存じのとおり、 Windows 形式のテキストファイルは改行コードに CR と LF を使い ますが、 UNIX では LF のみを改行コードにしています。 dos2unix は Windows 形式のテキストファイルを UNIX 形式に、 unix2dos は逆に UNIX 形式のテキストファイル を Windows 形式にします。 今回は、 NIS サーバーとパスワード同期の解説、そし て lnterix の概説をおこないました。 NIS サーノヾーやパス ワード同期は、設定を誤るとセキュリティ上の問題が発生 することもあります。設定の前に付属のドキュメントをよ く読み、テストをおこなうようにしてください。 次回は、 lnterix 上でのアプリケーション開発と、 SFU を使ううえでのさまざまなヒントを紹介します。 ( おいかわ・たくや マイクロソフトプロダクトディベロップメント ) ☆ UN 工 X MAGAZ 工 NE 2004.6
SC 翡 好評発売中 ! Linux ブートプロセス みる 連載 /FreeBSD のブートプロセスをみる 図 6 ELF セクションの不 ( その 4 ) ・ rnod-a. C #include く stdio . h> #include "sysinit . h" VOid init—module—a() printf ("enter init_module—a()\n") ; struct sysinit init_module_a_unixmag attribute__( (__section__("unixmag { 1 , init—module—a}; ・ mod-b. c #include く stdio . h> #include "sysinit . h" void init—module—b ( ) printf ("enter init_module_b()\n") ; struct sysinit init_module_b_unixmag —attribute__( (__section__("unixmag ・白崎博生著 { 2 , init—module—b}; ・ B5 判、 204 ページ ・旧 BN4-7561-4451-9 造体の配列の要素を、、 priority" の小さい順に並べなおし ・ 2 , 940 円 ( 税込み ) ます。このため、プログラマーは、優先度を設定すること で、リンカの動作に依存せずに初期化ルーチンの呼出し順 Linux カーネルがプートする仕組みを、コ 序を制御することができます。 ードを見ながら詳細に解説する。 CPU の こか 構造から、 Linux のプートローダとカーネ すいぶん前置きが長くなってしまいましたが、 ルの動作、 init プロセスの起動までの道筋 らが本題です。以上のサンプルコードの内容をふまえて をみていく。カーネルの「敷居」を低く mi-startup() のコードを読んでいきましよう。 する一冊。 mi-startup() は、 kern/init-main. c て疋義されている 目次から アーキテクチャ非依存の初期化ルーチンです。 ハードウェアの制御ーー CPU のメモリ管理 0117 : struct sysinit **sysinit , -32 CPU の保護機能、割込みと例外 **sysinit_end; CPU のレ O アクセス、 PC / AT アーキテクチャ 0166 : void フロッピーからのプログラムのロード 0167 : mi—startup (void) 0168 : { セットアップ・ルーチン、圧縮カーネルの展開 0169 : sta 「 tup ー 32 丿レーチン 0170 : sta 「 t ke 「 nel() と setup_a 「 ch() 0171 : t 「 ap_init() 、 init_ 旧 Q() 、 time_init() 、 mem_init() 0172 : 0173 : 「 est ー init ( ) からカーネ丿レスレッドの生成まで 0174 : init() と do_basic setup() 0175 : ユーサープロセス / sbin / init の起動 0176 : 0177 : カーネルデバッガ 0184 : 0185 : 0186 : 00 乢を 0 第 0 物 Linux の プートプロセスをみる 白第博ま ノ、一ドウアあ - ー 1 0 ト u のメそリ - 、 2 CP リの - -. 鋼込みと鋼外 c 円のレ 0 アク物ス . ′ AT ツーキチチャ つ g ッビがものツロ 0 ラムの 0 れ 32 ルチン す・はからカー第ルレ ! の生歳第で ユサプロセス / 第ー第 カネをチバッ 「第物物第、う 0 第物 register struct sysinit **sipp; register struct sysinit **xipp; register struct sysinit *save; if (sysinit = = NULL) { sysinit=&——start—set—sysinit—set ; sysinit—end=&——stop—set—sysinit—set ; for (sipp = sysinit; sipp く sysinit—end; sipp + + ) { for (xipp = sipp + 1 ; xipp く sysinit—end; xipp + + ) if ( (*sipp)—>subsystem く (*xipp)->subsystem Ⅱ 株式会社アスキー 〒 1 60 ー 8584 東京都新宿区信濃町 34 J 日信濃町ビル 出版営業部電話 (03) 5362 ー 3800 171 UNIX MAGAZINE 2004.6
連載 /FreeBSD のブートプロセスをみる 図 1 カーネルの ( 概 b00Vi386 00t0 / b00t0. s start() b00Vi386 / b00t2 / boot 1 . s start() → main() boot/i386/btx/btx/btx. s init() b00Vi386 / b00t2b00t2. c main() i386 / i386 / locore. s btext() recover—bootinfo() identify-cpu() create—pagetables() init386 ( ) kern/init_main. C start init() vfs mountroot() ・ execve(... "/sbin/init" … ) i ⅶプロセスの起動 ・セグメント・テーカレと ・・カーネルのロード ・プロテクトモードへの移行 " b00t2 のロード システム時間の初期化 ・・ルート・パーティションのマウント 割込みテーブルの初期化 168 1 、みにくい " ではありません。 init-main-unixmag はどういう関係になるのでしようか す。しかし、配列の先頭を表している --start-unixmag と こで配列にポインタを代入しているらしいと想像できま ンタを設定しているところは最後の行しかないので、 されていることが分かります。一方、 init-main() のポイ ことから、その配列には init-main() のポインタが格納 き、実行結果に、、 enter init-main()" と表示されている のポインタが指すアドレスを呼び出しています。このと スの範囲にある配列から順番にポインタを取り出し、そ main ルーチンは、変数 start と stop が指すアドレ enter init—main() % . /testl % gcc ー 0 testl main. c 次のように実行します。 はじめに、図 2 に示す内容のファイル main. c を作成し、 単なサンカレコードを使ってコンセプトを解説します。 、みえにくい " 1 ので、 mi-startup() を読む前に、まずは簡 kern/init—main. 0 tunable—int—init() imt_maxsockets() vm_mem_init() kmeminit() malloc—init() filelistinit() lock—mgr—imt() init—bounce—pages() event—handler—init() link_elf_init() cpu—startup() bios32—init() procO—imt() ・ shutdown—conf() imt—prison() init—taskqueue—list() runq-imt() create_init() ・ idle_setup() start—softintr() ata_init() configure() configure—final() initclocks() sched—setup() proc0—post() kick—init() " kproc—start() ・・ scheduler() ・・メモリアロケータの初期化 startrtclock() 8254 の初期化 ・・ swapper の生成 ・・ init スレッドの生成 ・・アイドルスレッドの生成 ・・ init を実行可に設定 ・・その他のカーネル スレッドを生成 そもそも、 -start-unixmag を定義している行は図 2 のど こにもありません。 その答は、 ELF フォーマットのセクションにあります。 2 月号でも説明しましたが、 ELF 形式の実行ファイルは 図 3 のような構造になっています。 ELF 形式のファイル の先頭には 52 バイトの ELF ヘッダがあり、その後ろに いくつかのプログラムヘッダとセグメントか読いて、最後 にセクションヘッダが並んでいます。 ELF ヘッダの最初の 4 バイトには、 ELF ファイルであ ることを表すマジックナンバーが書き込まれます。残りの 部分には、プログラムヘッダのサイズや個数などの情報が 書き込まれています。 プログラムヘッダは、後続のセグメントのタイプや大き さ、属性値などを定義するデータ構造です。そして、セグメ ントのなかに実際のデータが格納されています。各セグメ ントは 1 つ以上のセクションに分割され、セクションヘッ ダはそれぞれのセクションの位置と未を表します。 たとえば、 C プログラムをコンパイルして実行ファイル UNIX MAGAZ 工 NE 2004.6
連載 / Pe 日活用のヒント リスト 2 proxy ・ pac 1 function FindProxyForURL (url , host) if ( isInNet (myIpAddress() , " 255 . 0 . 0 . 0 " ) Ⅱ " 10 . 0 . 0 . 0 " 3 isInNet (myIpAddress ( ) , " 255.0.0.0 " ) " 172.0.0.0 " 4 5 ・ unixmag ・ jp") ) { if ( isP1ainHostName (host) Ⅱ dnsDomainIs (host , 6 return "DIRECT" 7 8 9 10 11 12 13 14 15 16 } 図 9 アドレスの入力 自勒構成 (A) 自構成ス衂プトを使用する アドレス、「一 プロキシサーハー ド品臀さ一を用すにれら錠はヤルアップまま VPN に石トルツしには元尠当ヨを用しないを町 自分の IP アドレスが 10 ュュュか 172 ュュュで、ホスト 動作するようになった。 部が *. unixmag. jp 以外の URL にアクセスする場合は、 自重冓成スクリプトの問点 プロキシー・サーバーとして proxy という名前のマシン これで職場に着いたり帰宅するたびにプロキシーを変更 の 8080 番ポートを使用する。それ以外の場合は直接アク する操作から解放されるかと思いきや、そうはいかなかっ セスする。自宅では IP アドレスが上記の条件に当てはま た。私カ駛っている RSS リーダーが、、プロキシー・サー らないので、かならず直接アクセスすることになる。 バー " の設定 ( 図 10 ) を参照してしまい、自動構成スクリ ちなみに、リスト 2 とそのアドレス (file://c:/usr/ プトを実行してその結果を使ってくれなかったからである。 local/lib/proxy. pac) は Mozilla Firefox でもそのまま 別の問題として、 proxy. pac が DIRECT を返すと、 IE 使用できる。 はイントラネット・ゾーンにアクセスしていると解釈する。 私は当初、 proxy. pac をマイドキュメント・フォルダ その結果、自宅では IE で開くべージがすべてイントラネッ に置くようにしていた。そのため、自動構成スクリプトの ト・ゾーンになってしまう 5 アドレスの指定を、、 file: //c: /Documents%20and%20 " にしたのだが、これではスクリプトか勠い Settings/.. レシストリ操作によるプロキシーの o Ⅱ / o 仕 てくれなかった。自動構成スクリプトのアドレスに含ま IE のプロキシーの設定はレジストリに保存されてい れる、、 % 20 " は正しく処理されないようである (MoziIla ・・ ) 。そこで、 proxy. Firebird では問題なかったのだが・ 5 http://www.atmarkit.co.jp/fwin2k/experiments/ieproxy pac を *usr*local*lib に置いたところ、今度は IE でも /ieproxy-01. html else { return "PROXY proxy : 8080 " ・ else { "DIRECT" 図 10 プロキシー・サーバーの言 自構成 鰾黷治蟲煢豐ます。手る に設定を自動こ検出する 行自動構成スプトを使用する 新呂イ品甯芹ーも % 用するにれらの設定はタイヤルアップまたは VPN 木斗。ー - 群殳定 0 ローかレアドレスにはプロキシサヨトを使用しない⑧ ローカルエリアネットワーク化 N ) の設定 128 UNIX MAGAZINE 2004.6
IJNIX Contents 2004 / 6 186 103 インターフェイスの街角・・・・・・増井俊之 短い名前の活用ーーーバス名や URL を短期記憶に入れる lnterview : HP の UNIX OS PA-RISC と ltanium 上の HP-UX 、 Linux News News 17 Notice NAB2004 ・・ 25 CoIumn ・・小林和真 144 146 138 185 プログラマーの理想と現実・ ワークステーションのおと・・・・・坂下秀 NetNews 便り・・・・・・みるく Coffee Break 読者アンケートのお知らせ ・・・遠藤知宏 本誌の内容に直接関係のないご質問にはお答えできません。 ューザーサポート専用電話 TeI 03-5362-3465 受付時間 : 13 : 00 ~ 18 : 00 ( 土日・祝日を除く ) 印刷 / 東京書籍印刷株式会社 Printed in Japan 禁転載◎ 2004 ASC 日 Corporation 1070406 ・生産管理担当 / 稲垣勢津子 ・出版営業担当 / 佐々木直・出版広告担当 / 山本直吉郎桜山ちずる志摩和弘 ・編集 / 川崎通紀岸竜次久保田考 ・発行人 / 小森哲郎・編集人 / 土屋信明・編集長 / 大久保讓治・ Ed ⅱ 0 「・ s Network Address: unixmag@ascii. CO ・ jp 発行所・株式会社アスキー〒 160-8584 東京都新宿区信濃町 34 JR 信濃町ビル出版営業部電話 03-5362-3300 UNIX MAGAZINE vo い 9 # 6 2004 年 6 月号 ( 通巻 212 号 ) 2004 年 6 月 1 日発行
連載 /Red Hat Linux のツールたち 図 20 CD-R の書込み画面 ( トラック書込み ) CD / イメ、 - ジ情報 ・込みトラッり ↓イアみトトラック書込みー 作第域ディレクトリ : 自動選択 ライ : オーディオ再生 マスター作成 トラっク制除 メインメニまーへ トラッグイメージ 1. CDRa 材ロ S096 聞い 「マルチセッシンとして書込む タイオ 47 働 書込みモードディスクアっトワンス (DAO) 「書込みテストのみ マ書込みが終ると自動的に ( D 取り出し r7 トラック境め込み 書込みクローズしない バッフ , ーアンダーラン防止機能を有効にする 図 22 書込み完了 第 しい R08 げ 3ö引 p れ引 5 書込み完了 バッファ : ー 表示詳報 書込みバッフアサイスー . p 「 : 「よ「 0 uas 0 も一物 0 を 0 やしリ md 14554 し i 第・・「 u11. 物新「 ill & 「・丁の 1 書込み タイトル編第 上物オプン第ン設定 C00 の・・、切消去ー OK X-CD-Roast 0 6 創 p れ a15 CDtDVD+-RWOYä去 鑒 図 23 メティア消去の言綻ウインドウ ログを保存 トラック書込みー c し R のクつ一ズのみー : ←匸こ豆トらき引 3 をきれき 15 デークートラック 1 / 1 い 52 田 ] を書込み中 図 21 書込み兄の表示ウインドウ キャンセル トラック : 」 合計」 書込みバッフアサイズー —Free 地 4. た・「し止をい・ : k 阯 500t0 「 : 0 表示 詳報 ログを保存 消去モード : ディスク全体の最小消去 ( IA TOCJ pregap) 新消去が終ると自動的に CD 取り出し 「強制消去 なお、 DVD-RW メディアを消去するには、 CD の VD + 旧 W の消去 ・吉・よ古、 . 土石”ーぶ m 引新 N00 レ、溿なマ專生マー・オ 2 倍速で約 37 分かかります。 CD ・ RW の完全消去 (blank the entire disk ) には等倍速で約 74 分、 図 20 の れを選んで [ 追加 ] ボタンをクリックすると、、、書込みト ラック " ポックスにイメージファイルが追加されます。 こで [ レイアウト完了 ] をクリックし、、、トラック書込み " タブに移動します ( 図 20 ) 。 図 20 の画面で、書込み速度やタイプ ( メディアの容量 ) などを譿定し、 [ トラック書込み ] をクリックすれば、メデ ィアへの書込みが始まります。書込み中は図 21 のような ウインドウが表示され、途中過が逐次表示されます。書 込みが完了すると、画面カ咽 22 のように変化するので、 こで [OK] ボタンをクリックすればおしまいです。 CCD/DVD 十—RW の消去 ] をクリックします。すると、 設疋ウインドウ ( 図 23 ) が表示されるので、消去モードな どを適宜定して [CD/DVD 十—RW の消去 ] をクリッ クすれば、実際に消去されます。 次回は、 OS のバックアップ / リストアや、プ ☆ CD の作成方法などについて紹介します。 ータブル 読者アンケートのお知らせ ( よこがき・はやお ) 今後ともこ愛読のほど、よろしくお願い申し上げます。 いつも弊誌をこ愛読いただき、ありがとうこざいます。 今後の企画・編集の参考とするため、読者アンケートを実施して います。下記の Web ページにアクセスのうえ、必要事項をこ記入く ださい ( 締切は 2004 年 6 月 17 日です ) 。 皆様からお寄せいただいたこ意見は、員重な資料として活用させ ていただきます。 こ回答をお寄せいただいた皆様のなかから、 5 名様に特製 QUO カ ード ( 2 , OOO 円ぶん ) をさしあげます ( 応募者多数の場合は抽選と いたします。なお、当選者の発表は発送をもって代えさせていただ きます ) 。 Sh(•snet ・ ~ 0 UNIX MAGAZINE 編集部 ( テザインは変更されることがあります ) ・ ( 株 ) アスキー UNIX MAGAZINE 読者アンケート専用 U 日 L http://mkt.uz.ascii. CO. jp/unixmag/ こ注意 : 雑誌公正競争規約の定めにより、この懸賞に当選された方は、本号のほかの懸賞に入選できない場合があります。 UN 工 X MAGAZINE 2004.6 185
街 角 ェ イ の ス フ イ ン タ 短い名前の活用 76 増井俊之・ 通常、ファイル名や URL は階層的なデータ構造や 図 1 TinyURL.com 中身を反映するため、どうしても長くなります。たとえ 方イルの壥集僕 ) 表示臀動 0 プマ⑧ツーヘルプ ば、私が書いている原稿のフルバス名は / home / mas ⅲ / DOC/UnixMagazine/0406/if0406. tex 、この連載のサ ポートページの URL は http://pitecan.com/articles/ UnixMagazine/ と、いずれもかなり長くなっています。 シェルでこのようなファイルにアクセスする場合、フル パス名をつねに間違いなく入力するのは大変です。たいて Find 00n 岶ⅲ製 an 肥 0 シ A 第 b ⅲけ - We 0 を Com. - N 日 tc 、日み 0 円 いは、シェルの補完機能などを使いながらディレクトリを を・物 0 、第 00E たどることになりますが、それでもけっこうな手間がかか . 料 ) 地 R をれを物 物 On ります。また、このような長いファイル名や URL を口頭 A b W 00 ・ツ 0 い d ツ 00 をト 0 ・ p ・靆・を 0 デ 0 は・ト′ 0 、一を戸 T ト・ををト 0 E 、 S を 00 響・′ Of 重 0 ド凵 R 凵 Add TinyURL [ 0 yo browser•s t00 ヨ r で正しく他人に伝えるのはそう簡単ではありません。 最近の日記や Wiki のページでは CGI などを使ってい れなら、もとの長い URL の代わりに、、 2s3cc " だけを記億 るため、 URL が長くなりがちです。 Amazon の商品紹介 したり伝達するだけですみます。この程度の長さなら、人 ページも、 http://www.amazon ・ co ・ jp/exec/obidos/ 間は短期記億カ河能ですし、電話などでも間違えずに伝え ASIN / 4105413015 / とたいへん長いものです。このよう ることができるでしよう。 に、 URL の多くは人間がすぐには記できないほど長く TinyURL.com のサービスは長い URL を短いユニ なっています。 ークな名前にマッピングしているだけであり、バカバカ TinyURL しいほど単純な仕組みと思うかもしれません。しかし、 TinyURL で割り当てられる短い名前は簡単に短期記億に 扱いにくい URL を他人に紹介する場合などのために、 長い URL を短くしてくれる TinyURL1 というサービス 入るのに、一殳的な URL ではそれが無理であることを考 えると、用途によってはけっこう役に立ちそうです。 があります ( 図 1 ) 。このサービスは、例に挙げたような長 い URL を、、 http://tinyurl.com/abcde" といった、、短 い名前 " に変換してくれるものです。 たとえば、 http://pitecan.com/articles/UnixMag- azine/ という URL を TinyURL に登録すると、 http:// tinyurl.com/2s3cc という短い URL が返されます。 1 http://TinyURL.com/ す / リ R し 00 第一有洋 0 むれ′朝ツ : 0 ′ ! ー Mo ′Ⅲ「朝をわ 3 TinyURL.com 0 Makinq に「 10 LRLS リら ea 引 Mnre 小ら n 2 上ロ ii Ⅲ on 0 「小 ern 。 0 10 〕「 nillion hits/month. Home Exam Make T002 亜 Button Redirection Hide URLs Linkto US! Welcome 【 0 TinyURL!"•• 0N5 ivin を Y00 引改 0 を 00 をも 09 ・れ、第 0 y を 0 ト・、をに、トを 0 ー・ 0 を壟旦壘 ! 皇 ! こ 新 yo Ⅷ pow を一 ( ・ u 引 00 ・・当 0 、をを 0 h ー、・い ( 0 を物 0 、・飛・ 0 、をト・了 h ・ 0 ツ 00 、・ ( om ・一 0 物・の 0 0 厖 ( 第・第誠 0 料れ 0 ・リ R しをト・を・れ朝 d ト 0 第・ 30d 日幡リ s 日 con 0 Ⅱ ed DNS 鱸こを引 0 ) れ 0 年 An example 了リ「 0 当リし : ・ ? 00 & ? 5 洳れ・一 3 れ・第物 25 : ト K ~ 【 0 ` ⅱ漏 N 252 トー XRP ? トⅵ 4004 OÖuk ~ ・ 'N を 6MON96Y ドーし E3H10 も 0 ー ESXVq ( 、 ( 5 北 2 : 2 ツツード ~ ・下行 T2 を、物 : 5 まし N 0 均 VN ⅳ 01R ド ~ 4 、 : 5 ~ 秘ー A00 物をし、を Hd ト・ 09 、 G も ( M ト ) マら一褫し 406 ト 03 を Qm ? ! ET 物円・ト mq ( れ・物 : ! 3 トー ( れをい、 2 2 信一を 8 、 403g 」 V ー、 8 ) % 15 : 臼ル FW ー亨 ~ ! 2 ト T を 9 ッ 5K009 、 : 5 : レ 000 、 0 ー EK 25 : と 053 他 CP い出もれル見い Ten れ、 0 ー use Contact リ引 Suppott リ肚 by do 0 に ktoG ⅳ 個人的に使うには TinyURL はたしかに便利ですが、長い名前を短い名前 に対応づけるデータベースは TinyURL.com のサーバー 内にあります。したがって、なんらかの事故でサービスが 186 UN 工 X MAGAZINE 2004.6