Linux上传文件到另一台服务器,最直接的方法是使用scp命令,它基于SSH协议加密传输,兼顾安全与便捷,适用于绝大多数场景。
linux怎么上传文件到另一台服务器:scp命令使用详解
scp是Secure Copy的缩写,它利用SSH加密通道完成文件拷贝,无需额外配置,只要目标服务器开启SSH服务即可,对于刚接触Linux的管理员,scp是最容易上手的文件上传手段。
scp基本语法与常用参数
scp的使用模式与cp类似,但目标地址需要指定远程主机信息,基本格式:scp [选项] 源路径 目标路径,远程路径写法:用户名@主机地址:路径。
-r:递归复制整个目录。-P:指定SSH端口(大写P,与ssh的-p不同)。-C:启用压缩传输,对带宽敏感的场景有效。-i:指定私钥文件,用于密钥认证。
scp上传本地文件到远端
将本地文件backup.tar.gz上传到服务器168.1.100的/data目录下,用户为root:
scp backup.tar.gz root@192.168.1.100:/data/
如果服务器SSH端口不是默认22,比如是2222,则加上-P:
scp -P 2222 backup.tar.gz root@192.168.1.100:/data/
上传成功后,终端不会有额外提示,文件会直接出现在目标目录。建议使用绝对路径避免误操作。
scp从远端下载文件到本地
反向操作同样简单:把远程文件拉到本地当前目录,只需交换源和目标位置:
scp root@192.168.1.100:/data/backup.tar.gz ./
这条命令对应linux远程拷贝文件到本地的典型场景,下载进度条会显示传输速度和剩余时间。
scp上传目录(-r参数)
当需要上传整个文件夹时,必须加-r:
scp -r /local/project root@192.168.1.100:/data/project
注意:如果目标目录已存在,scp会将源目录放到目标目录内部,行为与cp一致。对于包含大量小文件的目录,scp的传输效率不如rsync,这一点在后续章节会对比。
scp指定端口与密钥认证
生产环境常修改SSH默认端口或使用密钥登录,scp通过-P指定端口,-i指定密钥文件:
scp -P 2222 -i ~/.ssh/id_rsa file.tar.gz root@192.168.1.100:/data/
密钥认证可以实现免密上传,配合脚本自动化非常方便。注意密钥文件权限需设为600,否则SSH会拒绝使用。
linux上传文件到服务器命令:rsync增量同步方案
当文件体积较大或需要频繁同步时,
rsync是比scp更高效的选择,它支持增量传输、断点续传、压缩和镜像同步,是运维人员处理数据迁移的利器。
rsync与scp的核心区别
| 对比维度 | scp | rsync |
|---|---|---|
| 传输方式 | 全量拷贝,每个文件都完整传输 | 增量传输,只传差异部分 |
| 断点续传 | 不支持,中断后需重新开始 | 支持--partial保留部分文件 |
| 目录同步 | 简单递归复制 | 可镜像删除、排除文件、保留属性 |
| 压缩效率 | 支持-C压缩,但在传输过程中压缩 |
支持-z,且可结合SSH或daemon模式 |
| 适用场景 | 临时小文件、一次性操作 | 定期备份、大文件同步、镜像站点 |
rsync的核心优势在于增量特性,对于已经传输过的文件,rsync会先比较文件大小和修改时间,只传输发生变化的部分,第二次传输速度可能快数倍。
rsync基本用法:上传文件与目录
rsync的语法与scp相似,但选项更丰富,上传单个文件:
rsync -avz file.tar.gz root@192.168.1.100:/data/
-a表示归档模式(保留权限、时间戳等),-v显示详情,-z开启压缩,上传目录时同样自动递归,无需额外参数:
rsync -avz /local/project/ root@192.168.1.100:/data/project/
注意源路径结尾的斜杠:加斜杠表示只复制目录内容,不加斜杠表示复制目录本身。
rsync的增量传输与断点续传
当大文件传输中断,scp只能从头再来,而rsync通过--partial可以保留已传输部分,下次继续:
rsync -avz --partial bigfile.iso root@192.168.1.100:/data/
中断后再次执行相同命令,rsync会检测已有的部分文件,只传输剩余内容。对于GB级文件,这个特性能节省大量时间。
rsync结合SSH加密传输
rsync支持两种传输模式:通过SSH(默认)或自带rsync daemon,使用SSH更安全,无需额外服务,如果服务器端口非22,通过-e指定:
rsync -avz -e 'ssh -p 2222' file.tar.gz root@192.168.1.100:/data/
这种方式与scp的加密强度相同,但享受rsync的增量优势。
rsync在备份场景中的优势
利用rsync的--delete选项,可以实现源与目标的完全镜像,删除目标端多余文件,很多运维人员用它配合cron做定时备份:
rsync -avz --delete /important/ root@backup-server:/backup/important/
这相当于linux服务器之间传输文件方式中的高级方案,配合排除文件--exclude可以灵活控制备份范围。
linux服务器之间传输文件方式:sftp与图形化工具
除了scp和rsync,还有多种文件传输方式适应不同场景,sftp基于SSH,提供交互式操作;图形化工具适合不习惯命令行的用户。
sftp命令行交互式传输
sftp使用SSH连接,进入后类似ftp的交互界面,连接服务器:
sftp root@192.168.1.100
常用命令:
ls、cd:浏览远程目录。lls、lcd:操作本地目录。put localfile:上传文件。get remotefile:下载文件。put -r:上传目录。exit:退出。
sftp的优点是可以在交互中查看目录结构,针对性地选择文件,适合临时查找和传输。
sftp常用命令:put/get
上传多个文件可以用mput,但实践中更建议用put逐个操作,下载同理,sftp不支持断点续传,大文件传输时稳定性不如rsync。对于小文件或需要交互确认的场景,sftp比scp更直观。
FileZilla等图形化客户端
在Windows或macOS上,FileZilla是常见的SFTP客户端,Linux用户也可以使用FileZilla,或更轻量的gFTP。图形化工具降低了上手门槛,但自动化能力弱,如果服务器只有命令行环境,还是需要掌握scp或rsync。
lrzsz(Zmodem)用于SSH终端
如果通过串口或某些SSH客户端(如SecureCRT)连接,可以使用rz(上传)和sz(下载)命令,首先在服务器安装lrzsz,然后在终端执行rz,选择本地文件即可上传。这种方式适合没有网络文件系统、只有终端会话的受限环境。
nc(netcat)临时文件传输
nc可以在两台机器之间建立原始TCP连接,用于快速传输文件,接收端:
nc -l -p 9999 > received_file
发送端:
nc 192.168.1.100 9999 < file_to_send
nc传输没有加密,只适合内网临时使用,且需要双方手动协调端口,在自动化脚本中,nc常被用于快速分发文件,但安全性不如SSH方案。
不同场景下如何选择文件上传方式
每种工具都有其适用场景,合理选择可以提升效率,以下是根据常见场景的推荐方案。
内网高速传输:选择rsync或scp
如果服务器之间通过千兆甚至万兆内网互联,带宽不是瓶颈,scp简单直接,适合一次性拷贝;rsync的增量优势在首次全量时并不明显,但后续同步优势巨大。
如果文件大小超过1GB且需要多次传输,rsync是更明智的选择。
公网安全传输:scp或sftp首选
公网环境存在拦截风险,使用SSH加密的scp或sftp是标准做法,rsync同样可通过SSH加密,但配置稍复杂。对于单次小文件,scp的效率最高,因为它不需要额外计算校验和。
大文件断点续传:rsync –partial
传输数十GB的数据库备份或虚拟机镜像,网络抖动可能导致中断,rsync的--partial选项可以从中断点继续,这是scp无法替代的特性,结合--progress可以实时查看进度。
频繁增量同步:rsync + cron
日志文件、配置文件、静态资源的定期同步,rsync配合cron定时任务是最佳组合,通过--exclude排除临时文件,--delete保持镜像,可以实现完全自动化的数据同步。
临时快速传输:nc或python -m http.server
在临时需要共享文件时,可以启动一个简单HTTP服务器:
python3 -m http.server 8000
然后在另一台机器用wget或curl下载。这种方式不需要在目标服务器安装任何额外软件,但注意不要暴露在公网。
scp和rsync基本覆盖了Linux文件上传的绝大多数需求,前者适合简单快速的操作,后者适合复杂和重复的同步任务,根据场景灵活选择,就能高效完成服务器之间的文件传输。
关于linux上传文件到另一台服务器的常见问题
linux怎么上传文件到另一台服务器不需要密码?
使用SSH密钥认证可以免密上传,生成本地密钥对(ssh-keygen),将公钥追加到目标服务器的~/.ssh/authorized_keys文件中,之后scp和rsync就不再需要输入密码。注意密钥文件的权限必须设置为600,否则SSH会拒绝使用。
scp和rsync哪个更快?
对于小文件(几MB以内),scp更快,因为它不需要额外计算校验和,对于大文件或大量文件,rsync的增量传输在第二次及后续同步时速度远快于scp,首次全量传输时,两者速度接近,但rsync可以压缩数据(-z),在带宽受限时可能更快。具体选择取决于文件大小和传输频率。
上传大文件时中断了怎么办?
如果使用scp,只能重新传输整个文件,建议改用rsync的--partial选项,它会保留已传输的部分,下次执行时继续传输剩余部分。如果必须使用scp,可以将文件分割成小块分别传输,然后用cat合并,但操作繁琐,不推荐。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/573472.html




