rsync工具介绍

安装命令:yum install -y rsync

[root@aminglinux-123 ~]# rsync -av /etc/passwd /tmp/1.txtsending incremental file listpasswdsent 2,372 bytes  received 35 bytes  4,814.00 bytes/sectotal size is 2,280  speedup is 0.95
[root@aminglinux-123 ~]# rsync -av /etc/passwd 192.168.193.128:/tmp/1.txtThe authenticity of host '192.168.193.128 (192.168.193.128)' can't be established.ECDSA key fingerprint is SHA256:/pKbINKTISanvNQ+5fJAqgFOnBJ7wbI68LKeFPZcVA0.ECDSA key fingerprint is MD5:06:1f:8f:91:36:47:28:0c:72:08:6b:9f:28:b0:49:19.Are you sure you want to continue connecting (yes/no)? yPlease type 'yes' or 'no': yesWarning: Permanently added '192.168.193.128' (ECDSA) to the list of known hosts.root@192.168.193.128's password:sending incremental file listsent 45 bytes  received 12 bytes  2.65 bytes/sectotal size is 2,280  speedup is 40.00

上例中会把/etc/passwd同步到/tmp/目录下,并改名为1.txt。远程复制命令:rsync -av /etc/passwd 192.168.193.128:/root/

rsync的命令格式

*SRC源目录,源文件

*DEST目标目录,目标文件

 rsync [OPTION] … SRC   DEST

本地与本地拷贝数据

 rsync [OPTION] … SRC   [user@]host:DEST

本地拷贝数据至远程

[user@]host:DEST 格式可以对应root@192.168.189.128

 rsync [OPTION] … [user@]host:SRC   DEST

远程目录同步数据到本地。

 rsync [OPTION] … SRC   [user@]host::DEST

与其他验证方式不同。

 rsync [OPTION] … [user@]host::SRC   DEST

与其他验证方式不同。

rsync常用选项

 -a 包含-rtplgoD

 -r 同步目录时要加上,类似cp时的-r选项

 -v 同步时显示一些信息,让我们知道同步的过程,可视化显示进度

 -l 保留软连接

(加上此选项之后,软链接状态跟源软链接状态是一样的,万一源链接指向的文件被删除了,那么也会跟着失效。-L则能避免此情况发生)

 -L 加上该选项后,同步软链接时会把源文件给同步

 -p 保持文件的权限属性

 -o 保持文件的属主

 -g 保持文件的属组

 -D 保持设备文件信息

 -t 保持文件的时间属性(mtime,ctime,atime)

 --delete 删除DEST中SRC没有的文件

例如B上没有A所没有的文件,A目录有123,B有4,如果此时加了此选项,A->B,会把B的4删掉。

使其子文件同步。如果想一模一样,就要加--delete,如果不想一模一样,可以不加。

 --exclude=PATTERN 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步。(支持通配)

 -P 显示同步过程,比如速率,比-v更加详细

 -u 加上该选项后,如果DEST中的文件比SRC新,则不同步。大意就是,把DST中比SRC还新的文件排除掉,不会覆盖。update简写。

 -z 传输时压缩zip格式

[root@aminglinux-123 rsync]# mkdir test2[root@aminglinux-123 rsync]# ls test2[root@aminglinux-123 rsync]# rsync -a test1 test2[root@aminglinux-123 rsync]# ls test2test1[root@aminglinux-123 rsync]# ls test2/test1/1  123.txt  2  3

避免把test1放到test2当中命令是:

[root@aminglinux-123 rsync]# ls test2/test1/1  123.txt  2  3[root@aminglinux-123 rsync]# ^C[root@aminglinux-123 rsync]# rm -rf test2[root@aminglinux-123 rsync]# rsync -a test1/ test2/[root@aminglinux-123 rsync]# ls -l test2总用量 0-rw-r--r-- 1 root root  0 7月  18 16:15 1lrwxrwxrwx 1 root root 13 7月  18 16:15 123.txt -> /root/123.txt-rw-r--r-- 1 root root  0 7月  18 16:15 2-rw-r--r-- 1 root root  0 7月  18 16:15 3

rsync -a test1/ test2/ 备份目录时,要加斜杠。

rsync -l:可以把SRC中软连接的目标文件复制到DST。

[root@aminglinux-123 rsync]# rm -rf test2[root@aminglinux-123 rsync]# rsync -avl test1/ test2/sending incremental file listcreated directory test2./1123.txt -> /root/123.txt23sent 248 bytes  received 107 bytes  710.00 bytes/sectotal size is 13  speedup is 0.04[root@aminglinux-123 rsync]# ls -l test2/总用量 0-rw-r--r-- 1 root root  0 7月  18 16:15 1lrwxrwxrwx 1 root root 13 7月  18 16:15 123.txt -> /root/123.txt-rw-r--r-- 1 root root  0 7月  18 16:15 2-rw-r--r-- 1 root root  0 7月  18 16:15 3

