マニュアルページセク ション 1: ユーザーコマンド

印刷ビューの終了

更新: 2014 年 7 月
 
 

filesync(1)

名前

filesync - 通常ファイル、ディレクトリファイル、特殊ファイルの同期

形式

filesync [-aehmnqvy] [-o src | dst] [-f src | dst | old | new] [-r directory]...
filesync [-aehmnqvy] -s source-dir -d dest-dir filename...

説明

filesync ユーティリティは、複数のコンピュータシステム (通常は、サーバーとポータブルコンピュータ) 間でファイルを同期させます。filesync は、通常ファイル、ディレクトリファイル、特殊ファイルの同期を取ります。本来、モバイルシステムでの使用を目的としていますが、filesync は据え置き型のシステムにおけるバックアップやファイルの複製などにも便利です。

システム間でファイルを同期させた場合、それぞれのシステム上の対応するファイルが同じものになります。一方または両方のシステムでファイルを変更すると、対応するファイルは同じではなくなります (つまり、同期していません)。もう一度ファイルを同じにするには、ファイル間の違いを調整しなければなりません。filesync がどのようにファイルを調整して同期させるかについての詳細は、「ファイルの調整と同期」を参照してください。

filesync コマンドには 2 つの形式があります。最初の形式の filesync はファイル引数なしで呼び出します。この形式の filesync$HOME/.packingrules ファイルに指定されているファイルおよびシステム間の違いを調整します。$HOME/.packingrules は、filesync 用のパッキング規則リストで、同期させるファイルのリストが入っています。packingrules(4) を参照してください。

2 番目の形式の filesync は、ソースシステム上のディレクトリから宛先システム上のディレクトリに特定のファイルをコピーします。さらに、この形式の filesync は、引数 (filename) として指定した (1 つまたは複数の) ファイルを $HOME/.packingrules に追加します。ソースシステムと宛先システム上のディレクトリを指定する方法については、–s オプションと –d オプションを参照してください。ファイル (filename) 引数を指定する方法については、「オペランド」の項を参照してください。

filesync コマンドは複数累積できます。つまり、filesync コマンドに指定したファイルは既存のパッキング規則ファイルに追加されます。「複数の filesync コマンド」を参照してください。

ファイルの調停と同期

filesync はコンピュータシステム間でファイルを同期させるために、次の 2 つの処理を行います。

  1. filesync は、両方のシステム上にあるパッキング規則ファイルに指定されているディレクトリとファイルを調べ、同じかどうかを判定します。異なるファイルには調整が必要です。

    filesync はまた、監視されるすべてのファイルについて、$HOME/.filesync-base ファイル内のベースラインサマリーを保守します。このファイルには、最後の調整時におけるファイルの名前、タイプ、およびサイズのリストが入っています。

  2. ベースラインファイル内の情報と指定されたオプションに基づいて (「filesync の衝突の解決」を参照)、filesync はどちらのコピーが正しいものかを判別し、正しくない方のシステムに対して必要な変更を加えます。この変更が加えられると、2 つのコピーは再び同じになります (つまり、同期しています)。

    ソースファイルが変更され、宛先ファイルが変更されていない場合、ソースファイルの変更は宛先システムに伝播されます。宛先ファイルが変更され、対応するソースファイルが変更されていない場合、宛先ファイルの変更はソースシステムに伝播されます。両方のシステム上でファイルが変更されたが、それでもまだファイルが同じでない場合、手動で衝突を解決するようにユーザーに促す警告メッセージが出力されます。「filesync の衝突の解決」を参照してください。

filesync の衝突の解決

両方のシステム上のファイルが変更された場合、filesync は、どちらのバージョンを選択するべきかを決定しようとします。どちらのバージョンを選択すればいいのかを自動的に決定できない場合、filesync は警告メッセージを出力し、2 つの互換性のないファイルを調整しないままにします。

この場合、ユーザーが手動で違いを解決しなければなりません。あるいは、どちらのバージョンを選択するかを filesync に指示しなければなりません。衝突を解決する方法を filesync に指示するには、–o オプションと –f オプションを使用します (「オプション」の項を参照)。

あるいは、衝突するファイルごとに、ユーザーが 2 つのバージョンを調べ、どちらを変更せずにおくかを決定し、手動で 2 つのバージョンを同期させます (つまり、所有権や保護モードを、コピー・削除・変更して修正します)。その後、filesync を再実行すると、衝突がまだ残っているかどうかがわかります。

パッキング規則ファイル

パッキング規則ファイル $HOME/.packingrules には、同期すべきファイルのリストが入っています。このファイルの構文については、packingrules(4) を参照してください。

