ZhouChuang's Blog ZhouChuang's Blog
首页
  • 常用命令
  • 日常总结
  • Prometheus
  • 基础
  • 常用库
专题
  • 「编码」
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Zhou Chuang

为学日益 为道日损
首页
  • 常用命令
  • 日常总结
  • Prometheus
  • 基础
  • 常用库
专题
  • 「编码」
更多
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Linux 命令

  • 日常的总结

    • 进程管理工具:supervisor
    • 文件传输工具:scp、rsync
      • 引言
      • scp
        • 语法
        • 基本用法
        • 安全性
        • 注意事项
      • rsync
        • 语法
        • 常用选项
        • 基本用法
        • 优势
      • 对比
    • 正则和文本处理三剑客小结
    • 加密工具 GPG
  • Prometheus 技术栈

  • 运维
  • 日常的总结
ZhouChuang
2024-12-08
目录

文件传输工具:scp、rsync

本文将详细对比 scp 和 rsync,分析它们的基本功能、效率、灵活性以及实际应用场景,帮助您根据需求选择最合适的工具。

# 引言

在现代 IT 基础设施中,文件传输是日常运维中不可或缺的一部分。无论是备份数据、部署应用,还是在多个服务器之间传输文件,选择合适的工具可以大大提高工作效率。scp 和 rsync 是两种广泛使用的文件传输工具,它们基于 SSH 协议,具有不同的特性和使用场景。

scp(Secure Copy)是一个简单、易用的工具,常用于单次的文件拷贝操作。它的工作原理很简单,通过 SSH 连接安全地将文件从一个系统复制到另一个系统。然而,随着文件数量增多或者需要定期同步文件时,scp 就显得力不从心,因为每次传输都会重复传送完整的文件,即使文件内容没有改变。

与此相比,rsync(Remote Synchronization)作为一个强大的文件同步工具,具备增量同步的能力。它只传输文件中发生变化的部分,从而节省带宽和传输时间。rsync 在处理大规模数据同步、备份以及跨多台机器的频繁文件更新时,表现出色。

# scp

scp 是 Secure Copy 的缩写,是一个基于 SSH(Secure Shell)协议的命令行工具,用于在本地计算机和远程计算机之间安全地复制文件。

# 语法

scp [选项] [原路径] [目标路径]
1

选项:

-1:使用ssh协议版本1;
-2:使用ssh协议版本2;
-4:使用ipv4;
-6:使用ipv6;
-B:以批处理模式运行;
-C:使用压缩;
-F:指定ssh配置文件;
-i:identity_file 从指定文件中读取传输时使用的密钥文件(例如亚马逊云pem),此参数直接传递给ssh;
-l:指定宽带限制;
-o:指定使用的ssh选项;
-P:指定远程主机的端口号;
-p:保留文件的最后修改时间,最后访问时间和权限模式;
-q:不显示复制进度;
-r:以递归方式复制。
1
2
3
4
5
6
7
8
9
10
11
12
13
14

常用选项:

  • -P:指定远程主机的 SSH 端口(默认是 22)。
  • -r:递归复制目录。
  • -p:保留文件的修改时间、访问时间和权限。
  • -C:启用压缩传输。
  • -v:详细模式,显示传输过程中的详细信息,帮助调试。
  • -q:安静模式,抑制非错误信息。
  • -l:限制带宽,单位为 Kbit/s。

# 基本用法

  1. 上传本地文件到远程机器指定目录

    scp /path/to/local/file user@remote_host:/path/to/remote/destination/
    
    1
  2. 从远程复制到本地

    scp user@remote_host:/path/to/remote/file /path/to/local/destination/
    
    1
  3. 递归复制目录

    scp -r /path/to/local/directory user@remote_host:/path/to/remote/destination/
    
    1
  4. 指定端口传输

    scp -P 2222 /home/user/file.txt user@remote.example.com:/backup/
    
    1
  5. 使用密钥文件认证

    scp -i /path/to/private_key.pem /local/file user@remote_host:/remote/path/
    
    1

