Rsync(リモート同期)は、Linux/Unixシステムでファイルやディレクトリをリモートおよびローカルにコピーおよび同期するために最も一般的に使用されるコマンドです。
rsyncコマンドの助けを借りて、データをディレクトリ、ディスク、およびネットワークを介してリモートおよびローカルにコピーおよび同期し、データのバックアップを実行し、2台のLinuxマシン間でミラーリングを行うことができます。
この記事では、16のrsyncコマンドの基本的なおよび高度な使用法を説明し、Linuxベースのマシンでファイルをリモートおよびローカルに転送するために使用できます。 rootユーザーである必要はありません。
目次
Rsyncコマンドの利点
以下の利点があります:
- 効率的なファイル転送 – rsyncはデルタ転送アルゴリズムを使用しており、ソースと宛先のファイルの差分のみを転送するため、転送されるデータ量を大幅に削減し、大容量のファイルやディレクトリを同期するのに効率的です。
- リモートファイル同期 – rsyncはSSHを介したローカルおよびリモートファイル転送をサポートしており、ローカルとリモートシステム間の同期や複数のマシン間でディレクトリをミラーリングすることができます。
- 増分バックアップ – rsyncは増分バックアップに適しており、新しいまたは変更されたファイルのみを転送して効率的にバックアップを作成および更新します。
- ファイルのアクセス許可を保持 – rsyncは、ファイルのアクセス許可、所有権、タイムスタンプ、シンボリックリンクなど、さまざまなファイル属性を保持できます。これにより、コピーされたファイルが宛先で元の特性を保持します。
- 帯域幅制御 – rsyncを使用すると、ファイル転送中に帯域幅の使用を制限できます。これは、送受信データの圧縮および解凍方法を使用するためです。帯域幅の使用を制限
- 高速 – rsyncは、ファイル転送時に、特に大きなディレクトリを同期する場合や、部分的に転送されたファイルや宛先に既に存在するファイルを扱う場合に、scp (Secure Copy) よりも高速になることがあります。
Rsyncコマンド構文
rsyncコマンドは以下の構文に従います。
# rsync [OPTIONS] SOURCE DESTINATION
以下は、rsyncコマンドで使用されるさまざまなコンポーネントとオプションの説明です。
-v
– 詳細な情報を表示する、冗長な出力。-r
– データを再帰的にコピーします(ただし、データの転送中にタイムスタンプとアクセス許可は保持しません)。-a
– アーカイブモード、再帰的にファイルをコピーすることができ、シンボリックリンク、ファイルの権限、ユーザーとグループの所有権、およびタイムスタンプを保持します。-z
– ネットワーク使用量を減らすために転送中にファイルを圧縮します。-h
– 人が読みやすい形式で数値を出力します。-P
– 転送中に進行状況を表示します。SOURCE
– 転送されるソースファイルまたはディレクトリを指定します。これはローカルまたはリモートの場所である可能性があります。DESTINATION
– ファイルまたはディレクトリがコピーされる宛先パスを指定します。ソースと同様に、これはローカルパスまたはリモートの場所である可能性があります。
LinuxシステムにRsyncをインストールする
次のパッケージマネージャーを使用して、Linuxディストリビューションに応じてrsyncパッケージをインストールできます。
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. ファイルのローカルコピー/同期
ファイルをローカルでコピーまたは同期するには、次のコマンドを使用します。このコマンドは、ローカルマシン上の1つの場所から別の場所に1つのファイルを同期します。
この例では、ファイル名がbackup.tarであり、/tmp/backups/フォルダにコピーまたは同期する必要があります。
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
上記の例では、宛先がまだ存在しない場合、rsyncは宛先のために自動的にディレクトリを作成します。

