rsync 工具几乎在每天的工作当中都会用到,是日常工作的必备工具之一。我们必须要对 此工具了如指掌!
(1)本地–>本地备份 (2)本地–>网络备份 (3)网络备份–>本地
假设有个需求,有个A目录里面的一直不停的被写些日志或者数据,但是我们需要同步到B目录,每隔一小时就要同步一下。假如一个小时就更新了一个小文件,使用cp就会从头到尾的复制一次,这样会浪费很多资源和时间。
rsync [OPTION] … SRC DEST
rsync [OPTION] … SRC [[email protected]]host:DEST
rsync [OPTION] … [[email protected]]host:SRC DEST
rsync [OPTION] … SRC [[email protected]]host::DEST
rsync [OPTION] … [[email protected]]host::SRC DEST
##### #rsync -av /etc/passwd /tmp/12.txt
// -a:包含了多个选项;-v:可视化
##### #rsync -av /etc/passwd [email protected]192.168.30.158:/tmp/123.txt
//备份本地目录/etc/passwd 到远程电脑的/tmp/123.txt
-a 包含-rtplgoD -r 同步目录时要加上,类似cp时的-r选项 -v 同步时显示一些信息,让我们知道同步的过程 在写脚本的时候千万不要添加-v -l 保留软连接 -L 加上该选项后,同步软链接时会把源文件给同步 -p 保持文件的权限属性 -o 保持文件的属主 -g 保持文件的属组 -D 保持设备文件信息 -t 保持文件的时间属性 –delte 删除DEST中SRC没有的文件 –exclude 过滤指定文件,如–exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步 -P 显示同步过程,比如速率,比-v更加详细 在写脚本的时候千万不要添加-P -u 加上该选项后,如果DEST中的文件比SRC新,则不同步 -z 传输时压缩
[[email protected] sbin]# rsync -avP /tmp/data/ [email protected]:/tmp/databak/
rsync: Failed to exec ssh: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(605) [sender=3.0.9]
[root@zhdy-01 sbin]# yum -y install openssh-clients
[[email protected]01 ~]# rsync -avL /root/111/ /tmp/111_dest
sending incremental file list
created directory /tmp/111_dest
./
12.txt.bak
123.tar.gz
22.txt.bak
322.ipt
wqe/
wqe/asd/
sent 1105042 bytes received 99 bytes 2210282.00 bytes/sec
total size is 1104583 speedup is 1.00
软连接所指向的源文件一起拷贝过去。
例如,假如我们在目标目录内增加了些文件,但是我们不希望这些增加的文件存在,需要保持源目录的文件和目标目录保持一致:
[[email protected]01 ~]# touch /tmp/111_dest/asd.txt
[[email protected]01 ~]# rsync -avL --delete /root/111/ /tmp/111_dest/
sending incremental file list
./
deleting asd.txt
sent 149 bytes received 17 bytes 332.00 bytes/sec
total size is 1104583 speedup is 6654.11
例如:我们需要在同步的时候不同步.bak的文件:
[root@zhdy-01 ~]# rm -rf /tmp/111_dest/*
[root@zhdy-01 ~]# ls !$
ls /tmp/111_dest/*
ls: 无法访问/tmp/111_dest/*: 没有那个文件或目录
[root@zhdy-01 ~]# ls /root/111/
123.tar.gz 12.txt.bak 22.txt.bak 322.ipt wqe
[root@zhdy-01 ~]# rsync -avL --exclude "*.bak" /root/111/ /tmp/111_dest/
sending incremental file list
./
123.tar.gz
322.ipt
wqe/
wqe/asd/
sent 247603 bytes received 61 bytes 495328.00 bytes/sec
total size is 247363 speedup is 1.00
我们也可以同时制定多个 –exclude
[[email protected]01 111]# ls
123.tar.gz 123.txt 12.txt.bak 213sa.txt 22.txt.bak 322.ipt asd.txt wqe
[[email protected]01 111]# rsync -avL --exclude "*.txt" --exclude "322*" /root/111/ /tmp/111_dest/
sending incremental file list
./
12.txt.bak
123.tar.gz
22.txt.bak
wqe/
wqe/asd/
sent 1101166 bytes received 80 bytes 2202492.00 bytes/sec
total size is 1100780 speedup is 1.00
同时过滤以.txt结尾的,顺便以322开头的,不需要同步。
[[email protected]01 111]# rsync -avP /root/111/ /tmp/111_dest
sending incremental file list
./
12.txt.bak
552 100% 0.00kB/s 0:00:00 (xfer#1, to-check=8/10)
123.tar.gz
243560 100% 232.28MB/s 0:00:00 (xfer#2, to-check=7/10)
123.txt
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=6/10)
213sa.txt
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=5/10)
22.txt.bak
856668 100% 81.70MB/s 0:00:00 (xfer#5, to-check=4/10)
322.ipt
3803 100% 371.39kB/s 0:00:00 (xfer#6, to-check=3/10)
asd.txt
0 100% 0.00kB/s 0:00:00 (xfer#7, to-check=2/10)
wqe/
wqe/asd/
sent 1105209 bytes received 156 bytes 2210730.00 bytes/sec
total size is 1104583 speedup is 1.00
这就是加上-P 的作用。更加直观的去展现传输的速度(大文件更能直观的看出来!)
还有这样一个情况,加入咱们在目标目录中创建一个文件,并写了一些东西,但是我希望在同步的时候不覆盖目标目录内的文件内容:
[[email protected]01 111_dest]# ls
123.tar.gz 123.txt 12.txt.bak 213sa.txt 22.txt.bak 322.ipt asd.txt wqe
[[email protected]01 111_dest]# vim asd.txt
[[email protected]01 111_dest]# cat asd.txt
sdasdasdad
asdasdasdas
ddsasdsad
sadsadasd
[[email protected]01 111_dest]# rsync -avPu /root/111/ /tmp/111_dest
sending incremental file list
./
sent 199 bytes received 17 bytes 432.00 bytes/sec
total size is 1104583 speedup is 5113.81
[[email protected]01 111_dest]# cat asd.txt
sdasdasdad
asdasdasdas
ddsasdsad
sadsadasd
ssh备份本地的文件+目录到远程主机(这里我没有输入密码是因为之前已经做了密钥认证,一般情况还是需要输入密码的。)
[[email protected]01 ~]# rsync -avP /etc/passwd [email protected]192.168.96.130:/tmp/11.txt
sending incremental file list
passwd
1197 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
sent 1271 bytes received 31 bytes 2604.00 bytes/sec
total size is 1197 speedup is 0.92
当然我们也可以从远程服务器下载一个文件或目录到本地。
[root@zhdy-01 ~]# rsync -avP [email protected]:/tmp/11.txt /tmp/22.txt
receiving incremental file list
11.txt
1197 100% 1.14MB/s 0:00:00 (xfer#1, to-check=0/1)
sent 30 bytes received 1276 bytes 2612.00 bytes/sec
total size is 1197 speedup is 0.92
[root@zhdy-01 ~]# cat !$
cat /tmp/22.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
有时候为了安全我们一般都会修改ssh默认端口 22 到假如是 777:
[[email protected]01 ~]# rsync -avP -e "ssh -p 777" [email protected]192.168.96.130:/tmp/11.txt /tmp/22.txt
receiving incremental file list
11.txt
1197 100% 1.14MB/s 0:00:00 (xfer#1, to-check=0/1)
sent 30 bytes received 1276 bytes 2612.00 bytes/sec
total size is 1197 speedup is 0.92