如何在 Linux 中使用 rsync 传输文件

188f950d10e388ac8c2e0c35b1e09be7.gif

作者 | 刘光录

来源 | TIAP

rsync(远程同步,Remote Sync)是一种在系统中或两个系统之间复制文件和目录的同步工具。rsync 的一个最大的优点,就是它只复制更改的文件,因而可以减少 CPU 消耗,在复制文件时节省带宽和时间。

rsync 相比于 scp 的优点

我们大家可能知道 scp(secure copy 的简写),也是一个通过 ssh 在两个远程系统之间复制文件的工具。但是 rsync 更好用,表现在以下三个方面:

1)rsync 只复制更改的文件,而 scp 会复制所有的每个文件,并且会覆盖旧的文件,因此,rsync的速度更快;

2)rsync 也可以在没有加密的情况下工作,这可以减少系统开销(仅用作对加密传输没要求的情况下,有安全风险时慎用);

3)rsync 支持断点续传(但是scp不可以)。

在大多数Linux发行版中,rsync 默认是没有安装的,因此需要手动安装。在 Ubuntu 和 Debian 系统中,可以使用如下命令安装:

sudo apt install rsync

rsync 命令示例

rsync命令的结构如下:

rsync [OPTIONS] Source Destination

上述命令中 Source 为文件的源地址,Destination 为目的地址。源地址和目的地址可以是本地路径也可以是远程路径,格式为:username@hostname:path/to/file

我们接下来看几个实际的例子。

注意:假如我们有一个目录 A,那么 A 和 A/ 是不一样的。A/ 指的是在目录A下的所有文件,但是不包括 A 本身;所以 复制 A 会在目的地址新建一个目录,然后复制 A 中的文件。但是复制 A/ 只会将 A 中的文件复制到目的地址中。

1.  同步本地文件(单向同步)

我们假设要将文件从目录 A 复制到 Backup-A-dir 中:

rsync A/ Backup-A-dir/

上述命令会将 A 中的文件复制到 Backup-A-dir 中。但Backup-A-dir中的文件不会同步到A中,这就是为什么会被称为单向同步的原因。

2. 同步远程文件(单向同步)

远程系统和本地系统之间同步文件,命令是类似的。注意,源地址和目的地址都可以是本地文件系统路径或者远程系统(ssh)路径。

rsync dev/build username@hostname:~/Backup

3. 双向同步

上述命令是将文件从源地址复制到目的地址。我们假设有这样一种情况,就是在目的地址中存在一些额外文件,但是这些额外文件在源地址中并不存在,那么在单向同步的时候,不会将目的地址中的这些额外文件删掉。如果我们想要在同步的时候删掉目的地址中的这些额外文件(也就是需要与源地址中的文件保持绝对一致),那么就需要使用双向同步。

要保持源地址和目的地址中的文件一致,将 --delete 选项添加到命令中即可:

rsync A/ Backup-A-dir/ --delete

4. 复制完成后删掉源文件

如果要在复制完成后,删掉源文件,需要在命令中添加 --remove-source-files 选项:

rsync A/ Backup-A-dir/ --remove-source-files

删掉源文件需要慎重,要确保已经保存好了备份,并且待删数据已经没有用了。

5. “包括”和“排除”文件

如果你需要(或者不需要)传输某些指定的文件,可以使用 --include 或者 --exclude 选项,后面跟上 = 和 指定文件的模式表达式:

rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py

以上命令会传输所有以 .py 作为后缀名的文件,排除掉所有以 .tmp.py 为后缀名的文件。

上面提到的模式表达式,可以是正则表达式。

注:如果 include 或 exclude 的文件列表比较长,可以将其存储在文件中,使用的时候将文件名称传递给 --include-from 或者 --exclude-from 选项。

6. 通过 ssh 传输

如果想要通过 ssh 传输文件,那么需要使用 -e 选项来指定 ssh:

rsync -e ssh A/ username@hostname:~/Backup-A-dir/

这是传输文件到远程系统的首选方式,因为它传输的时候是加密的。需要注意的是,由于是加密传输,会产生系统开销,所以这比正常传输更耗时。

要使用 ssh 传输,还需要确保服务器端已经配置了ssh。

7. 详情模式

Linux 中的大多数命令都会有详情选项,用于在终端中记录命令的操作。rsync 也不例外。

使用 -v 或者 -verbose 选项来显示详情,它会列出正在执行的操作和进度。这在调试的时候很方便。

rsync A/ Backup-A-dir/ -v -r

其输出类似于如下的输出:

$ rsync A/ Backup-A-dir/ -v -rsending incremental file listcreated directory Backup-A-dir./file1.txtfile2.txtfile3.txtfile4.txtfile5.txtfile6.txtsent 388 bytes received 168 bytes 1,112.00 bytes/sectotal size is 0 speedup is 0.00

8. 只运行(运行但是不执行复制操作)

如果你只是想知道在不进行实际传输的情况下,需要复制的文件,那么可以使用 --dry-run(或者 -n)选项:

除复制部分外,它与正常rsync命令一样执行所有操作。它将列出要复制或删除的文件(如果需要),然后在复制之前停止。

$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

注意,上述命令需要带有参数 -v 来显示详情,否则不会显示任何结果。

9. 显示传输进度

要显示传输进度,可使用 --progress 选项:

rsync A/ Backup-A-dir/ --progress

上面的命令将显示一个类似于下面的进度条:

$ rsync -r A/ Backup-A-dir/ –progresssending incremental file listcreated directory Backup-A-dir./file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)

10. 压缩和传输数据

使用 -z 选项可以压缩要传输的数据,压缩后在传输数据会更加节省网络带宽和时间。它将在目的地自动解压缩。

当传输的数据量很大时,使用 -z 选项进行压缩会节省时间,但是对于小文件,应该避免使用 -z,因为处理压缩的开销会超过正常情况下的时间。

rsync -z A/ Backup-A-dir/

11. 递归复制文件和目录

以上所有命令只复制文件,不复制子目录(每个Linux命令都是这样)。因此,不会复制这些子目录中的文件。要复制子目录中的文件,可以使用 -r 选项。

rsync -r A/ Backup-A-dir/

12. 归档并保留元数据

如果要保留符号链接、时间戳、文件权限、文件的用户和组所有权,可以使用 -a 选项。

rsync -a A/ Backup-A-dir/

结合使用 -r 可以递归复制文件并保留复制文件的元数据。

13. 设置文件大小限制

为了避免传输大文件,可以使用 --max-size 选项设置文件大小限制。

rsync --max-size='100K' A/ Backup-A-dir/

14. 设置带宽限制

--bwlimit 选项可以设置最大传输速率,单位是 kbps。

rsync --bwlimit=100 A/ Backup-A-dir/

15. 断点续传

如果文件传输不完整,可以使用 rsync 命令保留不完整的下载,以便在下一次发出相同命令时继续传输。

要恢复传输,使用 --append 选项:

rsync --append A /Backup-A-dir/

多线程传输

以上都是一些基本的命令,是在单个进程中复制文件。如果文件特别大,比如有5TB,那么整个传输过程的持续时间会非常长。这里介绍一种方法可以加快传输速度,那就是使用 parallel

parallel 是用于执行并发作业的GNU程序,可以和 rsync 结合使用。

与 rsync 一样,parallel 也需要手动安装:

sudo apt install parallel

在我们正式介绍 parallel 之前,先来了解一些它是如何工作的。我们来考虑一个类比:

假设有1000个鸡蛋和100个篮子,然后每个篮子配备一个无人机,任务就是将这1000个鸡蛋交付给客户。经理给每个篮子分配10个鸡蛋,并将篮子交给无人机进行交付。这样每个无人机都会执行一个操作(就是送篮子中的鸡蛋,我们的例子中,就好比是 rsync 处理10个文件)。经理监督无人机的工作。请注意,每个无人机都不知道是否还有其他无人机,只有经理才知道。

类似地,rsync像无人机一样执行文件传输,而 parallel 就担任经理的角色。

parallel 将要传输的文件分割成若干份(每份都是一个文件列表),每份都由rsync启动一个进程进行传输。rsync不知道其他并行的进程,也不具备并行传输的能力。而parallel就启动rsync,来启动并管理多个并行进程。

因此,parallel 命令由两部分组成,一个是参数(鸡蛋/文件),另一个是并行进程命令(管理器)。

ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/

在上述命令中,管道符号 | 左侧的部分,输出是一个文件列表,每个文件都作为一个参数;在 parallel 命令中,{} 则表示这些参数(相当于占位符)。

-j n,它给- n 一个数字来表示任务数(或者进程数),本例中,n 是20;之后是 rsync 的常用命令,来处理每个参数(管道符号左侧的文件列表)。最后,它会被捆绑到20个进程中,并行执行。

注意,上面的 rsync 命令就是普通的rsync命令,跟我们上面介绍的用法完全一样,就像不用 parallel 时一样,可以添加任何选项(比如 -z, -a, -e ssh等)。

关于 garallel 的详细介绍,可参考:

https://www.gnu.org/software/parallel/

使用 rsync 时的一些常见故障

使用 rsync 时可能会遇到一些问题,下面是一些常见的错误。

1. rsync 权限被拒绝(rsync permission denied)

当你使用没有权限的路径时,就会报出这个错,比如:

rsync B/ /home/

如果你没有 /home 的写入权限,那上述命令就会报权限被拒绝(普通用户通常不这样做)。

2. 在<路径>中设置时间错误(rsync failed to set times on <path>)

当文件系统无法处理文件和目录的修改时间时,就会发生这种情况。关于这个问题,可以参考:

https://superuser.com/questions/200012/rsync-failed-to-set-times-on-dir-path

以上就是本次分享全部内容,欢迎讨论。

d85b1253d83ade9c05292248db0dc484.gif

往期推荐

40 张图 详解 Docker 容器监控

剖析 kubernetes 集群内部 DNS 解析原理

Docker 镜像和容器的导入导出及常用命令

实战 Kubectl 创建 Deployment 部署应用

dc2192c94d7c1385d79c57965b6ec4a3.gif

点分享

37c2610906dbabc2ac48dca2cac1b948.gif

点收藏

db44160ff84a06f2b94ebaf1b369c10d.gif

点点赞

a4d5d5eb9cdd2b710d237d2c438fc0a9.gif

点在看

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国民级消消乐背后的网络技术支持:不畏巨“峰”,“运”筹帷幄

简介&#xff1a;近日&#xff0c;阿里云网络携手乐元素共同部署建设了基于7层业务自动化调度的弹性网络架构&#xff0c;进一步提升乐元素在用户服务上的娱乐体验。提到乐元素相信大家都不陌生&#xff0c;作为从事移动网络游戏的研发、运营及广告平台&#xff0c;其代表作就是…

透析阿里云视频云「低代码音视频工厂」之能量引擎——vPaaS视频原生应用开发平台

简介&#xff1a;支撑15分钟上线高品质专属音视频平台 为满足企业用户极速搭建高品质专属音视频业务的需求&#xff0c;阿里云视频云的“低代码音视频工厂”应运而生&#xff0c;但极速而高品质的平台搭建诉求&#xff0c;需要用全新的开发方式才能真正实现&#xff0c;而全新…

自动驾驶“稳打地基”,小鹏汽车基于阿里云建自动驾驶AI智算中心算力可达600PFLOPS

