Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ rdist(1) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

sh(1)

csh(1)

stat(2)

RDIST(1)  —  NEWS-OS Programmer’s Manual

名称

rdist − リモートホストへのファイルのディストリビューション(分配)プログラム

形式

rdist [ −nqbRhivwy ] [ −f distfile ] [ −d var=value ] [ −m host ] [ name ... ]

rdist [ −nqbRhivwy ] −c name ... [login@]host[:dest]

解説

rdist は多数のホスト上に同一のファイルを コピーするコマンドです。 これは可能であればオーナ、 グループ、 モード、 変更日時を保存し、 また実行中のプログラムを 更新することができます。 rdist は distfile からコマンドを読み込み、 ファイルやディレクトリの更新を指示します。 distfile が‘−’であれば標準入力が読み込まれます。 −f オプションの指定がなければ、 プログラムは最初に‘distfile’を、 次に‘Distfile’を入力として使うために捜します。 コマンド行に name の指定がなければ、 rdist は distfile 中にリストにされているディレクトリ及び ファイルの全てを更新します。 そうでなければ、 ‘name’は更新されるファイルの名前もしくは実行するコマンドの ラベルとして解釈されます。 ラベルとファイル名が混同する場合には、 ラベルであると仮定されます。 これらは指定したコマンドを使って 指定したファイルを更新するために一緒に使われます。

−c オプションは rdist に残りの引数が小さな distfile であると強制的に解釈させます。 distfile は次のものと同等です。

( name ... ) −> [login@]host

install[dest] ;

他のオプションは以下のとおりです。

−d value の値を持つ var を定義します。 −d オプションは distfile 中の様々な変数の定義をしたり、 変更することに使用されます。 value には空の文字列や、 名前、 またはタブやスペースやスラッシュによって分けたカッコに囲まれた名前のリストを 入れることができます。

−m 更新を行うマシンを限定します。 更新するホストを distfile 中のホストの一部に限定するために、 複数の −m 引数を使うこともできます。

−n コマンドを実行せずに表示のみ行います。 このオプションは distfile のデバッグに使います。

−q quiet モード。 ファイルが修正されたときには通常は標準出力に表示されます。 −q オプションはこれを抑制します。

−R 無関係のファイルを削除します。 ディレクトリを更新する際に、 リモートホスト上にありマスターディレクトリにないファイルが削除されます。 これは同一ディレクトリのコピーの保持に利用できます。

−h シンボリックリンクをたどります。 リンク自身ではなく、 リンク先のファイルをコピーします。

−i 解決できないリンクを無視します。 rdist は通常コピーされたファイルのリンク構造の保持を試み、 すべてのリンクが見つからないときユーザに警告をします。

−v すべてのホストで更新されたかをチェックします。 古いファイルがあれば表示されますが、 ファイルの変更やメールでの通知は行われません。

−w whole モード。 ファイル名の全てが目的のディレクトリ名に付け加えられます。 通常は、 ファイルの名前を変えるときにはファイル名の最後の要素が使用されます。 これはディレクトリ構造を 平均にするのではなく、 コピーされるファイルのディレクトリ構造を保存します。 例えば、 (dir1/f1 dir2/f2) のようなファイルのリストを dir3 に名前をつけ変えるとき、 dir3/f1 と dir3/f2 となるのではなく、 ファイル dir3/dir1/f1 と dir3/dir2/f2 を生成します。

−y younger モード。 ファイルは通常 mtime と size が一致しないときに更新されます (stat(2) 参照)。 −y オプションはマスターコピーより新しいファイルを 更新しないようにします。 これは他のホスト上の新しいコピーを置き換えてしまうのを 防ぐときに使用します。 マスターコピーより新しいファイルのときに警告メッセージを表示します。

−b バイナリ比較。 2つのファイルの日付とサイズが違ったときに、 更新を実行します。

distfile の内容は、 コピーすべきファイル、 宛先ホスト、 及び更新を 実行する操作のエントリが連続したものです。 これらのエントリは次の形式いずれかです。

 

<variable name> ‘=’ <name list>
[ label: ] <source list> ‘−>’ <destination list> <command list>
[ label: ] <source list> ‘::’ <time_stamp file> <command list>

 

最初の書式は変数定義に使用します。 2番目の書式はファイルを 他のホストへ分配するために使用します。 3番目の書式は与えらた日付以前に変更されたファイルのリストを 作成する際に使用します。 source list は、 マスターコピーとして分配するローカルホスト上のファイルもしくは ディレクトリのリストを指定します。 destination list はファイルがコピーされるホストのリストです。 source list の中の各ファイルは、 ホスト上のファイルが古く更新されるべき (2番目の書式)場合、 または time stamp ファイルより新しいファイル (3番目の書式)のとき、 変更のリストに追加されます。

ラベルはオプションです。 これは部分的な更新の際にコマンドの識別に使われます。

復帰改行やタブ及び空白は区切りとして使われるのみで、 その他の場合は無視されます。 コメントは‘#’で始まり復帰改行で終ります。

展開すべき変数は‘$’で始まり、 1つの文字か大かっこ [ ] で囲まれた名前が続きます (後の例参照)。

source list と destination list は次の書式です。

 

<name>
または

‘(’ <ゼロか、空白で区切られた名前のリスト> ‘)’
 

