bin - みる会図書館


検索対象: UNIX MAGAZINE 1996年2月号
28件見つかりました。

1. UNIX MAGAZINE 1996年2月号

umpc# ■ するというわけにはいきません。設定のガ去は BSD/OS の NIS とはとんど同じなので、おさらいの意味も含めて 簡単に紹介します。 NIS クライアント クライアントだけを動かせはいい場合、設定上のポイン サイトに NIS のサーバーがあり、自分のマシンでは 理者に訊いてもらうとして、 だけです。 NIS ドメイン名についてはネットワークの管 ・ /etc/host . conf の疋 ・ NIS のクライアント・デーモンの起動 ・ NIS ドメイン名の設定 トは、 の内部でイ尉寺されている domainname 変数か変更されま ットします。引数としてドメイン名を与えると、カーネル ドメイン名は、 (/bin/)domainname コマンドでセ て話を進めましよう。 こでは monkey-net とし : 特集 Pc ー tJ 9 図 1 ypbind の umpc# ypbind umpc# ypwhich lllsserv. aist—nara. ac . JP umpc# ypcat passwd monkey : 9nwXXXVRfsPKQ : 1005 : 1000 : Monkey Banana : /home/monkey: /bin/bash sarumata : X18. svM1a2Ugv : 1001 : 1000 : Super Monkey : /home/sarumata : /bin/csh saru : abC5SnHA9Yp : 1010 : 2000 : Osaruno Densha: /home/saru : /bin/csh す。引数を指定しなければ、現在の設定を表小することが できます。 umpc# domaxnname monkey— umpc# domainname monkey—net umpc# ■ net ドメイン名を設定したら、 NIS のクライアント・デーモ UNIX MAGAZINE 1996.2 ーを表示させたり、 NIS のパスワードマップやホストマ 起動に成功すると、 ypwhich コマンドで NIS サーバ りません。 ため、バックグラウンド・ジョブとして起動ける必要はあ 単純にコマンドを入力するだけでデーモンとして重川乍する ンである (/usr/sbin/)ypbind を起動します ( 図 1 ) 。 ップを表示する ypcat コマンドなどが使えるようになり ます。 ypbind が正常に動いていないときは、 ypwhich や yp- cat などを実行すると、 can ' t yp_bind : Reason : Doma1n not bound というエラーが出ます。ドメイン名が間違っていた場合、 新たに設定しなおしても、いま動いている ypbind には反 映されないため、 ps コマンドを使って ypbind のプロセ ス ID を探し、 ypb ⅲ d プロセスを kill してからもう一度 起動しなおします。 以上は動作中のマシンに対する設定でしたが、 / etc / sysconfig ファイルを変更しておけは、マシンのプート 時に自動第勺にドメイン名をセットして ypbind を起動しま す。具イ勺には、 /etc/sysconfig ファイル中の、 de f ault domainname=NO nis—c1ientf1ags="NO となっている部分を、 defaultdomainname=monkey—net nis—clientflags= のように変更するだけです。 FreeBSD では、ホスト情報の参照に以下の 3 つのカ 1 去 Notes— BIND による名前管理 ( 1 ) ~ ( 5 ) 」 ( 山口英、 1993 年 7 ~ 3 DNS の料田については、オ、お里載中の「 UNIX Communication ・ NIS の hosts マップ ・ローカノレな /etc/hosts ファイノレ ・ DNS(Domain Name System) が使えます。 11 月号 ) などカ鯵考になります。 27

2. UNIX MAGAZINE 1996年2月号

