
你有一台服务器,本地有一个文件。你想把它传到服务器上。方法太多了。你用scp,因为你只会scp。其实scp不一定是最快的,也不一定是最安全的。你只是习惯了。今天把5种方式放一起,告诉你什么时候用哪个。
先看一个数据
在集群和云端运维场景下,超过90%的文件传输都基于SSH协议。但同样是SSH,scp、sftp、rsync的表现完全不同。rsync同步100万个小文件,效率可能是scp的10倍以上。你选对了工具,可能省的不只是时间。
方式一:scp——最直接,但不支持续传
scp是OpenSSH自带的,几乎所有Linux都预装。语法简单:scp /local/file user@host:/remote/。
优点:
- 系统自带,不需要装任何东西
- 语法简单,适合一次性传输
缺点:
适用场景:传一个配置文件、一个脚本,几KB的东西。或者你只想用一个命令解决,不追求效率。
一句话:能跑,但不是最优解。
方式二:sftp——交互式管理,有续传能力
sftp基于SSH,但它不只是一条命令。sftp user@host进去之后,你可以ls、cd、put、get、rm、mkdir——像FTP一样在服务器上操作文件。
优点:
缺点:
- 保持SSH会话,资源消耗中等
- 大文件传输效率不如rsync
适用场景:你不知道服务器上有什么,需要先看看目录结构再决定传哪个文件。或者你需要上传到多个不同目录,不想每次敲完整路径。
方式三:rsync——增量同步,效率之王
rsync是专门为同步设计的。它能对比本地和远程文件的差异,只传变化的部分。第二次同步时,可能几秒钟就完了。
优点:
缺点:
适用场景:项目代码同步、备份、定时任务——任何你需要保持两边一致的情况。
方式四:rz/sz——最省事的终端传输
rz和sz是lrzsz工具包里的。在终端里敲rz,弹出一个文件选择框;选完文件,它就传上去了。不需要开新窗口,不需要记路径。
优点:
- 在SSH会话里直接操作,不用另开工具
- 适合偶尔传一两个文件,不想切窗口
缺点:
- 依赖终端支持(Xshell、SecureCRT支持好,原生Linux终端需配置)
- 速度慢,不适合大文件
- 不支持文件夹批量传输
适用场景:你在终端里,临时要传一个配置文件。不想折腾,就想快速搞定。
方式五:WebDAV——HTTP上的文件管理
WebDAV是HTTP协议的扩展,让你像操作本地文件夹一样操作远程文件。
优点:
缺点:
适用场景:你需要一个类似网盘的共享文件夹,多人访问、版本管理。
横向对比:一图看懂
| 特性 | scp | sftp | rsync | rz/sz | WebDAV |
|---|---|---|---|---|---|
| 系统自带 | ✅ | ✅ | ✅ | ❌ | ❌ |
| 断点续传 | ❌ | ✅ | ✅ | ❌ | ✅ |
| 增量同步 | ❌ | ❌ | ✅ | ❌ | ❌ |
| 交互式管理 | ❌ | ✅ | ❌ | ❌ | ✅ |
| 大文件效率 | 一般 | 一般 | 高 | 差 | 一般 |
| 大量小文件 | 差 | 一般 | 高 | 差 | 一般 |
选型决策:别选对的,选合适的
- 传一个配置文件:scp足够,一行搞定
- 需要浏览服务器目录再决定传什么:sftp,进去看一圈
- 定期备份或同步项目代码:rsync,否则你的第二次同步就是浪费时间
- 人在终端,临时传个文件:rz,不用切窗口
- 需要团队共享文件:WebDAV,配好一次长期用
反常识点:rsync比scp安全吗?不一定。它们都走SSH,加密强度一样。rsync的优势是效率,不是安全。你选rsync是因为它能只传差异,不是因为它更安全。
另一个反常识点:scp已经过时了。OpenSSH官方文档建议使用sftp或rsync替代scp。你还在用scp,只是因为习惯了。
最后一句
文件传输这件事,你不需要会所有工具。但你需要知道:当你需要传100万个文件时,别用scp。当你需要定期同步时,别用sftp。当你只需要传一个配置时,别折腾rsync。
工具本身没有好坏,只有合适不合适。你的任务决定了该用哪个。下次传文件之前,先花10秒想想:这次的任务,哪个工具最合适。




