rsync工具介绍

安装命令:yum install -y rsync

[root@aminglinux-123 ~]# rsync -av /etc/passwd /tmp/1.txt
sending incremental file list
passwd

sent 2,372 bytes  received 35 bytes  4,814.00 bytes/sec
total size is 2,280  speedup is 0.95
[root@aminglinux-123 ~]# rsync -av /etc/passwd 192.168.193.128:/tmp/1.txt
The 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)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.193.128' (ECDSA) to the list of known hosts.
[email protected]'s password:
sending incremental file list

sent 45 bytes  received 12 bytes  2.65 bytes/sec
total 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 格式可以对应[email protected]


 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 test2
test1
[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 1
lrwxrwxrwx 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 list
created directory test2
./
1
123.txt -> /root/123.txt
2
3

sent 248 bytes  received 107 bytes  710.00 bytes/sec
total 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 1
lrwxrwxrwx 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 list

sent 39 bytes  received 12 bytes  102.00 bytes/sec
total 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
./
1

sent 127 bytes  received 38 bytes  330.00 bytes/sec
total size is 0  speedup is 0.00

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

[root@aminglinux-123 rsync]# rsync -av --delete test1/ test2/
sending incremental file list
deleting 123.txt

sent 81 bytes  received 23 bytes  208.00 bytes/sec
total 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/
[email protected]'s password:
sending incremental file list
created directory /tmp/test2
./
1
1.txt
2
2.txt
3
4

sent 374 bytes  received 166 bytes  98.18 bytes/sec
total 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/
[email protected]'s password:
sending incremental file list
rsync: change_dir "/root//test1" failed: No such file or directory (2)
created directory /tmp/test4

sent 20 bytes  received 45 bytes  11.82 bytes/sec
total size is 0  speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]