UN Ⅸへの招待⑩ ・カレントディレクトリと dir の値を表小する。 dirs では、変数 dir の値を表示します。 ます、 pushd を定義しましよう。 $ function pushd { > dir=" pwd' $dir" > echo pwd' $dir $ pwd /usr/bin $ pushd / / /usr/bin $ pushd /bin /bin / /usr/bin $ pushd $HOME /home/husband/aya /bin / /usr/bin 変数 dir には、 pwd コマンドの実行結果と変数 dir の値を代入します。こうして、ディレクトリ・スタック に、カレントディレクトリとそれ以前のディレクトリを 溜めていきます。次の、 で、関数 pushd の引数を置き換えます。 たとえは、 pushd / という引数であれば、 cd / コマンドは、 と実行されます。最後に、 echo で pwd の実行結果と dir の値を表示して終了します。 dirs は、カレントディレクトリと変数 dir の値を工 コーバックするだけです。 158 $ function popd { p 叩 d は、次のように定義します。 /home/husband/aya /bin / /usr/bin $ dirs > ech0 pwd' $dir $ function dirs { set $dir cd $ 1 shift > echo pwd' $dir $ popd set $dir 最初のコマンド、 /usr/bin $ popd / /usr/bin $ popd /bin / /usr/bin て表示できます。 functions は、次の形式で使います。 いったん定義した関数は、 functions コマンドを使っ 関数の一覧表示と削除 興未のある方は、考えてみてください。 たときの処理は、どのように定義すればよいでしようか ? と、おかしなことか起きます。さて、スタックカ啌になっ ため、スタックカ啌になってから popd を実行し続ける のイ間か空になったときの処理を定義していません。この この p 叩 d では、ディレクトリ・スタック ( 変数 dir からなくなります。 の行です。以日こより、直前のディレクトリが di ての値 数 dir に再設定しているのが、 っシフトしています。そのあとの位置パラメータの値を変 そして、 shift コマンドを用い、位置パラメータの値を 1 きす、唯一それが可能なのが位置パラメータだからです。 は変数の値をシフトする ( 1 っすっ捨てていく ) ことはで なぜなら、 (C シェルでは可能ですか ) Korn シェルで は、変数 dir の値を位置パラメータに代入しています。 斉みの関数すべてか表示されます。 関数名には関数の名前を指定しますが、省略すると定 functions [ 関数名 ] UNIX MAGAZINE 1996.2

3. UNIX MAGAZINE 1996年2月号

IJN Ⅸへの招待 Korn シェル ( その 3 ) 坂本一文 1995 年 11 月号で、私の留守中にかかってきた電話に する ()s 、 date 、ⅵ、 mail などの ) UNIX コマンドは、 コマンド名と同し名前の実行可能ファイルとしてディレ 祐介か応対した話を紹介しました。祐介は主人の母からだ クトリに置かれています。ーヨ殳的には、 /usr/bin 、 というのですが、母によるとそんな慮えはないそうです。 ( カレントディレクトリ ) などのディレクトリです。バー いったい、本当は誰からの電話だったのでしようか・ クレイ系の UNIX では、 /usr/ucb もこれに加わるなど、 友人、知人に「電話しなかった ? 」と訊いてみましたが、 システムによって上言己丿汐 ) ディレクトリにコマンドを置 該当者はみつかりませんでした。掃除機をかけていたり、 いていることもあります。 べランダで崔物を干していたりすると、電話の呼出音に これらのディレクトリは、 Korn シェルではシェル変 気がつかないことがあります。そんなとき、祐介か黽話ロ 数 PATH の値として代入されています 1 。ューサーがコマ に出て「ママはお昼寝中」とか「ママはご飯食べていて忙 ンドを入力すると、シェルは、 PATH の値のディレクト しいから、またあとでね」などと言っては受話器を置いて リから、、コマンド名と同し名前て実行可能 " なファイルを いたらしいのです。 探し、検出されるとそれを実行します 2 。たとえば、 PATH 知人によれば、子どもにとって電話はたいへん魅力的な の値が次のようになっているとします。 ものだそうで、幼いなりに大人との受け応えができるのを 自慢に思う日月もあるようです。けっきよく、あの電話 $ echo $PATH 事件も想像力豊かな ( ? ) 祐介の頭のなかの出来事だった /usr/bin : のかもしれません・・ 、、 " ( コロン ) は、値と値の区切り文字です。したがって、 コマンド実行の仕組み この PATH には /usr/bin と、、 . " の 2 つの値が代入され ています。ここでユーサーが、 前回は、 Korn シェルを利用する竟成疋の話として、 ・ディレクトリの変史を簡単におこなう $ ls プロンプトを変更する と入力したとしましよう。シェルは、 PATH のう頁の値で の 2 つをとりあげました。今月も、引き続き竟設定に ある /usr/bin を調べ、 ls という名前の実行可能ファイ ついて説明します。シェルへの、、コマンド入力 " にかかわ ルを探します。そオゞみつかれば /usr/bin/ls を実行し、 る、いくつかの項目について勉強しましよう。 1 PATH には、一イ勺なディレクトリ (/usr/bin 、 「など ) カ中測イ直と 前提知識として、 UNIX でのコマンド実行の仕組みを して代入されています。こ刎直は、そのシステムの竟 ( つまりどのディ 簡単に説明しましよう ( これは、過去の連載およひ黜著 レクトリにコマンドカ疆いてあるか ) に応して、ユーサーが . profile な どで PATH 直を言するための記をおこない、適切直に定しなお 『続・たのしい UNIX 』でも触れています。すでに知識 します。 のある人は本節を読み飛ばしてください ) 。皆さんが使用 こで、そのコマンドを子する新たなプロセスがおします。 2 UNIX MAGAZINE 1996.2 155

4. UNIX MAGAZINE 1996年2月号

