コマンド - みる会図書館


検索対象: UNIX MAGAZINE 2004年6月号
63件見つかりました。

1. UNIX MAGAZINE 2004年6月号

連載 /Services for UNIX 図 13 ロケールデータの参照 $ ls —F /usr/share/locale ASCII_ EUC-JP_ POSIX/ SJ 工 S_@ _ASCII _EUC-JP _SJIS@ _eucJP@ windows eucJP_@ ー 932 $ ls —F /usr/share/localedef/ charmaps/ src/ $ ls —F /usr/share/localedef/charmaps ASCII . cm EUC-JP . cm windows—932. cm $ ls —F /usr/share/localedef/src L . POSIX L. ja—JP. EUC—JP L. win-ja_JP 環境からプロセスを生成するだけですが、必要なデータを 引数で渡すことで、 lnterix と Win32 のプロセス間で簡 単なデータ交換がおこなえます。たとえば、 lnterix 上の 、、プロセス I " が W ⅲ 32 上の、、プロセス W" とデータ奐 をおこなう必要がある場合は、 W ⅲ 32 上の、、プロセス W" から POSIX. EXE や PSXRUN. EXE で lnterix 上の 、、プロセス 12" を呼び出し、その際に必要なデータを引数と して渡すことができます。、、プロセス 12" は lnterix 上の プロセスなので、、、プロセス I" と一ヨ殳の UNIX 上のプロ セス間通信がおこなえます。 逆に、 lnterix 環境から Win32 上のアプリケーショ ンを利用する場合は、 lnterix から W ⅲ 32 アプリケー ションをそのまま実行できます。ただし、 Windows 標 準のコマンドは %WINDIR% (%SYSTEMROOT%) や %WINDIR%*system32 (%SYSTEMROOT%* system32) に配置されていますが、これらを実行するに は PATH 変数に追加するか実行時に明示的に PATH を 指定しなければなりません。また、コマンド・プロンプト (CMD. EXE) にはいくつかの内部コマンドがあります。 lnterix では、これらの Windows 標準コマンドを実行す るために、 runwin32 コマンドが用意されています。 run- win32 コマンドは、 PATH 操作をすることなく、 lnterix から W ⅲ d 。 ws 標準コマンドを実行できます。たとえば、 次のコマンドは lnterix のシェルから XCOPY を実行し ています。 $ runwin32 xcopy testl test2 さらに lnterix では、よく使用する Windows コマン ドについては、 /usr/contrib/win32/bin に runwin32 を使ったスクリプトがあらかじめ用意されています。その UNIX MAGAZINE 2004.6 j a—JP. EUC—JP/ ja—JP. SJIS@ ja—JP.eucJP@ win—ja—JP. WiⅡd0買Sー932/ i Ⅱ dows ー 932 unicode—mb—maps/ は /usr/contrib/win32/bin にあるスクリプトの一部で 用できるかは wvisible コマンドで判定できます。図 15 ンを起動できるか、つまりウインドウ・ステーションを利 また、スクリプトの実行環境で GUI アプリケーショ 、 Windows-GUI" と判別されます。 ます。 GUI アプリケーションの場合は、図 14 のように 行ファイルが GUI アプリケーションかどうかを判別でき します。 lnterix では、 file コマンドを使うことにより、実 GUI アプリケーションを呼び出すスクリプトの実行に失敗 していてウインドウ・ステーションカ坏リ用できない場合は、 しかし、 Telnet 経由でログオンしていたり、バッチで動作 ず、すべての W ⅲ 32 アプリケーションを呼び出せます。 していれば、 GUI アプリケーションかどうかにかかわら から使用する場合、 Windows のデスクトップにログオン ます。 W ⅲ 32 アプリケーションを lnterix のスクリプト ンと呼ばれる Windows のデスクトッフ境が前提になり ン ( GUI アプリケーション ) は、ウインドウ・ステーショ W ⅲ 32 でウインドウを生成するようなアプリケーショ などになります。 から実行する場合のコマンド名は、 wmore 、 wtype 、 wping けたスクリプトが用意されています。したがって、 lnterix /contrib/win32/bin にはファイル名の先頭に、、 w " を付 dows 側の標準コマンドを lnterix から利用するため、 /usr ping などです。これらと同一のファイル名をもつ W ⅲー terix にも用意されています。たとえば、 more や type 、 一部の Windows コマンドは、同一のファイル名で 11 ト ます。 lnterix のシェルからそのまま実行できるようになってい るようになっています。たとえば、上記の XCOPY も ため、 runwin32 コマンドを個別に使わなくても実行でき 123

