序章

Rsync は、 remote sync の略で、リモートおよびローカルのファイル同期ツールです。 アルゴリズムを使用して、変更されたファイルの部分を移動するだけでコピーされるデータの量を最小限に抑えます。

このチュートリアルでは、Rsyncを定義し、使用するときに構文を確認します rsync、Rsyncを使用してリモートシステムと同期する方法、および利用可能なその他のオプションについて説明します。

前提条件

使用を練習するために rsync ローカルシステムとリモートシステム間でファイルを同期するには、ローカルコンピューターとリモートマシンとしてそれぞれ機能する2台のマシンが必要です。 これらの2台のマシンは、適切に構成されている限り、仮想プライベートサーバー、仮想マシン、コンテナー、またはパーソナルコンピューターである可能性があります。

サーバーを使用してこのガイドに従うことを計画している場合は、サーバーを管理ユーザーと一緒にセットアップし、各サーバーにファイアウォールを構成するのが賢明です。 これらのサーバーをセットアップするには、初期サーバーセットアップガイドに従ってください。

このチュートリアルに従うために使用するマシンのタイプに関係なく、両方にSSHキーを作成しておく必要があります。 次に、各サーバーの公開鍵を他のサーバーの公開鍵にコピーします authorized_keys そのガイドのステップ2に概説されているファイル。

このガイドは、Ubuntu 20.04を実行しているマシンで検証されましたが、通常、Linuxベースのオペレーティングシステムを実行しているすべてのコンピューターで機能するはずです。 rsync インストールされています。

Rsyncの定義

Rsyncは、非常に柔軟なネットワーク対応の同期ツールです。 LinuxおよびUnixライクなシステムで広く使用されており、システムスクリプトのツールとして人気があるため、ほとんどのLinuxディストリビューションにデフォルトで含まれています。

Rsync構文を理解する

の構文 rsync などの他のツールと同様に動作します ssh, scp、 と cp.

まず、次のコマンドを実行して、ホームディレクトリに移動します。

  1. cd ~

次に、テストディレクトリを作成します。

  1. mkdir dir1

別のテストディレクトリを作成します。

  1. mkdir dir2

次に、いくつかのテストファイルを追加します。

  1. touch dir1/file{1..100}

これで、というディレクトリができました dir1 100個の空のファイルが含まれています。 ファイルをリストアップして確認します。

  1. ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

また、という空のディレクトリがあります dir2. の内容を同期するには dir1dir2 同じシステムで、実行します rsync を使用します -r 「再帰的」を表し、ディレクトリ同期に必要なフラグ:

  1. rsync -r dir1/ dir2

別のオプションは、 -a フラグ。組み合わせフラグであり、「アーカイブ」を表します。 このフラグは再帰的に同期し、シンボリックリンク、特殊ファイルとデバイスファイル、変更時刻、グループ、所有者、およびアクセス許可を保持します。 それはより一般的に使用されます -r 使用することをお勧めするフラグです。 前の例と同じコマンドを実行しますが、今回は -a 国旗:

  1. rsync -a dir1/ dir2

末尾にスラッシュがあることに注意してください(/)前の2つのコマンドの構文の最初の引数の最後で、ここで強調表示されています。

  1. rsync -a dir1/ dir2

この末尾のスラッシュは、 dir1. 末尾のスラッシュなしで、 dir1、ディレクトリを含めて、 dir2. 結果は、次のような階層を作成します。

~/dir2/dir1/[files]

もう1つのヒントは、実行する前に引数を再確認することです。 rsync 指図。 Rsyncは、を渡すことによってこれを行うためのメソッドを提供します -n また --dry-run オプション。 The -v 適切な出力を得るには、「冗長」を意味するフラグも必要です。 を組み合わせる a, n、 と v 次のコマンドのフラグ:

  1. rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

次に、次のように、その出力を、末尾のスラッシュを削除したときに受け取る出力と比較します。

  1. rsync -anv dir1 dir2
Output
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .

この出力は、ディレクトリ内のファイルだけでなく、ディレクトリ自体が転送されたことを示しています。

Rsyncを使用してリモートシステムと同期する

使用するには rsync リモートシステムと同期するには、ローカルマシンとリモートマシンの間でSSHアクセスを構成するだけで、 rsync 両方のシステムにインストールされています。 2台のマシン間でSSHアクセスを確認したら、同期することができます dir1 次の構文を使用して、前のセクションのフォルダをリモートマシンに移動します。 この場合、実際のディレクトリを転送することに注意してください。そのため、末尾のスラッシュは省略します。

  1. rsync -a ~/dir1 username@remote_host:destination_directory

このプロセスは、ローカルシステムからリモートシステムにディレクトリを「プッシュ」するため、push操作と呼ばれます。 反対の操作はpullで、リモートディレクトリをローカルシステムに同期するために使用されます。 の場合 dir1 ディレクトリがローカルシステムではなくリモートシステム上にある場合、構文は次のようになります。

  1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

お気に入り cp 同様のツールでは、ソースは常に最初の引数であり、宛先は常に2番目の引数です。

Using Other Rsync Options

Rsyncには、前のセクションで学習したフラグオプションなど、ユーティリティのデフォルトの動作を変更するための多くのオプションが用意されています。

テキストファイルなど、まだ圧縮されていないファイルを転送する場合は、で圧縮を追加することにより、ネットワーク転送を減らすことができます。 -z オプション:

  1. rsync -az source destination

The -P フラグも役立ちます。 フラグを組み合わせます --progress--partial. この最初のフラグは転送の進行状況バーを提供し、2番目のフラグは中断された転送を再開できるようにします。

  1. rsync -azP source destination
Output
sending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .

コマンドを再度実行すると、変更が加えられていないため、出力が短縮されます。 これは、変更が行われたかどうかを判断するために変更時間を使用するRsyncの機能を示しています。

  1. rsync -azP source destination
Output
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00

次のようなコマンドを使用して、一部のファイルの変更時刻を更新するとします。

  1. touch dir1/file{1..10}

次に、実行する場合 rsync-azP 繰り返しになりますが、出力では、Rsyncが変更されたファイルのみをインテリジェントに再コピーする方法に気付くでしょう。

  1. rsync -azP source destination
Output
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .

2つのディレクトリを完全に同期させるには、ファイルがソースから削除されている場合は、宛先ディレクトリからファイルを削除する必要があります。 デフォルトでは、 rsync 宛先ディレクトリからは何も削除されません。

この動作は、 --delete オプション。 このオプションを使用する前に、 -n--dry-run オプション、不要なデータ損失を防ぐためのテストを実行するには:

  1. rsync -an --delete source destination

同期しているディレクトリ内にある特定のファイルまたはディレクトリを除外する場合は、次のコンマ区切りリストでそれらを指定することで除外できます。 --exclude= オプション:

  1. rsync -a --exclude=pattern_to_exclude source destination

除外するパターンを指定している場合は、を使用して、別のパターンに一致するファイルの除外を上書きできます。 --include= オプション:

  1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

最後に、Rsyncの --backup オプションは、重要なファイルのバックアップを保存するために使用できます。 それはと組み合わせて使用されます --backup-dir オプション。バックアップファイルを保存するディレクトリを指定します。

  1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

結論

Rsyncは、ネットワーク接続を介したファイル転送を合理化し、ローカルディレクトリの同期に堅牢性を追加できます。 Rsyncの柔軟性により、さまざまなファイルレベルの操作に適したオプションになります。

Rsyncを習得すると、複雑なバックアップ操作を設計し、転送の方法と内容をきめ細かく制御できます。