# 安全性

  • 加密:scp 使用 SSH 协议,所有的文件传输都是通过加密的连接进行的,确保了数据的机密性。
  • 认证:可以使用密码认证或 SSH 密钥认证,增强了安全性。

# 注意事项

  • 权限:scp 会保留文件的权限,但如果远程服务器上的用户权限不够,可能会导致文件无法正确复制。
  • 大文件:对于大文件,scp 可能不是最优选择,因为它没有像 rsync 那样优化传输效率。
  • 带宽:可以使用 -l 选项限制带宽,以避免占用过多网络资源。
  • 同名文件:当使用 scp 命令传输文件到目的目录时,如果目的目录中已经存在同名文件,scp 默认会覆盖目的目录中的同名文件。使用 -n 选项可以防止这种情况发生。

# rsync

rsync是一个远程数据同步工具。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具

它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件。它也可以当作文件复制工具,替代cp和mv命令。

rsync,全称是 remote sync,字面意思是做远程同步的,但是 rsync 能做的不只是远程同步,它常常用来做文件拷贝、系统备份、远程文件传输。

rsync 最大的的用途是可以做增量备份,即 rsync 在第一次执行备份时,是全量备份(将所有的文件都备份),后面再重新备份时,只会备份哪些修改过的文件。

# 语法

rsync [OPTIONS] SOURCE DESTINATION
1

选项:

-v, --verbose 详细模式输出。
-q, --quiet 精简输出模式。
-c, --checksum 打开校验开关,强制对文件传输进行校验。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, --recursive 对子目录以递归模式处理。
-R, --relative 使用相对路径信息。
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
-l, --links 保留软链结。
-L, --copy-links 想对待常规文件一样处理软链结。
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
--safe-links 忽略指向SRC路径目录树以外的链结。
-H, --hard-links 保留硬链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
-n, --dry-run 显示哪些文件将被传输。
-w, --whole-file 拷贝文件,不进行增量检测。
-x, --one-file-system 不要跨越文件系统边界。
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
--delete 删除那些DST中SRC没有的文件。
--delete-excluded 同样删除接收端那些被该选项指定排除的文件。
--delete-after 传输结束以后再删除。
--ignore-errors 及时出现IO错误也进行删除。
--max-delete=NUM 最多删除NUM个文件。
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
--force 强制删除目录,即使不为空。
--numeric-ids 不将数字的用户和组id匹配为用户名和组名。
--timeout=time ip超时时间,单位为秒。
-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
-T --temp-dir=DIR 在DIR中创建临时文件。
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
-P 等同于 --partial。
--progress 显示备份过程。
-z, --compress 对备份的文件在传输时进行压缩处理。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--version 打印版本信息。
--address 绑定到特定的地址。
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
--progress 在传输时显示传输过程。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 从FILE中得到密码。
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
-h, --help 显示帮助信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

# 常用选项

  • -a:归档模式,等同于 -rlptgoD,保留符号链接、权限、时间戳等。
  • -v:详细模式,显示同步过程中传输的文件。
  • -z:启用压缩传输。
  • -P:显示进度信息,等同于 --progress 和 --partial。
  • --delete:删除目标目录中源目录不存在的文件。
  • --exclude:排除特定文件或模式。
  • --include:包含特定文件或模式。
  • -e:指定远程shell(如SSH)的命令。

# 基本用法

  • -a

    -a参数可以替代-r,除了可以递归同步以外,还可以同步元信息(比如修改时间、权限等)。

    rsync -a source destination
    
    1

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

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

    rsync -a source/ destination
    
    1

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

  • -n

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

    rsync -anv source/ destination
    
    1
  • exclude 和 include

    --include参数用来指定必须同步的文件模式,--exclude参数指定排除的文件。

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