/usr/bin/install —c /bin/kterm umpc# make install Checksums OK . = > lnstalling for kterm—6.1.0 —s —m 4755 kterm /usr/bin/install —c -m 0444 KTerm. ad /usr/X11R6 /1ib/X11/app—defau1ts/KTerm insta11 in . done rm —f /usr/X11R6/man/man1/kterm.1 * /usr/bin/install —c —m 0444 kterm. man R6 /man/man 1 /kt erm. 1 gzip —9n /usr/X11R6/man/man1/kterm.1 install . man . done /usr/X11R6 /usr/X11 = = = > Registering installation for kterm-6.1.0 umpc# ロ ヾイナリ・パッケージと同様、 pkg-delete を使ってイ ンストールしたファイルを削除することもできます。 しかし、これではバイナリ・パッケージをインストー ルするのと変わりがないですね。設疋を変えたいのですか ら、いっきにコンパイルされては困ります。 パッチキットでは、 make の引数によって特定の竹喋 だけをおこなわせることができます。 ・ make ext ract パッチキットのディレクトリに work というイ 1 ミ業ディ FreeBSD でコンノ、イルするた レクトリを作成し、そこにオリジナルのアーカイプを展 ・ rnake configure めのパッチを当てる。 展開したアーカイプに、 ・ make patch 開する。 42 ね。最初に、、 make extract" と、 make patch" をおこな こまでくれば、どうすればいいのかお分かりですよ クトリにインストールする。 コンパイルしたファイルやマニュアルを所定のディレ ・ make install 竹喋ディレクトリでコンパイルイ↑業をおこなう。 ・ make build イルするための下準備をおこなう。 トウェアに対して configure を実行するなど、コンパ を実行したり、 GNU の autoconf を使っているソフ imake を使うソフトウェアに対して xmkmf コマンド い、オリジナルのアーカイプを展開して FreeBSD 用の パッチを当てます。この段階で竹業ディレクトリに移り、 サイトや自分の環境に合わせて設定の変更を施してから、 元のディレクトリに移って、、 make configure" 以降をお こなえばいいのです。 パッチキットには FreeBSD でコンパイルするための パッチか刊属しているため、自力で試行錯誤しながらソー スファイルを修正するのにくらべれば、はるかに楽です。 パッチキットやオリジナルのアーカイプも FreeBSD の CD-ROM に含まれているので、 FreeBSD を本↑勺に使 うならせひ手に入れておきましよう。 なお、 pkg-info コマンドを使うと、現在インストール されているパッケージの一覧や、特定のパッケージに対す る説明を見ることができます。 pkg-add や pkg-delete 、 pkgänfo の詳しい使い方については、それぞれのオンラ イン・マニュアルをご覧ください。 「設定は BSD / OS なんかとよう似たもんやし、フリー ソフトウェアのインストールは簡単やし、けっこう楽に使 えそうや。でも、 sarumata さんにあんなもん見せられた ら、イマイチやる気力起こらんなあ」 何を隠そう、私たちもデスクトップ PC に Windows 95 を入れて使って ( 遊んで ? ) います。使っているから、 というわけでもないですが、次回は FreeBSD の話題に加 え、 DOS(Windows) と FreeBSD などの OS を 1 つの マシンて共存させる去などについて紹介する予定です。 ( おかやま・きよひこ、かたやま・よしあき 奈良科哮才支術大凝完た学 ) UNIX MAGAZINE 1996.2

5. UNIX MAGAZINE 1996年2月号

変数 PAT Ⅱの設定 最初に、変数 PATH の設定去から説明します。前述 したように、シェルは PATH の値のディレクトリからコ マンドを探します。通常、コマンドは、いくつかのディ レクトリに分散されています。 PATH の値には、それらの ディレクトリのうち自分に必要なものだけを代入します。 変数に複数の値を代入するには、 ( コロン ) を使っ て値と値を区切ります。 $ PATH=/usr/bin : /usr/local/bin: この例では、 /usr/bin 、 /usr/local/bin 、 を代入しました。 . ' の 3 つ 変数 PATH の設定においてコロンを 2 つ連続して使用 すると、カレントディレクトリとして解釈されることに なっています 5 。シェルは、変数 PATH に代入されてい る値のうち、先頭から順にコマンドを検索します。した がって、よく使うコマンドのディレクトリを麪頁のはう に、あまり使わないものは末尾のほうに入れておくとよ いでしよう。 ところで、いったん設疋した PATH の値は、ログアウ トすると無効になってしまいます。いつでもコマンド検 索の順番 (PATH の値 ) を同じにしておくには、 PATH の 疋を・ p て。 file に言当しておきましよう。 関数 function コマンドは、次の形式で使います。 ル・プログラムをより美しく記できます。 マンド並びの定義に向いています。関数を用いると、シェ 上如勺簡単なコマンド並びの定義に、関数はやや複雑なコ プログラムよりも迅速に軽く実行されます。ェイリアスは イリアスの定義の中間に位置するようなもので、シェル・ 数 " を定義できます 6 。関数は、シェル・プログラムと工 Korn シェルでは、 function コマンドを用いて、、関 UNIX MAGAZINE 1996.2 あります。 6 function コマンドはありませんが、 Bourne シェルにも同様な i 功ゞ 5 :. : と設定するのと同してす。 コマンド function 関数名 { UN Ⅸへの招待⑩ 関数名には、予約語を除きどのような名前を使っても かまいません。ただし、通常の (PATH の値のディレクト リに置かれている ) コマンドよりも関数が優先して実行さ れるので、通常のコマンド名と同じ関数名を定義すると、 関数のほうか実行されることになります。 次の例では、 CD という名前の関数を定義しています。 > は、 K 。 rn シェルからの 2 次プロンプトです。 $ function CD { > pwd コマンド $@は、関数 CD への引数を置き換える働きをもってい ます 7 。たとえば、 CD を次のように使うと、 $ CD / cd コマンドの引数は、 CD の引数として指定した / に 置き換えられます。 すこし複雑な例として、 pushd 、 popd 、 dirs という 3 つの関数を定義してみましよう。これらは、 C シェルで のディレクトリ変更コマンド pushd 、 popd 、 dirs を真 似て作ります。 pushd には、次の機能をもたせることに しましよう。 ・ディレクトリ・スタック ( 変数 dir 刎間にディレク トリ名 ( パス名 ) を代入する。 ・引数て指定されたディレクトリに移重丿ける。 ・カレントディレクトリとディレクトリ・スタックの値 を表示する。 popd では、 pushd で移動したディレクトリの車丿亦を 遡っていきます。機能は、次のようにしましよう。 ・変数 dir の最初の値のディレクトリに移動ける。 ・その値を dir から削除する。 7 寉には、、、位置パラメータ " と呼び、 Korn シェル一辺 ) 引数をそれぞ れ空白て区切って置き換える働きをもった変数です。言岩田は、稿をあら ためて説明する予定です。 157

