GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでの17の便利なrsync(リモート同期)コマンド例

名前が示すように、rsyncコマンドは、ファイルとディレクトリをローカルおよびリモートで同期(またはコピー)するために使用されます。 rsyncの重要な機能の1つは、「デルタ転送アルゴリズム」で機能することです。 」は、ファイル全体をコピーするのではなく、ソースから宛先に変更を同期またはコピーするだけで、最終的にネットワーク経由で送信されるデータの量を減らすことを意味します。 Linuxオタクは通常、rsyncコマンドを使用して、日々のバックアップ、ミラーリング、および復元のアクティビティを管理します。ローカルマシンからリモートマシンにファイルを同期する際にSSHなどのリモートシェルを使用し、rootまたはsudo権限を必要としないため、システム内のすべてのユーザーがrsyncコマンドを使用できます。

この記事では、Linuxで役立つ17のrsyncコマンドの例について説明します。これらの例は、特にLinuxの初心者が、同期、ミラーリング、およびバックアップのタスクをより効率的に管理するのに役立ちます。

Rsyncコマンドは、オペレーティングシステムのようなすべてのUNIXおよびLinuxで使用できます。 CentOSとRHELOSの最小限のインストールを行う場合、rsyncパッケージはデフォルトのインストールの一部ではないため、CentOSとRHELにrsyncをインストールするには、以下のyumコマンドを実行します

~]# yum install rsync -y

Debian Likeオペレーティングシステム(UbuntuおよびLinux Mint)では、以下のaptコマンドを使用してrysncツールをインストールします。

~]# apt install rsync -y

rsyncコマンドの構文:

ローカル同期:#rsync{オプション}{ソース}{宛先}

リモート同期プル:#rsync {options} @

リモート同期プッシュ:#rsync @

rsyncコマンドで一般的に使用されるオプションのいくつかを以下に示します。

  • -v、–verbose詳細出力
  • -q、–quietメッセージ出力を抑制します
  • -a、–archive同期中のアーカイブファイルとディレクトリ(-aは次のオプション-rlptgoDと同じ)
  • -r、–recursiveファイルとディレクトリを再帰的に同期します
  • -b、–backup同期中にバックアップを取ります
  • -u、–update宛先ファイルが新しい場合は、ソースから宛先にファイルをコピーしないでください
  • -l、–links同期中にシンボリックリンクをシンボリックリンクとしてコピーする
  • -n、–dry-run同期なしで試運転を実行する
  • -e、–rsh =COMMANDrsyncで使用するリモートシェルについて言及します
  • -z、–compress転送中にファイルデータを圧縮する
  • -h、–人間が読める形式出力番号を人間が読める形式で表示します
  • –進捗状況転送中の同期の進捗状況を表示します

rsyncコマンドの便利な例に飛び込みましょう

例:1)ファイルをローカルにコピーまたは同期する(rsync -zvh)

pkumarユーザーのホームディレクトリから/opt/ backフォルダーにファイルをコピーするとし、以下のrsyncコマンドを実行します

[[email protected] ~]# rsync -zvh /home/pkumar/OpenStack-Networking.pdf /opt/backup
OpenStack-Networking.pdf
sent 4.09M bytes  received 35 bytes  2.73M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

上記では、圧縮には-z、冗長出力には-v、人間が読める形式の出力には-hなどのオプションを使用しました。

例:2)ディレクトリをローカルにコピーまたは同期します(rsync -zavh)

pkumarユーザーのホームディレクトリを/opt/ backupフォルダーにコピーまたは同期する場合、オプション -zavhを指定して以下のrsyncコマンドを実行するとします。 、

[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup
sending incremental file list
pkumar/
pkumar/.bash_logout
pkumar/.bash_profile
pkumar/.bashrc
pkumar/OpenStack-Networking.pdf

sent 4.09M bytes  received 96 bytes  8.19M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

ディレクトリがコピーされているかどうかを確認し、以下のコマンドを実行します

[[email protected] ~]# ls -ld /opt/backup/*
-rwx------. 1 root   root   6153239 Apr  7 00:25 /opt/backup/OpenStack-Networking.pdf
drwx------. 2 pkumar pkumar      90 Apr  7 00:25 /opt/backup/pkumar
[[email protected] ~]#

ご覧のとおり、宛先フォルダに「pkumar」ディレクトリが作成され、その内容もコピーされます。上記の例で、ソースフォルダ(/ home / pkumar /)の後にtrail /を使用すると、rsyncコマンドは宛先にpkumarディレクトリを作成しませんが、コンテンツのみをコピーします。

[[email protected] ~]# rsync -zavh /home/pkumar/ /opt/backup

例:3)ファイルとディレクトリをローカルで再帰的にコピーします(rsync-zrvhまたはrsync-zavh)