$HOME/.packingrules ファイルは、ユーザーが filesync を filename 引数付きで呼び出すと自動的に作成されます。filesync のオプションを使用することにより、ユーザーは $HOME/.packingrules ファイル内のパッキング規則を増やすことができます。

パッキング規則ファイルは手動でも作成および編集できます。任意のエディタで $HOME/.packingrules を編集すると、恒久的な変更を $HOME/.packingrules に加えたり、コマンド行からは利用できないより強力なオプション (IGNORE コマンドなど) を使用できます。複雑なワイルドカード式を入力する場合も、$HOME/.packingrules ファイルを編集する方がはるかに簡単です。

ベースラインファイル

$HOME/.filesync-base は 、filesync ベースラインサマリーファイルです。filesync$HOME/.filesync-base 内の情報を使用して、調整処理と同期処理の間にファイル間の差異を識別します。ユーザーはベースラインファイルを作成および編集する必要はありません。ベースラインファイルは filesync により自動的に作成されます。このファイルには、保守されるすべてのファイルについて、最後の調整時における状態が記録されます。

複数の filesync コマンド

しばらくすると、同期させたいファイルのセットが変わってしまうことがあります。たとえば、ノートブックには現在進行中のプロジェクトに関するファイルだけを保存したいと考えることはよくあることです。これまで係ってきたすべてのプロジェクトに関するファイルを同期させようとすると、ノートブックのハードディスクは古いファイルでいっぱいになってしまいます。filesync コマンドを実行するごとに、不必要なファイルの更新に時間を費やしてしまいます。

ユーザーがノートブック上のファイルを削除すると、filesync はサーバー上の対応するファイルも削除しようとします。これは好ましいことではありません。この場合、 filesync に指示を与え、一部のファイルを同期させないようにする方法が必要になります。そのためには、次の2つの方法を利用します。

  1. $HOME/.packingrules を編集します。削除したいファイルの規則を削除します。

  2. $HOME/.packingrules を削除します。その後に filesync コマンドを使用して、同期させたいファイルを指定します。

どちらの方法も有効です。使いやすい方を選んでください。変更したいファイルの規則が少ない場合、$HOME/.packingrules を編集する方が簡単です。変更したいファイルの規則が多い場合は、$HOME/.packingrules を削除し、最初から作り直す方が簡単です。

filesync によるファイルセットの同期を停止すれば、サーバー上のファイルを気にすることなく、ノートブック上のファイルを削除できます。

モバイルマシン

filesync を使用してモバイルマシンとサーバー間でファイルを同期させる場合、パッキング規則ファイルとベースラインファイルは、サーバー上ではなく、モバイルマシン上に格納します。ノートブックにログインするときに、HOME 環境変数がノートブック上のディレクトリを正しく指定していない場合、FILESYNC 環境変数を使用すれば、パッキング規則ファイルとベースラインファイルの代替位置を指定できます。

各モバイルマシンは独自のパッキング規則ファイルとベースラインファイルを持っていなければなりません。サーバーにベースラインファイルが格納されており、複数のモバイルマシンがサーバーのベースラインに基づいて調整を試みると、ファイルの同期は正しくなくなります。この場合、モバイルマシンはファイルの状態を正確に記述していないベースラインファイルを使用することになり、結果として間違った調整が行われます。

単一のベースラインファイルを複数のマシン間で共有する際の危険性を回避するために、filesync はデフォルトの規則を新しいパッキング規則ファイルごとに追加します。このデフォルト規則により、パッキング規則ファイルとベースラインファイルがコピーされるのを防ぐことができます。

オプション

サポートしているオプションは、次のとおりです。

–a

ACL (Access Control List, アクセス制御リスト) を検査し、新しいファイルと変更されたファイルのすべてに対して ACL の同期を強制します。特定のファイルで ACL を設定できない場合、filesync はそのファイルに対する ACL 同期を停止します。

ファイルシステムの中には、ACL をサポートしていないものがあります。ACL をサポートしているファイルシステムとサポートしていないファイルシステム間で ACL を同期させることはできません。このようなファイルシステム間で ACL を同期させようとすると、多数のエラーメッセージが生成されます。

–d dest-dir

filename をコピーする宛先システム上のディレクトリを指定します。–s source-dir オプションと filename オペランドと共に使用します。–s オプションおよび「オペランド」の項を参照してください。

–e

すべての違いにフラグを立てます。filesync を root ユーザーとして実行していない限り、保護モードや所有権に関するすべての衝突を完全に解決することは不可能です。通常、ファイルの所有権または保護モードを変更できない場合、filesync は所有権と保護モードの衝突を無視します。ただし、–e (すべての同期) フラグを指定した場合、filesync はこのような違いにもフラグを立てます。

