当前位置: 首页 > Linux

如何使用rsync

时间:2023-04-06 04:01:36 Linux

rsync命令格式rsync[OPTION]...SRCDEST推荐使用基于SSH的rsync。可以提前在~/.ssh/config中添加配置,让远端写入SSH配置名:path。SRC目录是否以斜线结尾会影响同步结果:以斜线结尾:DEST目录下有【SRC目录下的文件】不以斜线结尾:DEST目录下有【SRC目录本身】目录DEST是否以斜线结尾尾部斜线对同步结果没有影响。转载:标题:rsync同步的艺术作者:roc原文:http://roclinux.cn/?p=2643如果你是运维工程师,很可能要面对几十个、几百个甚至上千个另外对于批量操作,环境同步和数据同步也是必不可少的技能。说到“同步”,不得不提的利器就是rsync。今天我将谈谈我从这个工具中看到的同步艺术。不带任何选项,我们经常这样使用rsync:$rsyncmain.cmachineB:/home/userB只要目的端的文件内容与源端不一样,就会触发数据同步,rsync会保证两边的文件内容是一样的。但是rsync不会同步文件的修改时间。对于任何有数据同步的文件,目标文件的修改时间总是会被修改为最新的时间。rsync并没有太在意目标文件的rwx权限。如果目标没有这个文件,权限将与源保持一致;如果目的地有这个文件,权限不会随着来源而改变。只要rsync对源文件有读权限,对目标路径有写权限,rsync就可以保证同步目标文件与源文件一致。rsync只能用登录到目标的帐户创建文件,它没有能力使目标文件的所有者和组与源保持一致。除非您使用root权限,否则您有资格要求相同的所有者和组。-t选项我们经常这样使用-t选项:$rsync-tmain.cmachineB:/home/userB使用-t选项后,rsync总是想一件事,就是同步源的修改时间文件到目标机器。带有-t选项的rsync将变得更智能。它会在同步之前比较双方文件的时间戳和文件大小。如果一致,则认为双方的文件相同,不会对该文件进行更新操作。向上。因为rsync的小聪明,会被小聪明误会。如果目的端文件的时间戳和大小与源端完全一致,但恰好内容不一致,rsync就会找不到。这就是传说中的“坑”!对于rsync很智能的情况,解决方案是使用-I选项。-I选项我们经常这样使用-I选项:$rsync-Imain.cmachineB:/home/userB-I选项会让rsync很听话很老实,它会逐个文件发起数据同步。-I选项可以保证数据的一致性,但代价是速度较慢,因为我们放弃了快速检查策略。快速检查策略是先检查文件的时间戳和文件大小,然后排除一批认为相同的文件。无论何种情况,目标文件的修改时间将始终更新为当前时间。-voption这个选项很好理解,就是让rsync输出更多的信息,我们可以举个例子:$rsync-vImain.cmachineB:/home/userBmain.csent81bytesreceived42bytes246.00bytes/sectotalsize是11speedup是0.09v增加的越多,你能得到的日志信息就越多。$rsync-vvvvtabc.cmachineB:/home/userBcmd=machine=machineBuser=path=/home/userBcmd[0]=sshcmd[1]=machineBcmd[2]=rsynccmd[3]=--服务器cmd[4]=-vvvvte。命令[5]=。cmd[6]=/home/userB使用以下命令打开连接:sshmachineBrsync--server-vvvvte。./home/userB注意:iconv_open("ANSI_X3.4-1968","ANSI_X3.4-1968")成功。(客户端)协议版本:远程=28,协商=28(服务器)协议版本:远程=30,协商=28[sender]make_file(abc.c,*,2)[sender]fliststart=0,used=1,low=0,high=0[sender]i=0abc.cmode=0100664len=11flags=0send_file_listdonefilelistsentsend_filesstartingserver_recv(2)startingpid=31885recv_file_name(abc.c)received1names[receiver]i=0abc.cmode=0100664len=11recv_file_listdoneget_local_namecount=1/home/userBrecv_files(1)startinggenerator起始pid=31885count=1deltatransmissionenabledrecv_generator(abc.c,0)abc.cisuptodategenerate_filesphase=1send_filesphase=1recv_filesphase=1generate_filesphase=2sendfilesfinishedtotal:matches=0hash_hits=0false_alarms=0data=0generate_filesfinishedrecv_filesfinishedclient_runwaitingon14318sent36bytesreceived16bytes104.00bytes/sectotalsizeis11speedupis0.21_exit_cleanup(code=0,file=main.c),line=1031):entered_exit_cleanup(code=0,file=main.c,line=1031):abouttocallexit(0)-zoption这是一个压缩选项,只要使用这个选项,rsync就会发送to传输前建议在对端压缩数据。建议在网络环境较差的情况下使用。一般来说,-z的压缩算法会和gzip一样。-roption我们第一次使用rsync的时候,经常会遇到这样的尴尬:$rsyncsupermanmachineB:/home/userB跳过目录superman如果你不另外告诉rsync你需要它帮你同步文件夹,就是它了不会主动,这就是rsync偷懒的原因。所以,如果真的要同步文件夹,需要加上-r选项,它是递归的(recursive,circular),像这样:时间戳和文件大小完全一样,只是文件内容不同,而且你不使用-I选项,那么rsync不会进行数据同步。那么,我问一个问题:“因为在Linux的世界里,文件夹也是文件,如果这样的文件(文件夹)只是内容不同,但是时间戳和文件大小是一样的,rsync会找到吗?”自己动手吧,结论在这里告诉大家:对于文件夹,rsync会知道细节,只要你加上-r选项,它就会尽职尽责地进入文件夹查看,而不是只对文件夹做自己快速检查。-loption如果我们要同步一个软链接文件,猜猜rsync会提示什么?$lltotal128-rw-rw-r--1userAuserA11Dec2607:00abc.clrwxrwxrwx1userAuserA5Dec2611:35softlink->abc.c$rsyncsoftlinkmachineB:/home/userBskipping非常规file"softlink"嗯,你猜对了,rsync又一次无情的拒绝了我们。一旦它发现一个文件是软链接,它就会忽略它,除非我们加上-l选项。$rsync-lsoftlinkmachineB:/home/userB使用-l选项后,rsync会完全保持软链接文件类型,将软链接文件复制到目的端,而不followlink到指向的实体文件。如果我只是想让rsync跟随链接,那么只需使用-L选项。你可以自己试试效果。-p选项这个选项的全称是preservepermissions,顾名思义,就是保持权限。如果不使用这个选项,rsync是这样处理权限问题的:如果目标没有这个文件,那么同步后目标文件的权限会和源保持一致;如果目标已经存在这个文件,那么只会同步文件的内容,权限不变。如果您使用-p选项,则rsync无论如何都会使目标与源具有相同的权限。-g和-o这两个选项是一对,用来维护文件所属组和属主,效果应该很清楚。但是,需要注意的一件事是更改所有者和组通常只有在具有管理员权限的情况下才有可能。-D选项-D选项,原来的解释是preservedevices(rootonly),字面意思就是保留设备文件的原始信息。由于博主并没有真正体验过它的好处,所以也就没有太多可说的了。-a选项-a选项是rsync中比较霸道的选项,因为你使用了-a选项,相当于使用了-rlptgoD选项。以一敌七,唯一的选择是-a。(看完前面的文章,你应该能很容易地理解这七个选项的作用。)-a选项的学名应该叫做archiveoption,中文叫归档选项。使用-a选项表示您希望递归同步并尽可能保持所有方面的一致性。但是-a选项也有致命弱点,就是-a不能同步“硬链接”的情况。如果有这方面的需求,添加-H选项。-deleteoption如果源端没有这个文件,那么目的端也不想有,删除它。-delete选项必须与-r选项一起使用。-delete-excluded选项专门指定一些要在目的地删除的文件。-delete-excluded选项必须与-r选项一起使用。-delete-after选项默认情况下,rsync在开始数据同步之前清理目的地的文件;如果使用这个选项,rsync会先进行数据同步,完成后会删除那些需要清理的文件。-delete-after选项必须与-r选项一起使用。-n选项看到这么多删除,是不是有点紧张?的确,在rsync的官方说明中有这么一句话:这个选项如果使用不当会很危险!最好首先使用空运行选项(-n)运行以查看将删除哪些文件以确保未列出重要文件。从这句话中,我们学会了一个小技巧,那就是-n选项,它是一个吓人的选项,它会用受影响的文件列表来警告你,但并不会真正去执行,这给了我们确认和确认的机会回旋余地。让我们看看实际用法:$rsync-n--delete-r。machineB:/home/userB/deletingsuperman/xxxdeletingmain.cdeletingacclink-excludeand-exclude-fromoptionsifyoudon'twanttosyncsomethingtothedestination如果是这样,你可以使用-exclude选项隐藏,rsync仍然非常重视每个人的隐私,可以多次使用-exclude选项设置很多“隐私”。如果想隐藏太多隐私,在命令行选项里设置会比较麻烦,rsync还是很贴心的,它提供了-exclude-from选项,让你可以把隐私一一列出来文件,然后让rsync直接读取文件即可。-include和-include-from选项这两个选项的作用是重新添加已被-exclude或-exclude-from选项排除的文件。-include选项可以多次使用。-include-from选项用于读取指定文件中的文件列表。请注意排除和包含的顺序。先排除再包含。-partialoption这就是传说中的resume函数。默认情况下,rsync删除传输中断的文件并重新传输它们。但是在某些特殊情况下,我们不想重传,而是继续传输。在我们的使用中,经常会看到有人会使用-P选项。这个选项实际上是为偷懒而设计的。以前人们总是要手动写-partial-progress,觉得太费力了。换一个新的选项会更好,所以-P应运而生。有的读者会问-partial的作用我知道,但是-progress是干什么用的?为什么这么多人使用它,它有这么大的号召力?真的有...-progressoption使用这个选项,rsync会显示传输进度信息,有什么用,rsync给出了一个很有趣的解释:Thisgivesaboredusersomethingtowatch。好了,写了这么多,大家看已经无聊了,实际用-progress解闷是个不错的选择。PS:rsync的-exclude的PATTERN语法后面会解释。谢谢!转载:标题:rsync命令参数详解作者:subsir原文:https://www.cnblogs.com/subsir/articles/2565373.html所有参数-v,--verbose详细模式输出。-q,--quiet安静输出模式。-c,--checksum打开校验和开关以强制对文件传输进行校验和。-a,--archive归档模式,表示递归传输文件,并保留所有文件属性,等于-rlptgoD。-r,--recursive递归处理子目录。-R,--relative使用相对路径信息。-b,--backup创建备份,即当目标文件名已存在时,将旧文件重命名为~filename。可以使用--suffix选项指定不同的备份文件前缀。--backup-dir将备份文件(~filename)存储在目录中。-suffix=SUFFIX定义备份文件前缀。-u,--update只更新,即跳过所有DST中已经存在且晚于要备份的文件的文件。(不要覆盖更新的文件。)-l,--links保留软链接。-L,--copy-links想像对待普通文件一样对待软链接。--copy-unsafe-links只复制指向SRC目录树之外的链接。--safe-links忽略指向SRC路径目录树之外的链接。-H,--hard-links保留硬链接。-p,--perms保留文件权限。-o,--owner保留文件所有者信息。-g,--group保留文件组信息。-D,--devices保留设备文件信息。-t,--times保留文件时间信息。-S,--sparse对稀疏文件进行特殊处理以节省DST空间。-n,--dry-run显示将传输哪些文件(新的、修改的和删除的)。-W,--whole-file复制文件而不进行增量检查。-x,--one-file-system不要跨越文件系统边界。-B,--block-size=SIZE检查算法使用的块大小,默认为700字节。-e,--rsh=COMMAND指定使用rsh,ssh进行数据同步。--rsync-path=PATH指定rsync命令在远程服务器上的路径信息。-C,--cvs-exclude使用与CVS相同的方法自动忽略文件以排除那些您不想传输的文件。--existing只更新DST中已经存在的文件,不备份新创建的文件。--delete在DST中删除那些不在SRC中的文件。--delete-excluded同时删除接收端被该选项排除的文件。--delete-after传输完成后删除。--ignore-errors甚至删除IO错误。--max-delete=NUM最多删除NUM个文件。--partial保留由于某种原因没有完全传输的文件,以实现断点续传。--force强制删除目录,即使它们不是空的。--numeric-ids不要将数字用户和组ID匹配为用户名和组名。--timeout=TIMEIP超时时间,以秒为单位。-I,--ignore-times不要跳过具有相同时间和长度的文件。--size-only决定是否备份文件时,只看文件大小,不考虑文件年限。--modify-window=NUM确定文件是否相同时间时使用的时间戳窗口,默认为0。-T--temp-dir=DIR在DIR中创建临时文件。--compare-dest=DIR还会比较DIR中的文件以确定是否需要备份。--progress显示传输进度。-P等同于-partial-progress。-z,--compress在传输过程中压缩备份文件。--exclude=PATTERN指定排除不需要传输的文件模式。--include=PATTERN指定需要传输而不被排除的文件模式。--exclude-from=FILE排除文件中指定模式的文件。--include-from=FILE不要排除与FILE指定的模式匹配的文件。--version打印版本信息。--address绑定到特定地址。--config=FILE指定另一个配置文件而不是默认的rsyncd.conf文件。--port=PORT指定其他rsync服务端口。--blocking-io对远程shell使用阻塞IO。--stats给出一些文件的传输状态。--log-format=formAT指定日志文件格式。--password-file=FILE从文件中获取密码。--bwlimit=KBPS限制I/O带宽,每秒KBytes。-h,--help显示帮助信息。