へんになります。環境変数は、いったん設定すれば以降は すっとその値が用いられ、同じオプションを何度も指定す る必要がなくなります。 環境変数は名前が示すとおり、コマンドが実行されると きにその環境として存在する変数です。有名なものとして は、 USER 、 HOME 、 PATH 、 SHELL 、 TERM など が挙げられます。 USER は使用しているユーサーを示し、 HOME はそのユーサーのホームディレクトリを指してい ます。ューサーのホームディレクトリなどがプログラムの なかで必要になった場合には、これらの値を使うことがで きるわけです。 環境変数によるカスタマイズは数多くのコマンドで使用 されています。たとえはⅵ工デイタは、環境変数 EXINIT の値をみてコマンドの動作を変えます。またプリンタへ出 力するための lpr コマンドやプリンタのキューを見るため の lpq コマンドは、環境変数 PRINTER の値をデフォル トのプリンタとして扱います。このほかたくさんのコマン ドが、エデイタを指定する EDITOR 、ページャを指定する PAGER などを使用しています。 環境変数を使う 普通に UNIX を使っているとき、環境変数をどのよう に扱うのかをます説明しましよう。これまでシェルプログ ラムについては、 B シェル、 C シェルの順番で話してきま した。でも実際にインタラクテイプに使用する場合は、 B シェルよりも C シェルを使う人のほうが多いでしようから、 この話題に関しては C シェルから始めることにします。 C シェルを用いている場合、環境変数を設定するには これまで、 UNIX 上でプログラミングするときに守って いただきたいことを中心にお話ししてきました。前回の setenv コマンドを使います。 Usage 出力で一段落と思ったのですが、もうすこし続ける setenv 環境変数名値 ことにします。今回はコマンドの動作を変えるためによく このコマンドを実行すると、環境変数に指定した値が割 使われる手法の 1 つ、環境変数を使用したカスタマイズを り当てられます。設定を取り消すには、次のように unset- とりあげます。 env コマンドを使います。 環境変数によるカスタマイズ unsetenv 環境変数名 環境変数の値は、 printenv コマンドで見ることができま コマンドの動作の変更ならオプションで十分しゃないか、 す。 printenv コマンドに引数を指定しなければ、現在設定 という声も聞こえてきそうです。しかしオプションでは、 されている環境変数とその値がすべてペアで出力されます。 変更する項目が多くなるとコマンド行で指定するのがたい DZ—X 流プログラミング 9 今泉貴史 147 UNIX MAGAZINE 1991.7
ちょっと長くなってしまいましたね。 printenv コマンド をいろいろな引数で実行してみたら、終了ステータスをち ゃんと返していることが分かったので、このコマンドでも 同しようにしてみました ( 先月号で終了ステータスについ て説明したばかりですし・・・・・ ) 。それから、複数の引数が与 えられた場合は、最初の引数と一致した環境変数について だけ値を返すようになっていますので、こちらのプログラ ムもそうなっています。 さて、プログラムの内容の説明に入りましよう。 9 ~ 10 行目では、変数 len と retval を初期値 0 として宣言して います。これらの変数の初期値はのちのち重要になってく るので、注意しておいてください。 12 行目からの if 文は、引数が与えられた場合の初期設 定です。 13 行目で与えられた引数を buf というバッフアに コピーします。 14 行目で buf の後ろに = という文字を付け加えていま す。これは、あとで envp の内容と比較するときに = まで含 めておかないと、 US という引数に対しても USER などが 一致してしまうためです。その次に、 len に文字列の長さを 設定しています。この長さは、かならす 1 文字以上になり ます。 16 行目では retval ( コマンドの終了ステータスに用い る ) の値を 1 に変えています。これは、引数と一致する環境 変数がなかった場合に 1 を返すからです。この値は、指定 された環境変数がみつかったときに 0 に戻せばよいのです。 さて本体のほうの説明に入りましよう。 while はさきは どのプログラムと同し条件でループしています。その内側 ですが、 len の値が 0 の場合、つまり引数が指定されなかっ たときには前掲のプログラムと同様に envp の値をそのま ま出力しています。 len の値が 0 でなかった場合、つまり引 数が指定されたときには、さきほど buf に格納しておいた 比較用の文字列を envp の値と比較しています。このとき 比較する長さを指定している点に注目してください。 strncmp の結果が 0 の場合 ( 両方の文字列の先頭 len 文 字が等しいとき ) は、環境変数の値だけを出力するためにち ょっと複雑なことをしています。カッコがたくさんありま すが、内側から順番に見ていきましよう。 USER という引 数つきでこのコマンドが起動され、これと一致したとしま す。 buf には、、 USER = 〃、 len には 5 という値が格納され ています。 152 * envp envp が指している文字列。この場合は、、 USER lmage ( * envp) Clen] envp が指している文字列の len 番目の文字。つまり挈 という文字。 C での文字列は 0 から数えはしめます。 & ( ( * envp) [ le 司 ) envp が指している文字列の len 番目の文字のアドレス。 つまりヤという文字が格納されているアドレス。この アドレスを文字列とみると、、、 i 〃という文字から、、 \ 0 〃が 出てくるまで、つまり、、 image" という文字列が得られ ます。 どうでしよう。無事に必要な文字列だけを取りだすこと ができますね。この文字列を出力したところで、終了ステ ータスを 0 とし、プログラムを終了しています。文字列が 一致しなかった場合やすべての環境変数を出力するとき は、次の文字列を指すように envp を進めます。 全部の文字列について検査が終ったら、 retval の値を終 了ステータスとして出力しています。この値はあらかしめ、 すべての環境変数を出力する場合には 0 、特定の環境変数 について出力する場合には 1 となっていたことを思いだし てください。 getenv ライプラリ関数 envp はすべての環境変数をみるのには有効ですが、 1 つだけのときにはそのなかから捜さねばならす、ちょっと めんどうですね。そう考えた人がいたかどうかは分かりま せんが、 UNIX には getenv というライプラリ関数が用意 されています。マニュアルでは、 char *getenv(name) Char *name ; となっています。 getenv という関数に文字列を与えると、その文字列と 一致した名前をもつ環境変数の値が返されます。一致する ものがないときには、 NULL が返されます。この関数を使 ってさきほどのプログラムを書き換えると、次のようにな ります。 UNIX MAGAZINE 1991.7
ださい ) 。このコマンドは、トラブルが起こったときによく 使いますから、使い方をしつかりマスターしておいてくだ さいね。 hosts. equiv と . rhosts ネットワーク環境では、ほかのマシンやネットワークか らのアクセスがあるので、つねにセキュリティに注意を払 わねばなりません。パスワード・チェックなしでログイン できる人を限定したり、リモートコピーできる人を制限す る必要があるかもしれません。これらの事項は、 / etc / hosts. equiv と /. rhosts で設定します。 この 2 つのファイルはそれぞれシステムレベルの設定、 ューサーレベルの設定で、信頼できるホストとユーサーを 設定します。このファイルに設定されたマシンからは rlogin のときにパスワード・チェックなしでログインでき ますし、 rsh コマンドや rcp コマンドも実行できます。 /etc/hosts. equiv の設定は、 ん OS / 〃 2 召 を 1 行に 1 つのエントリで表します。加 s 切〃襯 e は、 /etc/ hosts で与えられた正式なマシンの名前でなけれはいけま せん ( 別名ではダメです ) 。加 s 切襯 e に、、十〃を指定する とすべてのマシンからアクセスフリーになりますが、セキ ュリティ上の問題になりますから絶対にしてはいけませ ん。ほかにも、 /etc/netgroup で設定されたネットグルー プが指定できます。 /. rhosts の設定は、 を 1 行すっ書き並べます o/etc/hosts. equiv と同しよう に、、、十〃のエントリはすべてのユーザーがノーチェックで アクセスできてしまうので、絶対にしてはいけません。 般に″ s 召 4 川 e はほかのマシンで自分のログイン名が異 なる場合に指定しますが、ほかのユーザーのログイン名を 書いておくとそのユーザーからのアクセスはノーチェック になります。十分に注意してください。 また、この ~/. rhosts に指定しておけß/etc/hosts. equ ⅳで許可が与えられていないマシンからでもアクセス できるようになります。 なお、アクセスしようとしているのが root の場合は、 UNIX MAGAZINE 1991.7 ースーバーユーサーへの道 3 /etc/hosts. equiv は見すに /. rhosts だけがチェックさ れます。 / etc / 「 c * のネットワーク・テーモン 前号の「電源の入れ方と切り方」の項では、 /etc/rc* ファ イルを中心としてマシンの立ち上げ時に何がおこなわれて こで、 /etc/rc* で起動される いるかをみていきました。 ネットワーク・デーモンをいくつか紹介しておきましよう。 一 routed テーモン 名前を見てピンときた方もいるでしよう。そうです、 れはルーティング・テープルを管理するデーモンです。 routed デーモンは、プロードキャストを用いてほかのマシ ンの routed デーモンとルーティング情報を交換し、それ をもとにルーティング・テープルを管理します 6 。したがっ て、ルーティング・テープルの変更などは自動的におこな われます。 routed のほかに、 gated と呼ばれるゲートウェ イ用のルーティング・デーモンなどもありますが、これら のデーモンを用いたルーティングを、、ダイナミック ( 動的 ) ルーティング〃と呼びます。 一方、ルーティング・デーモンを使わない場合、管理者 が route コマンドを使ってルーティング・テープルを管理 しなけれはなりません。これは、、、スタティック ( 静的 ) ルー ティング〃と呼ばれます。 ダイナミック・ルーティングとスタティック・ルーティ ングには、それぞれ長所と短所があります。ダイナミック・ ルーティングでは、一定時間あるルートの情報がこないと そのルートのエントリをテープルから削除します。したが って、ルートが変わったときなどはルーティング・テープ ルの変更は自動的におこなわれます。その反面、ネットワ ーク内をルーティング情報のバケットが飛び交うことにな ります。これに対し、スタティック・ルーティングでは、 ルーティングのためのバケットが流れることはありません が、ルーティング・テープルの変更は管理者がおこなわな けれはなりません。 こで詳しくは触れませんが、隣のネ ットワークがどちらの方法をとっているかも考慮しなけれ ばなりません。ですから、周囲の状況も考え合わせたうえ で、どちらを選ぶか ( 併用も可能です ) を決めましよう。 6 ゲートウェイ上の routed デーモンは情報を流したり受け取ったりしますが、 それ以外のマシン E の routed デーモンは情報を受け取るだけです。 53
/usr/lib/crontab の各行には、数字や * がある先頭部 分に日時を指定します。ここには、 分時日月曜日 の順でコマンドを実行する日時を記述します。 また、 1 つの項目に対して複数の指定をおこないたい たとえば毎時 5 分と 45 分になんらかのコマンドを実 行したいという場合には、それぞれをカンマ ( , ) で区切っ て指定します。一方、特定の時刻や日、月などを指定しな くてもよいときには、該当する部分を * にしておきます。 曜日の部分では、 1 から 7 の数字を指定します。通常、 1 7 が日曜日ですが、この数字 が月曜日、 2 が火曜日・・ についてはシステムによって異なる場合があるので、詳し くは利用しているシステムの cron のマニュアルを参照し てください。 さて、たとえば曜日、月、日、時に関係なく、 0 分と 30 分 には aya というユーザーの権限で /etc/myadmin という コマンドを実行したいとします。 この場合には、ます時刻に関する部分を次のように言己 以前、 /usr/lib/crontab は root の所有物であり、一般 これで設定は完了です。 0 , 30 * * * * aya /etc/myadmin 最後に、実行するコマンド名を記述します。 0 , 30 * * * * aya 次に、 aya というユーサー名を記述します。 0 , 30 * * * * します。 UNIX MAGAZINE 1991.7 要求は atrun が起動されないかぎり処理されません。ま れをやってネ〃とユーザーが要求できます。ただし、この す。 at では、たとえば、、今日の午後 3 時になったらこれこ って作成された要求を定期的に処理するためのコマンドで うコマンドが記述されています。これは、 at コマンドによ たとえば、 /usr/lib/crontab には /usr/lib/atrun とい てしまうと問題が生しる可能性があったからです。 なものが多く、それをユーザーか麒って消したり、変更し た。なぜなら、このファイルにおける設定はきわめて重要 ューサーにはその書込み許可は解放されていませんでし IJN Ⅸへの招待⑩ た、時間のかかる仕事は夜中に実行するなど、 crontab に おける時刻の指定にもある程度の注意が必要です。しかし、 ューサーがそこまで考えてくれるとはかぎりません。この ような意味からも、一般ューサーに /usr/lib/crontab を 解放するのは危険だったのでしよう。 at によるコマンドの実行依頼と crontab によるものと の相違は、 at では 1 回の要求で指定した時刻に 1 回だけコ マンドが実行されるのに対し、 crontab では指定時刻にな るたびに ( 定期的に ) そのコマンドが実行されるという点 です。したがって、ユーザーが定期的にあるコマンドを実 行したくても at コマンドではできません。そこで、 SystemV R2 からは crontab の利用が一般ユーサーにも 解放されるようになりました 7 。ただし、 /usr/lib/crontab にすべてのユーサーか書き込めるようにしたわけではあり ません。ューザーごとに crontab を作れるようにしたので す ( これにともない、現在の SystemV や SunOS では /usr/lib/crontab はなくなっています ) 。 ューザーは crontab というコマンドを使って、 分時日月曜日コマンド という形式で 8 実行時刻や実行するコマンドを指定します。 この要求は、 /usr/spool/cron というディレクトリの下に ューサーのログイン名と同名のファイルとして作成されま す。 前置きが長くなりましたが、 / etc / rc では標準のデーモ ンとして / etc / cron が起動されています。これがクロック デーモンです。これは、 BSD の場合は /usr/lib/crontab を、 SystemV や SunOS では /usr/spool/cron ディレク トリの下の各ファイルを見て、指定の時刻になったコマン ドがあればそれを実行します。クロックデーモンカ種力いて いないかぎり、 crontab を設定しても実際にはそれらが実 行されることはありません。 アカウントの起動 次に、 /etc/accton を紹介しましよう。これは、デーモン と呼ぶにはふさわしくないと思うのですが、どのシステム でも標準デーモンの起動の際に実行されているので、 で紹介することにします。 7 ただし、スーバーユーザーは crontab を利用するユーザーを限定できます。 8 BSD 系の crontab にはユーサー名を記述しますが、こちらにはありません。 165
e $ & 0 ce ル 0 ce 表 2 変更できる TCP / 旧バラメータ 変数名 ip-forwarding ip-subnetslocal ip-sendredirects ip-dirbroadcast ip-printfs tcp-default-mss tcp-sendspace tcp-recvspace tcp-keeplen tcp-ttl tcp-nodelack tcp-keepidle tcp-keepintvl udp-cksum udp-ttl udp-sendspace udp-recvspace デフォルト値 18032 9000 30 0 150 14400 0 30 1 4096 4096 512 0 1 1 1 0 オプション IPSENDREDIRECTS SUBNETSARELOCAL DIRECTED-BROADCAST IPFORWARDING UNIX MAGAZINE 1991.7 このマシンがほかのマシンに送ろうと考えている IP バケッ -1 まったく転送しない。 1 つねに転送する。 もっときだけ自動的に転送する。 0 IP アドレスが与えられた 1 つ以上のインターフェイスを タに許される値は 3 通りである。 トを転送 ( f 。 rw d ) するかしないかの制御。 グ ) ノくラメ リモート UDP が、バケットを落とさないでソケットノ ューザーが一度に UDP ソケット / くッフアに送れるパイト数。 を秒単位で指定する。 UDP データグラムに対するデフォルトの "Time TO Live ” UDP チェックサムの生成とチェックをおこなう。 ト 0 よ 75 秒。 "keep alive ”を送る間隔を 0.5 秒単位で指定する。デフォル デフォルトは 2 時間。 探索行為が開始されるまでの時間を 0.5 秒単位で指定する。 コネクションがアイドルになったあと、 "keepalive ”による 抑制する。 保とうとする。このパラメータを 1 にすると、この機構を よって、反応時間を犠牲にしてネットワークのバンド幅を 通常、 TCP は短いバケットに対する応答を抑制することに する。 TCP セグメントの "Time To Live ”フィールドを秒で指定 TCP の "keep alive ”バケットのサイズ。 れるノくイト数。 リモート TCP が、プロックされずにソケットバッフアに送 れるノくイト数。 ューザーが、プロックされずに TCP ソケットノくッフアに送 イトで指定する。 TCP のデフォルトの最大セグメント・サイズ (MSS) を , 用する。 られたとぎにメッセージを出力する。デノくッグのために使 バケットが転送された、あるいは ICMP リダイレクトが送 ド・プロードキャストされない からネットワークへ発送される。 0 にするとディレクティッ キャストされるとしても、これらのバケットはネットワーク は、たとえ送り先のネットワーク上でバケットがフ・ロード ディレクティッド・フ・ロードキャストを許す。デフォルトで を決定する。 る場合、 ICMP リダイレクト・メッセージを送るかどうか くケットを受け取ったインターフェイスにバケットを転送す カル、 0 はローカルでないと解釈する。 送り先を、ローカルと考えるかどうかを決定する。 1 はロー このマシンと同じ IP ネットワークのほかのサフ・ネット上の フアに送れるノくイト数。 17
UN Ⅸへの招待⑩ にしましよう。 さて、 /etc/rc や /etc/rc. 10Ca1 は、 B シェルで書かれた シェル手続きです。その中身をかいつまんで説明すること ファイルシステムの検査一 fsck /etc/rc には、 fsck コマンドが記述されています 2 。これゝ照してください )o/etc/rc に fsck カ嘯かれているので、シ は / etc に存在するシステム管理用のコマンドで、ファイルステムの立ち上げ時には fsck が実行され、ファイルシス システムの検査をおこないます ( fsck については前号を参 / テムの検査がおこなわれます。 % grep fsck /etc/rc /etc/fsck -p 立ち上げ時に / etc / fsck でファイルシステムの検査を するのは、不慮の停止によってファイルシステムが破壊さ れたかもしれないという可能性を考慮してのことです。ま た、正しい手順でシャットダウンされた場合でも、メモリ 上の情報が正しく書き込まれなかった万一の可能性も考 慮されています。このため、リプート時などで fsck が明ら かに不要と判断されるときには、 fsck の実行を省略してリ プートすることもできます。その際には、停止時に / etc / fastboot コマンドを使います。 /etc/rc では fastboot さ れたかどうかをチェックし、そうであれは fsck の実行を 省略するなどの処理がおこなわれています。 fsck は、 fsck デバイスファイル名 と実行します。すると、引数で指定したファイルシステム ( デバイスファイルに対応したファイルシステム ) に対する 検査がおこなわれます。 ところで、 / etc / rc に記述されている fsck ではデバイ スファイル名が指定されていません。では、いったいどこ のファイルシステムカ鹸査されるのでしようか ? fsck は、引数でデバイスファイル名が指定されないと、 2 SunOS では、 /etc/rc ではなく /etc/rc. b00t で実行されます。 # 工取 fomat 土 0 Ⅱ about file systems : % cat /etc/fstab >/dev/console 2 > & 1 デバイスファイル名と、それをどこにマウントするかのパ としてマウントする ( fsck と同様に ) ファイルシステムの する管理用のコマンドですが、実行時には次のように引数 1991 年 5 月号で説明しています ) 。 mount は /etc に存在 考えてみます ( ファイルシステムのマウントについては、 て、ファイルシステムをマウントする mount コマンドを check 、 quotaon などのコマンドも参照します。一例とし ァイルシステムを対象として動作する mount 、 quota- がおこなわれています。 / etc / fstab は fsck のはかにも、フ ムに存在するファイルシステムについて、いくつかの定義 分類できるファイルです。このファイルには、そのシステ は、 /etc のなかで各種の管理用データを含むファイル〃に いるファイルシステムの検査をおこないます。 / etc / fstab /etc/fstab というファイルを見にいき、そこに定義されて /etc/mount /dev/sd0h /usr ス名を指定します。 いますにれは BSD での例です ) 。 さて、 / etc / fstab のファイルの中身はこのようになって 照します。 いうオプションを指定すると mount は /etc/fstab を参 しかしこれらのうちいすれかの引数を省略したり、一 a と fsname type= dir type opts { 4.3 , nfs, pc, swap' freq 1 ore } UNIX MAGAZINE 1991.7 passno 157
monkeyOO% cat /etc/aliases # F0110 土Ⅱ g i is required by the maxl protocol , RFC 822 # Set it to the address of a HUMAN who deals with this system' s maxl problems. Postmaster : root # AIias for maller daemon; returned messages from our MAILER-DAEMON # should be routed to 0 10Ca1 Postmaster. MAILER—DAEMON : >ostmaster # A1iases tO handle ma11 to programs or fiIes , eg news or vacation #decode : " l/usr/bin/uudecode" #nobody : /dev/null # Loca1 aliases below # katayama て 00t : monkey: okay a 011keY01 , monkey00% katayama@monkeyOO , bab&onkeyOI このファイルの書式は、次のようになっています。 4 襯 : address [ , address... ] ある計算機の aliases のなかにエントリされている 襯に対してメールを送信すると、すべての 〃市召 ss に対して同しメールが送られます。上の例では、 monkey@monkeyOO にメールを送るとそのメールの複 製が okayama 、 katayama 、 baba の 3 人に送られます。 ただし、 address には実際のログイン名か、この aliases フ ァイルで設定されている別名を指定しなけれはなりません。 また、そのアドレスはほかのドメインのアドレスでもかま いません 18 。さらに aliases には、ファイル名を ( 絶対パス で ) 指定し、そのファイルのなかにされているアドレス に対してメールを送ることも可能です。書式は次のように 、、、なります。 4 襯 e : : ⅲ clude : 加 4 襯 e aliases の設定によって、メールをプログラムに対して 送ることもできます。この場合も、コマンド名は絶対パス 名でします。書式は次のようになります。 このように指定すると、指定した co 襯襯〃 d に対し標準 入力からメールの内容を入力できます。 たとえは、 monkey-news という名前にメールを送ると 自動的に news(group: monkey) にホストされるように するには、次のように設定します。 当 /usr/l ib/news/mai12news —n monkey" monkey¯news : ここで登場している、、 mai12news" とは、メールの形式 から news の形式に変換し、同時に news に投稿してくれ るプログラムと思ってください。 -n オプションは news- group の指定です。 これらの設定や変更をおこなったあとは、かならす newaliases コマンドを実行してください。そうしないと、 sendmail に対する aliases のデータベース 19 が更新され ません。ところで、この newaliases コマンドの実体はし 17 aliases ファイルの場所は、 ndmail.cf のなかで定義されています。 /usr/lib 64 19 /etc/aliases. dir と /etc/aliases. pag のことです。 18 はかのドメインと接続されている場合だけですよ。 /aliases であることもあります。 つは /usr/lib/sendmail なのです。 sendmail は new- aliases という名則で起動されると、 aliases のデータベー スを更新する働きをもっています。 aliases のなかに l/usr/bin/uudecode" decode : というエントリはありませんか ? もしあったら、ただち に削除してください。もし残っていると重大なセキュリ ティホールになってしまいます。ある日突然、システム UNIX MAGAZINE 1991.7
連載 ZIJ N Ⅸ Communic ation N0tes 表一定期的な ypxfr 実行のためのスクリプト ファイル /usr/etc/yp/ypxfr—lperday /usr/etc/yp/ypxfr-lperhour /usr/etc/yp/ypxfr-2perday 実行内容 クリフ。トでは、 passwd. byname 、 passwd. byuid がコビーの対象と 1 時間ごとの実行を前提として作られたシェルスクリフ。ト。このス がコビーの対象となっている。 name 、 netgroup 、 netgroup. byuser 、 netgroup. byhost 、 mail• aliases フ。トでは、 hosts. byname 、 hosts. byaddr 、 ethers. byaddr 、 ethers. by- 1 日 2 回の実行を前提として作られたシェルスクリフ。ト。このスクリ name 、 ypservers がコビーの対象となっている。 cols. bynumber 、 networks. byname 、 networks. byaddr 、 services. by- フ。トでは、 group. byname 、 group ・ bygid 、 protocols. byname 、 proto- 1 日 1 回の実行を前提として作られたシェルスクリプト。このスクリ なっている。 2 ) マスターサーバーのマップのはうが新しい場合、マップ ypxfr はスレープサーバー側で実行されるので、マップ ァイルを ypxfr のログファイルとして利用します。 YP/YPXfr. log というファイルが存在していれば、そのフ という処理をおこないます。また、 ypxfr の実行時に / var / 通告する。 3 ) ローカルの ypserv に対し、マップが更新されたことを をマスターサーバーからコピーする。 70 サーバー側がマップをコピーします。 ーバーに送られます。そして、その要求によってスレープ yppush が実行されると、マップ更新の要求がスレープサ yppush による方法では、マスターサーバー側で yppush によるマップの更新 します。 を使用し、明示的にマスターサーバーを指定するように 動いていない場合は、スクリプトを書き換えて一 h フラグ クライアントにはなっていないことによって ypbind が したがって、スレープサーバーになっているが NIS の マスターサーバーを指定しているわけではありません。 ypbind が動いていることを前提にしており、明示的に ①これらのスクリプトの記述は、スレープサーバー側で うにすれは、整合性が保てます。 これを、 root の権限で cron によって定期的に実行するよ に、表 1 に示したシェルスクリプトが用意されています。 実行し、マップの整合性を保たねばなりません。このため が更新された時点から可能なかぎりすみやかに ypxfr を このように処理されるので、 yppush を利用するときに UNIX MAGAZINE 1991.7 YPPUSh を実行すると、 tune" と、、 mercury" が登録されている場合、 jupiter で サーバ ーとして、、 jupiter" 、スレープサーバーとして、、 nep - するには、 -v オプションをつけます。たとえは、マスター 実際にどのスレープサーバーに要求が送られたかを確認 ます。 バーでは ypxfr ( のプロトコル ) によってマップを史新し 新要求が送られます。そして、要求を受けたスレープサー レープサーバーに対してマップ services. byname の更 これによって、 ypservers に登録されているすべてのス # /usr/et c/yp/yppush servi ces. byname します。 マップ services. byname を史新するときは、次のように さて、実際の例で使い方を見ていきましよう。 yppush で の 2 つが必要条件になります。 ている。 ・マスターサーバー / スレープサーバーで ypbind が動い されている。 ・マップ ypservers にすべてのスレープサーバーが登録 マップの更新が適切におこなわれるためには、 ypservers としてもっています。したがって、 YPPUSh での マスターサーバーとスレープサーバーの一覧をマップ のかという情報が必要になります。そのために NIS では、 はマスターサーバー側でどのホストがスレープサーバーな
226 ASCII Transfer complete. 10C 訌 : printcap remote : printcap 16 bytes received in .18 seconds ( 9.1 Kbytes/s) ftp> bye 221 Goodbye. m01 ey02 % 最後に、もう 1 つのファイル転送用のコマンド tftp (trivial ftp) についてみていきましよう。 tftp は、 ftp より もすっと単純で、 ftp のディレクトリ操作などのコマンド がありません。さらに、リモートマシンにアカウントがな くても ( つまり誰でも ) アクセスしてファイル転送ができ る、というセキュリティ上の大きな間題も抱えています。 ですから、通常は tftp コマンドが実行できないように /etc/inetd. conf で tftpd の部分をコメントアウトして 、ゝおきます。 ただし、この tftp コマンドはディスクレス・マシンがデ イスクレス・サーバーからプートプログラムを読むときに 使われます。そのときには、セキュリティの点からアクセ スできるファイルをプートプログラムだけに限定します。 これは、ディスクレス・サーバー側の /etc/inetd. conf の なかで tftpd に -s オプションをつけて起動し、指定したデ ィレクトリしかアクセスできないようにします。 tftp dgram udp walt 様子を知る /usr/et c/in. tftpd root 土Ⅱ . tftpd —s /tftpboot ネットワーク環境では、ファイル転送などのネットワー ク・サービスの利用、ファイルの共有など、相互に依存す ることが多くなってきます。そうすると、ほかのマシンが ダウンしたりうまく動いていないと、こちら側でも何もで きなくなることがあります。このような場合、はかのマシ ンの状態を知ることがたいへん重要になってきます。 また、実際に部屋まで見に行かなくても人が来ているか どうかをログインの状況から判断できるのなら、ほかのマ シンのログイン状況が分かるのは嬉しいですね。 こでは、このようなネットワーク上のマシンやネット ワークの状態を知るコマンドについてみていきます。 ます、ネットワーク上のマシンが生きているかを調べる コマンドが /usr/etc/ping ( または /etc/ping) です。 基本的な使い方は、 ping [ -s ] ん 0 [ カ〃 c なた e [ co ″ ] ] です。 このコマンドを実行すると、バケットがん os / に送られ ます。そして、返事が返ってきたらその加は生きている ことになります。 -s オプションを指定すると、 1 秒に 1 つ のバケットを送り、その返事が返ってくるまでの時間を 1 行すつ出力していきます。加吶たビは何も指定しない場 合は 64 バイトですが、指定して変更することもできます。 また、 co ″厩を指定するか、適当なところで SIGINT( た いていは Ctr ト C ) を送るとそれまでの統計結果が出力さ れます。実行例を見てみましよう。 monkey02% ping banana01 banana01 is alive monkey02% ping —s b 田 1a01 56 10 PING bananaOI : 56 data bytes bytes from 192.152.80.2 : icmp—seq=O. 64 bytes from 192.152.80.2 : icmp-seq=l ・ 64 bytes from 192.152.80.2 : icmp-seq=8. bytes from 192.152.80.2 : icmp-seq=9. ーー b 田 1 田 1a01 PING Statistics— t 加 e = 59. t ime=40. time=40 t 土 me = 40 10 packets transmitted, 10 packets received, 0 % packet loss round-trip (ms) min/avg/max = 40 / 41 / 59 monkey02% 44 UNIX MAGAZINE 1991.7
です。ただし、実際にしゃべるのとは違ってキーポードを 叩いて話すので、もどかしく感しられることもあるかもし れません。それでは使い方です。 talk 加バ 0 〃 [ 娵〃 4 川 ] カげ so を指定するとき、同しマシンにログインしている 人ならばログイン名でかまいませんが、ネットワーク上の ほかのマシンにいる人の場合は次の形式で書かなけれはい ん os た″ s の・ host!user けません。 usの-@ ん 0 ドで、、、 n 〃に設定しておくと write や talk がかからなくな るほかの人からの書込みの許可 / 不許可を指示するコマン と入力しておきます。 mesg は、いま使っている端末に対す は、 はもとの状態に戻ります。また、 talk をしたくないとき 会話を終了するときは、どちらかが Ctr ト C を入力すれ monkeyOO% talk baba@monkey02 ンが確立されて会話〃ができるようになります。 そこで okayama が次のように入力すると、コネクショ talk: respond vith : talk babaGnonkey02 talk: comection requested by babaGnonkey02. Message from Ta1k—DaemonGnonkeyOO at 10 : 22 ります。 に属するマシンにログインしている人の画面に次のメッセ このように rwall すると、グループ monkey machines Monkey00 (NIS server) will be down at midnight. % rwall -n monkey—machines ースーバーユーサーへの道 3 ゝまた、同しマシンに 2 つ以上ログインしている人に対し ては娵〃のが指定できます。 では、 talk コマンドを実行してみましよう。たとえば、 monkey02 にいる baba が monkey00 の ttyp3 にいる okayama とトークしたいとします。 monkey02% t alk 0kayama@monkeyOO ttyp3 このように入力すると、画面が上下 2 つに分かれて上側 CWa1ting for your party t0 respond] と表示され、相手の返事待ちの状態になります。相手が返 事をしないと何回も呼び掛けます。相手側にこでは okayama) では、次のようなメッセージが表示されます。 次は、会話ではなく一方的に通知するコマンド、 /usr/ ゝ etc/rwall です。これは、ネットワーク上のユーサーにプロ ードキャストをするコマンドで、マシンのシャットダウン を予告するときなどに使います。使い方は、 rwall ん os 4 〃尾 . rwall -n 7 尾皙ゆ . rwall -h ん os / -n ゆ で、知らせるメッセージの入力は標準入力となっています。 加 s 切のだけを指定した場合は、そのマシンにログイン しているすべてのユーサーに通知します。ー n オプションで は膨皙川ゆ (/etc/netgroup で定義します ) を指定して ージが表示されます。 通知できます。 Broadcast Message from ???@monkey03 ( ) at 19 : 43 From baba@monkey00 : MonkeyOO (NIS server) will be down at midnight ・ UNIX MAGAZINE 1991.7 47