–f src | dst | old | new

–f オプションは、衝突する変更をどのように解決するかを filesync に指示します。両方のシステム上でファイルが変更されているときに、–f オプションを指定すると、filesync は指定されたシステム上の変更をそのまま (有効) にし、指定されなかったシステム上の変更を破棄します。

–f src を指定すると、ソースシステム上のファイルを有効にします。–f dst を指定すると、宛先システム上のファイルを有効にします。–f old を指定すると、古いバージョンのファイルを有効にします。–f new を指定すると、新しいバージョンのファイルを有効にします。

–f オプションと –o オプションを組み合わせるときは、それぞれのsrcdst が競合しないように指定しなければなりません。–f オプションと –o オプションで競合が発生した場合、–f オプションが無視されます。–o オプションを参照してください。

–h

エラー発生時に停止します。通常、ファイルのコピー時に読み取りエラーまたは書き込みエラーが発生した場合、filesync はエラーメッセージを出力し、別のファイルを調整しようとします。–h オプションを指定した場合、filesync はこのようなエラーが発生するとすぐに停止し、別のファイルの調整は行いません。

–m

ファイルの両方のコピーにおいて変更時間が同じであることを保証します。デフォルトでは、新たにコピーされるファイルの変更時間は調整時の時間に設定されます。ファイルの変更の順番は変更時間の昇順で決定されます。つまり、ファイルが伝播される順番は、ソースファイルの変更時間の相対的な順番と同じです。一般的に、2 つのシステム間には時間のずれがあり、これらのシステム間で変更時間を転送すると、おかしな結果になることがある、という点に注意してください。

filesync でディレクトリ内のいくつかのファイル (すべてではない) を更新すると、make プログラムが混乱してしまうことがあります。たとえば、filesync.c ファイルの同期は取るが、.o ファイルを無視する場合、変更された .c ファイルが (変更される前の .c ファイルから生成された) .o ファイルよりも前の変更時間を示すことがあります。

–n

実際の変更は行いません。–n オプションを指定した場合、filesync は、ファイルにどのような変更が加えられており、どのような調整が必要であるかを判別し、その情報を標準出力に表示します。ファイルの変更は行われません (パッキング規則ファイルも含む)。

–n オプションと –o オプションの両方を指定すると、filesync は、o オプションで指定されたシステムを解析し、そのシステムで加えられた変更を報告します。マシンが接続されていない (つまり、サーバーにアクセスできない) ときにローカルマシン上で加えられた変更を知りたい場合には、–n オプションと –o オプションを組み合わせて使用すると便利です。–o オプションを参照してください。

–o src | dst

–o オプションを指定すると、ソースシステム (src) または宛先システム (dst) のどちらか一方向だけの調整を行います。

–o src を指定すると、filesync はソースシステムから宛先システムへの変更だけを伝播します。宛先システム上で加えられた変更は無視されます。ソースディレクトリまたは宛先ディレクトリにアクセスできない場合、filesync は中断します。

–o dst を指定すると、filesync は宛先システムからソースシステムへの変更だけを伝播します。ソースシステム上で加えられた変更は無視されます。ソースディレクトリまたは宛先ディレクトリにアクセスできない場合、filesync は中断します。

–n オプションと –o オプションの両方を指定すると、filesync は、o オプションで指定されたシステムを解析し、そのシステム上で加えられた変更を報告します。マシンが接続されていない (つまり、サーバーにアクセスできない) ときにこのローカルマシン上で加えられた変更を知りたい場合には、–n オプションと –o オプションを組み合わせて使用すると便利です。–n オプションを参照してください。

–f オプションと –o オプションを組み合わせるときは、それぞれのsrcdst が競合しないように指定しなければなりません。–f オプションと –o オプションで競合が発生した場合、–f オプションが無視されます。–f オプションを参照してください。

–q

実行した各再調整アクションを記述する標準のfilesync メッセージを抑制します。

標準の filesync メッセージは、UNIX のシェルコマンドの形式 (たとえば、mvlncprmchmodchownchgrpsetfacl など) で各調整アクションを記述します。

–r directory

directory だけに調整を制限します。複数のディレクトリを指定するときは、複数の –r オプションを指定します。

–s source-dir

コピーする filename が存在しているソースシステム上のディレクトリを指定します。–d dest-dir オプションと filename オペランドと共に使用します。–d オプションおよび「オペランド」の項を参照してください。

–v

