rsync リモート同期は、2 つのホストまたはマシン間でファイルとディレクトリを効率的に同期する Unix 系システム用のソフトウェア ユーティリティです。 1 つはファイルの同期元となるソースまたはローカルホストで、もう 1 つは同期が行われるリモートホストです。基本的には2つの方法があります rsync データをコピー/同期できます:
- などのリモート シェルを介して別のホストとの間でコピー/同期する ssh 、 rsh 。
- TCP を使用した rsync デーモンによるコピー/同期。
Rsync は次の点で有名です。 デルタ転送アルゴリズム この場合、ローカルホストに存在するソースファイルと、宛先またはリモートホストにある既存のファイルとの差分のみがコピーされます。
例:
rsync local-file user@remote-host:remote-file>
ここでは何が起きるのですか:
Rsync は最初に SSH を使用して接続します。user>リモートホストに送信し、要求しますuser's>パスワード。接続すると、リモート ホストの rsync が呼び出され、リモート ファイルがローカル ファイルと一致するように、ローカル ファイルのどの部分をコピーする必要があるかが 2 つのプログラムによって決定されます。 rsync の次の動作に注意してください。
- リモートホストに存在しないファイルはコピーされます。
- 更新されたファイルは同期され、rsync はファイルの変更された部分のみをリモート ホストにコピーします。
- まったく同じファイルはリモート ホストにコピーされません。
Linux の「rsync」コマンドの構文
rsync [options] source [destination]>
オプション Linuxの「rsync」コマンドで利用可能
| オプション | 説明 |
|---|---|
| a、-アーカイブ | これは次の使用と同等です。 -rlptgoD 。アーカイブ モードには、ファイルを再帰的にコピーし、ほぼすべて (シンボリック リンク、ファイルのアクセス許可、ユーザーとグループの所有権、タイムスタンプなど) を保存するなど、必要なオプションがすべて含まれています。 |
| -v、-冗長 | デフォルトでは、rsync はサイレントに動作します。単一の -v オプションを使用すると、転送されたファイルに関する情報と最後に概要が表示されます。 2 つの -v オプションを追加すると、デルタ送信およびスキップされたファイルに関するステータスの更新と、最後に詳細情報が表示されます。通常、rsync のデバッグには複数の -v オプションが使用されます。 |
| -h、-人間が判読できる形式 | 人間が読める形式で出力します。 |
| -z、-圧縮 | 転送中にファイルデータを圧縮する |
例
リストコマンドとして「rsync」を使用する
ソース パスのみが指定されている場合、ソースの内容は次のような出力形式でリストされます。ls -l>。
複数行のコメントPowerShell
rsync foo/>
上記のコマンドは、ディレクトリ内に存在するファイルとディレクトリをリストします。 ふー 。
出力:
ファイルとディレクトリをローカルにコピー/同期する
ソース パスまたは宛先パスのどちらもリモート ホストを指定していない場合、rsync コマンドはコピー コマンドとして動作します。
rsync -avh foo/ bar/>
上記のコマンドは、ディレクトリに存在するすべてのファイルとディレクトリをコピー/同期します。foo>ディレクトリへ バー 。宛先ディレクトリが存在しない場合(ここではbar>)、rsync は自動的にそれを作成し、その中のすべてのデータをコピーします。
出力:
文字列を int に変換する
SSHを使用したRsync
rsync がリモート システムに接続するには 2 つの異なる方法があります。
- トランスポートとしてリモート シェル プログラムを使用する (例:
ssh>(セキュアシェル) またはrsh>(リモートシェル))。 - TCP 経由で rsync デーモンに直接接続します。
ここでは、ssh を介した rsync について説明します。
rsync -avhze ssh /foo user@remote-host:/tmp/>
使用するプロトコルの種類を指定するには、-e>オプションが使用されます。
出力:
特定のファイル権限を持つ Rsync
ファイルのアクセス許可を変更してファイルをローカルまたはリモート ホストに同期したい場合。次のコマンドを使用する必要があります。
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
上記のコマンドは、ディレクトリに存在するすべてのファイルを同期します。 /foo ディレクトリに存在するファイルを使用して /tmp の中にremote-host>グループ GROUP を持つ USER が所有するすべてのファイル。
出力:
注記: のuser>そしてgroup>リモートホストにすでに作成されている必要があります。
と再同期します --ignore-existing-files>
宛先にある既存のファイルをスキップすることもできます。これは通常、 –リンク先 オプションを使用してバックアップ実行を続行中に中断されました。
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
したがって、コピー先に存在しないファイルはすべてコピーされます。ここで私は削除しましたgeeksforgeeks>ディレクトリからのフォルダーfoo>, したがって、のみをコピーする必要がありますgeeksforgeeks>ディレクトリ。
注記: これは既存のディレクトリを無視しません。無視しないと何も行われません。ローカル ホストのファイルに何らかの変更があったとしても、そのファイルがリモート ホスト上に存在する場合は同期されません。
出力:
転送中に進行状況を表示する
ローカルホストからリモートホストへのデータ転送中の進行状況を表示するには、次のように使用できます。-–progress>オプション。
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
特定のファイルの転送が完了すると、rsync は以下に示すような概要行を出力します。
knn アルゴリズム
出力:
上の画像でファイルを見ると、/foo/file2>、それは私たちにそれを伝えます
- ファイルの長さは合計 44 バイトでした。
- ファイル全体の平均転送速度は、完了までにかかった 0:00:00 秒間で 1 秒あたり 42.97 キロバイトでした。
- 現任中2度目の移籍でした rsync セッション。
- ファイルリスト内の合計 13 個のファイルのうち、リモートホストがチェックする (最新かどうかを確認する) 必要があるファイルがさらに 10 個残っています。
ローカル ファイル システム上で最近更新されたファイルをリモート ホスト経由でコピーする場合。それは -アップデート フラグ。動作は次のようになります。
- リモートホストに存在しないファイルはコピーされます。
- ローカルとリモートの両方に存在するが、ローカル ホストのタイムスタンプの方が新しいファイルは、リモート ホストにコピーされます。 (逆に、古いタイムスタンプを持つファイルはコピーされません)。
ここで、いくつかの変更を加えました ファイル1 そして ファイル2 、しかし変化は ファイル2 最近行われました。だからそれだけ ファイル2 同期されます。
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
出力: 
転送が成功した後、ローカルホストからファイルを自動的に削除します
ここで、Web サーバーとバックアップ サーバーがあり、毎日バックアップを作成してバックアップ サーバーと同期した後、バックアップのローカル コピーを Web サーバーに保持したくないとします。したがって、転送が成功した後に手動で削除する代わりに、--remove-source-files>Web サーバーからファイルを自動的に削除するフラグ。
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
出力:
注記: これにより、ファイルのみが削除され、ディレクトリは削除されません。
ローカルホスト上で削除されたファイルを削除します
ローカルホストで削除されたファイルがあり、それをリモートホストでも更新したい場合は、--delete>オプション。
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
出力:
それで、ここで ファイル1 、 ファイル2 、 ファイル3 ローカル ホストで削除され、リモート ホストでも同様に更新されていることがわかります。
注: ` rsync` は、両側に存在するディレクトリを同期するためにファイルを自動的に削除しません。
「rsync」によるドライランの実行
ドライ ランでは、「rsync」は試行実行を実行しますが、変更は加えず、実際の実行とほぼ同じ出力が表示されます。通常、これは -v, –verbose および/または -i, –itemize-changes オプションと一緒に使用され、実際に実行する前に `rsync` コマンドが何を行うかを確認します。
文字列比較のためのCプログラム
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
出力:
結論
この記事では、ホストまたはマシン間でファイルとディレクトリを同期するための多用途かつ強力なツールである Linux の rsync コマンドについて説明しました。デルタ転送アルゴリズムとさまざまなオプションにより、効率的なデータ同期、バックアップ機能、ファイル転送管理を提供します。 rsync コマンドをマスターすることで、Linux ユーザーはファイルの一貫性を確保し、データ転送を最適化し、データ管理ワークフローを合理化できます。