pkumarユーザーのホームディレクトリ内に複数のファイルとディレクトリがあると仮定します。以下のrsyncコマンドを使用してファイルとディレクトリを再帰的にコピーし、-aまたは-rオプションを使用してファイルとディレクトリを再帰的にコピーします。

:rsyncコマンドで -a オプションは、コピーまたは同期中のアーカイブに使用され、アーカイブとは別に、次の場合にも使用されます。

  • ファイルとディレクトリを再帰的にコピーする
  • シンボリックリンクをシンボリックリンクとしてコピー
  • 権限を保持する
  • グループを保持する
  • 変更時間を維持する
  • 所有権を保持する
[[email protected] ~]# rsync -zrvh /home/pkumar /opt/backup
or
[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup

例:4)ファイルとディレクトリをローカルシステムからリモートシステムにコピーまたは同期します

フォルダ「/home / pkumar / techi」をコピーするとします。 」/opt

の下のローカルマシンからリモートマシン(192.168.1.29)へ
[[email protected] ~]# rsync -zarvh /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
…………………………………………………………
techi/OTRS/
techi/OTRS/Database-Selection-OTRS-Installation-CentOS7.jpg
techi/OTRS/Install-OTRS-Accept-License.png
techi/OTRS/Install-OTRS-CentOS7-RHEL7.jpg
techi/OTRS/mysql-secure-installation-centos7-part2.jpg

sent 34.85M bytes  received 2.65K bytes  6.34M bytes/sec
total size is 37.77M  speedup is 1.08
……………………………………………………………
[[email protected] ~]#

例:5)ファイルとディレクトリをリモートマシンからローカルシステムにコピーまたは同期する

リモートマシン(192.168.1.29)からローカルシステムにファイルとディレクトリをコピーするとします。次の例では、リモートフォルダ“ / opt / rpms_dbをコピーしています。 / tmpの下のローカルマシンにある」 フォルダ

[[email protected] ~]# rsync -zarvh [email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.07M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

上記のコマンドは、ローカルマシンの/tmpフォルダーの下にフォルダー「rpms_db」を自動的に作成します。

[[email protected] ~]# ls -l /tmp/
total 8
-rwx------. 1 root root  827 Apr  6 12:54 ks-script-avmuxw
drwxr-xr-x. 2 root root 4096 Apr  7 01:42 rpms_db
-rw-------. 1 root root    0 Apr  6 12:35 yum.log
[[email protected] ~]# ls -l /tmp/rpms_db/
total 16028
……………………………………
-rw-r--r--. 1 root root 2844028 Nov 12 09:28 httpd-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root   92504 Nov 12 09:28 httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root 2558136 Nov 12 09:44 postfix-2.10.1-7.el7.x86_64.rpm
-rw-r--r--. 1 root root   17404 Nov 12 09:44 pytalloc-2.1.13-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  696472 Nov 12 09:46 samba-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 5070800 Nov 12 09:46 samba-client-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  210984 Nov 12 10:19 samba-common-4.8.3-4.el7.noarch.rpm
-rw-r--r--. 1 root root  167512 Nov 12 09:46 samba-common-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  458380 Nov 12 09:46 samba-common-tools-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  282332 Nov 12 09:46 samba-libs-4.8.3-4.el7.x86_64.rpm
……………………………………
[[email protected] ~]#

例:6)同期中にリモートシェルを指定する(rsync -e ssh)

rsyncコマンドでは、同期中にsshのようなリモートシェルを指定できます。rsyncを介して送信元から宛先のマシン間で安全な通信を使用したい場合は、リモートシェルとしてsshを使用する必要があります。例を以下に示します

[[email protected] ~]# rsync -zarvh -e ssh  [email protected]:/opt/rpms_db  /tmp
[email protected]'s password:
receiving incremental file list
………………………………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.82M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

例:7)rsyncコマンド出力に同期の進行状況を表示する

rsyncコマンドで同期またはコピーの進行状況を確認する場合は、「 –progress」を使用します 「、例を以下に示します