ファイルが比較されるたびに、追加の情報を標準出力に表示します。

–y

安全検査の確認応答を省略します。モバイルマシンはドメイン間を移動することがあり、filesync が操作するファイルの多くは NFS 経由でアクセスされることが予想されます。したがって、間違ったファイルシステムまたはサーバー上において、ローカルの変更を調整する危険性があります。間違ったファイルシステムまたはサーバー上で調整が行われること、多数のファイルが間違って変更または削除されます。そのような事態を回避するために、filesync は調整する前にいくつかの安全検査を実行します。多数のファイルを削除したい場合、あるいは高いレベルのディレクトリの i ノード番号を変更した場合、filesync は調整する前にユーザーにそのことをプロンプトで確認します。このような変更が行われることをすでに知っており、確認を省略したい場合は、–y (yes) オプションを使用して、そのような確認に対して自動的に y (yes) で応答します。

オペランド

次のオペランドがサポートされています。

filename

指定したソースディレクトリ (source-dir) 内にある、同期すべき通常ファイル、ディレクトリ、シンボリックリンク、または特殊ファイルの名前。複数のファイルを指定するには、各 filename をスペースで区切って指定します。filename オペランドは –s オプションと –d オプションと共に使用します。詳しくは「オプション」の項を参照してください。

filename が通常ファイルの場合、指定した宛先ディレクトリ (dest-dir) 内に、その通常ファイルが (同じファイル名で) 複製されます。

filename がディレクトリの場合、指定した宛先ディレクトリ (dest-dir) 内に、そのディレクトリおよびそのディレクトリの下のサブディレクトリとファイルが再帰的に複製されます。

filename がシンボリックリンクの場合、指定した宛先ディレクトリ (dest-dir) 内に、そのシンボリックリンクのコピーが複製されます。

filename が特殊ファイルである場合は、同じメジャーまたはマイナーデバイス番号を持つ特殊ファイルが指定された宛先ディレクトリ (dest-dir) 内に複製されます。filesync を使用して特殊ファイルを作成できるのはスーパーユーザーだけです。

宛先ディレクトリ (dest-dir) に作成されたファイルは、ソースディレクトリ内のファイルと同じアクセス許可 (所有者、グループ、他のユーザーについてのアクセス権) を持ちます。

filename 内にエスケープされたシェルのワイルドカード文字が含まれている場合、そのワイルドカード文字は $HOME/.packingrules に格納され、filesync が実行されるたびに評価されます。

たとえば、次のコマンドは、現在 $RHOME 内にある 2 つの特殊ファイルが $HOME に複製されたことを確認します。

filesync –s $RHOME –d $HOME a.c  b.c

次の例は、$RHOME 内にある *.c ファイルが (後で作成されなくても) すべて $HOME に複製されたことを確認します。

filesync –s $RHOME –d $HOME '*.c'

任意の宛先ファイルがすでに存在している場合、filesync は、これらのファイルが同じであることを確認し、同じでない場合は警告を発行します。

ファイルがコピーされた後は、ソースと宛先に区別はありません。 (–o オプションと –f オプションで指定した場合を除く)。

環境変数

FILESYNC

filesync のパッキング規則ファイルとベースラインファイルのデフォルトの位置を指定します。この環境変数のデフォルト値は $HOME です。パッキング規則ファイルとベースラインファイルの名前には接尾辞 .packingrules.filesync-base が付加されます。

LC_MESSAGES

診断メッセージや情報メッセージの表示方法を決定します。C ロケールでは、メッセージはプログラム自身が使用しているデフォルトの形 (通常、米語) で表示されます。

終了ステータス

一般に、すべてのファイルがすでに最新のものである場合、あるいは、すべてのファイルが正常に調整されている場合、filesync は 0 の終了ステータスで終了します。ただし、–n オプションが指定された場合、あるいは、エラーが発生した場合は、終了ステータスは次の論理和になります。

0

競合がなく、すべてのファイルが最新になっています。

1

解決可能な競合がいくつかあります。

2

手動で解決しなければならない競合がいくつかあります。

4

指定したファイルがいくつか存在しません。

8

いくつかのファイルでなアクセス権が不足しています。

16

パッキング規則ファイルまたはベースラインファイルにアクセスするときにエラーが発生しました。

32

無効な引数

64

指定した src または dst ディレクトリのどちらか (あるいは、その両方) にアクセスできませんでした。

128

その他の障害が発生しました。

ファイル

$HOME/.packingrules

同期すべきファイルのリスト

$HOME/.filesync-base

ベースラインサマリーファイル

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
service/network/network-clients

関連項目

packingrules(4), attributes(5)