シェルのメタキャラクタ‘[’、 ‘]’及び ‘{’、 ‘}’、 ‘∗’、‘?’は、 csh(1) と同じ方法で展開 (ローカルホスト上のみ) 及び認識されます。 これらはバックスラッシュでエスケープすることができます。 ‘~’もまた csh と同様に展開されますが、 ローカルまたは分配先のホスト上では別々に展開されます。 ‘~’で始まるファイル名と共に −w オプションが使われた場合、 ホームディレクトリを除くすべてが分配先名に付け加えられます。 ‘/’または‘~’で始まらないファイル名は、 分配先のユーザのホームディレクトリからのパスとみなします。

ゼロまたはそれ以上のコマンドのコマンドリストは次の書式です。

‘install’<options>opt_dest_name ‘;’
‘notify’<name list>‘;’
‘except’<name list>‘;’
‘except_pat’<pattern list> ‘;’
‘special’<name list>string ‘;’

install コマンドは古いファイルまたはディレクトリのコピーに使われます。 各分配元ファイルは、 宛先リスト中にある各ホストにコピーされます。 ディレクトリも同様に再帰的にコピーされます。 Opt_dest_name はファイルの名前を変えるときのオプションのパラメータです。 install コマンドがコマンドリスト中に現われないときや、 宛先での名前が指定されないときは、 分配元のファイル名が使われます。 パス名中のディレクトリがリモートホスト上に存在しない場合には、 それは生成されます。 事故を防ぐために、 宛先ホスト上の空でないディレクトリは、 通常のファイルもしくはシンボリックリンクとは置き換えられません。 しかし‘−R’オプションの下では、 空でないディレクトリもマスターホスト上に対応するファイル名が まったくなければ削除されてしまいます。 options は‘−R’及び ‘−h’、 ‘−i’、 ‘−v’、 ‘−w’、‘−b’であり、 分配元リストのファイルにだけ適用されるオプションを除き、 コマンド行上と同じ意味を持ちます。 宛先ホスト上で使用されるログイン名は、 宛先名の書式が“login@host”であることを除き、 ローカルホストと同じです。

notify コマンドは、 リストされた名前へ更新されたファイル (及び起こるかも知れないエラー) のリストをメールするときに使用されます。 もし名前に‘@’が現われなければ、 名前に宛先ホストが添えられます (例、name1@host、name2@host、... )。

except コマンドは、 name list にリストされたファイルを 除いて(except)、 source list 中のすべてのファイルを 更新するときに使用します。 通常、 これは特定のファイルを除いたディレクトリ中のすべてを コピーする場合に使用します。

except_pat コマンドは、 pattern list が正規表現 (詳細は ed(1) 参照)のリストであることを除き、 except コマンドと同様です。 パターンのどれかがファイル名中の何等かの文字列と合致した場合は、 そのファイルは無視されます。 ‘\’は引用文字であるので、 正規表現の一部に使用する際には、 2つ連続に書かなければならないことに注意して下さい。 変数は pattern list の中で展開されますが、 シェルのファイルパターンマッチングキャラクタは展開されません。 ‘$’を入れたいときは、‘\’でエスケープしてください。

special コマンドは、 name list 中のファイルが更新もしくはインストールされた後に、 リモートホスト上で sh(1) コマンドを実行するときに使用します。 name list が省略されていれば、 シェルコマンドは更新またはインストールされた全てのファイルについて実行されます。 シェル変数‘FILE’には、 string 中のコマンド実行の前に、 カレントファイル名がセットされます。 string の始まりと終わりは‘"’であり、 distfile 中の複数行にまたがることができます。 shell に複数のコマンドを与えるときは、‘;’で分けてください。 コマンドは、更新したホストの、 ユーザのホームディレクトリで実行されます。 special コマンドは、プログラムが更新された後に、 個人的なデータベース等の再構築に使用することができます。

次に小さな例を挙げます。

 

HOSTS = ( matisse root@arpa)
 FILES = ( /bin /lib /usr/bin /usr/games
/usr/include/{∗.h,{stand,sys,news∗,pascal,machine}/∗.h}
/usr/lib /usr/man/man? /usr/ucb /usr/local/rdist )
 EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )
 ${FILES} −> ${HOSTS}
install −R ;
except /usr/lib/${EXLIB} ;
except /usr/games/lib ;
special /usr/lib/sendmail "/usr/lib/sendmail −bz" ;
 srcs:
/usr/src/bin −> arpa
except_pat ( \\.o\$ /SCCS\$ ) ;
 IMAGEN = (ips dviimp catdvi)
 imagen:
/usr/local/${IMAGEN} −> arpa
install /usr/local/lib ;
notify ralph ;
 ${FILES} :: stamp.cory
notify root@cory ;

 

関連ファイル

distfile入力コマンドファイル
/tmp/rdist∗更新リストのテンポラリファイル

関連事項

sh(1), csh(1), stat(2)

診断

ユーザのシェルの起動の問題のいくつかにより、 rdist のバージョン番号の不適当な組合せについてメッセージが 出力されるかも知れません。 例えば、 ユーザが属するグループ数が多すぎるなど。

バグ

分配元のファイルは rdist が実行されるローカルホスト上に 存在していなくてはなりません。

ディレクトリ中のすべてのファイルを 更新した後に special コマンドを 実行させる簡単な方法はありません。

ファイルリストについてのみ変数の展開が行われます。 これらは一般的なマクロ機能とすべきです。

rdist は負の mtime(Jan 1,1970以前) を 持ったファイルをアボートしてしまいます。

‘force’オプションによってシンボリックリンクまたは 通常ファイルによる空でないディレクトリの置換を 許可すべきです。 他が同一のファイルの、 モード及びオーナを 更新するための手段もまた必要です。

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026