2. ディレクトリをローカルにコピー/同期する
次のコマンドは、同じマシン内の異なるディレクトリにあるすべてのファイルを転送または同期します。
この例では、/root/rpmpkgsにいくつかのrpmパッケージファイルが含まれており、そのディレクトリを/tmp/backups/フォルダの内部にコピーしたいとします。
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. ローカルからリモートサーバーにディレクトリをコピーする
ローカルサーバーからリモートサーバーにディレクトリをコピーするには、次のコマンドを使用できます。これにより、ローカルからリモートマシンにディレクトリが同期されます。
例えば、ローカルコンピューターに「rpmpkgs」というフォルダがあり、いくつかのRPMパッケージが含まれている場合、そのローカルディレクトリの内容をリモートサーバーに送信するには、次のコマンドを使用します。
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. リモートからローカルサーバーにディレクトリをコピーする
このコマンドを使用すると、リモートディレクトリをローカルディレクトリに同期できます。この例では、リモートサーバーにあるディレクトリ/root/rpmpkgsが/tmp/myrpmsにあるローカルコンピューターにコピーされます。
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. SSHを介したRsync
rsyncを使用すると、SSH(Secure Shell)を使用してデータを転送できます。データを転送する際にSSHプロトコルを使用すると、データがインターネット上のワイヤーを介して転送される間に誰もがデータを読むことができないように暗号化された安全な接続でデータが転送されます。
また、rsyncを使用する場合、特定のタスクを実行するためにユーザー/ルートパスワードを提供する必要があります。したがって、SSHオプションを使用すると、ログイン情報が暗号化されて送信されるため、パスワードは安全になります。
rsyncをSSH経由で使用するには、通常sshと表示されるリモートシェルコマンドを指定するために-e
オプションを使用できます。
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. リモートサーバーからローカルサーバーにファイルをコピーする
リモートサーバーからローカルサーバーにファイルを同期するには、使用するプロトコルを指定してrsyncを使用し、使用したいプロトコル名を「-e」オプションで指定できます。
この例では、「ssh」を「-e」オプションとともに使用してデータ転送を行います。
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. ローカルサーバーからリモートサーバーにファイルをSSHでコピーする
ローカルサーバーからリモートサーバーにファイルを同期するには、次のコマンドを使用できます。
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. データ転送中の進行状況を表示するRsync
1つのマシンから別のマシンへデータを転送する際に進行状況を表示するには、--progress
オプションを使用します。これにより、転送の完了までの残り時間とファイルが表示されます。
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. 特定の拡張子を持つファイルをRsyncで含める
rsync操作中に特定のファイルやパターンを含めるには、すべてのファイルに一致する拡張子とともに--include
オプションを使用します。
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
提供された例では、rsyncは転送中に/path/to/source/ディレクトリから.txt
拡張子を持つファイルのみを含めます。
10. 特定の拡張子を持つファイルをRsyncで除外する
同様に、rsync操作中に特定の拡張子を除外するには、ワイルドカードパターンとともに--exclude
オプションを使用します。
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
11. Rsyncを使用してファイルを含めたり除外したりする
Rsync操作中に特定のファイルやパターンを含めたり除外したりするには、適切なワイルドカードパターンを使用して--include
および--exclude
オプションの両方を使用できます。
これらの2つのオプションを使用すると、含めるおよび除外するファイルを指定できます。これらのオプションを使用すると、同期に含めたいファイルやディレクトリを指定し、転送しないファイルやフォルダーを除外できます。
この例では、rsyncコマンドは、‘R’
で始まるファイルとディレクトリのみを含み、他のすべてのファイルとディレクトリを除外します。
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Rsyncで–deleteオプションを使用する
ソースに存在しないが、既に対象先に存在するファイル/ディレクトリがある場合、同期中にその既存のファイル/ディレクトリを削除したい場合があります。
ソースディレクトリに存在しないファイルを削除するには、--delete
オプションを使用できます。
ソースとターゲットは同期されています。今、ターゲットに新しいファイルtest.txtを作成します。
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
ターゲットには、’–delete’オプションを使用してソースと同期する際に、新しいファイルtest.txtが削除されました。

13. Rsyncでファイル転送制限を設定
転送または同期されるファイルの最大サイズを指定できます。 ” --max-size
“オプションを使用して行うことができます。この例では、最大ファイルサイズは200kであり、このコマンドは200k以下のファイルのみを転送します。
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. 転送後にソースファイルを自動的に削除
今、メインのWebサーバーとデータバックアップサーバーがあるとします。毎日バックアップを作成し、バックアップサーバーと同期しましたが、今はそのバックアップのローカルコピーをWebサーバーに保持したくありません。
だから、転送が完了してからそのローカルバックアップファイルを手動で削除するのを待ちますか? もちろんNOです。この自動削除は、’–remove-source-files’オプションを使用して行うことができます。
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Rsyncでドライランを実行
rsyncを使用する初心者で、自分のコマンドが正確に何を行うかわからない場合は。 rsyncは宛先フォルダーのものを実際にめちゃくちゃにしてしまう可能性があり、それを元に戻すのは面倒な作業になります。
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Rsync バンド幅制限の設定とファイルの転送
‘--bwlimit
‘オプションを使用して、1つのマシンから別のマシンにデータを転送する際に、帯域幅制限を設定できます。このオプションは、I/O バンド幅を制限するのに役立ちます。
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
また、デフォルトでは、rsyncは変更されたブロックとバイトのみを同期しますが、明示的にファイル全体を同期する場合は、それに ‘-W‘ オプションを使用します。
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
結論
これで、rsyncとその機能の概要を終えます。さらなる探求のために、包括的なマニュアルページ(マンページ)を参照することをお勧めします。
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/