6. UNIX MAGAZINE 1996年2月号

図 5 sysinstall の衫虞目醯 lcorne tO FreeBöU ! This is 廿旧 main 価日 1 」 Of せ旧 installation system. Please of せ options 一 bY using 「 keys tYPing 廿旧 first cl- 日 - Of せぉ士 ion 「旧 you're interested in. lnvoke 8ti01 by pressing [ENTER] . sage t i に OVlCe xpress i X i 土 grade nfigtre 図 7 インストールするソフトウェアの画面 はわ 05e 田 st 「 i し」 t にれ 5 a conv ⅱ℃ e , 冊 provi v 引” c 「 d ” distrib 」 ticn sets. These s 引士日 t c ⅱ - 士 0 せに ms 土「 e 尾 f け s for 廿ぉ も旧 Of system in 0 ぉ計 icn. If yo 」 would prefer tO pick イ記 chcose 士 list of distributions ya ェ s 引 f. sirrply s 引士 "Custom" FuIl 31rces, bir•ies and ー : 士 garres [ 1 ] ev 引味 - ー v 引 - S ィ±ove, but includes 「 [ 201 ] ー ~ 00 Full bina - ie 、 md 鹵 0 , k 0 、 0 , ーツ [ 78 ーとオ同 慨れ e detaileci dccunentation F 「 e 士 0 options i 士 Begin a novice installation げ b i 「「日一 s ) Begin a q 」 ick installation げ廿 invatient) Begin a cus 士 installation (fcr excerts) ーェ代 fixit floppy md go into 「印 ai 「 0 地 しわ g 「 a お exis±ing 2.0.5 system gos±-install cmfigu-ation 0f F 「 e Exit this 価 ()d 仕 installatim) Lo a pre 一 0 倉 gu- ion file 化 OY Pr435 FI 「リ 3 ? げ匚 erything S 引肥ä»ve, 士 i 「■は 5 「æ 2 T ト smallest configu-ation gossible 44 肥 白Ⅱ立れ s hinæies ダ r を 86 bira-ies [ 70J ] Reset s 引 t dist 「 i 反」弋 ic れ list to 「浦 図 6 カスタム・インストール醯 Ühoose custm installaticn しわ This is 廿 04 士 installaticn ー旧・第」 . Ya 」「の・ use 物 is 『翹 to 斗 : i 「 y details 廿ぉ t 算旧 of distribution you wish to have, 「 e ya 」 wish tO i 「 6 弋 a Ⅱ it f 「 md ト wish 加 allæate disk s セ「 e 士 0 F 「 ー ect せに 0 t 「 i 」 t i YO 」ⅲ tO lnstal に 円 check 0 仟せ distributions ya 」 wish 士 0 install. 紕弋 very mininun, this 計 0 』 d ” bin ” . : 「 0 士 ex に 0 せ CES distribution wt of せぉ IJ. S. ! lt is for U. S. 0 ぉ ton 旧 - s 侊Ⅱ y. Bi 「•y base distrib 」 tion ( 「今ぉ i 「」 ) ー ] ial C cia い地廳 ) s md s ト日 - «e [ 10 Pr ・、 FI frq- 匯行げ「卩旧十 i ・ - 物十ト十れ 5 図 8 パッケージの尺 士 i 5 tO Cöt i 6 i 士 Allæate disk 印 for L 引引に -:a d 印寸部士 i 士ぉ Chcose せぉ installation medla t 算総 P 、 f ( 0 my に・ di PTtiticn/L±el/Ex±ract actions 士 distributicn extract 印 Exit this 『ま」 (retu-ning 士 0 crevic•us) istributicns edia Press FI tc, ±he ins ナョい atic れ 2uide FreeBSD でのカーネルの再構築は、以前紹介した BSD/OS の場合とよく似ています。ただし、これをおこ なうには /sys ( 実体は /usr/src/sys) 以下にあるソー スファイルが必要です。「しもた、インストールするのに、 カーネルのソースまて沒仂ゞまわらんかった」という方のた めに、ますはソースファイルの入手ガ去から紹介します。 ソースファイルの入手 カーネルのソースファイルにかぎらす、 FreeBSD のイ ンストール後にパッケージを追加インストールしたいとき は、 (/stand/)sysinstall コマンドを用います。これは FreeBSD のインストール・プログラムと同しものなので、 追加インストールのほか、前回紹介したような設定竹ミ業が おこなえます。 sysinstall を起動すると、図 5 のような画面に切り替 わります。図はモノクロですが、コンソールで実行すれば インストール時のようにカラフルな画面となります。操作 方法はインストールのときとまったく同しです。ここか ら custom を選んでカスタム・インストールに入り ( 図 6 ) 、 Distribution を選んでソフトウェアの〕尺に進み ます ( 図 7 ) 。 インストールのときは利用形態に応したソフトウェアの 一群をカテゴリーとして〕尺していましたが、カーネルの ソフトウェアだけが必要な場合はソフトウェアのパッケー ジを個別に尺します。図 7 で custom を選ぶとパッケー 34 i ct 0 oflibs F 「 e 2.0 bira-y convatibility pack e CES ℃時 pti 侊 , ccde ー N)T FCR E 溿 1 1 同 引ⅱ checker dictionTY files [ 4. コ ] System 価ィ′ー pages ー「材 d [ 33 倒 PrrÆiled 、 r 、 ( れ of 士Ⅱ第 5 お ] The 「 3. 1 . 2 ー S distribution i 価代引 W«k in progress! Seiect せにゝ上.com/『旧nts Of s 「℃ ycu 」 WlSh to lnstall . 円 ease ch を戓 off 廿 0 「土 ior を of 廿ぉ Free&i0 s 供「 tree you wish 士 0 ins 士引に 図 9 ソースファイルのさらに細かい i 尺醯 se r い発 lease YS b i n sbin top—level files in . な国ソ s 「 c [ 30 米 ] ん sr / src / ′」 softwa-e f 「廿旧」 Project) [ 4 旧 ] /usr/src/etc rn i sce Ⅱ」 s system f Ⅱ (s) [ 46 ] ん sr/src/games (diversions) [ 7. 旧 ] / 00 ソ , 0 / i 。。い . (header f ⅱ 03 E46 製 = . ん sr/src/libexec (system 「 5 ) [ 1.2 ] ん , / , 。 / 。引。 0 = 0 ( 。引 00 = 0 ー gel , - 。士 i 士に費 { 53 ] /usr/src/bin (system bina-ies) [ 2 旧 ] /usr/src/sbin (system binaries) [1. 旧 ] / リ sr/src/share 土 0 」 n shared fi les) [ 10 ] usr src/usr. bin (use 「 binaries) 13 ん sr/src/usr.sbin はム system binaries [ 14 ] ジ窈尺画面 ( 図 8 ) に変わるので、ここで src を選びま す ( カーソルを合わせてスペースキーを押す ) 。 src パッケージの説明を見ると、、、 DES を除くソース ファイル全部 " とあって、サイズは 120MB もあります。 ちょっとドキドキしますが、リターンキーを叩くと、図 9 のようにさらに細かく選べます。カーネルのソースだけが 必ならば、 sys という項目を j 尺します。 ソフトウェアの選択が終ると、図 6 の画面に戻りま す。あとはインストールするメディアを選び (Media) 、 Extract お尺すれは、指定したメディアからソフトウェ アがインストールされます。メディアの j 尺は前回紹介し たガ去と同じですが、 FTP や NFS などのネットワーク・ インストールを選んだ場合、 Ether カードのセットアップ は不要です。 UNIX MAGAZINE 1996.2 トール画面のダンプを取る去を模索しているときにみつ しつは、 sysinstall はこの記事を書くにあたり、インス

