LinuxでRsyncコマンドを使用する方法:16の実用的な例

Rsyncリモート同期)は、Linux/Unixシステムでファイルやディレクトリをリモートおよびローカルにコピーおよび同期するために最も一般的に使用されるコマンドです。

rsyncコマンドの助けを借りて、データをディレクトリ、ディスク、およびネットワークを介してリモートおよびローカルにコピーおよび同期し、データのバックアップを実行し、2台のLinuxマシン間でミラーリングを行うことができます。

この記事では、16rsyncコマンドの基本的なおよび高度な使用法を説明し、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は宛先のために自動的にディレクトリを作成します。

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

5. SSHを介したRsync

rsyncを使用すると、SSH(Secure Shell)を使用してデータを転送できます。データを転送する際にSSHプロトコルを使用すると、データがインターネット上のワイヤーを介して転送される間に誰もがデータを読むことができないように暗号化された安全な接続でデータが転送されます。

また、rsyncを使用する場合、特定のタスクを実行するためにユーザー/ルートパスワードを提供する必要があります。したがって、SSHオプションを使用すると、ログイン情報が暗号化されて送信されるため、パスワードは安全になります。

rsyncSSH経由で使用するには、通常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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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が削除されました。

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/