rsync的介绍与使用

rsync的介绍与使用

一、简介

rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件,它可以将一个目录的文件快速地同步到另一个目录,还可以通过网络快速同步多台主机间的文件。它也可以当作文件复制工具,替代cp和mv命令。其主要特点包括:

  • 增量传输:rsync 仅传输发生变化的部分,而不是整个文件,因此在更新大文件时效率非常高。
  • 保持文件属性:能够保持文件的权限、时间戳等属性。
  • 支持压缩传输:能够使用压缩算法传输数据,减少网络流量。
  • 灵活性:支持多种操作和选项,适用于各种同步和备份需求。

它名称里面的r指的是 remote,rsync 其实就是"远程同步"(remote sync)的意思。与其他文件传输工具(如 FTP 或 scp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,可以仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

rsync 的几种常用同步模式

1. 本地模式

本地模式即在同一个系统中,将一个目录/文件同步到另一个目录/文件的方式,此使用方式可以理解为 cp 命令的增强版本。常用的使用方式如下:

# 将 src 目录里的所有文件同步至 dst 目录(不包含 src 本身)
rsync -av src/ dst/
# 将 src 目录同步至 dst 目录
rsync -av src dst/
# 同上,使用 -R 参数,即使是 src 后面有 /,也会同步目录本身
rsync -avR src/ dst/

2. SSH 模式

SSH 模式即 rsync 通过 SSH 隧道来传输数据,其各有优缺点
优点:

  • 加密传输
  • 无需 rsync daemon

缺点:

  • 通过 SSH 承载,效率低
  • 需要输入密码或配置免密码登录,或使用其它能自动输入密码的工具

常用命令:

# 将 src 目录同步到 192.168.1.1 的 /backup 目录
rsync -avR src root@192.168.1.1:/backup/
# 如果 SSH 端口不为 22,使用 -e 参数指定 SSH 端口
rsync -avR src -e 'ssh -p2222' root@192.168.1.1:/backup/

tips:使用 SSH 隧道模式,需要输入 SSH 密码,如果不想输入密码,需要配置 SSH 免密码登录

3. daemon 模式

daemon 模式即在两台主机将同步文件,其中一台需要开启一个 rsync daemon 进程。另一台作为客户端使用,客户端可以将本地文件/目录推到服务端,可以从服务端拉取文件/目录到本地。
用一张图来说明两者的区别:

在这里插入图片描述

命令:

# rsync server
rsync --daemon -config=/etc/rsyncd.conf
# rsync client
rsync -avz /data rsync@192.168.1.1::backup

二、安装

如果是远程同步,原服务器和目标服务器都需要安装rsync,两种方式安装:

1.在线安装

# Debian
$ sudo apt-get install rsync# Red Hat
$ sudo yum install rsync# Arch Linux
$ sudo pacman -S rsync

2.本地安装

下载对应系统版本的rpm包,下载地址

rpm命令安装,例如

sudo rpm –ivh rsync-3.1.2-11.el7_9.x86_64.rpm

三、基本用法

rsync 命令的语法如下:

rsync [options] [source] [target]

其中:

options 表示各种可选参数,是下面要详细介绍的;

source 表示原文件或者原目录,可以是本地的,也可以是远程的;

target 表示目标目录,可以是本地的,也可以是远程的。

下面详细介绍各种参数的使用方法:

3.1 -r 参数

Linux 中的 -r 参数基本都是 recursively 的意思,也就是递归,一般是面向目录,例如 cp 命令中的 -r 参数,rm 命令中的 -r 参数。

本机使用 rsync 命令时,可以作为cp和mv命令的替代方法,将源目录同步到目标目录。

$ rsync -r source destination

上面命令中,-r表示递归,即包含子目录。注意,-r是必须的,否则 rsync 运行不会成功。source目录表示源目录,destination表示目标目录。

如果有多个文件或目录需要同步,可以写成下面这样。

$ rsync -r source1 source2 destination

上面命令中,source1、source2都会被同步到destination目录。

3.2 -a 参数

-a 表示归档模式,保持文件属性、权限等。参数可以替代-r,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。由于 rsync 默认使用文件大小和修改时间决定文件是否需要更新,所以-a比-r更有用。下面的用法才是常见的写法。

$ rsync -a source destination

目标目录destination如果不存在,rsync 会自动创建。执行上面的命令后,源目录source被完整地复制到了目标目录destination下面,即形成了destination/source的目录结构。

如果只想同步源目录source里面的内容到目标目录destination,则需要在源目录后面加上斜杠。

$ rsync -a source/ destination

上面命令执行后,source目录里面的内容,就都被复制到了destination目录里面,并不会在destination下面创建一个source子目录。

3.3 -n 参数

如果不确定 rsync 执行后会产生什么结果,可以先用-n或–dry-run参数模拟执行的结果。

$ rsync -anv source/ destination
上面命令中,-n参数模拟命令执行的结果,并不真的执行命令。-v参数则是将结果输出到终端,这样就可以看到哪些内容会被同步。

3.4 -v 参数

表示详细模式,显示文件同步的详细信息。-v 表示 verbose,在命令执行过程中会输出很多信息。在 rsync 命令中,-v 会将拷贝的整个过程进行显示

[root@centos ~]# rsync -av test1/ test2
building file list … done
./
a.txt
b.txt

sent 196 bytes received 70 bytes 532.00 bytes/sec
total size is 0 speedup is 0.00

3.5 -z 参数

表示压缩传输数据,rsync 会首先将需要拷贝或传输的数据压缩,到了destination,进行解压缩,整个过程中用户不需要手动做压缩和解压,这样就能减少需要传输的文件大小。

[root@centos ~]# rsync -az test1/ test2/

3.6 --progress 或者 -P (大写) 参数

使用这个参数,可以将文件拷贝或者传输的过程给显示出来,看下面例子的执行结果就知道了:

[root@centos ~]# rsync -a --progress thirdparty test/
building file list ...
64 files to consider
thirdparty/vsftpd/
thirdparty/vsftpd/CHANGELOG.md167 100%    0.71kB/s    0:00:00 (xfr#533, to-chk=11/686)
thirdparty/vsftpd/README.md827 100%    3.53kB/s    0:00:00 (xfr#534, to-chk=10/686)
thirdparty/vsftpd/deploy.json476 100%    2.03kB/s    0:00:00 (xfr#535, to-chk=9/686)
thirdparty/vsftpd/docker-compose.yml1,568 100%    6.69kB/s    0:00:00 (xfr#536, to-chk=8/686)
thirdparty/vsftpd/example.env751 100%    3.20kB/s    0:00:00 (xfr#537, to-chk=7/686)
thirdparty/vsftpd/icon.png95,614 100%  405.97kB/s    0:00:00 (xfr#538, to-chk=6/686)

3.7 --delete 参数

默认情况下,rsync 只确保源目录的所有内容(明确排除的文件除外)都复制到目标目录。它不会使两个目录保持相同,并且不会删除文件。如果要使得目标目录成为源目录的镜像副本,则必须使用–delete参数,这将删除只存在于目标目录、不存在于源目录的文件。

$ rsync -av --delete source/ destination

上面命令中,–delete参数会使得destination成为source的一个镜像。

rsync的常用选项

-a  :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-v  :显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-z  :传输时进行压缩提高效率。
-e  :指定所要使用的远程shell程序,默认为ssh。--exclude :指定排除规则来排除不需要传输的文件。
--delete  :如果存在目标主机有,而源主机没有的文件,目标主机的文件会被删掉,即目标主机向源主机看齐,保证一致性。-b --backup  :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀。
--backup-dir :指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。--port  :连接daemon时使用的端口号,默认为873端口。
--password-file :daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。

最常用的就是 -avz参数,即压缩和显示部分信息,并以归档模式传输。

四、排除文件

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/ destination

4.2 --include 参数

–include参数用来指定必须同步的文件模式,往往与–exclude结合使用。

$ rsync -av --include="*.txt" --exclude='*' source/ destination

上面命令指定同步时,排除所有文件,但是会包括 TXT 文件。

五、远程同步

5.1 SSH 协议

rsync 除了支持本地两个目录之间的同步,也支持远程同步。它可以将本地内容,同步到远程服务器。

$ rsync -av source/ username@remote_host:destination

也可以将远程内容同步到本地。

$ rsync -av username@remote_host:source/ destination

rsync 默认使用 SSH 进行远程登录和数据传输。

由于早期 rsync 不使用 SSH 协议,需要用-e参数指定协议,后来才改的。所以,下面-e ssh可以省略。

$ rsync -av -e ssh source/ user@remote_host:/destination

但是,如果 ssh 命令有附加的参数,则必须使用-e参数指定所要执行的 SSH 命令。

$ rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination

上面命令中,-e参数指定 SSH 使用2234端口。

5.2 rsync协议

除了使用 SSH,如果另一台服务器安装并运行了 rsync 守护程序,则也可以用rsync://协议(默认端口873)进行传输。具体写法是服务器与目标目录之间使用双冒号分隔::。

$ rsync -av source/ 192.168.122.32::module/destination

注意,上面地址中的module并不是实际路径名,而是 rsync 守护程序指定的一个资源名,由管理员分配。

如果想知道 rsync 守护程序分配的所有 module 列表,可以执行下面命令。

$ rsync rsync://192.168.122.32

rsync 协议除了使用双冒号,也可以直接用rsync://协议指定地址。

$ rsync -av source/ rsync://192.168.122.32/module/destination

六、增量备份

rsync 的最大特点就是它可以完成增量备份,也就是默认只复制有变动的文件。

除了源目录与目标目录直接比较,rsync 还支持使用基准目录,即将源目录与基准目录之间变动的部分,同步到目标目录。

具体做法是,第一次同步是全量备份,所有文件在基准目录里面同步一份。以后每一次同步都是增量备份,只同步源目录与基准目录之间有变动的部分,将这部分保存在一个新的目标目录。这个新的目标目录之中,也是包含所有文件,但实际上,只有那些变动过的文件是存在于该目录,其他没有变动的文件都是指向基准目录文件的硬链接。

–link-dest参数用来指定同步时的基准目录。

$ rsync -a --delete --link-dest /compare/path /source/path /target/path

上面命令中,–link-dest参数指定基准目录/compare/path,然后源目录/source/path跟基准目录进行比较,找出变动的文件,将它们拷贝到目标目录/target/path。那些没变动的文件则会生成硬链接。这个命令的第一次备份时是全量备份,后面就都是增量备份了。

下面是一个脚本示例,备份用户的主目录。

#!/bin/bash# A script to perform incremental backups using rsyncset -o errexit
set -o nounset
set -o pipefailreadonly SOURCE_DIR="${HOME}"
readonly BACKUP_DIR="/mnt/data/backups"
readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')"
readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
readonly LATEST_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指向新的备份目录。

七、常用命令

1.本地同步

rsync -avzP    /path/to/source_directory/ /path/to/destination_directory/
  • -a:归档模式,保持文件属性。
  • -v:详细模式,显示文件同步的详细信息。
  • -z:压缩传输数据。
  • -h:以人类可读的格式显示文件大小。
  • –progress 传输进度

2.远程同步

rsync -avzP -e ssh user@remote_host:/path/to/source_directory/ /path/to/destination_directory/
  • -e ssh:指定使用 SSH 连接远程主机。
  • user:远程主机的用户名。
  • remote_host:远程主机地址。

3.预览操作

rsync -avzh --dry-run /path/to/source_directory/ /path/to/destination_directory/
  • –dry-run 参数用于模拟同步操作,显示将会发生的变化,但不实际执行同步。

4.排除项同步

rsync -avzh --exclude 'file_to_exclude' /path/to/source_directory/ /path/to/destination_directory/
  • 通过 --exclude 参数可以排除某些文件或目录,确保它们不会被同步。

参考文档:rsync 用法教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2661987.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【VTK-Rendering::Core】第一期 vtkCoordinate坐标系统

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享vtkCoordinate源码解析,并对VTK中的各种坐标变换进行分析,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞关注,小易会继续努力分享&#xff…

AIGC时代下,结合ChatGPT谈谈儿童教育

引言 都2024年了,谈到儿童教育,各位有什么新奇的想法嘛 我觉得第一要务,要注重习惯养成,我觉得聊习惯养成这件事情范围有点太大了,我想把习惯归纳于底层逻辑,我们大家都知道,在中国式教育下&a…

Glary Utilities Pro - 电脑系统优化全面指南:详尽使用教程

软件简介: Glary Utilities Pro 是一款全面的电脑优化工具,它旨在帮助用户提升计算机的性能和稳定性。这款软件提供了多种功能,包括系统清理、优化、修复以及保护。通过一键扫描,它可以识别并清除无用文件、临时数据、注册表错误等…

AIGC开发:调用openai的API接口

简介 开始进行最简单的使用:通过API调用openai的模型能力 OpenAI的能力如下图: 文本生成模型 OpenAI 的文本生成模型(通常称为生成式预训练 Transformer 或大型语言模型)经过训练可以理解自然语言、代码和图像。这些模型提供文…

这是蛰伏的第 1 年 —— 2023 年度总结

时间过得老快了,一下子就到 2023 年年底了,感觉自己好像什么都没做似的。 不过,又到了年终总结季了,正好跟大家唠唠嗑,我就想到啥说啥了。 工作淡如水 先聊聊工作的事情。回顾过去一年的工作,我最大的感…

微软CEO纳德拉当选2023年度CEO,AI大模型崛起成重要趋势;Mixtral 8x7B 真的击败了 GPT 3.5 Turbo 吗?

🦉 AI新闻 🚀 微软CEO纳德拉当选2023年度CEO,AI大模型崛起成重要趋势 摘要:2023年被认为是AI大模型崛起之年,微软CEO纳德拉凭借对AI的投资和领导力当选2023年度CEO。纳德拉将AI技术融入微软的产品和服务中&#xff0…

【解决问题】pyinstaller打包python应用进行快速分发

pyinstaller打包python应用进行快速分发 问题起因先利其器再善其事试用运行 问题起因 有同学问我要接口的应用,于是试了一下python打包成exe的过程。 先利其器 主要使用pyinstaller,可以通过pip安装 pip install pyinstaller安装过程如图 再善其事…

微服务全链路灰度方案介绍

目录 一、单体架构下的服务发布 1.1 蓝绿发布 二、微服务架构下的服务发布 三、微服务场景下服务发布的问题 四、全链路灰度解决方案 4.1 物理环境隔离 4.2 逻辑环境隔离 4.3 全链路灰度方案实现技术 4.3.1 标签路由 4.3.2 节点打标 4.3.3 流量染色 4.3.4 分布式链路…

力扣题目学习笔记(OC + Swift)19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 此题目为链表题,拿出我们的杀手锏,链表解题经典三把斧: 哑巴节点栈快慢指针 关于内存问题:由于Swift及…

无论男孩女孩都要尽情打扮

这款柔软又细腻的开衫外套 上身体验感很不错的哈 舒适软糯百搭还透气,抗起球的面料 黑灰两色简单大方 胸前加上了流行的刺绣设计,可爱又精致 单穿内搭都可,现在天气还比较冷 外面可以套个羽绒服之类的 时尚叠穿风,韩系范儿…

Web自动化测试:Selenium入门到精通

前言 说到自动化测试,就不得不提大名鼎鼎的Selenium。Selenium 是如今最常用的自动化测试工具之一,支持快速开发自动化测试框架,且支持在多种浏览器上执行测试。 Selenium学习难度小,开发周期短。对测试人员来说,如果…

模版匹配历劫之路1-匹配点太多如何解决

1测试图片 2初步推测是否是提取的点太多而导致匹配时间很长 2.1通过canny的算法来提取检测点 import numpy as np import cv2 import time import matplotlib.pyplot as pltclass GeoMatch:def __init__(self):self.noOfCordinates0 # 坐标数组中元素的个数self.cordinates…

ArcGIS批量计算shp面积并导出shp数据总面积(建模法)

在处理shp数据时, 又是我们需要知道许多个shp字段的批量计算,例如计算shp的总面积、面积平均值等,但是单个查看shp文件的属性进行汇总过于繁琐,因此可以借助建模批处理来计算。 首先准备数据:一个含有多个shp的文件夹。…

C++ Qt开发:SqlRelationalTable关联表组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlRelationalTable关联表组件的常用方法及灵…

想畅游在全球顶级金融学识的海洋——人民大学与加拿大女王大学金融硕士

金融职场的你是否想象过有朝一日能够畅游在全球顶级金融学识的海洋中呢?在那里,你可以尽情探索和领略全球顶尖的金融学识的魅力与深度,与来自世界各地的专业人士共同交流和分享经验。这样的场景让人感到兴奋和向往,准备好了吗&…

Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds

题目:基于点云的 6D 机器人抓取目标-辅助行为-评价 摘要:6D 机 器 人 抓 取超 越 自上 而 下捡 垃 圾桶 场 景是 一 项具 有 挑战 性 的任 务 。 以往基于 6 D 抓 取综 合和 机器 人运 动 规划 的解 决方 案 通常 在开 环设 置下 运 行, 对抓…

轻松实现电脑对iPhone应用管理

目录 摘要 引言 用户登录工具和连接设备 电脑可对手机应用程序批量操作 运行APP和查看APP日志 IPA包安装测试 摘要 本文介绍了如何使用克魔助手工具实现电脑对手机应用的管理操作。通过简单的步骤,用户可以批量操作手机应用、运行应用、查看应用日志以及安装测…

企业如何做好内容?媒介盒子分享

在个性化算法的支持下,企业通过创作优质内容使消费者主动选择企业的时代已经来临,对于中小企业来说,这是能够低成本进行营销的好机会。但是有许多企业对内容的理解依旧是片面的,今天媒介盒子就来和大家聊聊:企业如何做…

autosar SJBWY 开发

第一天: 解决tasking 增加任意目录源文件的问题; 展开 Advanced 下面 Browse...选你的源文件目录就好了;

彭涛:2023年终复盘,工作,团队,个人!

眨眼2023即将结束,2024即将开启,每年这个时候,都会简单总结下自己这一年,既是对今年的一个复盘和回顾,也是对新一年的向往和期待。 我的2023年,大概分为 「个人」,「家庭」,「团队」…