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]