Linux之rsync

rsync是数据同步的利器。我们经常这样使用rsync:

不带任何选项

$ rsync main.c machineB:/home/userB
1、只要目的端的文件内容和源端的内容不一样,就会触发数据同步,rsync会确保两边的文件内容一样。
2、rsync不会同步文件的修改时间,凡是被同步的文件,目的端的文件的修改时间总是回被修改为最新时刻的时间。
3、rsync不会太关注目的端文件的rwx权限,如果目的端没有此文件,那么权限会保持与源端一致;如果目的端有此文件,则权限不会随着源端而变更。
4、只要rsync有对文件的读权限,并且对目标路径有写权限,rsync就能确保目的端文件同步到和源端一致。
5、rsync只能以登录目的端的账号来创建文件,它没有能力保持目的端的文件的拥有者和组别和源端的一致。(除非你有root权限,才有资格要求拥有者一致、所在组一致)

-t选项

$ rsync -t main.c machineB:/home/userB
1、使用-t选项后,rsync总会想着一件事,就是将源文件的修改时间同步到目标机器。
2、带有-t选项的rsync,会变得更聪明,它会在同步前先比较两边文件的时间戳和文件大小,如果一致,则就认为两边文件一样,对此文件就不会再采取更新操作了。
3、如果目的端的文件的时间戳、大小和源端完全一致,但内容又不一致的时候,rsync是发现不了的。这就是传说中的坑!
4、对于rsync自做聪明的情况,解决办法就是使用-I选项。

-I选项

$ rsync -I main.c machineB:/home/userB
1、-I选项会让rsync变得很老是,它会挨个文件去发起数据同步
2、-I选项可以确保数据的一致性,代价便是速度上会变慢,因为我们放弃了-t选项使用的快速检查的策略。
3、无论情况如何,目的端文件的修改时间总会被更新到当前时刻。

-v选项

$ rsync -vI main.c machineB:/home/userB
1、-v选项会输出日志信息。
2、v加的越多,输出的信息也就越多,比如-vv就比-v输出的信息多。

-z选项

使用这个选项,rsync就会把发向对端的数据先进行压缩再传输。对于网络环境较差的情况下建议使用。一般情况下,-z的压缩算法会和gzip的一样

-r选项

$ rsync dir machineB:/home/userB
如果你不额外告诉rsync你需要同步文件夹的话,它是不会帮你同步的。此时你会看到下面的输出语句:
skipping directory dir
如果你真想同步文件夹,那就要加上-r选项。即recursive(递归的,循环的)就可以同步文件夹了。

之前说过,如果时间戳和文件大小完全一直,只有文件内容不同,且未使用-I选项的时候,那么rsync是不会进行数据同步的。那么,因为在linux中,文件夹也是文件,如果文件夹也只有内容不同,而时间戳和文件大小都相同,rsync会发现吗?

答案:对于文件夹rsync会明查秋毫,只要你加入了-r选项,它就回到文件夹里面去检查,而不会只对文件夹本身做快速检查。

-l选项

如果要同步一个软链接文件,rsync会提示跳过了软链接文件。除非我们增加-l选项。

$ rsync -l softlink machineB:/home/userB


-p选项

这个选项的全名是preserve permissions,就是保持权限。如果你不使用这个选项,那么rsync使用如下方式来处理权限:
1、如果目的端没有此文件,那么同步后会将目的端文件的权限和源端保持一致;
2、如果目的端已存在此文件,那么只会同步文件内容,权限保持不变/
如果你使用了-p权限,则无论如何,源端和目的端的权限都会保持一致。

-g选项和-o选项

这两个选项分别对应着group和owner,作用应该很清晰了。不过要注意的是,改变所有者和组别,往往只有管理员权限才可以。

-D选项

-D选项,原文解释是“preserve devices(root only)”,从字面意思看,就是保持设备文件的原始信息。

-a选项

1、-a选项是rsync里比较霸道的一个选项,因为你使用-a选项,就相当于使用了-rlptgoD这一坨选项。
2、-a选项的学名应该叫做archive option,中文叫做归档选项。使用-a选项,就表明你希望采取递归方式来同步,且尽可能的保持各个方面的一致性。
3、但是-a选项也有阿克琉斯之踵,那就是-a无法同步“硬链接”情况。如果有这方面需求,要加上-H选项。

--delete选项、--delete-excluded选项和--delete-after选项

三个选项都是和“删除”有关的:
1、--delete:如果源端没有此文件,那么目的端也别想拥有,删除之。(如果你使用这个选项,就必须搭配-r选项一起)
2、--delete-excluded:专门指定一些要在目的端删除的文件。
3、--delete-after:默认情况下,rsync是先清理目的端的文件再开始数据同步;如果使用此选项,则rsync会先进行数据同步,都完成后再删除那些需要清理的文件。

如果误删除了怎么办?可以使用一个小技巧,即-n选项。它会用受影响文件列表来警告你,但不会真的删除。具体用法如下:

$ rsync -n --delete -r . machineB:/home/userB/
deleting superman/xxx
deleting main.c
deleting acclink


--exclude选项和--exclude-from选项

如果你不希望同步一些东西到目的端的话,可以使用--exclude选项来隐藏,rsync还是很重视大家隐私的,你可以多次使用--exclude选项来设置很多的“隐私”。
如果你要隐藏的隐私太多的话,在命令行选项中设置会比较麻烦,rsync还是很体贴,它提供了--exclude-from选项,让你可以把隐私一一列在一个文件里,然后让rsync直接读取这个文件就好了。

--partial选项

这就是传说中的断点续传功能。默认情况下,rsync会删除那些传输中断的文件,然后重新传输。但在一些特别情况下,我们不希望重传,而是续传。

我们在使用中,经常会看到有人会使用-P选项,这个选项其实是为了偷懒而设计的。以前人们总是要手动写--partial --progress,觉得太费劲了,倒不如用一个新的选项来代替,于是-P应运而生了。有些读者会问--partial我知道作用了,可--progress是干什么用的呢?为什么很多人要使用它呢,它有那么大的吸引力?

--progress选项

使用这个选项,rsync会显示出传输进度信息,有什么用呢,rsync给了一个很有意思的解释:This gives a bored user something to watch.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值