Rsync用于在两个远程计算机之间同步文件和文件夹。它仅通过传输源和目标之间的差异来提供快速的增量文件传输。

Rsync可用于镜像数据,增量备份,在系统之间复制文件,可替代scpsftpcp日常等使用的命令。

rsync命令已预安装在大多数Linux发行版和macOS。可以运行命令rsync --version检查是否已安装rysnc,命令将会打印rysnc的版本号rsync  version 3.01

安装 rsync

如果终端提示你bash: command not found: rysnc,说明你的系统没有安装rsync。可以使用发行版的软件包管理器安装rysnc。

如果你的计算机运行的系统是基于Debian的Linux发行版,例如Ubuntu,Linux mint请运行命令sudo apt install rsync安装Rsync。

如果你的计算机运行的系统是基于RedHat的Linux发行版。例如CentOS,Fedora。请运行命令sudo yum install rsync安装Rsync。

Rsync 命令

rsync语法有三种,分别是本地到本地形式Local to Local,本地到远程Local to Remote,远程到本地Remote to Local。

其中OPTION是rsync选项。SRC是源目录。DEST是目标目录。USER是远程用户名。HOST是远程主机名名称,可以是IP地址或者可解释的域名。

Local to Local:  rsync [OPTION]... [SRC]... DEST
Local to Remote: rsync [OPTION]... [SRC]... [USER@]HOST:DEST
Remote to Local: rsync [OPTION]... [USER@]HOST:SRC... [DEST]

rsync提供了许多控制其行为的选项。以下是最经常使用的选项。

-a/--archive存档模式,等效于-rlptgoD。此选项指示rsync递归同步目录,传输特殊设备和块设备,保留符号链接,组,所有权和权限等。

-z/--compress,此选项将强制rsync在数据发送给目标计算机之前对数据进行压缩。

-P等效于--partial --progress。使用此选项时,rsync将在传输过程中显示进度条并保留部分传输的文件。在慢速或不稳定的网络连接传输大文件时非常有用。

--delete使用此选项时,rsync将从目标位置删除相同的文件。适合用于镜像文件。

-q/--quiet此选项禁止显示非错误消息。-e此选项使您可以选择其他远程shell程序。默认使用ssh。

Rsync 基础

rysnc最简单的用法就是在本地的目录之间复制文件。运行rysnc命令的用户必须对源目录或者文件具有读取权限,并且对目标目录具有写入权限。

如果目标参数未指定文件名,rsync将会保留原始文件名称。要使用其它文件名称保复制文件,请在目标参数指定文件名。

值得一提的是rsync命令会根据源目录是否使用斜杠/,而又不同的处理方式。

如果在源目录尾部添加斜杠,rsync会将目录的内容复制到目标目录。在省略斜杠,rsync则会将源目录复制到目标目录。

rsync -a /opt/filename.zip /tmp/newfilename.zip

rsync -a /var/www/domain.com/public_html/ /var/www/domain.com/public_html_backup/

Rsync 远程同步数据

当使用rsync进行远程传输时,rsync必须安装在源计算机和目标计算机。rsync默使用SSH作为远程shell程序。

如果您尚未为远程计算机设置SSH无密码登录rsync会要求您输入用户名和密码。远程计算机SSH服务监听的端口不是默认端口22时,请使用-e选项指定端口。

当传输大量数据或者大文件时,建议在screennohuptmux运行rsync命令或使用rsync命令的-P选项。

Rsync 增量备份/更新/复制

在增量复制或者备份时,强烈建议使用-t选项,该选项用与保持文件的mtime属性不变。mtime是文件的修改时间。

如果没有指定-t选项时,目标文件mtime属性会设置为系统时间,导致下次更新检测到mtime不同,从而导致增量更新无效。

通常你可能还需要显示rsync同步过程的详细信息,使用-v选项。确认是否正确实现增量同步。

对于同步大量的数据或者大文件,rsync命令的-P选项可以显示进度并保留部分传输的文件。

remote_user是远程计算机的用户名,remote_host_or_ip远程计算机的IP地址或者可解释的域名。

rsync -avtP /opt/media/ remote_user@remote_host_or_ip:/opt/media/ 

Rsync 同步本地目录到远程计算机

rsync -a /opt/media/ remote_user@remote_host_or_ip:/opt/media/ 

Rsync 同步远程计算机目录到本地目录

rsync -a remote_user@remote_host_or_ip:/opt/media/ /opt/media/

Rsync 指定SSH端口

rsync -a -e "ssh -p 2322" /opt/media/ remote_user@remote_host_or_ip:/opt/media/

Rsync 后台同步数据

rsync -a -P remote_user@remote_host_or_ip:/opt/media/ /opt/media/

排除文件和目录

当你要排除文件或目录时,您需要使用源目录的相对路径。有两种方式可以排除文件和目录。

第一种方式是使用rsync命令的--exclude选项,在命令行指定要排除的文件和目录。--exclude选项可以重复使用多次排除多个文件与目录。

第二种方式是使用rsync命令的--exclude-from选项并指定一个文件,该文件包含要排除的目录与文件的路径。

在以下示例中,排除src_directory目录的node_modulestmp目录,也就是目录src_directory/node_modulessrc_directory/tmp

rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
node_modules
tmp
/exclude-file.txt

结论

在本教程中,您学习了如何在Linux使用Rsync命令复制和同步文件和目录。如有任何疑问,请随时发表评论。