把本地文件拷贝到Linux服务器,最稳妥的方式是使用scp命令、rsync命令或sftp图形工具,其中scp适合单次传输,rsync适合增量同步,WinSCP或FileZilla则适合不熟悉命令行的新手。
为什么选对传输方法比盲目操作更重要
很多朋友第一次接触Linux服务器时,第一反应是用U盘拷贝或者聊天软件传文件,这个思路在物理机上勉强可行,可一旦面对云服务器或者机房托管的机器,这些方法就完全失效了,本地文件到远程Linux服务器之间,隔着网络和防火墙,必须依靠专门的传输协议。
行业共识认为,没有一种传输方法能通吃所有场景,临时传个配置文件、备份数据库、同步整个项目目录、远程编辑脚本,每种需求对应的最优解都不一样,选错了方法,轻则传输慢、断线重传,重则文件内容损坏、权限错乱,到时候排查问题比传输本身更耗费精力。
先搞明白一个概念:Linux服务器默认情况下,SSH服务是开放的,这就意味着你不需要额外安装任何服务端软件,只要本地机器能通过SSH连上服务器,就一定能传文件,scp、sftp、rsync全都建立在SSH基础之上,这大大降低了使用门槛。
最推荐的命令行方案:scp命令实战详解
scp的基础语法和核心参数
scp命令是Secure Copy的缩写,它是Linux系统自带的安全远程拷贝工具,无需在服务器端做任何额外配置,只要SSH能连通的机器,scp就能传文件,语法结构非常简单:
scp [参数] 本地文件路径 用户名@服务器IP:远程目录 scp [参数] 用户名@服务器IP:远程文件路径 本地目录
第一条命令是本地推送到服务器,第二条是从服务器拉取到本地,默认端口是22,如果服务器改过SSH端口,需要加上 -P 参数指定端口号。
实际运维场景中的scp操作示例
假设你的服务器IP是 168.1.100,用户名是 root,要把本机 /home/user/backup.tar.gz 传到服务器的 /data 目录下,命令如下:
scp /home/user/backup.tar.gz root@192.168.1.100:/data/
执行后系统会提示输入密码,输完等待进度条走完即可,常用的几个参数有必要记一下:
-P:指定端口,注意是大写,小写-p是保留文件修改时间-r:递归复制整个目录-C:传输时启用压缩,适合文本类文件-l:限制带宽,-l 1024表示限制为1Mbps,避免传输占满公司出口带宽
多文件传输和目录拷贝的写法
拷贝多个文件时,可以直接在后面罗列所有文件路径:
scp file1.txt file2.txt file3.txt root@192.168.1.100:/data/
目录拷贝必须加 -r 参数,否则会报错,比如把本地 nginx-conf 整个目录传到服务器:
scp -r /home/user/nginx-conf root@192.168.1.100:/etc/nginx/
如果传输意外中断,scp没有断点续传功能,只能重新传一遍,这是它最大的短板,因此遇到大文件或者网络不稳定的情况,建议用下面要讲的rsync。
大文件与增量同步的王者:rsync命令
rsync和scp的核心差异
rsync的名字来自remote sync,它和scp最大的区别在于支持增量传输和断点续传,rsync在传输前会对比源文件和目标文件的差异,只传输有变化的部分,对于动不动几十个G的数据库备份文件,第一次全量传输后,后续每次同步只传改动的小部分,速度优势极其明显。
业内专家指出,rsync在同步网站目录、日志文件这类频繁更新的场景中,效率远超scp和FTP。
rsync常用参数和使用实例
基本命令格式:
rsync [参数] 本地路径 用户名@服务器IP:远程路径
常用参数组合:
-avz:归档模式、显示详情、传输时压缩,这是最常用的组合--progress:显示传输进度条--partial:保留部分传输的文件,配合断点续传--bwlimit=2000:限速,单位是KB/s--delete:删除目标端多余文件,保持两端完全一致
实际场景示例,把本地网站目录同步到服务器,同时删除服务器上已不存在的文件:
rsync -avz --delete --progress /home/user/www/ root@192.168.1.100:/var/www/html/
注意源路径末尾的斜杠很有讲究,带斜杠表示同步目录内部的内容,不带斜杠则会把目录本身也复制过去,这个细节容易踩坑,建议实际测试两次感受差别。
rsync断点续传的实操价值
当你传输一个2GB的数据库备份文件,传到一半网络断了,用scp只能从头再来,用rsync执行同一条命令,它会自动跳过已传输的部分,从断点继续,这在跨地域传输、移动网络环境下是救命级的功能。
图形化工具:新手友好的SFTP方案
WinSCP和FileZilla的选择
很多刚接触Linux的朋友看到命令行就头疼,这完全正常,图形化SFTP客户端把文件传输做成了双窗口拖拽,左边是本地目录,右边是服务器目录,跟操作Windows资源管理器一样直观。
WinSCP在Windows平台上更流行,FileZilla则跨平台通吃,Mac、Windows、Linux都能用,两者都基于SFTP协议,本质上就是给SSH套了一层图形外壳,安全性没有打折。
图形化传输的完整操作路径
以WinSCP为例,打开软件后填写主机名(服务器IP)、端口(默认22)、用户名和密码,点登录就能连上,登录后左栏本地文件,右栏服务器文件,直接拖拽就完成上传,它还内置了编辑器,右键远程文件可以直接编辑,保存后自动上传,改配置文件时省事不少。
WinSCP还支持断点续传和断线重连,传输大文件时即便临时断网也能自动恢复,会话可以保存,下次连接不用重复输密码,支持与其他Linux服务器管理工具联动。
什么时候该用图形化工具
图形化工具在自动化方面不如命令行,但以下场景强烈建议用图形界面:
- 服务器上要处理大量静态文件,需要批量改权限、改所有者
- 需要可视化对比本地和远程目录的差异
- 不熟悉Linux命令,只会用宝塔面板或者云控制台的用户
搭建网站时用WinSCP把WordPress源码拖上去,比敲十几条命令更直观,不容易出错。
局域网飞传与临时场景的补充方案
利用Python搭建临时HTTP服务
日常运维中偶尔会遇到临时传个文件给同事的情况,如果两台机器都在同一内网,可以直接在文件所在目录启动一个临时HTTP服务,对方用浏览器就能下载。
在文件所在目录执行:
python3 -m http.server 8080
然后对方访问 http://你的IP:8080 就能看到目录列表,点击即可下载,简单粗暴,但只适合内网临时使用,绝不可以暴露到公网,否则等于裸奔。
小文件直接用rz和sz命令
如果你是用Xshell、SecureCRT这类终端软件连接服务器的,还有更轻量的选择,在服务器上安装lrzsz工具后,输入 rz 会弹出本地文件选择框,选完直接上传到当前目录;输入 sz 文件名 会把服务器文件保存到本地。
# CentOS安装 yum install lrzsz -y # Ubuntu安装 apt install lrzsz -y
这种方式适合传几百KB的配置文件、密钥文件,速度快且不需要记服务器IP。
五种传输方式横向对比速查表
| 方式 | 适合场景 | 断点续传 | 传输效率 | 上手难度 |
|---|---|---|---|---|
| scp | 单次小文件、快速传输 | 不支持 | 较高 | 低 |
| rsync | 大文件、增量同步、自动化备份 | 支持 | 最高 | 中 |
| SFTP图形工具 | 新手操作、批量文件管理 | 支持 | 中等 | 最低 |
| rz/sz | 终端内临时传小文件 | 不支持 | 较低 | 低 |
| HTTP临时服务 | 内网快速分发 | 不支持 | 中等 | 中 |
文件传输失败的常见原因排查
传文件传不上去,问题多半不在命令本身,而是底层环境。
权限问题属于最高频的坑,目标目录如果对当前用户没有写权限,scp和rsync都会报Permission denied,解决方法是先检查目录权限,或者改用有权限的用户登录,服务器上执行 ls -ld /data 就能看到目录归属。
SSH端口不是默认的22,云服务商出于安全考虑经常改端口,如果你用默认端口连接失败,检查一下是不是端口问题,scp用 -P 指定,rsync用 -e "ssh -p 端口号" 指定。
防火墙或安全组拦截了SSH,云服务器需要在控制台的安全组规则里放行22端口(或自定义端口),本地电脑防火墙也可能拦截出站连接,telnet一下IP端口能快速定位问题。
磁盘空间已满,服务器上 df -h 查看磁盘使用率,如果已经是100%,任何传输都会失败,这种情况先清理日志或扩容再传。
远程Linux服务器传输文件的常见问答
本地文件上传到linux服务器选scp还是rsync?
如果是一次性传几个小文件,以后不会再改动,用scp更直接,如果是要定期同步目录内容、传输大文件且担心网络中断,rsync是唯一正确的选择,它的增量算法和断点续传能力是scp无法替代的。
为什么用sftp工具连接服务器提示拒绝连接?
先确认服务器IP和端口是否正确,再检查SSH服务是否在运行,执行 systemctl status sshd 查看状态,还要确认安全组和防火墙,多数云服务器厂商默认只开放22端口,如果改过端口记得同步修改安全组规则。
传输超大文件时如何防止占用过多带宽影响业务?
使用rsync的 --bwlimit 参数限速,rsync -avz --bwlimit=5000 表示限速5MB/s,scp的 -l 参数也能限速,单位是Kbit/s,选择在业务低峰期传输同样是个务实的办法。
文件传输是Linux运维的基本功,scp和rsync这两个命令值得花半小时熟悉,熟练后能覆盖绝大多数需求,图形工具则作为备用方案,掌握这些方法后,本地到服务器之间的文件流转就再也不需要依赖第三方网盘中转了。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/700808.html