数据驱动是自动驾驶发展的公认方向&#xff0c;也让自动驾驶模型训练成为一头“吃算力”的巨兽。自动驾驶的视觉检测、轨迹预测与行车规划等算法模型&#xff0c;有赖于机器学习海量数据集&#xff0c;但算力的不足让研发速度仍远远赶不上数据量增长的速度。随着传感器的进一步…

阿里云视频云「 vPaaS 」演绎了怎样的音视频应用开发「未来图景」

简介&#xff1a;前瞻音视频平台的演进未来 vPaaS是阿里云视频云最新推出的低代码音视频应用开发产品&#xff0c;其中&#xff0c;vPaaS低代码音视频工厂&#xff0c;彻底打破了音视频应用的繁冗技术开发壁垒&#xff1b;vPaaS视频原生应用开发平台&#xff0c;全新定义了音视…

鲲鹏开发者创享日2022:鲲鹏全栈创新 与开发者共建数字湖南

由华为推出的面向鲲鹏计算产业全栈开发者的系列活动——鲲鹏开发者创享日2022于8月5日在长沙成功举办。这场被称为开发者“技术嘉年华”的峰会&#xff0c;汇聚了国内顶尖技术大咖、科研带头人、知名企业技术专家及高校开发者&#xff0c;描绘了计算产业发展趋势和蓝图&#xf…

MySQL 深潜 - MDL 锁的实现与获取机制

简介&#xff1a;本文将介绍在 MDL 系统中常用的数据结构及含义&#xff0c;然后从实现角度讨论 MDL 的获取机制与死锁检测&#xff0c;最后分享在实践中如何监控 MDL 状态。 作者 | 泊歌 来源 | 阿里技术公众号 一 背景 为了满足数据库在并发请求下的事务隔离性和一致性要求…

深度解说阿里云 Serverless Kubernetes

简介&#xff1a;听阿里云技术专家聊聊 Serverless Kubernetes 一路走来的发展史&#xff0c;看看它是如何做到兼容 Kubernetes 使用方式的同时&#xff0c;拥有免运维和极致弹性等特点~ 作者 | 陈晓宇&#xff08;阿里云技术专家&#xff09; 策划 | 褚杏娟 伴随着云原生的…

理清 HTTP 之下的 TCP 流程,让你的 HTTP 水平更上一层

作者 | 神说要有光来源 | 神光的编程秘籍大家都知道 HTTP 的底层是 TCP&#xff0c;但是可能仅限于知道&#xff0c;并不是真正理解它们的关系。平时我们用 chrome devtools 的 Network 工具也只是能分析 HTTP 请求&#xff1a;TCP 层的东西看不见摸不着的&#xff0c;所以对它…

基于 EventBridge 构建 SaaS 应用集成方案

简介&#xff1a;事件源是事件驱动的基石&#xff0c;如何获取更多事件源也是 EventBridge 一直在探索和尝试的方向。针对市场上其他云厂商和垂直领域的 Saas 服务&#xff0c;EventBridge 发布了 HTTP Source 能力&#xff0c;提供简单且易于集成的三方事件推送 &#xff0c;帮…

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

简介&#xff1a;Kubernetes 一贯的作风是通过定义标准来解决同一类问题&#xff0c;在解决集群对外流量管理的问题也不例外。Kubernetes 对集群入口点进行了进一步的统一抽象&#xff0c;提出了 3 种解决方案&#xff1a;NodePort、LoadBalancer 和 Ingress。 作者&#xff1…

阿里云 AI 编辑部获 CCBN 创新奖,传媒行业解决方案背后的黑科技

简介&#xff1a;视频云驱动智媒创新 5 月 27 日&#xff0c;CCBN&#xff08;第二十八届中国国际广播电视信息网络展览会&#xff09;在北京隆重召开&#xff0c;在本次的 “CCBN 年度创新奖” 评选中&#xff0c;阿里云视频云凭借 AI 编辑部的传媒行业专业解决方案获得 CCBN …