[[email protected] ~]# rsync -avh --progress [email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………………………………………………..
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
          2.84M 100%   35.22MB/s    0:00:00 (xfr#6, to-chk=18/25)
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
         92.50K 100%    1.13MB/s    0:00:00 (xfr#7, to-chk=17/25)
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
          2.56M 100%   14.44MB/s    0:00:00 (xfr#17, to-chk=7/25)
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
        696.47K 100%    3.71MB/s    0:00:00 (xfr#19, to-chk=5/25)
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
          5.07M 100%   19.90MB/s    0:00:00 (xfr#20, to-chk=4/25)
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
        210.98K 100%  844.42kB/s    0:00:00 (xfr#21, to-chk=3/25)
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
        167.51K 100%  667.70kB/s    0:00:00 (xfr#22, to-chk=2/25)
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
        458.38K 100%    1.77MB/s    0:00:00 (xfr#23, to-chk=1/25)
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm
        282.33K 100%    1.09MB/s    0:00:00 (xfr#24, to-chk=0/25)

sent 484 bytes  received 16.38M bytes  3.64M bytes/sec
total size is 16.37M  speedup is 1.00
[[email protected] ~]#

また読む:Linuxでファイルを安全に転送するための14のSCPコマンドの例

例:8)ファイルをコピーせずにディレクトリ構造をコピーする

ローカルマシンからリモートに、またはその逆にのみファイルをスキップしてディレクトリ構造をコピーしたいシナリオがいくつかあります。

「/home/pkumar」のディレクトリ構造をローカルマシンからリモートマシン(192.168.1.29)の/optフォルダにコピーするとします。

[email protected] ~]# rsync -av -f"+ */" -f"- *" /home/pkumar [email protected]:/opt/
[email protected]'s password:
building file list ... done
………………………………………………
pkumar/

sent 43 bytes  received 19 bytes  17.71 bytes/sec
total size is 0  speedup is 0.00
[[email protected] ~]#
>

例:9)scpで失敗した後、大きなファイル転送を再開します

Linux管理プロファイルには、scpコマンドを使用して大きなファイルのコピーを開始したシナリオがいくつかありますが、途中で終了し、サイズと時間がかかるため、scpを使用して再度コピーを開始する余裕はありません。

したがって、この状況では、rsyncコマンドを使用して、中断または終了したところからファイルのコピーを開始できます。つまり、rsyncは、scpコマンドを使用して部分的にコピーされたファイルを転送できます。例を以下に示します

[[email protected] ~]# scp [email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso                   28%  526MB  61.5MB/s   00:21 ETA
^CKilled by signal 2.
[[email protected] ~]#
[[email protected] ~]# rsync -P --rsh=ssh [email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso
  1,921,843,200 100%   18.47MB/s    0:01:39 (xfr#1, to-chk=0/1)
[[email protected] ~]#

例:10)ファイルがソースに存在しない場合は、宛先でファイルを削除します(–delete)

すでにソースから宛先にファイルを同期していて、ソースからファイルを削除した場合は、–deleteオプションを使用してrsyncコマンドで宛先のファイルを強制的に削除できます。例を以下に示します

[[email protected] ~]# rsync -avz --delete /opt/rpms_db [email protected]:/tmp/rpms_db
[email protected]'s password:
sending incremental file list
deleting rpms_db/apr-util-1.5.2-6.el7.x86_64.rpm
deleting rpms_db/apr-1.4.8-3.el7_4.1.x86_64.rpm
rpms_db/

sent 862 bytes  received 105 bytes  276.29 bytes/sec
total size is 15,947,152  speedup is 16,491.37
[[email protected] ~]#

例:11)ファイル転送サイズに制限を設ける(–max-size)

rsyncを使用して大きなファイルを転送またはコピーしたくない場合は、オプション「– max-size={specify-size-here}」を使用してください 、サイズが500Kを超えるファイルを転送したくないと仮定しましょう。

注:サイズをMBで指定するには、Mを使用し、GBの場合はGを使用します。

[[email protected] ~]# rsync -avz --max-size='500K' /opt/rpms_db [email protected]:/tmp

例:12)宛先で変更されたファイルを同期/コピーしないでください

宛先でファイルを変更し、同期中にソースから変更されたファイルを上書きしたくないシナリオがいくつかあります。そのため、これは -uを使用して簡単に実現できます。 rsyncコマンドのオプション

[[email protected] ~]# rsync -avzu [email protected]:/opt/techi /home/pkumar/techi
[email protected]'s password:
receiving incremental file list

sent 37 bytes  received 4,960 bytes  1,427.71 bytes/sec
total size is 37,771,649  speedup is 7,558.87
[[email protected] ~]#

例:13)同期後にソースからファイルを削除する(–remove-source-files)

rsyncコマンドを使用して同期が完了したら、ソースからファイルを削除するとします。次の例では、ローカルシステム「/home/pkumar/techi.tgz」のフォルダ 」はリモートシステム(192.168.1.29)に同期され、同期が完了すると、ソースからファイルが削除されます。

[[email protected] ~]# rsync --remove-source-files -zvh /home/pkumar/techi.tgz [email protected]:/opt
[email protected]'s password:
techi.tgz
sent 597 bytes  received 43 bytes  182.86 bytes/sec
total size is 518  speedup is 0.81
[[email protected] ~]#
[[email protected] ~]# ls -l /home/pkumar/techi.tgz
ls: cannot access /home/pkumar/techi.tgz: No such file or directory
[[email protected] ~]#

例:14)実際の同期の前にrsyncコマンドをドライラン

rsyncコマンドの動作に関心がない場合もあるので、そのような場合はrsyncのドライランを実行することをお勧めします

[[email protected] ~]# rsync --dry-run --remove-source-files -zvh /home/pkumar/projects.tar  [email protected]:/opt
[email protected]'s password:
projects.tar

sent 51 bytes  received 19 bytes  7.37 bytes/sec
total size is 981.24M  speedup is 14,017,682.29 (DRY RUN)
[[email protected] ~]#

例:15)rsyncとの同期中にファイルを含めたり除外したりする

特定の種類のファイルとディレクトリをコピーまたは同期し、特定の種類のファイルまたはディレクトリを除外したい場合があります。 Rsyncコマンドは、包含オプションと除外オプションの両方をサポートしています。

次の例では、タイプpdfおよびrpmのファイルをコピーし、pngファイルタイプを除外します。

[[email protected] ~]# rsync -avz -e ssh --include '*.pdf *.rpm' --exclude '*.png' /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
techi/postfix-2.10.1-7.el7.x86_64.rpm

sent 9,469,912 bytes  received 96 bytes  2,705,716.57 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

例:16)rsyncでデータ転送速度を制限する(–bwlimit =

rsyncコマンドでは、あるマシンから別のマシンへのデータ転送の帯域幅制限を設定できます。「 –bwlimit =」を使用します。 ‘データ転送速度を制限するrsyncコマンドのオプション。

rsyncを使用して最大データ転送速度(速度)を600 KB/sに設定するとします。例を以下に示します

[[email protected] ~]# rsync -avz --progress --bwlimit=600 /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
6,153,239 100%  910.02kB/s    0:00:06 (xfr#1, to-chk=6/8)
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
2,844,028 100%  615.28kB/s    0:00:04 (xfr#2, to-chk=5/8)
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
92,504 100%  507.51kB/s    0:00:00 (xfr#3, to-chk=4/8)
techi/pkumar-2.png
0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/8)
techi/pkumar-3.png
0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=2/8)
techi/pkumar.png
0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/8)
techi/postfix-2.10.1-7.el7.x86_64.rpm
2,558,136 100%  594.80kB/s    0:00:04 (xfr#7, to-chk=0/8)

sent 9,470,087 bytes  received 153 bytes  485,653.33 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

例:17)ソースと宛先のファイルとディレクトリの違いを表示する

-i」を使用します rsyncコマンドの「」オプションを使用して、ソースと宛先の間のファイルとディレクトリの違いを一覧表示します。例を以下に示します

[[email protected]teway ~]# rsync -avzi /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
.d..t...... techi/
<f.st...... techi/projects.txt

sent 438 bytes  received 45 bytes  138.00 bytes/sec
total size is 11,648,064  speedup is 24,116.07
[[email protected] ~]#

上記のコマンド出力のように、宛先の「projects.txt」というファイルに違いがあります。上記の出力のキーワードの意味は次のとおりです

  • d:宛先ファイルの変更を示します
  • f:ファイルを示します
  • t:タイムスタンプの変更を示します
  • s:サイズの変更を示します

これがこのチュートリアルのすべてです。これらの例でrsyncコマンドをより効率的に理解する場合は、フィードバックとコメントを共有してください

また読むLinuxでの実用的な例を含む17の便利なtarコマンド

また読むLogrotateを使用してLinuxでログファイルを回転および圧縮する方法


Linux
  1. Linuxでの12の便利なWgetコマンドの例

  2. Linuxでのlsコマンド:17の便利な例の説明

  3. Linuxでのrsyncコマンドの実用例

  1. Rsyncコマンド:Linuxで役立つ20の例

  2. Linuxでの20の便利なDockerコマンドの例

  3. 14 Linux での便利な「cat」コマンドの例

  1. 14Linuxで役立つ「ls」コマンドの例

  2. 9Linuxでの便利なtouchコマンドの例

  3. LinuxでのRsyncコマンドと例