7. UNIX MAGAZINE 1996年2月号

連載 /PERL ADVISOR ー① pr int $max ; $max = $F [ 2 ] if $max く $F [ 2 ] ; @F = split / : / ; chop ; 関数 open() は、読込みのためにオープンした /etc/ open (PASSWD , "ypcat passwd い ) ; # ! /usr/bin/perl 修正すればよい。 NIS を使っている場合は、次のようにほんの数文字を passwd を指すファイルハンドルを作る。 96 外する必要がある。 $F [ 2 ] が閾値 ( たとえは 30000 ) を そこで、最刻直の計算から一定の閾値を超えるものを除 は nobody というューサー ID があるにちがいない。 のような結果がたて続けに出力されたら、そのシステムに 号をもつ nobody と呼はれるユーザー ID がある。 65535 OS のような ) システムには、極端に大きなユーサー ID 番 実行してみれば分かるが、 ( 私がテストに使った sun- 正しい番号をみつけることかできる。 適切なコマンドに引数として渡せば、正しい番号か、ほば ( バッククオート ) て括り、 たら、このスクリプトを、、 トリに置けばいい。新しいユーサー ID 番号が必要になっ ビットを立てて、コマンド検索パスに含まれるディレク このスクリプトをファイルに保存し、ファイルの実行 print $max + 1 ; $max = $F [ 2 ] if $max く $F [ 2 ] ; @F = spl it / : / ; chop ; while ( く PASSWD>) { open(PASSWD , "/etc/passwd" ) ; # ! /usr/bin/perl る。そこで、 print 文をループの外に移動させる。 しいのは、表示された最後の番号より 1 つ大きい番号であ ューサー ID 番号を連続して出力する。しかし、本当にほ これらのプログラムは、それまでにみつかった最大の きに用いたパイプを連想させる。 分かる。これは、このプログラムのコマンド行版を書くと コマンドからの出力であることは、そのあとに続く、、にで イルであるかのように扱ってくれる。ファイル名ではなく 都合のいいことに、 perl はコマンドからの出力をファ 超えたら、 $max に代入しないようにしなけれはならない。 したがって、 if 文はもうすこし複雑になる。 # ! /usr/bin/perl open (PASSWD , "/etc/passwd" ) ; while ( く PASSWD>) { chop ; @F = split / : / ; $max = $F [ 2 ] if $F [ 2 ] く 30000 and $max く $F [ 2 ] ; print $max + 1 ; こまでくるのにだいぶ手間どったが、できたコードは わすか 10 行に収まっている。長くなってもいいのなら、 コマンド行から実行する形式に戻すこともできる。 perl -aF: -lne '$m = $F[2] if $F[2] く 30000 and $m く $F[2] ; END { print $m + 1 } ' /etc/passwd このコードの気ガ利いている点は、上のスクリプトでお こなっているループとそれか終了したあとの処理を、一Ⅱ スイッチと END 文でうまく実行しているところだ。 PerI についての情報の入手先 USENET のニュースグループ comp. lang. perl には、 Larry Wall ( と私 ) を含む PerI のべテランたちが頻繁に 参加している (FAQ も定期的に投稿されているので参考 にするといい ) 。 USENET に簡単にアクセスできない人 は、 perl-users-request@virginia.edu に電子メールを 送り、メーリングリストへの参加を申し込もう。 17 年以止にわたってコンピュータ・サイエンスにかかわり、全米各地で、 UNIX のコンサルティングや Perl に関する砂幵をおこなっている。著書 に fLearning PerlJ ( 邦訳 : 藤嘉雪・訳「ネノ ) ての perIJ ソフレヾン ク ) 、 CProgramming perlJ (Larry wall との共著。邦訳 : 丘藤嘉 雪訳 rperl プログラミンみソフトバンク ) がある。 perl や UNIX に関 する質間やコメントは、 http://www.teleport ・ com/-merlyn/で受 け付けている。 「 SimpIe Perl Basics 」 UNIX REVIEW 1995 年 3 月号より ◎ 1995 , UNIX REVIEW (). S. A. ) ■ Randal L. Schwartz UNIX MAGAZINE 1996.2

8. UNIX MAGAZINE 1996年2月号

連載 /PERL ADVISOR—① コマンド行から起動する例と同等の働きをする Perl ス クリプトは、次のように書ける。 while ( く > ) { # ー p スイッチから # ! /usr/bin/perl # ー 1 スイッチから コマンド行ではわすか数文字だったもの # ー p スイッチから = $F[O]; # ー e スイッチへの引数 # ー 1 スイッチから chop ; @F = split; # ー a スイッチから print ; ご覧のように UNIX MAGAZINE 1996.2 を標準出力に出力する。 perl コマンドは、これをローカル ypcat コマンドは、パスワード・ファイルに似た内容 ypcat passwd ー perl -aF : ¯lne 'print $F [ 0 ] ' り出さなければならない。 ド・ファイルではなく NIS のデータベースから情報を取 なら、意味のある結果を得るためには、おそらくパスワー Service). と名前が変わったのだった ) を利用しているの もし YP ( そうそう、 NIS (Network lnformation らだ。 分割しないのならフィールドを区切っても意味がないか イッチか論理的に里している一一つまり、テキスト行を を -F の直前に移したのは、 ( 私にとっては ) これらのス る。ー F スイッチで、区切りをコロンに言殳定している。 -a こうすれは、標準出力にユーザー名の一覧が表示され perl -aF : ¯lne ' print $F [ 0 ] ' /etc/passwd 用だ。 PerI に異なる区切り文字を与えればいい。 異なり、、 " ( コロン ) で区切られている。だが、心配は無 パスワード・ファイルの各カラムは、 who の出力とは めにパスワード・ファイルを角斤しよう。 本来のイ乍業に戻って、最大のユーサー ID をみつけるた する。 しになるので、 print 演算子は末尾に改行を追加して出力 で、ネ川月値 . は \n である。これで出力と入力の区切りか 1 司 これは AWK の RS 変数と同様な入力レコードの区切り 上のスクリプトでは、この変数に値 $ / を設定している。 定したとおりに処理される。 である。この変数の初期値は空なので、 print 演算子は指 する。これは、 AWK の ORS 変数とはは 1 司じようなもの 変数 $ \ には、 print の実行時に付け加える文字を指定 か数行のコードになっている。 の /etc/passwd であるかのように次々と処理していく。 しかし、この出力から得られるのはユーサー ID ではなく ューザー名である。ューサー ID は 3 番目のカラムにあ り、 $F[2] のなかに↑内されている併区しになるが、 0 から数え始めるので 1 っすれる ) 。だが、これも次のよう ラムから直接 /etc/passwd ファイルをオープンしてみ プトに渡さなければならないのは面倒だ。そこで、プログ 完成に近づいてはきたが、 /etc/passwd をこのスクリ print $max ; $max = $F[2] if $max く $F [ 2 ] ; @F = split / : / ; chop ; while ( ◇ ) { # ! /usr/bin/perl るスクリプトに翻訳しよう。 このコマンド行はちょっと長すぎるので、同等に機能す 左から右ではなく、右から左ロ充れていく。 結果が真なら代入力躾行される。 こでは Perl の論理は である。これは各ループか繰り返されるたびに評価さ $max く $F [ 2 ] この場合の、、条件 " とは、 条件が真であれは、 $F[2] の値は $max に代入される。 print $max ' /etc/passwd perl -aF: -lne '$max = $FC2] if $max く $F[2] ; 面の都合 E 、て行を折り返しています。以下同椥 り大きけれは、 $max にそのユーザー ID を代入する ( 誌 を上交していけばいい。そして、ユーザー ID が $max よ われる。したがって、それぞれのユーサー ID と $max と $max は未定義で、ほかの霆ネと上は交すると 0 のように扱 ない。そこで、 $max というスカラー変数を使う。最初、 をみつけて、それより 1 つ大きな値を表示しなければなら こまでで、番号の一覧は得られた。次は、最大の番号 ypcat passwd ー perl ¯aF : -lne ' print $F [ 2 ] ' にわすかな修正を加えるだけですむ。 while ( く PASSWD>) { open(PASSWD , "/etc/passvd") ; # ! /usr/bin/perl 95

9. UNIX MAGAZINE 1996年2月号

の DGRAM 型のソケットでは、クライアントのソケッ トに関しても bind システムコールを用いて名前を付け ていました。これは、サーバーが情報を返すためにクラ イアント側のソケットの名前が必要だったからです。 しつは、 STREAM 型のソケットにおいてもクライ アント側で b ⅲ d システムコールを使って名前を付けら れます。この場合、プログラムを動かすマシンのもって いる任意の IP アドレスを指定できます。もちろん、自 分を示す 127.0.0.1 も指定できます。サーバーの場合に は複数のアドレスをもっている状況も考慮して、任意の アドレスを示す工 NADDR-ANY を指定する必要がありま すが、クライアントではこのような考慮は不要です。た だし、自分自身のもつアドレス以外はもちろん指定でき ません。アドレスとして INADDR_ANY も指定できます。 この場合は、システムが解釈して適当なアドレスか指定 されたものとして扱われます。 INET ドメインのソケットに名前を付ける際には、も ちろんポート番号も指定しなけれはなりません。 注意してはしいのは、 1 つのマシンで同しポート番号を もつソケットを複数作成できないことです。前回の例の ように、サーバーと同じマシンでクライアントを動かす ときは、サーバーに用いたポート番号と同し番号をクラ イアントに使うことはできません。サーバーとクライア ントとで同じポート番号を指定すると、あとから起動し たプログラム ( 通常はクライアント ) では、 bind : Address already in use というメッセージが出力され、ソケットに名前が付けら れなくなってしまいます。 ーとクライアントを別々のマシンで動かす際に サー も注意が必要です。なぜなら、あるマシンでクライアン トを複数起動する可能生があるためです。プログラム中 でポート番号を明示的に指定してソケットに名前を付け てしまうと、そのプログラムではつねに同しポート番号 を用いようとします。プログラムか起動されていると、 すでにそのポート番号は使われていますから、あとから もう 1 つ起動してもソケットは利用できません。 これらの理由から、通常は STREAM 型のソケット の名前付けについては bind システムコールは使いませ ん。ソケットに名前を付けないと、 connect システム コールを実行した時点でカーネルが適当な名前を付けて くれます。この機能を利用すれは、複数のクライアント を同一のマシンで重川乍させてもとくに問題となることは UNIX MAGAZINE 1996.2 IJN Ⅸ流プログラミング 64 ありません。 ちなみに、 bind システムコールを実行するときにポ ート番号に 0 を指定すると、カーネルが適当なポート番 号を選んでくれます。 IP アドレスとして INADDR-ANY を、ポート番号として 0 を指定して bind システムコー ルを呼び出すと、 connect システムコールを実行する前 にソケット名を付けることができます。 ポート番号の選び方 サーバーのポート番号の話に戻りましよう。前回の例 題では、サーバーが使用するポート番号とクライアント カ甘旨定するポート番号を同しものにするために、勝手に ポート番号を決めてしまいました。ほんとうにこれでよ いのでしようか。 ポート番号も限られた資源なので、プログラムを作成 するたびに割り当てるわけにはいきません。そこで、プ ログラムを開発している段階では、前回の伊題のように 適当な番号を選んで割り当ててしまうことがよくありま す。しかし、いくら適当に選ぶといっても、すでに利用 されているポート番号は使えません。もちろん、 bind シ ステムコールを呼び出すときにポート番号を 0 として指 定すれは、カーネルがはかのソケットのポート番号と競 合しない適当な番号を選んでくれます。しかし、この番 号はサーバーを起動するたびに変化するので、この値を そのまま用いることはできません。 適当なポート番号を選ぶ際には、ほかのプログラム がそのポート番号を使っていないことがもっとも重要 です。これを調べるには、 netstat コマンドが使えま とします。 netstat —a —n —f inet めには、 用中のポート番号の一覧を知ることができます。そのた 情報を出力するためのものです。 netstat では、現在使 す。このコマンドは、ネットワークに関するさまざまな 149 示しようとします。今回はポート番号を得ることが目的 のオプションを指定しないと、できるかぎり文字列で表 レスやポート番号を数値で出力するためのものです。 も出力します。 -n オプションは、ネットワーク・アド か接続を待っている状態のソケットなどについての情報 覧を表示しますが、一 a オプションを付けると、サーバー netstat コマンドは、現在アクテイプなソケットの一

10. UNIX MAGAZINE 1996年2月号

Sun/H 懃 ワークステーション用 拡グモリー ・ SPARC station 5 •SPARC station ELC•IPX 16MB •SPARC station SLC ・ ELC 4M 日 ・ 3 / 60 ・ 3 / 80 ・ SPA 日 C station 1 4M 日 BSPARC serve 「 600MP 64 、 256M 日 •SPARC CENTER 32 ー 256MB BSPARC station 330 ・ 370 ・ 390 82MB •SPARC station 2 ・ 1 ・ 1 十ヨ PC 16MB EPARC station 10 ・ 20 16 、 64MB ・ SPARC classic ・ LX 8 、 32MB 8 、 32MB ・ 4 / 470 ・ 4 / 490 32 、 128MB ■ 4 / 110 16MB ・ 3 / 50 4 、 8MB APOLLO COMPUTER (HP) ■ DN3010A ・ 3500 ・ 3550 ・ 4000 ・ 4500 4 、 8M 日 ■ DN5500 16M 日 ■ HP9000 / 7XX ・ 8XX ・ 9XX ■ HP9000 / 4XX ・ 3XX 4 、 8 、 16 、 32M 日 MACINTOSH ・ NeXT •MAC ・ POWE 日 BOOK ・ QIJADRA •NeXTcube ・ station NEWS •NEWS 721 ・ 1400 ・ 1500 4MB •NEWS 1600 ・ 1700 ・ 3460 4M 日 •NEWS 3260 ・ 3470 16MB SPARC トータルサプライ フルコンバチ / 低価格 / 高信頼 / SSIO / 20 CPIJ モジュールアップグレード Hype 「 SPARC/Supe 「 SPARC SSI , 1 十 , 2 マサーホードアップグレード SS5 / 85 , SS5 / 1 10 同等性能 SPARC station 完全互換機 SPARC CPU アップグレード ノトドティスク及び周辺機器 •SUN/SPARC station 対応ー GB— •MACINTOSH 対応日 ~ ・ SONY/NEWS 対応ー GB— ■ HP9000 / 400 ・ 700 対応ー GB— ◎光磁気 8 側 , DAT バックアップシステム ※記載されている会社名または製品名は、各社の商標または登録商標です - ※アフターケアには万全を期しております : ・お気軽にお問い合せ下さい。 信頼と実績の電子機器商社 Est.1 955 商式 〒 103 東京都中央区日本橋 3 ー 13 ーⅢ油脂工業会館 ) 営業第 2 部担当 / 須賀 TEL ( 03 ) 3274 ー 2433 FAX ( 03 ) 327 ト 8023 資料請求 No. 00C 126 をファイル名の最後に付け加えるだけですが、 DOS で は、、 . fra " の拡張子に変更します。 DOS で使う場合は、図 1 ー d を # でコメントアウトし、逆に 1- e の知直の # を外し てください。 ( 6 ) ハ 2 ・ 09 モード諚 I*TEX 2.09 モードでの重川乍をデフォルトにしたい場合 は、図 l-f の変数に、、 1 " を指定します。 コマンドとマニュアルのインストール ps2frag コマンドをユーサーが使用可能なディレクトリ に、マニュアルページをユーサーが参照可能なディレクト リにインストールします。 % cp ps2frag /usr/local/bin % chmod 755 /usr/10ca1/bin/ps2frag % cp ps2frag.1 /usr/local/man/man 1 使用方法 psfrag には、 2.09 互換モードがあります。た だし、このモードでは EPS ファイルの処理形態や指定の デフォルト値などが異なるのて注意しましよう。 ps2frag コマンドの使用方法 ps2frag コマンドは、引数に EPS ファイル名を指定し て実行します ( 複数のファイル名も指定できます ) 。 % ps2frag example ・ eps ps2frag コマンドは、 GS を使って文字列に関する 情報を抽出します。そして、それを %PSfragBegin と %PSfragEnd の 2 つのコメント行て悃み、 PS のコメント 形式でファイルの麪頁部分に書き込みます ( 図 2 ) 。したが って、 EPS ファイルを更新したら、そのつど ps2frag コ マンドを実行してください。この処理を忘れないように Makefile を利用してもいいでしよう。 ps2frag コマンドでは、次の引数カ甘旨定できます。 -f : すでに ps2frag て処理されたファイルを強制的に再 処理します。 ー 209 : IATEX 2.09 互換モードで動作します。このモード では、 psfrag の処理に必要な情報が別のファイルに書 き出されます。 -2e :IMVfX2E モードで新川乍します。このモードでは、 ps- UNIX MAGAZINE 1996.2