远程同步的方法

  1. 基本同步语法

    # 本地同步到远程
    rsync -av source/ username@remote_host:destination
    
    # 远程同步到本地
    rsync -av username@remote_host:source/ destination
    
    1
    2
    3
    4
    5
  2. 同步目录并显示进度:

    rsync -avz --progress /home/user/documents/ user@remote:/backup/documents/
    
    1
  3. 指定SSH传输:

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

    rsync -avz -e ssh /path/to/local/source user@remote_host:/path/to/remote/destination/
    
    1

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

    rsync -av -e 'ssh -p 2234' /path/to/local/source user@remote_host:/destination
    
    1
  4. 排除某些文件:

    rsync -av --exclude='*.bak' /source/dir/ /destination/dir/
    
    1
  5. 除了 SSHrsync 可以作为一个独立的守护进程(rsyncd)运行,提供 rsync 协议服务。这需要在服务器端配置 rsyncd.conf 文件,客户端使用 --rsh=rsync 选项来连接到这个服务。

    rsync --rsh=rsync -avz /path/to/local/file rsync://user@remote_host::module/path/to/remote/destination/
    
    1

# 优势

  • 高效:通过只传输文件的变化部分,rsync 非常高效。
  • 灵活:支持多种传输协议,适用于不同网络环境。
  • 安全性:可以结合 SSH 使用,确保数据传输的安全性。
  • 增量备份:适用于备份策略,可以节省存储空间。
  • 断点续传:支持断点续传,适合长时间传输任务。

# 对比

基本功能

scp:

  • 基于 SSH 协议的文件传输工具。
  • 主要用于将文件或目录从一个主机复制到另一个主机。
  • 适合一次性文件传输,不涉及文件内容的检查或同步。

rsync:

  • 文件同步工具,支持增量传输。
  • 可以检查源文件和目标文件之间的差异,仅传输变更的部分。
  • 支持双向同步,适合频繁更新和备份。

传输效率

scp:

  • 无论目标文件是否存在,每次都会传输整个文件。
  • 对于较小的文件或简单传输需求表现良好。
  • 传输大文件时性能较差,因为没有增量更新机制。

rsync:

  • 使用“滚动校验”和“块级差异”技术,只传输发生变化的部分。
  • 对于重复传输(如备份)表现出色,节省带宽和时间。
  • 支持压缩(-z 参数),进一步减少数据量。

灵活性

  • scp:
    • 功能单一,仅支持文件和目录的拷贝。
    • 无法保留文件同步状态,也不支持断点续传。
    • 不提供过滤文件或排除特定文件的功能。
  • rsync:
    • 支持多种高级功能:
      • 断点续传。
      • 保留文件属性(权限、时间戳、符号链接等)。
      • 排除或包含特定文件(--exclude、--include 参数)。
      • 同步整个目录,保持源和目标一致。

错误恢复

scp:

  • 如果传输中断,必须重新开始传输整个文件或目录。
  • 对于大文件或不稳定的网络环境,效率较低。

rsync:

  • 支持断点续传(--partial 参数),可以从中断的地方继续传输。
  • 减少重复传输已完成的数据,适合不稳定网络环境。

安全性

scp:

  • 默认通过 SSH 进行加密,安全性高。
  • 基于 SSH 的简单文件传输工具,没有额外的安全功能。

rsync:

  • 可以通过 SSH 进行加密(-e ssh 参数)。
  • 与 scp 的安全性相当,但支持更多灵活的认证方式。

应用场景

场景 推荐工具 原因
单次文件传输 scp 简单易用,无需额外配置。
大文件首次传输 scp 或 rsync 如果不需要增量更新,scp 更简单;否则,rsync 更高效。
需要频繁同步 rsync 支持增量更新和文件差异比较,节省带宽和时间。
不稳定网络环境 rsync 支持断点续传,减少中断影响。
大量小文件传输 rsync 对小文件的处理性能优于 scp,且支持过滤无关文件。
备份和还原 rsync 支持文件属性保留、增量同步和目录一致性,特别适合定期备份任务。
#文件传输#scp#rsync
上次更新: 2025/05/06, 13:52:56
进程管理工具:supervisor
正则和文本处理三剑客小结

← 进程管理工具:supervisor 正则和文本处理三剑客小结→

最近更新
01
find 命令介绍
05-06
02
交换分区的配置
04-09
03
top 命令介绍
04-08
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Zhou Chuang 版权所有| 鲁ICP备2021031629号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式