当前位置: 首页 > Linux

rsync使用教程(已验证)

时间:2023-04-07 02:08:55 Linux

1.介绍rsync是Linux常用的文件同步应用程序。它可以在本地计算机和远程计算机之间,或两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它还可以用作文件复制工具,替代cp和mv命令。名字中的r指的是remote,而rsync其实就是“远程同步”的意思。与其他文件传输工具(如FTP或scp)不同,rsync最大的特点是会检查发送方和接收方的现有文件,只传输有变化的部分(默认规则是文件大小或修改时间已经改变)。2、安装如果本地或远程计算机没有安装rsync,可以使用以下命令安装。#Debian$sudoapt-getinstallrsync#RedHat$sudoyuminstallrsync#ArchLinux$sudopacman-Srsync注意传输的两边都要安装rsync。3、基本使用3.1-r参数在本机使用rsync命令时,可以作为cp、mv命令的替代,将源目录同步到目标目录。$rsync-rsource/destination上述命令中,-r表示递归,包括子目录。注意-r是必须的,否则rsync不会运行成功。sourcedirectory代表源目录,destination代表目标目录。如果有多个文件或目录需要同步,可以这样写。$rsync-rsource1source2destination在上面的命令中,source1和source2会同步到目标目录。3.2-a参数-a参数可以代替-r。除了递归同步外,还可以同步元信息(如修改时间、权限等)。-a比-r更有用,因为rsync默认使用文件大小和修改时间来确定文件是否需要更新。下面的用法是常用的写法。$rsync-asourcedestination如果目标目录destination不存在,rsync将自动创建它。执行上述命令后,源目录source被完整复制到目标目录destination中,即形成destination/source的目录结构。如果只想将源目录source中的内容同步到目标目录destination,需要在source目录后面加一个斜线。$rsync-asource/destination上述命令执行后,源目录中的内容被复制到目标目录中,并且不会在目标目录下创建源子目录。3.3-n参数如果不确定rsync执行后的结果是什么,可以先使用-n或--dry-run参数模拟执行结果。$rsync-anvsource/destination上述命令中,-n参数模拟命令执行的结果,并不实际执行命令。-v参数是将结果输出到终端,这样可以看到要同步什么内容。3.4--delete参数默认情况下,rsync仅确保将源目录的所有内容(明确排除的文件除外)复制到目标目录。它不会使两个目录相同,也不会删除文件。如果想让目标目录成为源目录的镜像,必须使用--delete参数,它会删除只存在于目标目录,不存在于源目录的文件。$rsync-av--deletesource/destination在上面的命令中,--delete参数将使目标成为源的镜像。4、排除文件4.1--exclude参数有时候,我们想在同步时排除一些文件或目录,这时可以使用--exclude参数来指定排除方式。$rsync-av--exclude='*.txt'source/destination#或$rsync-av--exclude'*.txt'source/destination以上命令排除所有TXT文件。请注意,rsync将同步以“点”开头的隐藏文件。如果要排除隐藏文件,可以写--exclude=".*"。如果想排除某个目录下的所有文件,又不想排除目录本身,可以这样写。$rsync-av--exclude'dir1/*'source/destination多种排除模式,可以使用多个--exclude参数。$rsync-av--exclude'file1.txt'--exclude'dir1/*'source/destination多重排除模式也可以利用Bash的大扩展的扩展功能,只需一个--exclude参数。$rsync-av--exclude={'file1.txt','dir1/*'}source/destination如果有很多排除模式,你可以将它们写入一个文件,每个模式一行,然后使用--exclude-from参数指定这个文件。$rsync-av--exclude-from='exclude-file.txt'source/destination4.2--include参数--include参数用于指定必须同步的文件模式,常与--exclude结合使用.$rsync-av--include="*.txt"--exclude='*'source/destination上面的命令指定同步时排除所有文件,但包含TXT文件。5、远程同步5.1SSH协议rsync不仅支持本地两个目录之间的同步,还支持远程同步。它可以将本地内容同步到远程服务器。$rsync-avsource/username@remote_host:destination也可以同步远程内容到本地。$rsync-avusername@remote_host:source/destination如果ssh命令有附加参数,必须使用-e参数指定要执行的SSH命令。#设置端口为22,设置对应的pem等$sync-av-e'ssh-p22-i/home/xiaojing/MARS.pem'/home/xiaojin/Desktop/temp/root@8.134.210.33:/root/temp/temp_rsync5.2rsync协议(这个我没验证过)除了使用SSH,如果另外一台服务器安装运行rsync守护进程,也可以使用rsync://协议(默认端口873)用于传输。具体写法是用双冒号分隔服务器和目标目录::。$rsync-avsource/192.168.122.32::module/destination注意,上面地址中的module并不是实际的路径名,而是rsync守护进程指定的,由管理员分配的资源名。如果你想知道rsync守护进程分配的所有模块的列表,你可以执行以下命令。$rsyncrsync://192.168.122.32除了在rsync协议中使用双冒号外,还可以直接使用rsync://协议指定地址。$rsync-avsource/rsync://192.168.122.32/module/destination6.增量备份(这个我没有验证过)rsync最大的特点是可以完成增量备份,即只复制变化的文件默认情况下。rsync除了直接比较源目录和目标目录外,还支持使用基目录,即将源目录和基目录之间发生变化的部分同步到目标目录。具体做法是,第一次同步是全量备份,同步base目录下的所有文件。之后的每一次同步都是增量备份,只同步源目录和基目录之间发生变化的部分,并将这部分保存在新的目标目录中。这个新的目标目录也包含了所有的文件,但实际上只有那些发生了变化的文件存在于这个目录中,其他没有发生变化的文件都是指向基目录下文件的硬链接。--link-dest参数用于指定同步的基目录。$rsync-a--delete--link-dest/compare/path/source/path/target/path上面命令中,--link-dest参数指定了基目录/compare/path,然后是源目录/source/path跟base目录比较,找出变化的文件,复制到目标目录/target/path。那些没有改变的文件会生成硬链接。此命令的第一个备份是完整备份,然后是增量备份。下面是一个备份用户主目录的示例脚本。#!/bin/bash#使用rsyncset-oerrexitset-onounsetset-opipefailreadonlySOURCE_DIR="${HOME}"readonlyBACKUP_DIR="/mnt/data/backups"readonlyDATETIME="$(date'+%Y-%m-%d_%H:%M:%S')"readonlyBACKUP_PATH="${BACKUP_DIR}/${DATETIME}"readonlyLATEST_LINK="${BACKUP_DIR}/latest"mkdir-p"${BACKUP_DIR}"rsync-av--delete\"${SOURCE_DIR}/"\--link-dest"${LATEST_LINK}"\--exclude=".cache"\"${BACKUP_PATH}"rm-rf"${LATEST_LINK}"ln-s"${BACKUP_PATH}""${LATEST_LINK}"在上面的脚本中,每次同步都会生成一个新的目录${BACKUP_DIR}/${DATETIME},以及软链接${BACKUP_DIR}/latest指向这个目录。下次备份时,以${BACKUP_DIR}/latest为基目录,生成新的备份目录。最后,将软链接${BACKUP_DIR}/latest指向新的备份目录。7、配置项-a,--archive参数表示归档方式,保存所有元数据,如修改时间(modificationtime)、权限、所有者等,软链接也会同步过去。--append参数指定文件从上次停止的地方继续,并继续传输。--append-verify参数与--append参数类似,但它会在传输完成后对文件进行验证。如果验证失败,将重新发送整个文件。-b,--backup参数指定当删除或更新目标目录中已经存在的文件时,该文件将被重命名然后备份。默认行为是删除。重命名规则是添加--suffix参数指定的文件后缀,默认为~。--backup-dir参数指定备份时文件存放的目录,如--backup-dir=/path/to/backups。--bwlimit参数指定带宽限制,默认单位为KB/s,例如--bwlimit=100。-c,--checksum参数改变了rsync的校验和方法。默认情况下,rsync仅检查文件大小和最后修改日期是否发生变化,如果发生变化,则重新传输;使用该参数后,通过判断文件内容的校验和来决定是否重传。--delete参数删除只存在于目标目录,不存在于源目标的文件,即保证目标目录是源目标的镜像。-e参数指定使用SSH协议传输数据。--exclude参数指定排除未同步的文件,如--exclude="*.iso"。--exclude-from参数指定一个本地文件,其中包含需要排除的文件模式,每个模式一行。--existing、--ignore-non-existing参数表示不同步目标目录中不存在的文件和目录。-h参数指示以人类可读格式输出。-h,--help参数返回帮助信息。-i参数表示输出源目录和目标目录的文件差异的详细信息。--ignore-existing参数的意思是只要目标目录中已经存在该文件,就跳过它,不再同步这些文件。--include参数指定同步时要包含的文件,一般与--exclude配合使用。--link-dest参数指定增量备份的基本目录。-m参数指定不同步空目录。--max-size参数设置传输的最大文件的大小限制,例如不超过200KB(--max-size='200k')。--min-size参数设置传输的最小文件的大小限制,例如不小于10KB(--min-size=10k)。-n参数或--dry-run参数模拟将要执行的操作,但并不实际执行。与-v参数一起使用,可以看到会同步哪些内容。-P参数是两个参数--progress和--partial的组合。--partial参数允许恢复中断的传输。不使用该参数时,rsync会删除一半被中断的文件;使用该参数后,一半的文件会被同步到目标目录,中断的传输会在下次同步时恢复。一般需要与--append或--append-verify结合使用。--partial-dir参数指定将传输的一半文件保存到临时目录,例如--partial-dir=.rsync-partial。一般需要与--append或--append-verify结合使用。--progress参数表示显示进度。-r参数表示递归,即包含子目录。--remove-source-files参数表示传输成功后,删除发送方的文件。--size-only参数表示只同步大小发生变化的文件,而不管文件修改时间的差异。--suffix参数指定备份文件名时给文件名添加的后缀。默认为~。-u,--update参数表示同步时跳过目标目录中修改时间更新的文件,即不同步时间戳更新的文件。-v参数指示输出详细信息。-vv表示输出更详细的信息,-vvv表示输出最详细的信息。--version参数返回rsync的版本。-z参数指定在同步时压缩数据。8、套娃现象源码不带斜杠和带斜杠的区别在于,一个是把文件夹传过去,一个是把文件夹里的文件传过去。$rsync-asource/destinationwillnotdolls:sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctest/ubuntu@69.230.236.43:/ldata/temp2/synctestsudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctest/ubuntu@69.230.236.43:/ldata/temp2/synctest/如果文件已经存在,它会出现Matryoshkasudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctestubuntu@69.230.236.43:/ldata/temp2/synctestsudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctestubuntu@69.230.236.43:/ldata/temp2/synctest/sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/ubuntu@69.230.236.43:/ldata/temp2/synctestsudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/ubuntu@69.230.236.43:/ldata/temp2/synctest/那套二层路径,可以这样写sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/tempubuntu@69.230.236.43:/ldata/temp2/synctest/sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/tempubuntu@69.230.236.43:/ldata/temp2/synctest不会嵌套娃娃sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctestubuntu@69.230.236.43:/ldata/temp2sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctestubuntu@69.230.236.43:/ldata/temp2/不能嵌套娃娃,但是可以传输到上层目录sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctest/ubuntu@69.230.236.43:/ldata/temp2sudorsync-auv-e'ssh-p22-i/home/xiaojing/MARS.pem'/ldata/temp/synctest/ubuntu@69.230.236.43:/ldata/temp2/参考来源:阮一峰的《rsync 用法教程》