名前 | 形式 | 機能説明 | オプション | 使用法 | 使用例 | ファイル | 属性 | 関連項目 | 診断 | 警告 | 使用上の留意点
rdist ユーティリティは、複数のホスト上でファイルのコピーを保守します。マスターコピーの所有者、グループ、モード、更新時刻はそのまま保持しながら、実行中のプログラムを更新できます (ファイルの内容が変更されなかった場合、rdist は所有者やモードの変更を反映しないことに注意してください)。通常、リモートホスト上のコピーは、そのサイズと更新時刻がローカルホスト上のオリジナルと異なっていれば更新されます。-y オプション (更新時刻モード) を使用すると、更新時刻だけがチェックされます。サイズの比較は行われません。下記を参照してください。
rdist には 2 つの形式があります。「形式」の項に示されている 1 つ目の形式の rdist は、-f オプションの distfile 引数で示されたファイルから、ファイルやディレクトリを更新する手順を読み込みます。distfile 引数の値が `–' の場合は、標準入力から読み込みます。-f が省略された場合、rdist は初めに自分の作業中のディレクトリ内で distfile を探し、次に Distfile を探して更新用の手順を得ようとします。
「形式」の項に示されている 2 つ目の形式の rdist では、コマンド行オプションとして -c オプションを使用してパスを指定します。
複数のマシン間で rdist を使用するには、各ホストマシンに /etc/host.equiv ファイルが用意されているか、またはユーザーがホームディレクトリ内の .rhosts 中にエントリを持っていなければなりません。詳細については hosts.equiv(4) を参照してください。
次のオプションを指定できます。
バイナリ比較。単に日付とサイズを比較するのではなく、バイナリ比較を行い、内容が異なっていればファイルを更新します。
指定したホストへ pathname で示すパス名をコピーします。destpath を指定した場合は、そのホスト上の pathname を更新しません。相対ファイル名は、ユーザーのホームディレクトリに相対であると見なされます。`login @' を先頭に記述した場合には、その login のユーザー ID を使って更新処理が行われます。`:destpath' を記述した場合は、リモートファイルはその パス名としてインストールされます。
macro で示すマクロに対して value で示す値を設定します。このオプションは、distfile 中のマクロ定義を変更して使いたい場合に使用します。value として指定できるのは、空の文字列、1 個の名前、または全体をカッコで囲んで複数の名前を空白で区切って記述したものです。
デバッグ処理を実施します。
distfile が示すファイルに、更新処理の手順が記述されていることを指定します。distfile 引数として `–' を指定すると、標準入力とみなされます。
シンボリックリンクをたどります。つまりリンク自身をコピーするのではなく、リンクが指すファイルをコピーします。
未解決のリンクを無視します。rdist は転送対象のファイルのリンク構造を保守しようとし、すべてのリンクが見つけられなかったときユーザーに警告を出します。
更新対象とするホストマシンを host が示すマシンだけに限定します。上記の distfile 中に複数のホストが記述されていて、その一部に対してだけ更新を行いたい場合、この -m オプションを必要な回数だけ指定して対象ホストを限定できます。
コマンドを実行しないで単に表示します。このオプションは、distfile をデバッグする場合に便利です。
静寂モード。更新するファイルを標準出力に出力しません。
関連していないファイルを削除します。つまりディレクトリを更新する際、リモートホスト上にあるファイルのうち、マスター (ローカル) ディレクトリに対応するものがないファイルを削除します。このオプションは、ディレクトリのコピーで内容がまったく同一のものを保守する際に便利です。
すべてのホスト上でファイルが最新状態にあることを確認します。最新の日付でないファイルが見つかると、それが表示されます。ただし、どのファイルも更新されず、またメールも送られません。
ファイル名全体が、宛先ディレクトリ名の終わりに付加されます。通常、リネームを行う際には 名前の最後の構成要素だけが付加されます。このオプションを使えば、コピーされるファイルのディレクトリ構造を平にする代わりに、その構造を保持します。たとえば、(dir1/f1 dir2/f2) というファイルに対して dir3 にリネームする旨を指定すると、dir3/f1 と dir3/f2 ではなく、 dir3/dir1/f1 と dir3/dir2/f2 という名のファイルが作成されます。文字 ~ で始まるファイル名があるときに -w オプションを使用すると、ホームディレクトリ以外の すべてが宛先名に付加されます。
マスターコピーよりも日付の古いリモートコピーが見つかったとき、更新しないで警告メッセージを発行します。更新時刻だけがチェックされます。サイズの比較は行われません。
復帰改行、タブ、空白文字の各文字は、いずれも空白として扱われます。入力行が変わっても、次の対応指定が検出されるまでは現在の対応が継続されます。対応指定の始まりは、ファイル名の後に `->' が続いたもの、またはファイル名のリストの始まりを示すカッコ ( で示されます。
注釈は # で始まり復帰改行で終わります。
variable_name '=' name_list [ label: ] source_list '->' destination_list command_list [ label: ] source_list '::' time_stamp_file command_list
rdist のマクロ機能には制限があります。マクロが展開されるのは、ファイル名またはホスト名のリスト内、および特定のプリミティブの引数リスト内に限られます。マクロを使ってプリミティブやそのオプションを表したり、`->' や `::' 記号を表したりすることはできません。
マクロの定義は、以下の形式の行で記述します。
macro = value
マクロの参照は、以下のような文字列で表します。
${macro}
ただし make(1S) の場合と同様に、マクロ名が 1 文字で構成されている場合には中カッコは省略できます。
シェルのメタキャラクタである [、 ]、 {、 }、 *、 ? は、 csh(1) の場合と同様に、認識されて (ローカルホスト上でのみ) 展開されます。メタキャラクタの先頭にバックスラッシュを 付加すれば、エスケープすることができます。文字 ~ も、 csh の場合と同様に展開されますが、ローカルホスト上と宛先ホスト上では別個に展開されます。
ファイル名の先頭が / でも ~ でもない場合、各宛先ホスト上においてユーザーのホームディレクトリに相対しているとみなされます。この場合、現在の作業中のディレクトリに相対ではない点に注意してください。複数のファイル名を指定する場合には、全体を括弧で囲まなければなりません。
rdist が各ファイルのリモートコピーを更新する際にどのような動作を実行するかを、以下のプリミティブを使って指定できます。
日付の古いファイルとディレクトリを再帰的にコピーします。newname オペランドが指定されていないときは、ローカルファイルの名前がリモートホスト上のコピーに与えられます。ファイル名のパス中の親ディレクトリが、リモートホスト中に存在していなければ、新たに生成されます。安全のため rdist は、宛先ホスト上にある空でないディレクトリを通常ファイルやシンボリックリンクには置き換えません。ただし -R オプションが指定された場合には、空でないディレクトリも、対応するファイル名がマスターホスト上に存在していないと削除されます。
install 用のオプションの意味論は、コマンド行で指定する対応するオプションのものと同じです。ただしその有効範囲は 特定のマップに限定されています。宛先ホストで使用されるログイン名は、宛先名の形式が login@host. である場合を除き、ローカルホストでのログイン名と同じです。宛先名が上記の形式のときは、ユーザー名 login で更新処理が実行されます。
address で示す TCP/IP アドレスにメールを送信します。アドレスは以下の形式で記述します。
user@host
メールは、更新されたファイルと 検出されたエラーから構成されます。指定されたアドレスに接尾辞 `@host ' が付加されていなければ、rdist は宛先ホストの名前を付加して完全な形にします。
filename 引数で示すファイル群を更新の対象から除くことを指定します。
pattern 引数で示す正規表現に一致するファイルを更新の対象から省くことを指定します。正規表現に関する詳細は、ed(1) を参照してください。なお distfile 中では、\ と $ の両文字はエスケープしなければなりません。pattern 中にシェル変数を指定することは可能ですが、シェルのファイル名展開機能はサポートされていません。
Bourne シェル sh(1) のコマンド行を指定して、各ファイルの更新後にそれらの コマンドをリモートホスト上で実行するよう指示します。filename 引数を 1 つも指定しなければ、どのファイルの更新後でも command-line 引数で示すコマンド行が実行されます。このときシェル変数 FILE は、ローカルホスト上のファイル名に設定されます。command-line 中に疑問符を記述すれば、入力行を distfile から読ませることができます。複数のシェルコマンドを記述するには、コマンド間をセミコロン (;) で区切ります。
command-line を実行するシェル用の、デフォルトの作業用ディレクトリは、リモートホスト上でのユーザーのホームディレクトリです。
ftp コマンドは IPv6 に対応しています。ip6(7P) のマニュアルページを参照してください。
以下に示す distfile の例は、hermes と magus という 2 つのホスト上で、共有ライブラリの同一コピー、共有ライブラリで初期化したデータファイル、インクルードファイル、ディレクトリを保守するように rdist に対して指示しています。magus 上では、コマンドはスーパーユーザーとして実行されます。rdist は、タイムスタンプファイルと異なるローカルファイルを見つけるたびに、merlin@druid に報告します。括弧 ( ) は、コピー元リストまたはコピー先リスト中に、空白で区切られた名前が 0 個またはそれ以上含まれている場合に使用します。
HOSTS = ( hermes root@magus ) FILES = ( /usr/local/lib/libcant.so.1.1 /usrlocal/lib/libcant.sa.1.1 /usr/local/include/{*.h} /usr/local/bin ) (${FILES}) -> (${HOSTS}) install -R ; ${FILES} :: /usr/local/lib/timestamp notify merlin@druid ; |
接続を許可するホスト名 / ユーザー名リスト (ユーザー用)
ユーザー名を共有するホスト名リスト (システム用)
更新リスト用の一時ファイル
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
使用条件 | SUNWcsu |
rdist のバージョン番号が一致しない、というメッセージが出力された場合、シェル起動時に何らかの問題 (たとえばそのユーザーが属しているグループの数が多すぎる) があったことに起因している可能性が高いと考えられます。
スーパーユーザーは、NFS がマウントしたファイルシステム上では、通常のアクセス特権を持っていません。rdist を使ってそのようなファイルシステムをコピーしようとしても、失敗するか、またはコピーの所有者が “nobody” になります。
ソースファイルは、ローカルホスト上に存在するかマウントされていなければなりません。
ディレクトリ中のすべてのファイルを更新した後で特殊コマンドを 1 回だけ実行する、という処理を簡単に行う方法がありません。
変数の展開ができるのは、名前のリストに対してだけです。汎用的なマクロ機能は提供されていません。
ファイルの更新時刻が負の値つまり 1970 年 1 月 1 日より古い場合、rdist は異常終了します。
空でないディレクトリを通常ファイルや シンボリックリンクで置き換えるための、“force” オプションは提供されていません。また、ファイルモードと所有者だけが異なるファイルに関して、その 2 種類の情報だけを更新する方法も必要です。
名前 | 形式 | 機能説明 | オプション | 使用法 | 使用例 | ファイル | 属性 | 関連項目 | 診断 | 警告 | 使用上の留意点