用 scp 和 rsync 完成跨服务器文件拷贝
把文件从一台 Linux 服务器拷贝到另一台,最直接的方法是使用 scp 命令,数据量大的场景用 rsync 更稳。这两款命令都是 Linux 系统内置的远程拷贝工具,一个字节一个字节地把文件从源机器搬到目标机器,不需要中间介质,也不需要额外安装图形界面。
Linux 服务器之间拷贝文件有哪些常用命令
在服务器运维和开发部署场景里,每一台机器都是一个独立的文件岛屿。服务器迁移文件是个高频需求,比如新环境部署、日志归档、备份同步,动手之前先理清楚三款主流工具的差异。
| 工具 | 适用场景 | 特点 | 备注 |
|---|---|---|---|
| scp | 单次拷贝、少量文件 | 简单直接,加密传输 | 无法断点续传 |
| rsync | 大文件、增量同步 | 支持断点续传,只传差异部分 | 需额外确认两端已安装 |
| sftp | 交互式操作 | 适合手动静默操作 | 类似 FTP 但走 SSH |
行业共识认为,scp 是入门首选,rsync 是生产环境主力,下面拆开讲。
用 scp 命令实现 Linux 拷贝到远程服务器
scp 全称 secure copy,基于 SSH 协议加密传输,它的语法和 cp 类似,只是多了一个远程主机的前缀。
从本机拷到远程服务器的基础用法
把当前目录下的 backup.tar.gz 推到远程服务器的 /data 目录下:
scp backup.tar.gz root@192.168.1.100:/data/
这一条命令里,root 是目标机器的登录用户名,168.1.100 是目标机器的 IP 地址,冒号后面跟着目标路径,执行后会提示输入密码,输入正确即开始传输。
从远程服务器拉到本机的操作
反向操作,把远程服务器上的文件下载到本地:
scp root@192.168.1.100:/data/access.log /root/local_backup/
注意顺序:远端地址写在前面,本地路径写在后面,这个方向容易搞混,但记住一个规律scp 的语法永远是“来源在前,目标在后”。
递归拷贝整个文件夹
scp 不加参数时只能拷文件,拷贝目录必须加 -r:
scp -r /opt/webapp/ root@192.168.1.100:/opt/
-r 表示 recursive,遍历整个目录结构,实际执行时,如果目录里有大量小文件,scp 会逐文件建立连接,速度较慢,这时候建议改用 rsync。
指定端口和 SSH 密钥
有些服务器出于安全考虑,SSH 端口不是默认的 22,用
-P 指定端口,注意是大写:
scp -P 2222 file.txt user@server.com:/tmp/
如果已经配置了 SSH 免密钥登录,scp 会自动使用密钥认证,不再询问密码,这对脚本化自动拷贝至关重要。
scp 的痛点:中断了就得重来
scp 没有断点续传的能力,拷一个 20G 的数据库备份文件,网络抖了一下,整个文件就得从头再传,这是 scp 最让人抓狂的地方,也是为什么生产环境更推荐 rsync 的原因。
rsync:Linux 服务器间大文件拷贝的稳定方案
rsync 同样基于 SSH 协议,但它的设计哲学完全不同,rsync 核心优势是增量传输只发送源文件和目标文件不一致的部分,已经存在且相同的块直接跳过。
基本拷贝命令
rsync -avz /data/app/ root@192.168.1.100:/data/app/
拆解参数:
-a:归档模式,保留权限、时间戳、软链接等属性-v:显示进度信息-z:传输时压缩,适合文本类文件
加上 --progress 可以实时看到传输百分比和速度:
rsync -avz --progress /data/app/ root@192.168.1.100:/data/app/
断点续传:rsync 碾压 scp 的关键能力
rsync 天然支持断点续传,即使传输中途断线,重新执行同一条命令,它会从上次中断的位置继续,而不是从头再来,这个特性在跨机房传输大文件时尤为重要。
增量同步:两台服务器保持目录状态一致
rsync 的 --delete 参数让目标目录严格镜像源目录源端删了的文件,目标端也删除,这在做代码发布和多机同步时非常实用:
rsync -avz --delete /var/www/html/ root@server2:/var/www/html/
限速传输避免占用业务带宽
生产服务器上,带宽资源金贵,rsync 提供 --bwlimit 参数限速,比如限制为 5MB/s:
rsync -avz --bwlimit=5120 /backup/ root@server2:/backup/
5120 的单位是 KB/s,即每秒约 5MB。
常用 rsync 组合技巧
- 加
--exclude排除不需要同步的目录:--exclude='cache/' --exclude='.tmp' - 加
-e 'ssh -p 2222'指定 SSH 端口 - 加
--dry-run试运行,不实际传输,只显示会执行哪些操作
rsync -avz --dry-run /data/ root@server2:/data/
试运行是个极好的习惯,大规模操作之前先跑一遍 dry-run,确认无误再去掉该参数正式执行。
Linux 服务器之间免密拷贝配置方法与权限陷阱
每次拷贝都输密码,既麻烦又难以自动化,配置 SSH 密钥免密登录是正规做法。
免密登录配置三步走
第一步,在源机器生成密钥对:
ssh-keygen -t rsa -b 4096
一路回车即可,默认生成在 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)。
第二步,把公钥推送到目标机器:
ssh-copy-id root@192.168.1.100
该命令会将本机公钥追加到目标机器的 ~/.ssh/authorized_keys 文件中。
第三步,验证免密是否生效:
ssh root@192.168.1.100
能直接登进去,说明配置成功,scp 和 rsync 也可以免密使用了。
常见报错与解决
Permission denied (publickey,password):绝大多数情况是目标机器 ~/.ssh 目录权限不对。authorized_keys 文件权限应为 600,.ssh 目录权限应为 700:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
host key verification failed:首次连接远程主机时会出现这个提示,输入 yes 确认即可,批量部署场景可在 ssh 命令加 -o StrictHostKeyChecking=no 跳过确认。
scp 拷过去文件属主不对:远程机器的用户名和本机不同,拷过去文件的属主会变成目标机器的登录用户,需要使用 -p 参数保留时间戳,或者传输后执行 chown 调整属主。
什么情况下选择 sftp 交互式传输
sftp 适合少量、临时性、需要手动浏览目录的传输场景,登录命令:
sftp root@192.168.1.100
登录成功后进入交互界面,操作用命令:
ls:查看远端目录lcd和cd:切换本地/远端目录put filename:上传文件get filename:下载文件bye或exit:退出
业内专家指出,sftp 在日常维护中更多用于单文件应急处理,自动化运维脚本里很少出现它的身影,如果你要写脚本定时传输,scp 和 rsync 才是正解。
结合应用场景挑选适合的拷贝方式
首次部署新服务器,代码包加配置文件总共不到 500M,一次性拷贝
直接用 scp,一条命令解决,不需要额外思考。
scp -r /project/build/ root@新服务器IP:/opt/project/
多台同配置服务器保持数据一致,且每天定时执行
必须用 rsync,结合 cron 定时任务:
30 2 rsync -avz --delete /data/sync/ root@server2:/data/sync/
定时增量同步,稳定高效。
数据库备份文件 50G,跨机房传输,随时可能断线
rsync 加断点续传加限速:
rsync -avz --progress --bwlimit=20480 /backup/db_$(date +%F).sql root@server2:/backup/
结合 --partial 参数,即使中断,部分传输的文件也不会被删除,下次执行会从中断点继续。
服务器迁移或内容初始化,需要把整块磁盘分区数据搬到新机器
rsync 加 -a 参数并把源和目标指向分区挂载点:
rsync -avx / /mnt/new_disk/
-x 表示不跨越文件系统边界,避免把 /proc、/sys 之类的虚拟文件系统一并拷贝。
实操时容易忽略的几个细节
拷贝大文件前先检查磁盘空间,执行 df -h 看目标机器的可用空间,否则传到一半磁盘满了,既浪费带宽又留下残缺文件。
长传过程中终端断开了也不要慌,用 nohup 或 screen/tmux 把命令放到后台执行,终端断开不影响传输:
nohup rsync -avz /data/ root@server2:/data/ > rsync.log 2>&1 &
传完以后做校验,简单的校验是对比文件大小和 md5 值:
md5sum filename
源机器和目标机器各执行一次,结果一致说明文件完整,也可用 rsync 的 -c(checksum)参数跳过时间戳差异,直接校验内容一致性。
常见问题解答
scp 和 rsync 到底选哪个
单次小文件传输选 scp;大文件、增量同步、断点续传、定时任务选 rsync,rsync 功能是 scp 的超集,但命令参数更多,学习曲线稍陡。
rsync 断点续传具体怎么操作
传输中断后,直接重新执行原命令,rsync 默认会对比源和目标文件的块信息,跳过已传输完成的部分,无需额外加参数,配合 --partial 可以确保中断时留下的部分文件不被自动清理。
两台服务器都在内网,带宽受限,如何加快拷贝速度
先用 ping 测延迟,再用 iperf3 测实际带宽,如果网络本身没问题,rsync 加 -z 压缩参数能显著减少文本类文件的传输量,加 --bwlimit 防止占满带宽影响其他服务。
无论用 scp 还是 rsync,核心原则不变:先小文件试通,再跑大任务;先 dry-run 验证,再正式执行,跨服务器拷贝是 Linux 管理的日常操作,掌握这两把工具,文件传输不再是难题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/697298.html





