1. 概述
在日常运维和开发工作中,我们经常需要在两台云服务器之间传输文件或同步数据。无论是迁移网站代码、备份数据库,还是分发配置文件,scp 和 rsync 都是最常用、最可靠的命令行工具。
这两个命令都基于 SSH 协议进行安全传输,同时支持公共网络和私有网络,只要有目标服务器的远程访问权限即可操作。本文将分别介绍它们的使用方法和适用场景。
2. scp——简单快速的安全复制
scp 全称 Secure Copy(安全复制),是一种通过 SSH 协议在主机之间复制文件的方法。它的特点是命令简单、即用即走,适合快速传输单个文件或小规模目录。
2.1 复制单个文件
假设我们要把服务器 192.168.1.1 上的文件 /root/myfile 复制到服务器 192.168.1.2 的 /tmp 目录下:
scp /root/myfile root@192.168.1.2:/tmp
系统会提示输入 192.168.1.2 的 root 密码,输入后确认 yes 即可开始传输。
2.2 复制整个目录
如果要复制某个目录(如 /root/mydir),需要加上 -r(recursive,递归)参数:
scp -r /root/mydir root@192.168.1.2:/tmp
这条命令会将整个 /root/mydir 目录及其所有子文件复制到目标服务器的 /tmp 目录下。
2.3 scp 常用参数
| 参数 | 说明 |
|---|---|
-r |
递归复制整个目录 |
-P port |
指定 SSH 端口(大写 P) |
-i keyfile |
使用指定的私钥文件进行认证 |
-v |
显示详细传输过程,便于排查问题 |
3. rsync——强大的同步与备份工具
rsync 是一款功能更强大的文件复制和同步工具,通常用于在两台服务器之间同步数据。与 scp 相比,rsync 的核心优势在于:
-
增量传输:只传输发生变化的部分,节省带宽和时间
-
保留属性:可以保留文件的所有者、权限、时间戳等元数据
-
支持排除规则:可以忽略不需要同步的文件或目录
和 scp 一样,rsync 也通过 SSH 协议来传输数据。
3.1 基本用法
把服务器 192.168.1.1 上的文件夹 /root/mydir 复制到 192.168.1.2 的 /tmp 目录下:
rsync -av /root/mydir root@192.168.1.2:/tmp
3.2 参数详解
| 参数 | 说明 |
|---|---|
-a |
归档模式,等同于 -rlptgoD,复制时保留所有者和权限属性 |
-v |
详细模式,在传输过程中显示进度信息 |
-z |
传输时压缩数据,适合慢速网络 |
--delete |
删除目标端存在但源端已不存在的文件,实现完全同步 |
--exclude |
排除指定文件或目录,如 --exclude='*.log' |
3.3 实用场景示例
场景一:同步网站代码(排除缓存目录)
rsync -avz --exclude='cache/' --exclude='*.tmp' /var/www/html/ root@192.168.1.2:/var/www/html/
场景二:完全镜像同步(删除目标端多余文件)
rsync -av --delete /data/backup/ root@192.168.1.2:/data/backup/
4. scp vs rsync:如何选择?
| 对比维度 | scp | rsync |
|---|---|---|
| 适用场景 | 快速传输单个文件或小目录 | 大规模数据同步、定期备份 |
| 增量传输 | ❌ 每次都全量传输 | ✅ 只传变化部分 |
| 保留属性 | 部分保留 | ✅ 完整保留(-a 参数) |
| 排除规则 | ❌ 不支持 | ✅ 支持 --exclude |
| 命令复杂度 | 简单 | 稍复杂但功能强大 |
| 网络效率 | 一般 | 高(尤其配合 -z 压缩) |
建议:如果只是偶尔复制几个文件,
scp足够用;如果需要定期同步大量数据、做服务器备份或镜像部署,rsync是更专业的选择。
5. 注意事项
-
SSH 端口:如果目标服务器使用了非默认的 SSH 端口(非 22),
scp使用-P参数指定端口,rsync则通过-e "ssh -p port"方式指定。 -
权限问题:确保有目标服务器的写入权限,通常使用 root 或具有 sudo 权限的用户。
-
网络稳定性:大文件传输建议使用
rsync,即使传输中断也可以断点续传(配合--partial参数)。 -
安全性:建议使用 SSH 密钥认证替代密码认证,既安全又免去重复输入密码的麻烦。
6. 总结
scp 和 rsync 是 Linux 服务器间文件传输的两大利器:
-
scp:简单直接,适合快速复制单个文件或小目录
-
rsync:功能强大,适合大规模数据同步和定期备份,支持增量传输和属性保留
掌握这两个命令,可以大幅提升服务器运维和开发部署的效率。建议根据实际场景灵活选用——小文件用 scp,大数据用 rsync。