使用-u选项

不加-u选项,会把test2/1的创建时间变成test1/1一样。下面的例子创建时间是一样。

[root@aminglinux-123 rsync]# ll test1/1 test2/1-rw-r--r-- 1 root root 0 7月  18 16:15 test1/1-rw-r--r-- 1 root root 0 7月  18 16:15 test2/1

不加-u如下所示:

[root@aminglinux-123 rsync]# echo "1111" >test2/1[root@aminglinux-123 rsync]# ll test2/1-rw-r--r-- 1 root root 5 7月  18 20:50 test2/1[root@aminglinux-123 rsync]# rsync -a test1/1 test2/[root@aminglinux-123 rsync]# ll test2/1-rw-r--r-- 1 root root 0 7月  18 16:15 test2/1

这里test2/1的创建时间还是和test1一样。下面是加-u选项,如下所示:

[root@aminglinux-123 rsync]# echo "1111" >test2/1[root@aminglinux-123 rsync]# ll test2/1-rw-r--r-- 1 root root 5 7月  18 20:54 test2/1[root@aminglinux-123 rsync]# rsync -avu test1/1 test2/sending incremental file listsent 39 bytes  received 12 bytes  102.00 bytes/sectotal size is 0  speedup is 0.00[root@aminglinux-123 rsync]# ll test2/1 test1/1-rw-r--r-- 1 root root 0 7月  18 16:15 test1/1-rw-r--r-- 1 root root 5 7月  18 20:54 test2/1

加上-u选项后,不会再把test1/1同步为test2/1了。

使用--delete选项

[root@aminglinux-123 rsync]# rm -f test1/123.txt[root@aminglinux-123 rsync]# ls test1/1  2  3[root@aminglinux-123 rsync]# rsync -av test1/ test2/sending incremental file list./1sent 127 bytes  received 38 bytes  330.00 bytes/sectotal size is 0  speedup is 0.00

上例中,test2/目录并没有删除123.txt。下面加上--delete选项,示例命令如下:

[root@aminglinux-123 rsync]# rsync -av --delete test1/ test2/sending incremental file listdeleting 123.txtsent 81 bytes  received 23 bytes  208.00 bytes/sectotal size is 0  speedup is 0.00[root@aminglinux-123 rsync]# ls test2/1  2  3

这里test2/目录下的123.txt也被删除了。

如果DST中增加文件了,而SRC当中没有这些文件,同步时加上--delete选项后同样会删除新增的文件。

[root@aminglinux-123 rsync]# touch test2/4[root@aminglinux-123 rsync]# ls test1/1  2  3[root@aminglinux-123 rsync]# ls test2/1  2  3  4[root@aminglinux-123 rsync]# rsync -a --delete test1/ test2/[root@aminglinux-123 rsync]# ls test1/1  2  3[root@aminglinux-123 rsync]# ls test2/1  2  3

使用--exclude选项

[root@aminglinux-123 rsync]# touch test1/4[root@aminglinux-123 rsync]# rsync -a --exclude="4" test1/ test2/[root@aminglinux-123 rsync]# ls test1/1  2  3  4[root@aminglinux-123 rsync]# ls test2/1  2  3

该选项还可以与匹配字符*一起使用。

[root@aminglinux-123 rsync]# ls test1/1  1.txt  2  2.txt  3  4[root@aminglinux-123 rsync]# rsync -a --progress  --exclude="*.txt" test1/ test2/sending incremental file list./4              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/5)

--progress选项,主要用来观察rsync同步过程状态的。

rsync应用实例

通过ssh的方式

[root@aminglinux-123 rsync]# rsync -avl test1/ 192.168.193.128:/tmp/test2/root@192.168.193.128's password:sending incremental file listcreated directory /tmp/test2./11.txt22.txt34sent 374 bytes  received 166 bytes  98.18 bytes/sectotal size is 0  speedup is 0.00
[root@aminglinux-123 rsync]# rsync -avl test1/ 192.168.193.128:/tmp/test2/ ./test3/Unexpected remote arg: 192.168.193.128:/tmp/test2/rsync error: syntax or usage error (code 1) at main.c(1343) [sender=3.1.2]

通过密钥登录远程主机

[root@aminglinux-129 ~]# rsync -avl test1/ 192.168.193.129:/tmp/test4/root@192.168.193.129's password:sending incremental file listrsync: change_dir "/root//test1" failed: No such file or directory (2)created directory /tmp/test4sent 20 bytes  received 45 bytes  11.82 bytes/sectotal size is 0  speedup is 0.00rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]