Appendix A 便利なシェルスクリプト pubcheck まとめ バブリックディレクト ) の一覧を表示する /usr/spool/uucppublic に受信された、あるいはこのディレクトリで待ち状態にあ るファイルの一覧を表示する。 pubcheck 第ル pubcheck はパプリックディレクトリ中のファイルの一覧を表示するために便利で ある。このコマンドはデフォルトでは、パプリックディレクトリに現在あるすべて のファイルを表示する。引数を指定すると、パス名の一部が加に一致するもの を表示する。 実行例 % pubcheck /usr/spool/uucppublic/receive/dale/egl /usr/spool/uucppublic/adrian/attlist /usr/spool/uucppublic/laurel/macstuff /usr/spool/uucppublic/mary/plans. j ohn /usr/spool/uucppublic/mary/report % pubcheck mary /usr/spool/uucppublic/mary/plans ・ j 0 Ⅱ /usr/spool/uucppublic/mary/report A. 2 設 uget シェルスクリプト FILES=" " if [ " $ 1 " ] ; then S OURCE=$ 1 PUBDIR=/usr/SP001/uucppub1ic/$SOURCE PUBDIR=/usr/SP001/uucppub1ic/$LOGNAME if [ " $ 2 " ] ; then DESTINATION=$2 0 を else 164
A. 2 uuget シェルスクリプト ディレクトリでないサプディレクトリの vmark を参照することはできない。 ような場合は、絶対パス名を使って次のように指定する。 % uuget / 0 て k / vm k 実行例 この 引数を指定しなかった場合、 uuget はバブリックディレクトリのサプディレクトリ のファイルの一覧を表示して、実行する作業について聞いてくる。すべてのファイ ル、あるいは一部のファイルを、カレントワーキングディレクトリに移動すること も、なにもしないこともできる。 % uuget /usr/spool/uucppublic/dale : status takeme takeme . t00 To move A11 files , Se1ect files or do Nothing, Enter [A/S/N] s Confirm files you want moved : [Y/M/Q] status :n takeme : y takeme . t00 :n この結果、 /usr/spool/uucppublic/date/takeme がカレントワーキングディレク トリにコピーされる。 つぎの例では、パプリックディレクトリのサプディレクトリとして解釈される引数を 指定する。ディレクトリ内のファイルの一覧が表示され、また処理を選択するため のプロンプトの表示される。 "A" か "a" は、そのディレクトリにあるすべてのファ イルをカレントディレクトリにコピーする。 % uuget 1a e1 /usr/spool/uucppublic/laurel : macstuff To move A11 files, Se1ect files or do Nothing, Enter [A/S/N] a これで、 /usr/spool/uucppublic/laurel/macstuff というファイルが、カレントワー 167
便利なシェルスクリプト この Appendix A では、 UUCP を簡単に使うためのシェルスクリプトをいくっか 紹介する。スクリプトには、スクリプトが記述されるマニュアルが続く。 こで説明するスクリプトをまとめよう。 pubcheck パプリックディレクトリの一覧を表示する。 パプリックディレクトリからファイルを持ってくる。 uuget A. 1 pubcheck シェルスクリプト " 0 " ] ; then find /usr/spool/uucppublic —type f find /usr/spool/uucppublic else -type f -print ー grep s* ; —print 163
2 章ファイルを転送する Bourne シェルはチルド記号を無視するので、次のように uucp コマンドがチルド記 号をパプリックディレクトリに拡張できることになる。 $ uucp -/chapl calif ! -/alice PUBD 旧に拡張される これが calif に送られて、そこでソースパス名が拡張される。 calif ! -/mary/ch* /usr/spool/uucppublic/fred/ システム newton 上でデスティネーションパス名が拡張される。 calif 上でシェルによって拡張されるメタキャラクタ $ uucp ca1 土土 ! -/mary/ch* -/fred/ ピーしたいとする。システム newton 上で、つぎのように入力する。 を、ローカルシステム上のパプリックディレクトリのユーザーサプディレクトリにコ を見てみよう。 calif 上の /usr/mary にある、名前が h " で始まるすべてのファイル では、複数のファイルを送ったり取り出したりする際の、メタキャラクタの使用例 /usr/spool/uucppublic/chapl -/alice ス、およびデスティネーションパス名を含む。 ソースファイルが存在すれば、リモートシステムに渡される要求はつぎのようなソー calif\ ! -/mary/ch* スパス名を使ったとする。 上記の例が C シェルだった場合を考えてみよう。 uucp コマンドでつぎのようなソー /usr/spool/uucppublic/mary/ch* 54 calif ! -/mary/ : NO such file or directory そうすると、つぎのエラーメッセージが表示されてしまう。
Appendix A 便利なシェルスクリプト キングディレクトリにコピーされる。 つぎの例では、引数を 2 つ指定する。 1 つめの引数はパプリックディレクトリ以外 のソースディレクトリであり、 2 つめの引数は移動先のディレクトリの絶対パス名、 もしくは相対パス名である。 % g ・ t a 社土 /vork/dale /usr/spool/uucppublic/adrian : attlist TO move A11 files , Se1ect 0 て do Nothing, Enter [A/S/N] a この結果、 /usr/spool/uucppublic/adrian/attlist というファイルがディレクトリ /work/dale にコピーされる。 引数を 1 つだけ指定して、ソースディレクトリではなくデスティネーションディレ クトリとして解釈させることができる。例では、引数が存在するディレクトリと認め られたときに、それがどのようにしてコピーの際のデスティネーションとして扱わ れるかを示している。最初の引数はバブリックディレクトリのサプディレクトリとは 解釈されずに、ソースにはデフォルトとしてユーザーの LOGNAME が使われる。 % uuget /vork/dale /usr/spool/uucppublic/dale : status takeme takeme . t00 To move A11 files , Se1ect files 0 て d0 N0thing, Enter [A/S/N] a このコマンドではパプリックディレクトリから 3 つのファイルがディレクトリ /work /dale に移動される。 168
2 章ファイルを転送する UUCP がファイルをコピーできるように、ローカルソースファイルにはすべての ューザーに対する読み出し許可 ' 3 が必要である。 UUCP がファイルを読めない例を示 % 1s ー 1 spider 1 fred doc 264 Feb 5 17 : 35 spider これで、 report はディレクトリ /usr/spool/uucppublic/mary にファイルとして作 ディレクトリであることを知らせる % uucp report calif\ ! -/mary/ ように入力できることになる。 ネーションパス名の最後にスラッシュ ( / ) を付ければよい。上記のコマンドはつぎの う名前のファイルになる。 mary がディレクトリであることを明示するには、デスティ report がそこに置かれる。存在しない場合は、 /usr/spool/uucppublic の mary とい るかどうかによって、異なる 2 つの結果を得るだろう。存在する場合は、ファイル /usr/spool/uucppublic/mary というディレクトリがリモートシステム上に存在す % uucp report calif\ ! -/mary を見てみよう。 では、パプリックディレクトリのサプディレクトリにファイルを送るという別の例 の節を参照されたい。 となる。ファイルバーミッションの詳細については、「 2.5 PUBDIR を越えた転送」 のユーザーに対する、読み出しと書き込み許可 ) となり、 uucp がファイルのオーナー られたファイルはすべて、 0666 パーミッション ( オーナー、グループ、そしてその他 ファイノレの / ヾー ミッションを変更するには、 chmod コマンドを使う。 UUCP で送 uucp failed partially: 1 error can 't read file(/usr/fred/book/spider) mode ( 100660 ) % uucp spider ca1 土土 ~ / * 3 訳注 : 厳密には、 46 'uucp" というューザーが読み出せればよい。
2 章ファイルを転送する ("copy") コマンドに形式や使い方を似せて作られている。 uucp ではシステム間の ファイル転送が行える点を除けば、事実上、この 2 つは同し構文を持っているという ことができる ( システムに接続されているリモートシステム名を知るには、 uuname コマンドを入力すればよい ) 。リモートシステム名は、ソース ( 転送元ファイル ) 、デ スティネーション ( 転送先ファイル ) のいずれにも含めることができる。 2.3.1 バブリックディレクトリに送る uucp を使って、リモートシステムのパプリックディレクトリにファイルを送る場合 は、フルバス名を指定しなくてはならない。 ューサー fred が、彼のワーキングディレクトリにある plans というファイルを、シ ステム calif の PUBDIR に送りたいとしよう。彼はつぎのように入力する。 % uucp plans cal 土土 \ ! / s て / SP001 / Ⅱ cpp bl 土 c / plans. 土て ed バブリックディレクトリのフルバス名 ファイル plans はローカルシステムからリモートシステムにコピーされて、パプリッ クディレクトリに置かれる。新しいファイルの名前は plans. fred になる。 /usr/spool/uucppublic というパス名は入力するには長すぎるので、 uucp コマン ドで PUBDIR を参照するための特別な表記法がある。スラッシュが続くチルド記号 ( ~ / ) は、 /usr/spool/uucppublic と翻訳される。この表記法を使うと上記の例はつぎ のように短くなる。 % uucp plans calif\ ! -/plans. 土て ed チルドースラッシュは PUBD 旧を表す -/plans. fred は、 /usr/spool/uucppublic/plans. fred に、システム calif 上で展開 される。 C シェルを使用する場合は、後で出てくる「 2.4 ファイル名メタキャラクタ とパス名」の節を参照してほしい。というのも、チルド記号は C シェルでは特別の意 味を持っており、 uucp コマンドで使用するにはクオーテーションで囲むか、エスケー プしなくてはならないからである。 44
6 章 UUCP ネットワークを拡張する というファイルを設定することが必要である。間接リンクを設定しているシステムで このような あれば、こちらのファイルを転送しようとしてくれるはすである。さらに 転送要求は、 /usr/spool/uucppublic か、システム管理者が指示したパプリックディ レクトリで起動しなくてはならない。そして、最終的なデスティネーションシステム 上のパプリックディレクトリに送られる。このようにしても、リンク上のすべてのシ ステムで同しバージョンの UUCP が実行されていなければ、転送は失敗するだろう。 BerkeIeyUNIX システムの 4.3 BSD には拡張されたリモートパス名を扱うために 設計された uusend というプログラムがある。これは、 BerkeleyUNlX システム間 で転送を行うが、各システム上で uusend コマンドが利用できるものと仮定している。 BNU では、別のシステムに宛てた転送要求の扱いに改良が加えられている。転送 するシステム上で uucp コマンドを生成するために uux を使っている。転送パス中に あるシステムでは、 uucp の実行が許可されていることが必要である。 UUCP の実装 方法によってアプローチが異なるため、転送は同しバージョンの UUCP を実行して いるシステム間に限られる ( さらに、各システム管理者によって、転送についての特 別の制限が加えられることもある ) 。 proposal というファイルのコピーを china 上の deng に送りたいとしよう。この場 合、つぎのように入力する。 %uucp -/proposal nevyork\ ! j apan\ ! china\ ! -/deng このコマンドによって、ローカルシステム newton に繋がっているシステム newyork 、 /usr/spool/uucppublic 内の proposal というファイルをコピーする要求が送ら れる。システム newyork は ( そうだとよいのだが ) 要求を japan (newyork には繋 がっているが、 newton には繋がっていない ) に送る。そして、 japan が、デスティ ネーションシステム china 上の /usr/spool/uucppublic/deng に要求を転送する。自 分と deng にコピーの成功を通知するために、 uucp の一 m オプションと一 n オプション を使うこともできる。 122
スプールディレクトリ UUCP ジョブが入力されると、 UUCP バックグラウンドプログラム ( あるいはデー モン ) による処理のために、スプールディレクトリにファイルが作成される。スプー ルディレクトリにはログファイルと多くのワーキングファイルが置かれる。ログファ イルは転送が発生するたびに追加される。また、ワーキングファイルは、システム間 の通信の過程で動的に作成される。 スプールディレクトリのパス名は /usr/spool/uucp である。 BNU が Version 2 よ りも優れている点の 1 つに、より組織化されたスプールディレクトリの導入があげら れる。本書では、 Version2 のスプールディレクトリに注目し、スプールディレクト % ls -x /usr/spool/uucp ます、スプールディレクトリのリストを示す。 リ内のさまざまなファイルについて説明しよう。 AUD IT LCK . . nat i ck Lo g-WEEK 0. Log—WEEK C . naticknA5695 D . newtonXA5584 LOGDEL STST . natick 0 . SYSLOG . LOGFILE SYSLOG LCK.. tty006 LTMP .23066 X . ca1ifX05tA 169
Appendix B スプールディレクトリ 表 B. 1 BN U ディレクトリ構造 ディレクトリ /usr/spool/uucp/ . Admin . Corrupt . Log . Old . Sequence . Status Workspace . Xqtdir systeml system2 system3 /usr/SPOOl/UUCP/. Log uuxqt uux uucp uuCICO 説明 管理用のファイル。 壊れたワークファイルと実行ファイル。処理されない。 ログファイル。 古いログファイル。 システムシーケンス番号。 システムステータスファイノレ。 UUCP テンボラリワークスペース領域。 リモート実行。 特定のシステムとの間でやりとりするファイルを置くディレクトリ。 特定のシステムとの間でやりとりするファイルを置くディレクトリ。 特定のシステムとの間でやりとりするファイルを置くディレクトリ。 UUCiCO 実行口グのディレクトリ。 uucp 要求ログのディレクトリ。 uux 要求ログのディレクトリ。 uuxqt 要求ロ久あるいはローカルシステム上でのリモー ド実行。 (BSD 4.3 ) スプールディレクトリ トコマン Berkeley UNIX システムのバージョン 4.3 (Version 2 UUCP を修正したもの ) で は、スプールディレクトリはいくつものサプディレクトリに分けられている。さらに システムステータスファイルはサプディレクトリに置かれ、処理されない壊れたワー クファイルと実行ファイルは CORRUPT というサプディレクトリに置かれる。ソフ トウェアをコンパイルする際には、 LCK というサプディレクトリを、ロックファイル を置くために指定することができる。 172