Rsync用于在两个远程计算机之间同步文件和文件夹。它仅通过传输源和目标之间的差异来提供快速的增量文件传输。
Rsync可用于镜像数据,增量备份,在系统之间复制文件,可替代scp
,sftp
和cp
日常等使用的命令。
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
选项指定端口。
当传输大量数据或者大文件时,建议在screen,nohup,tmux运行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_modules
和tmp
目录,也就是目录src_directory/node_modules
,src_directory/tmp
。
rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
结论
在本教程中,您学习了如何在Linux使用Rsync命令复制和同步文件和目录。如有任何疑问,请随时发表评论。