rsync 工具详解

rsync工具 :

rsync 工具几乎在每天的工作当中都会用到,是日常工作的必备工具之一。我们必须要对 此工具了如指掌!

(1)本地–>本地备份 (2)本地–>网络备份 (3)网络备份–>本地

假设有个需求,有个A目录里面的一直不停的被写些日志或者数据,但是我们需要同步到B目录,每隔一小时就要同步一下。假如一个小时就更新了一个小文件,使用cp就会从头到尾的复制一次,这样会浪费很多资源和时间。

#rsync 就可以实验增量拷贝。
rsync格式:
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

rsync常用选项 :

-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 传输时压缩


rsync实例 :

小插曲:在使用时报错如下:
[[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]
解放方案:Solution
[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

rsync的ssh同步: :

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我的博客

Zend_Http之Zend_Http_Client

$client = new Zend_Http_Client(‘http://192.168.1.180/index/get’, array( ‘maxred...

35140
来自专栏SpringBoot 核心技术

第十三章:SpringBoot实战SpringDataJPA构建项目总结

95730
来自专栏蓝天

Tcpdump 的用法

更新时间:2005-12-26 11:55 阅读提示:第一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指...

12040
来自专栏bboysoul

ubuntu使用sslocal连接shadowsocks

今天更新了一下系统,更新了一个包libqtshadowsocks,之后shadowsocks-qt5就打不开了,在网上也没有找到低版本的这个包,报错信息如下

78410
来自专栏iKcamp

iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 记录日志

沪江CCtalk视频地址:https://www.cctalk.com/v/15114923883523 log 日志中间件 最困难的事情就是认识自己。 在一...

51270
来自专栏有趣的django

Flask请求扩展和数据库连接池

32900
来自专栏北京马哥教育

Python爬虫基础知识:urllib2的使用技巧

糖豆贴心提醒,本文阅读时间6分钟 前面说到了urllib2的简单入门,下面整理了一部分urllib2的使用细节。 1.Proxy 的设置 urllib2 默认...

31450
来自专栏Golang语言社区

终于遇到goroutine死锁的BUG了

今天测试用Go语言写的角色服务器,发现在模拟大量客户端获取角色列表的时候会卡住,但是服务器程序的CPU占用率为零。分析并经过代码检查确认是goroutine死锁...

474150
来自专栏开源优测

[接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我

什么是INI格式 INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键(key)构成,常用于微软Windows操作系统中。这种配置...

393120
来自专栏Golang语言社区

GDB使用详解

一、打开GDB 1、gdb filename 加载该文件到gdb 2、gdb file filename 如果gdb filename失败,可以在打开gd...

372100

扫码关注云+社区

领取腾讯云代金券