Linux中rsync(远程同步)命令详解示例
安装
- Install rsync on CentOS & RHEL
yum install rsync -y
- Install rsync on Ubuntu & Linux Mint
apt install rsync -y
命令语法
- 本地同步
[root@meshell]# rsync <options> <source> <Destination>
- 远程同步到本地
[root@meshell]# rsync <options> <UserName>@<Remote-Host>:<Source-File-Dir> <Destination>
- 本地文件远程同步
[root@meshell]# rsync <options> <Source-File-Dir> <UserName>@<Remote-Host>:<Destination>
下面列出了rsync命令中的一些常用选项:
- -v, –verbose 详细输出
- -q, –quiet 禁止输出消息
- -a, –archive 同步归档文件和目录(-a等于以下选项-rlptgoD)
- -r, –recursive 递归同步文件和目录
- -b, –backup 在同步期间进行备份
- -u, –update 如果目标文件较新,不将文件从源复制到目标
- -l, –links 在同步期间将符号链接复制为符号链接
- -n, –dry-run 进行不同步的试运行
- -e, –rsh=COMMAND 要在rsync中使用的远程shell指令
- -z, –compress 传输过程中压缩文件数据
- -h, –human-readable 以人类可读的格式显示输出数字
- –progress 显示传输过程中的同步进度
下面就是rsync命令的一些示例:
在本地复制或同步文件
假设我们想将文件从meshell用户的主目录复制文件到/opt/back文件夹,执行以下rsync命令
[root@gateway ~]# rsync -zvh /home/meshell/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
[root@gateway ~]#
在上面,我们使用了-z进行压缩,-v进行详细输出和-h进行人类可读输出的选项
在本地复制或同步目录
假设我们想将meshell用户的主目录复制或同步到/opt/backup文件夹,执行以下带有选项-zavh的rsync命令.
[root@meshell ~]# rsync -zavh /home/meshell /opt/backup
sending incremental file list
meshell/
meshell/.bash_logout
meshell/.bash_profile
meshell/.bashrc
meshell/OpenStack-Networking.pdf
sent 4.09M bytes received 96 bytes 8.19M bytes/sec
total size is 6.15M speedup is 1.50
[root@meshell ~]#
让我们验证是否复制目录,执行以下命令.
[root@meshell ~]# ls -ld /opt/backup/*
-rwx------. 1 root root 6153239 Apr 7 00:25 /opt/backup/OpenStack-Networking.pdf
[root@meshell ~]#
在本地递归复制文件和目录
假设我们在meshell用户主目录中有多个文件和目录,请使用以下rsync命令以递归方式复制文件和目录,或者使用-a或-r选项以递归方式复制文件和目录。
在rsync命令中-a选项用于在复制或同步期间进行归档,并且除了归档以外-a选项还用于以下操作:
- 递归复制文件和目录
- 将符号链接复制为符号链接
- 保留权限
- 保存组
- 保留修改时间
- 保留所有权
[root@meshell ~]# rsync -zrvh /home/meshell /opt/backup
或者
[root@meshell ~]# rsync -zavh /home/meshell /opt/backup
将文件和目录从本地复制或同步到远程系统
假设我们要将文件夹/home/meshell/techi从本地计算机复制到远程计算机(192.168.1.29)下的/opt目录.
[root@meshell ~]# rsync -zarvh /home/meshell/techi root@192.168.1.29:/opt
root@192.168.1.29'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
……………………………………………………………
[root@meshell ~]#
将文件和目录从远程计算机复制或同步到本地系统
假设我们想将文件和目录从远程计算机(192.168.1.29)复制到我们的本地系统,在下面的示例中,我正在远程文件夹/opt/rpms_db复制到本地计算机/tmp文件夹下.
[root@meshell ~]# rsync -zarvh root@192.168.1.29:/opt/rpms_db /tmp
root@192.168.1.29'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
[root@meshell ~]#
上面的命令将在我们本地计算机的/tmp文件夹下自动创建一个文件夹”rpms_db”。
[root@meshell ~]# 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
[root@meshell ~]# 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
……………………………………
[root@meshell ~]#
在同步期间指定远程ssh
在rsync命令中,我们可以在同步过程中指定像ssh这样的远程shell,假设我们想通过rsync在源到目标计算机之间使用安全通信,那么我们应该将ssh用作远程shell,示例如下所示.
[root@meshell ~]# rsync -zarvh -e ssh root@192.168.1.29:/opt/rpms_db /tmp
root@192.168.1.29'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
[root@meshell ~]#
在rsync命令输出中显示同步进度
如果要在rsync命令中查看同步或复制进度,请使用“ –progress”,示例如下.
[root@meshell ~]# rsync -avh --progress root@192.168.1.29:/opt/rpms_db /tmp
root@192.168.1.29'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
[root@meshell ~]#
复制目录结构而不复制文件
在某些情况下,我们只希望将跳过文件的目录结构从本地计算机复制到远程,反之亦然。 假设我们要将”/home/meshell”的目录结构从本地计算机复制到/opt文件夹下的远程计算机(192.168.1.29).
root@meshell ~]# rsync -av -f"+ */" -f"- *" /home/meshell root@192.168.1.29:/opt/
root@192.168.1.29's password:
building file list ... done
………………………………………………
meshell/
sent 43 bytes received 19 bytes 17.71 bytes/sec
total size is 0 speedup is 0.00
[root@meshell ~]#
scp失败后恢复大文件传输
在linux管理员配置文件中,有些情况下我们已经开始使用scp命令复制较大的文件,但是该文件在中间终止,由于它的大小和时间消耗,我们无法使用scp重新开始复制它。
因此,在这种情况下,可以使用rsync命令,因为它可以从中断或终止的位置开始复制文件,换句话说,rsync可以传输使用scp命令部分复制的文件。示例如下所示.
[root@meshell ~]# scp root@192.168.1.29:/root/ubuntu-18.04-desktop-amd64.iso /opt
root@192.168.1.29's password:
ubuntu-18.04-desktop-amd64.iso 28% 526MB 61.5MB/s 00:21 ETA
^CKilled by signal 2.
[root@meshell ~]#
[root@meshell ~]# rsync -P --rsh=ssh root@192.168.1.29:/root/ubuntu-18.04-desktop-amd64.iso /opt
root@192.168.1.29'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)
[root@meshell ~]#
如果源中不存在目标文件,删除该文件
如果已经将文件从源同步到目标,并且已经从源删除了文件,则可以使用–delete选项强制rsync命令删除目标上的文件,示例如下所示.
[root@meshell ~]# rsync -avz --delete /opt/rpms_db root@192.168.1.28:/tmp/rpms_db
root@192.168.1.28'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
[root@meshell ~]#
限制文件传输大小
如果您不想使用rsync传输或复制大文件,则使用选项’–max-size = {specify-size-here}’,假设我们不希望传输其文件大小超过500K, 注意:要指定大小(以MB为单位),请使用M;对于GB,请使用G。
[root@meshell ~]# rsync -avz --max-size='500K' /opt/rpms_db root@192.168.1.28:/tmp
不要在目标位置同步/复制已修改的文件
在某些情况下,我们在目标位置修改了文件,并且不想在同步时从源覆盖已修改的文件,因此可以使用rsync命令中的-u选项轻松实现.
[root@meshell ~]# rsync -avzu root@192.168.1.29:/opt/techi /home/meshell/techi
root@192.168.1.29'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
[root@meshell ~]#
同步后从源中删除文件
假设您想在使用rsync命令完成同步后从源中删除文件。在下面的示例中,本地系统”/home/meshell/techi.tgz”中的文件夹已同步到远程系统(192.168.1.29),一旦同步完成,它将从源中删除文件。
[root@meshell ~]# rsync --remove-source-files -zvh /home/meshell/techi.tgz root@192.168.1.29:/opt
root@192.168.1.29's password:
techi.tgz
sent 597 bytes received 43 bytes 182.86 bytes/sec
total size is 518 speedup is 0.81
[root@meshell ~]#
[root@meshell ~]# ls -l /home/meshell/techi.tgz
ls: cannot access /home/meshell/techi.tgz: No such file or directory
[root@meshell ~]#
在实际同步之前测试运行rsync命令
在某些情况下,我们与rsync命令的行为无关,因此在这种情况下最好进行rsync的空运行.
[root@meshell ~]# rsync --dry-run --remove-source-files -zvh /home/meshell/projects.tar root@192.168.1.29:/opt
root@192.168.1.29'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)
[root@meshell ~]#
与rsync同步期间包含和排除文件
在某些情况下,我们要复制或同步特定类型的文件和目录,并希望排除特定类型的文件或目录。 rsync命令支持包含和排除选项。 在下面的示例中,要复制pdf和rpm类型的文件,并排除png文件类型。
[root@meshell ~]# rsync -avz -e ssh --include '*.pdf *.rpm' --exclude '*.png' /home/meshell/techi root@192.168.1.29:/opt
root@192.168.1.29'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
[root@meshell ~]#
在rsync中限制数据传输速度
在rsync命令中,我们可以设置从一台计算机到另一台计算机的数据传输的带宽限制,请在rsync命令中使用”–bwlimit =
[root@meshell ~]# rsync -avz --progress --bwlimit=600 /home/meshell/techi root@192.168.1.29:/opt
root@192.168.1.29'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
[root@meshell ~]#
查看源和目标之间文件和目录的差异
在rsync命令中使用”-i”选项列出源和目标之间文件和目录的差异。示例如下所示
[root@meshell ~]# rsync -avzi /home/meshell/techi root@192.168.1.29:/opt
root@192.168.1.29'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
[root@meshell ~]#
根据以上命令输出,目标上名为”projects.txt”的文件存在差异。以下是上述输出中关键字的含义,
- d:指示目标文件的更改
- f:表示文件
- t:表示时间戳更改
- s:表示尺寸变化
以上就是rsync命令的基本用法。