ウェブサイト検索

Linux での Rsync コマンドの 16 の実践例


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

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

この記事では、rsync コマンドを使用して、Linux ベース マシンでファイルをリモートおよびローカルに転送するための基本的な使用法と高度な使用法を 16 個 説明します。 rsync コマンドを実行するために、root ユーザーである必要はありません。

Rsyncコマンドの利点

これには次のようないくつかの利点があります。

  • 効率的なファイル転送 – rsync はデルタ転送アルゴリズムを使用します。つまり、ソース ファイルと宛先ファイルの差分のみを転送するため、転送されるデータ量が大幅に削減され、大きなファイルやディレクトリを効率的に同期できます。
  • リモート ファイル同期 – rsync は、SSH 経由のローカル ファイル転送とリモート ファイル転送の両方をサポートします。これにより、ローカル システムとリモート システム間の同期、または複数のマシン間でのディレクトリのミラーリングが可能になります。
  • 増分バックアップ – rsync は、新しいファイルまたは変更されたファイルのみを転送することで効率的にバックアップを作成および更新するため、増分バックアップに適しています。
  • ファイルのアクセス許可を保持 – rsync は、アクセス許可、所有権、タイムスタンプ、シンボリック リンクなどのさまざまなファイル属性を保持できるため、コピーされたファイルはコピー先で元の特性を確実に保持できます。
  • 帯域幅制御 – rsync では、両端でデータの送受信中に圧縮および解凍方法を使用するため、ファイル転送中の帯域幅の使用を制限できます。
  • 高速 – rsync は、特に大規模なディレクトリを同期する場合、またはすでに部分的に転送されたファイルや宛先に存在するファイルを処理する場合、ファイルの転送において scp (セキュア コピー) よりも高速です。

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 つのファイルをある場所から別の場所に同期する次のコマンドを使用できます。

この例では、ファイル名 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. ディレクトリをローカルにコピー/同期する

次のコマンドは、すべてのファイルを同じマシン内の 1 つのディレクトリから別のディレクトリに転送または同期します。

この例では、/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. ディレクトリをローカルからリモートサーバーにコピーする

ローカル サーバーからリモート サーバーにディレクトリをコピーするには、次のコマンドを使用します。これにより、ディレクトリがローカル マシンからリモート マシンに同期されます。

たとえば、ローカル コンピュータにいくつかの RPM パッケージを含むフォルダ「rpmpkgs 」があり、そのローカル ディレクトリのコンテンツを送信したい場合は、リモートサーバーに接続するには、次のコマンドを使用できます。

rsync -avzh /root/rpmpkgs [email :/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 '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 :/root/rpmpkgs /tmp/myrpms

[email '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 (セキュア シェル) を使用できます。データ転送中に SSH プロトコルを使用すると、データが安全な接続で転送されることを保証できます。暗号化が施されているため、インターネット上でデータが転送されている間、誰もデータを読み取ることができません。

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

SSH 経由で rsync を使用するには、-e オプションを使用してリモート シェル コマンド (通常は示されているように ssh) を指定できます。

rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination

6. SSH を使用してリモート サーバーからローカル サーバーにファイルをコピーする

リモート サーバーからローカル サーバーにファイルを同期するには、「-e 」オプションと使用するプロトコル名を使用して、rsync でプロトコルを指定できます。

この例では、「-e 」オプションを指定した「ssh 」を使用してデータ転送を実行します。

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email '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 を使用してローカル サーバーからリモート サーバーにファイルをコピーする

SSH を使用してローカル サーバーからリモート サーバーにファイルを同期するには、次のコマンドを利用できます。

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email '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 を使用したデータ転送中に進行状況を表示する

あるマシンから別のマシンにデータを転送する際の進行状況を表示するには、「--progress」 オプションを使用します。これにより、ファイルと転送完了までの残り時間が表示されます。

rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs

[email '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/

提供された例では、rsync は転送中に指定された拡張子 (*.ext) を持つファイルを除外し、他のすべてのファイルとディレクトリを含めます。

11. Rsync によるファイルの包含および除外

rsync 操作中に特定のファイルまたはパターンを含めたり除外したりするには、 --include オプションと --exclude オプションの両方を適切なワイルドカード パターンとともに使用できます。

これら 2 つのオプションを使用すると、パラメータを指定してファイルを含める および 除外する ことができます。これらのオプションは、同期に含めるファイルやディレクトリを指定したり、ファイルやフォルダを除外したりするのに役立ちます。転送したくないもの。

この例では、rsync コマンドには ‘R’ で始まるファイルとディレクトリのみが含まれ、他のすべてのファイルとディレクトリは除外されます。

rsync -avze ssh --include 'R*' --exclude '*' [email :/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 :/var/lib/rpm/ /root/rpm/

[email '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

ターゲットには test.txt という新しいファイルがあり、「–delete」オプションを使用してソースと同期すると、ファイル test.txt が削除されました。 。

13. Rsync でファイル転送制限を設定する

転送または同期する最大ファイル サイズを指定できます。 「--max-size 」オプションを使用してこれを行うことができます。この例では、最大ファイル サイズは 200k であるため、このコマンドは200k 以下のファイルのみを転送します。

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm

[email '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 :/tmp/backups/

[email '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 は宛先フォルダー内の内容を非常に台無しにする可能性があり、元に戻すのは退屈な作業になる可能性があります。

このオプションを使用すると、ファイルは変更されず、コマンドの出力が表示されます。出力が希望したものとまったく同じである場合は、「--dry-run」を削除できます。 ' コマンドからオプションを選択し、ターミナル上で実行します。

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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」オプションを使用して、あるマシンから別のマシンにデータを転送する際に帯域幅制限を設定できます。このオプションはI/O帯域幅を制限するのに役立ちます。

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email '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 とその機能の概要です。その広範なオプションと機能をさらに詳しく調べるには、利用可能な包括的なマニュアル ページ (man ページ) を参照することをお勧めします。