云原生正在吞噬一切,开发者该如何应对?

十年前&#xff0c;Netscape创始人、硅谷著名投资人马克安德森&#xff08;Marc Andreessen&#xff09;预言“软件正在吞噬世界”&#xff1b;数年后&#xff0c;软件里90%以上的代码都是开源代码&#xff0c;“开源正在吞噬软件”&#xff1b;如今&#xff0c;“云原生吞噬开…

阿里云视频云 Retina 多媒体 AI 体验馆开张啦

简介&#xff1a;带你体验视频更多可能 带你体验视频更多可能 海量视频管理难度大&#xff1f;翻库检索特定人物费时费力&#xff1f;视频内容剪辑效率低&#xff1f;您的得力助手“Retina多媒体AI”体验馆已上线。带你感受视频AI黑科技&#xff0c;开启极致智能体验。 1、智…

一篇文章了解 Docker 的安装、启动以及工作原理!

作者 | 是泡泡来源 | CSDN博客Docker 浅谈1.1 Docker 为什么出现我们知道&#xff0c;传统的项目开发和运维是两套环境&#xff0c;而且要一一配置环境并且有的时候更新还会导致服务不可用&#xff0c;这就很麻烦了&#xff0c;那么有没有一种很方便不用这么麻烦的技术可以一键…

技术解读:英特尔 x86 平台上,AI 能力是如何进行演进的?(附PPT)

简介&#xff1a;AI 生态系统是怎样的&#xff1f;其中又有哪些关键技术&#xff1f; AI 计算力的指数增长意味着&#xff0c;为了解决越来越复杂的用例&#xff0c;即使是 1000 倍的计算性能增长也很容易被消耗。因此&#xff0c;需要通过软件生态系统的助力&#xff0c;才能…

Apsara Stack 技术百科 | 浅谈阿里云混合云新一代运维平台演进与实践

简介&#xff1a;随着企业业务规模扩大和复杂化及云计算、大数据等技术的不断发展&#xff0c;大量传统企业希望用上云来加速其数字化转型&#xff0c;以获得虚拟化、软件化、服务化、平台化的红利。在这个过程中&#xff0c;因为软件资产规模持续增大而导致的软件开发运维和IT…

Java应用结构规范

简介&#xff1a;在Java程序开发中&#xff0c;命名和应用分层无疑是广大后端同胞的两大“痛点”&#xff0c;本文提供一种基于领域模型的轻量级应用分层结构设计&#xff0c;供大家参考。下面按分层结构、分层明细、调用关系、各层规范和通用代码工具展开介绍。 作者 | 阿卓 来…

Gartner:2022年全球半导体收入增长预计将放缓至7%,远低于2021年26.3%

2022年来自个人电脑的半导体收入将下降5.4% 供稿 | Gartner 出品 | CSDN云计算 根据Gartner的最新预测&#xff0c;2022年全球半导体收入预计将增长7.4%&#xff0c;相比上一季度预测的13.6%有所下降并且远低于2021年的26.3%。 Gartner研究业务副总裁Richard Gordon表示&#…

Linux 中的管道是什么?管道重定向是如何工作的?

作者 | 刘光录来源 | TIAP我们在命令行中经常会用到类似 cmd0 | cmd1 | cmd2 的写法。其实&#xff0c;这是管道重定向&#xff08;pipe redirection&#xff09;&#xff0c;用于将一个命令的输出作为输入重定向到下一个命令。那么&#xff0c;你知道它具体是怎么工作的吗&…

AliRTC 开启视频互动 “零计算” 时代

简介&#xff1a;在 2021 云栖大会《产业视频化创新与最佳实践》视频云主题论坛中&#xff0c;阿里云智能高级技术专家在《AliRTC 开启视频互动 "零处理" 时代》的主题演讲中&#xff0c;发布了阿里云视频云下一代实时交互解决方案 —RTC “零处理”&#xff0c;同时…