2. 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

3. UNIX MAGAZINE 2004年6月号

連載 / U N Ⅸ便利帖ー 0 送されているはずです。 142 の Tcl スクリプト ) /opt/local/bin/portindex (port の一覧を作るため をおこなうための TcI スクリプト ) ・ /opt/local/bin/portall ( すべての port を対象に操作 スクリプト ) /opt/local/bin/port ( 各 port を操作するための Tcl これによって、次のものがインストールされます。 % sudO make instaII % make % . /configure % cd darwinports/base を実行します。 configure の実行が終了したら、今度は make コマンド 定しなければ、上記の dports ディレクトリになります。 開した dports 以外であればそれを指定します。何も指 各 p 。 rt が収められているディレクトリが、さきほど展 —with—dports—dir /opt/local になります。 ール先ディレクトリを指定します。何も指定しなければ DarwinPorts で導入するアプリケーションのインスト —prefix 実行します。このとき、次の引数が指定できます。 最初に、 base ディレクトリで configure スクリプトを し、それらをインストールするという作業です。 ましよう。 base ディレクトリで必要なものをコンパイル それでは、 DarwinPorts を利用するための準備を始め リ以下にカテゴリー別に収められています。 もう 1 つは実際の port で、こちらは dports ディレクト で、これは base ディレクトリ以下に収められています。 するためのコマンドや設疋ファイルを作るための基盤部分 す。 1 つは各 port をチェックしたりインストールしたり DarwinPorts は、大きく分けて 2 つの部分からなりま 各国語版があります ) 。 語、フランス語、イタリア語、日本語、中国語 ( 繁体判の ナルの英語版のほか、ドイツ語、デンマーク語、スペイン かれている README ファイルを読みましよう ( オリジ 最初に、 DarwinPorts の使い方や準備作業の手川頁が書 /opt/local/share ディレクトリ (DarwinPorts カリ 用するライプラリなどが置かれる ) /opt/local/man ディレクトリ ( オンライン・マニュア ルが置かれる ) /etc/ports ディレクトリ (DarwinPorts のための設 定ファイルなどが置かれる ) p 。 rt などのコマンドや、今後、各 p 。 rt からインストール されるアプリケーションは、標準では /opt/local/bin に 置かれます。これらを実行する際には、コマンド検索パス にこのディレクトリを追加する必要があります。オンライ ン・マニュアルは / opt / local / ma Ⅱ以下にインストールさ れるので、これを環境変数 $ MANPATH に追加しておけ ば man コマンドでマニュアルカ第売めるようになります。 /etc/ports ディレクトリには、設定ファイル (ports. conf および sources. conf) と、 /opt/local 以下のディレ クトリ構造を記述した prefix. mtree というファイルがイ ンストールされます。通常、これらの設疋ファイルの内容 を変更する必要はありませんが、書式は単純でファイルサ イズも小さいので、 1 度は目をとおしておくとよいでしょ う。これらの設疋ファイルの内容は、次に説明する port コ マンドの動作に景彡響します。 port コマンドの利用 FreeBSD の Ports Collection では、各 port が収め られているディレクトリで make コマンドを実行するのが 標準的な使い方です。一方、 DarwinPorts では port コ マンドが用意されていて、これを用いて各 port を操作し ます ( どちらも、、 port" なのでややこしいですね ) 。 port コマンドの基本的な書式は次のとおりです。 port 、 get 0 置 - れ佖 me 0 0 れ よく指定する target としては、以下のものがあります。 ・ install : port をインストールする。 ・ uninstall : port をアンインストール ( 削除 ) する。 ・ clean : インストール後に不要になった中間ファイルな どを削除する。 ・ search : その port が dports ディレクトリ以下にある かを検索する。 ・ installed : インストール済みの port の一覧を得る。 UN 工 X MAGAZ 工 NE 2004.6

4. UNIX MAGAZINE 2004年6月号

ワークステーションのおと一 -0 図 5 /dev/hdbIev4 の Linux LVM(Ox8e) を言綻 # fdisk /dev/hdb コマンド (m でヘルプ ) : p Disk /dev/hdb: 17.1 GB, 17179803648 bytes 255 heads , 63 sectors/track, 2088 cylinders Units = シリンダ数 of 16065 * 512 8225280 bytes コマンド (m でヘルプ ) : p コマンド (m でヘルプ ) : w テパイスプート /dev/hdbl /dev/hdb2 /dev/hdb3 /dev/hdb4 始点 1 559 1069 1579 終点 558 1068 1578 2088 プロック 4482103 + 4096575 4096575 4096575 ID 83 83 83 83 システム Linux Linux Linux Linux コマンド (m でヘルプ ) : t 領域番号 ( 1 ー 4 ) : 1 16 進数コード (L コマンドでコードリスト表示 ) : FAT16 く 32M 拡弓戓 FAT16 HPFS/NTFS AIX AIX プート可能 OS / 2 ブートマネ Win95 FAT32 3c 40 41 42 4d 4e 4f 50 PartitionMagic Venix 80286 PPC PReP Boot SFS QNX4. x 82 83 84 85 86 QNX4. x 2nd part 87 QNX4. x 3rd part 8e Linux スワップ L inux OS / 2 隠し C : ド da Linux キ広弓戓 NTFS ポリューム NTFS ポリューム L inux LVM OnTrack DM 93 c6 c7 db de df e 1 e3 DRDOS/sec (FAT- DOS access BootIt De11 ユーティリ CP/M / CTOS / 非 FS データ Syrinx DOS R/O Amoeba 8e 16 進数コード /dev/hdbl /dev/hdb2 /dev/hdb3 /dev/hdb4 コマンド (m でヘルプ ) : System ID Format (L コマンドでコードリスト表示 ) : 1 ( 同じようにして /dev/hdb2—4 を Linux LVM にします ) 559 1069 1579 558 1068 1578 2088 4482103 + 4096575 4096575 4096575 8e 83 83 83 Linux LVM Linux L inux L inux A110C PE / Size Free PE / Size VG UUID Physica1 volumes Metadata Areas Metadata Sequence NO VG Access VG Status MAX LV Cur LV Open LV Max PV Cur PV Act PV VG Size PE Size Tota1 PE 1vm2 4 1 read/write resizable 255 0 0 255 4 4 15 . 99 GB 4 .00 MB 4094 PV Name PV UUID PV Status Tota1 PE / PV Name PV UUID PV Status Tota1 PE / Free PE PE UNIX MAGAZINE 2004.6 0 / 0 4094 / 15 .99 GB SIvQ04-euSN—nu7x- 153 1000 / 1000 allocatable E8XITd-0MMG-fm2Y—• /dev/hdb2 1094 / 1094 allocatable RcDpDs-jgDO—Khe7—• /dev/hdb 1

5. UNIX MAGAZINE 2004年6月号

字が選ばれています。 この値を使って出力を区切る処理のコードは以下のよう になります。 inetList— —"'ifconfig $ 1 ー grep 'inet tr " \ Ⅱ " "$—ifs たった 1 行ですが、かなり複雑な構造となっています。 変数 inetList に値を代入しており、右辺には文字列が指 定されています。ただし、文字列自体はバッククオートを 使って生成するようになっています。 ifconfig コマンドを 実行し、その出力のなかから inet という文字列を含むもの を取り出して、その出力の改行文字をさきほどの区切り文 字で置き換えたものが結果となります。つまり、出力の各 行をさきほどの文字で連結したものとなるはずです。 このようにして値を用意したあと、これらの各行に対し て処理をおこなうために、次のようなループを形成してい ます。 01difs="$IFS" IFS="$_ifs" for _inet in $inetList ; dO まず、現在の IFS 変数の値を oldifs 変数に取り出し、あ とでもとに戻せるようにしておきます。そして、さきほど の区切り文字を IFS に設定します。こうすることで、リス トの処理で各要素を区切るときに指定された文字が使われ ます。このようにして作ったリストを使って for 文を実行 しているため、 ifconfig コマンドを実行したときに出力さ れた行ごとに、この for ループの本体を実行することにな ります。 各行から IP アドレス部分を取り出す処理には expr コ マンドを利用しています。 —inet='expr 私が同じプログラムを作るとすれば、この処理には sed コマンドを使うでしようが、おそらく expr コマンドのほ うカく、このコマンドで実現する未はあるのでしよう。 expr コマンドの : 演算子は、その左辺 ( この場合は $ ーⅲ et 変数の値 ) を右辺の正規表現と一致するか調べ、一致した文 字数を返します。ただし、正規表現のなかに \ ( と \ ) で括 られた部分があれば、そのもっとも外側のものと一致する 部分の文字列を返します。使われている正規表現もたいへ UNIX MAGAZINE 2004.6 SC 翡 好評発売中 ! プログラミング・テクニック 生きたプログラムから学ぶ実践的手法の数々 リ N Ⅸコマンドのソースコードにみる テクニック プログラミング 第強プロクラミング手法 、多滝第・和 ” d ・ま ( ーにを・エ第にいつを ーに一にをあリ・すまこには - プ 0 ラ・をに・をなを・がど まをつ都ル・屬をれてい・を vipw ASMI ・多治見寿和著 ・ B5 判、 240 ページ ・ ISBN 4-7561-4389- X ・ 1 , 800 円 + 税 フリーの UN Ⅸやアプリケーションのソースコードを 見ながら、プログラミングにおける " 名匠の技 " を学 ぼうというのが本書の目的です。長い年月をかけ、 多くの人の手ですこしずつ改良されてきたソフトウ ェアは洗練の度合いを増し、名匠の手になる工芸品 といった趣があります。そこには、プログラム開発 に必要な技術がどっさりと盛り込まれています。 フログラミングに活かす データ構造と刃レゴリズムの プログラミングこ活 データ構造とアルゴリズムの - 基礎知識 基礎知識 ・今泉貴史著 ・ A5 判、 288 ページ OISBN 4-7561-4452-7 ・本体 2 , 700 円 + 税 これからアルゴリズムやデータ構造についての勉 強を始めようと思っている人、数式をみるのは苦 手だけれどもアルゴリズムについて学びたい人、 学校でアルゴリズムの授業を受けたけれど、いま ひとつ理解しきれなかった人、そんな人にお薦め します。 株式会社アスキー 〒 1 60 ー 8584 東京都新宿区信濃町 34 J 日信濃町ビル 出版営業部電話 (03) 5362 ー 3300 83

6. UNIX MAGAZINE 2004年6月号

ー② 連載 /Services for UNIX 図 2 ユーザー窈乍成例 C:*>nismap add —e "testgroup: 動作 = 追加中マップ = 'group' 成功 : 2004 : " —a windows group オブジェクトを Active Directory に追加します。 オブジェクト 'testgroup オブジェクトクラス = ) Group コンテナ = 'LDAP://10ca1host/CN=Users,DC=windows ,DC=root ,DC=10ca1 ' . C:*>nismap add —e "testuser:hogehoge : 512 : 512 : : /home/testuser:/bin/bash" 動作 = 追加中マップ = 'passwd' 成功 オブジェクトを Active Directory に追加します オブジェクト オブジェクトクラス = 'User コンテナ = ' LDAP : //10ca1host/CN=Users ,DC=windows ,DC=root ,DC=10ca1 ' C : *>ypcat —d windows passwd testuser :hogehoge: 512 : 512 : : /home/testuser: /bin/bash —a windows passwd はサービスのプロバティで自動起動するように変更してく ださい。 SFU の NIS サーバーのインストールにより、 Active Directory に NIS マップが格納できるようになります。 たとえば、、、 Active Directory ユーザーとコンヒュータ ' という管理ツールからユーザーのプロバティを表小すると、 図 1 のように、、 UNIX 属性 " タブが追加されていることが 分かります。 図 1 のユーザー・オプジェクトと同様に、 Active Di- rectory のコンピュータ・オプジェクト、グループ・オプ ジェクトにも、、 UNIX 属性 " タブが追加されます。これら は、 NIS の passwd 、 group 、 hosts マップのエントリに 相当します。、、 Active Directory ユーザーとコンヒュー タ " 画面からはこれら 3 つの標準マップのみを操作できま す。なお、 SFU の NIS は以下の標準マップをサポートし ています。 bootparams ethers group hosts aliases netgroup netid netmasks networks passwd protocols rpc ser- Vices shadow ypservers 標準ではないマップや Active Directory にまだ存在し 112 ていないオプジェクト ( 工ントリ ) を操作する場合は、 nis- map コマンドを使います。図 2 は、 nismap コマンドで testgroup' というグループを作り、さらに、、 testuser というユーザーを作成している例です。 図 2 では、最後に ypcat コマンドで passwd マップを 表示し、追加したユーザーが NIS 上に作成されていること を確認しています。なお、 NIS の丿財票準マップを作成する 場合は nismap create コマンドを使います。 NIS サーバーの設定は、、、 Services for UNIX 管理 " ツール ( 図 3 と図 4 ) および nisadmin コマンドでおこな います。たとえば、 SFU の NIS サーバーはパスワード暗 号化形式として crypt と MD5 をサポートしていますが、 それらの変更などカ河能です。 また、 yp コマンドとしても ypcat 、 ypclear 、 ypmatch 、 yppush カ甘是供されています。 NIS サーバーは単体でも動作しますが、 UNIX の NIS サーバーから移行するための機能も用意されています。 Windows Services for UNIX の管理 " プログラム・グ ループから、、 NIS サーバーの移行 " を実行すると、移行ウ イザードが起動します。指示に従って移行元の NIS マッ UNIX MAGAZINE 2004.6

7. UNIX MAGAZINE 2004年6月号

ー② ルをみてみましよう。プログラム・フォルダ Windows 連載 /Services for UNIX を指定することもできます ( 誌面の都合上、で折り返し 、、 / u " を使わずに Windows 形式のパス す。次のように、 、、 / u " は、 POSIX 形式でパスを指定することを指示しま シェルを対話型で実行することを指示する引数です。 、、 /bin/ksh ー 1 " カそれに該当します。なお、、、一には Korn 実行イメージへのパスと引数を指定します。この例では、 POSIX. EXE の、、 / c " は、起動するアプリケーションの C : *WINDOWS*system32*posix. exe /u /c /bin/ksh ー 1 トのプロバティは次のようになっています 2 Services for UNIX" にある、、 Korn SheII" ショートカッ ています。以下同様 ) 。 2 この場合の C:*WINDOWS*system32 は、 Windows をインス イメージの形式として、サプシステムや実行の形式に合 able Executable) と呼ばれます。 PE ヘッダには実行 Windows の実行イメージのフォーマットは PE (Port- terix のコンソール・アプリケーションを実行できます。 EXE を実行しなくても、コマンド・プロンプトから ln- ただし、さきほども説明しましたが、明示的に POSIX. C:*>posix /p %sfudir%*bin*ksh /c ー 1 することができます。 、コ " を引数として次のように起動 話型で起動したければ、 への引数だけを指定します。たとえば、 Korn シェルを対 きます。この場合、、、 / c " には lnterix アプリケーション POSIX. EXE は、、、 / p " でパスだけを指定することもで C : *>ksh ー 1 う場合は、次のように、、一 1 " を引数として実行します。 わけではないので、 Korn シェルを対話型シェルとして使 ksh. bat は対話的に使用することだけを目的としている posix /u /c /bin/ksh % 1 % 2 % 3 % 4 % 5 % 6 % 7 % 8 % 9 ります。 うに POSIX. EXE で ksh が実行されるように指定してあ bat からおこなうこともできます。 ksh. bat には、次のよ Korn シェルの起動は、 %SFUDIR%*common*ksh. %sfudir%*bin*ksh ー 1 C : *WINDOWS*system32*posix. exe /c 疇 - UNIX MAGAZ 工 NE 2004.6 トールしたディレクトリです。 図 11 ls コマンドの PE ヘッダの表示列 ( 一部省略 ) C : *>dumpbin/headers %sfudir%*bin*ls OPTIONAL HEADER VALUES subsystem (Posix CUI) checksum size Of headers SIZe Of image Win32 subsystem version lmage verslon operating system version file alignment section alignment image base ( 00400000 t0 0041EFFF) 17000 base of data 1000 base of code entry point ( 00401078 ) size Of uninitialized data size Of initialized data SIZe Of COde linker verSIOn magic # (PE32) 7 0 400 1F000 0 19.90 0 .00 4 .00 200 1000 400000 1078 1400 4400 15A00 5 . 12 10B 119 %SFUDIR%*BIN*ksh を工クスプローラでダブルク いかぎり実行イメージとして認識されません。たとえば、 プローラなどからの起動では、拡張子を EXE などにしな 生成時に PE ヘッダから判別できます。しかし、工クス ず、アプリケーションが対応するサプシステムはプロセス す。実際にはコマンド・プロンプトからの起動にかぎら るように POSIX. EXE のインスタンスを自動生成しま は、 POSIX サプシステム (PSXSS. EXE) 上で動作す ンソールであるコマンド・プロンプトから起動された場合 断します。、、 POSIX CUI" 形式のものが W ⅲ 32 のコ メージの形式をもとにどのサプシステムで起動するかを判 プリケーションを直接起動した場合、 Windows は実行イ コマンド・プロンプトから lnterix のコンソール・ア メージであることが分かります。 ているので、 ls コマンドは、、 POSIX CUI " 形式の実行イ これを見ると、、、 subsystem (Posix CUI)" と書かれ で動作する ls コマンドの PE ヘッダを表示した例です。 DUMPBIN. EXE で確認できます。図 11 は、 lnterix 上 実行イメージの形式は、 Visual Studio に含まれている CUI " のいずれかカ書き込まれています。 わせて、、 Windows GUI" 、 Windows CUI" 、、 POSIX

8. UNIX MAGAZINE 2004年6月号

インターフェイスの街角 表 1 用意できる短い名前 1 文字で表現できる名前 2 文字で表現できる名前 3 文字で表現できる名前 4 文字で表現できる名前 26 * ( 10 十 26 ) 26 * ( 10 十 26 ) 2 26 * ( 10 十 26 ) 3 26 個 ('a' 936 個 ('a0' 33 , 696 個 ( ' a00 ' 1 , 213 , 056 個 ( ' a000 ' ZZZZ 停止したり、あるいはネットワークにアクセスできない場 合には使えません。さらに、永遠に短い名前カ駛える保証 もないので、どうしても間に合わせの用途にしか使えない ことになります。また、 TinyURL は URL しカ報えませ んが、ファイル名やメールのメッセージなどにも同様の手 法を適用し、あらゆるデータに短い名前でアクセスできた ほうが、もっと便利でしよう。 考えてみると、コマンドにはたいてい、、ショートカット " が用意されているのに、データについてはそういった工夫 はあまりなされていません。もちろん、 % url=http://pitecan.com/artic1es/UnixMagazine/ とシェル変数を明示的に指定すれば、 % wget $url のように短い名前をシェルで使うことは可能です。しか し、スクリプト内での利用はともかく、コマンド行でこう いった方法を実践している人はあまりみかけません。 シェルにかぎらず、いろいろなアプリケーションからフ ァイルや Web ページ、メールメッセージなどに共通の短 い名前でアクセスできれば活用する場面が増えそうです。 な桁数 まず、情報の特定にどのくらいの長さの文字列が必要か を考えてみましよう。文字列を変数名として扱いやすくす るには、文字は英数字だけとし、 1 文字目を英字にするの がよさそうです。この場合には、短い名前を表 1 の数だけ 用意できることになります。 文字列を 3 文字とすれば、毎日 10 個使ったとしても名 前空間を使いきるのに 10 年はかかります。つまり、実用 上は 3 桁で十分ということになります。自分カ報うあらゆ るデータを、わすか 3 文字で表現できるのは末深いとこ ろです 2 。万一、 3 桁で足りないようなら 4 桁にすればい 2 世界中のあらゆる情報は 13 バイトに圧縮できるという応勧防ります。 4 バイトで IP アドレスを特定し、ファイルのオフセットとサイズを 9 バイト で表現すれば 13 バイトに収まるからです。 IPv6/TB 時代には、 18 バ UNIX MAGAZINE 2004.6 イトくらいになるかもしれませんが・ いわけですから、とりあえず文字列の長さについては心配 しなくてよいでしよう。 活用する場面 短い名前は、以下のような場面で使えそうです。 ・コマンド行での利用 % wget $abc % cd $d0a ・ Wiki ページでの参照 Wiki ページで URL やメールなどを参照するとき、長い URL の代わりに短い名前で指定できます。たとえば、 A 社を訪問する予定があるときは、 A 社の URL の代わ りに短い名前を言しておけばよいでしよう。 13 : 00 CCha9 A 社 ] ] 訪問 ・ TinyURL.com と同様な使い方 TinyURL.com と同じようなサービスを自分で用意す ることもできます。 才電話からのアクセス 3 月号で、携帯電話などからサーバーにメールを送り、 各種のコマンドを実行させる、、コマンドメール " を紹介 しました。短い名前は、ファイルやメールを直接指定し て取得したりするときも便利そうです。 以上のようなアイデアにもとづき、短い名前を登録、検 索するライプラリ shortname. rb と、それを利用するため のコマンドなどを作ってみました。 データベースの構造 短い名前と長い名前を対応づけるデータベースは、いろ いろな場所に置く必要があります。 URL に関する情報は Web サーバーに置くと便利でしようし、ファイル名に関す る情報はローカルマシンに保存しておかなけれは、意味があ りません。登録やアクセス、同期を簡単におこなうために、 実装 187

9. UNIX MAGAZINE 2004年6月号

連載 /Services for UNIX $ fileinfo psxss . exe 図 9 lnterix サプシステムのファイル蒲報 psxss . exe 8 . 0 . 1969 . 1 $ fileinfo -k a11 psxss . exe psxss . exe CompanyName Microsoft Corporation Fi1eDescription lnterix Subsystem Server Fi1eVersion 8 . 0 . 1969. 1 Interna1Name psxss . exe Lega1Copyright (C) Microsoft Corporation. A11 rights reserved. Origina1Fi1ename psxss . Microsoft Windows Services fo て UNIX ProductName ProductVersion 8 . 0 . 1969. 1 図 10 POSIX. EXE と PSXRUN. EXE 旧 te 「 ix 非コンソー丿レ アプリケーション PSXRUN. EXE 旧 terix サプシステム (PSXSS) ューザーモード カーネルモード 抦 terix コンソー丿レ アプリケーション Windows カーネル です。 PSXSS. EXE はサプシステム本体、 PSXDLL. DLL は lnterix 用のアプリケーションから利用される基本インタ ーフェイスを実装した DLL です。プロセスやスレッド管 理、基本入出力処理は PSXDLL. DLL で実装されており、 lnterix アプリケーションは libpsxdll. a をリンクすること でこのなかの関数を使用できます。また、 PSXDRV.SYS は lnterix サプシステムで使用する入出力ドライバです。 これらの lnterix サプシステムのファイルの情報は、 file ー ⅲ fo ユーティリティで表示できます ( 図 9 ) 。 POSIX. EXE と PSXRUN. EXE POSIX. EXE と PSXRUN. EXE は、 lnterix アプリ ケーションを実行するための W ⅲ 32 コマンド・ユーティ リティです ( 図 10 ) 。 POSIX. EXE は、コンソールの入 出力をおこなう lnterix アプリケーションを実行するとき に使います。コンソール入出力を必要とする lnterix アプ 118 Win32 コンソー丿レ Win32 サプシステム (CSRSS) リケーションを実行する際は、コマンド・プロンプトから アプリケーションを直接起動するか、アプリケーション実 行イメージのパスを引数として POSIX. EXE を実行する 必要があります。 コマンド・プロンプトから lnterix アプリケーションを 起動した場合は、 lnterix サプシステムによって POSIX. EXE が起動されます。 POSIX. EXE はアプリケーショ ンを起動したコマンド・プロンプトのコンソールを継承し、 そのコンソールを通じてアプリケーションの入出力をおこ ないます。 POSIX. EXE を明示的に指定して起動した場合は、同 様に継承できるコンソールがあればそれを通じて入出力を おこないます。コンソールがない ( 工クスプローラなどか ら POSIX. EXE を起動した ) 場合は、新たにコンソール を生成し、 lnterix アプリケーションからの入出力と結びっ けます。 具体例として、 lnterix の標準シェルである Korn シェ UNIX MAGAZINE 2004.6

10. UNIX MAGAZINE 2004年6月号

ワークステーションのおとーー 0 図 4 device-mapper と LV 、 12 のダウンロード ( まず、 device-mapper をダウンロード ) $ cvs —d :pserver: cvs@tech. sistina. com: /data/cvs login CVS password : cvs 1 $ cvs —d :pserver: cvs@tech. sistina. com:/data/cvs checkout device—mapper ( 続けて LVM2 もダウンロード ) $ cvs —d :pserver: cvs@tech. sistina. com: /data/cvs checkout LVM2 こから、 CVS を使って device-mapper と LVM2 と いう 2 つのパッケージをダウンロードします ( 図 4 ) 。 tgz 形式でまとめたファイルも配布されていますが、 ちらはバージョンが旧いためか動きませんでした。 scripts/devmap-mknod. sh これカ繁ったら、 # make install # make . /configure # cd device-mapper のソースがあるディレクトリ 最初に device-mapper をインストールします。 互換性がなくてもよい場合の指定です ( 私は、 LVMI は使 を有効にするため、——with-lvml=none は LVMI との —enable—readline は LVM のコマンドで行編集機能 # . /configure ——enable—readline ——with—lvml=none # cd LVM2 のソースがあるディレクトリ 次に、 LVM2 用のコマンドをインストールします。 よく確認しましよう。 と Device mapper support カみ込まれていないので、 ます。これに失敗する場合は、おそらくカーネルに LVM として、デバイスファイル /dev/mapper/control を作り with maJ0r: 10 minor:63. Creating /dev/mapper/control character device UNIX MAGAZINE 2004.6 # make install # make っていなかったので指定しました ) 。 コンパイルとインストールがぶじに終ったら、設定フ ァイルのサンプル doc/example. conf を /etc/lvm/lvm. conf という名前でコピーしましよう。 cp doc/example. conf /etc/lvm/lvm. conf # mkdir /etc/lvm the cdrom drive [ "r l/dev/cdroml" ] the cdrom drive そして、以下のように編集します。 ↓ # Exc1ude # filter # Exc1ude ムを再走師力しておくほうがよいでしよう。 どを確認する意味も含めて、このあたりでいったんシステ このあと、実際の設定に移りますが、カーネルの設定な を初めて実行するときは、すこし時間がかかるようです ) 。 うなら、とりあえずは動いているはすです (pvs コマンド 能がないといったメッセージカ咄ず、ただちに終了するよ 権限で実行してみます。モジュールがない、カーネルに機 /sbin/lvs や /sbin/vgs 、 /sbin/pvs コマンドを root 確認する るための設疋です。 これは、 CD-ROM ドライプを LVM の対象から除外す filter [ "r l/dev/cdrom 卩 ] LVM2 の設定 、 LVM の構成要素について説明しましよう。 設疋の前に 構成要素 LVM には次のような構成要素があります。 151