名前が示すように、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を使用して最大データ転送速度(速度)を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でログファイルを回転および圧縮する方法