向Linux服务器上传文件,最简单可靠的方法是使用scp命令,如果你在Windows图形界面下操作,用WinSCP更直观。
接下来从命令到图形工具,把每种常见上传方式的适用场景和操作步骤讲清楚,你可以按自己的操作系统、文件大小、网络条件来选择,不用所有命令都背下来。
linux服务器上传文件命令scp和rsync怎么选
大多数人第一次接触Linux服务器上传文件,都是被一个需求逼的:本地写好的代码或者配置文件,要放到服务器上跑,这时候scp就是首选,因为它一条命令搞定,不需要额外安装东西。
用scp上传单个文件
scp全称是secure copy,底层走的是SSH协议,所以传输过程是加密的,只要你能通过SSH登录服务器,就能用scp上传文件。
基本格式:
scp /本地路径/文件名 用户名@服务器IP:/服务器目标路径
比如把本地的nginx.conf上传到服务器的/etc/nginx/目录:
scp /home/user/nginx.conf root@192.168.1.100:/etc/nginx/
执行后会提示输入密码,输入服务器对应用户的登录密码即可,如果没有写服务器目标路径,默认传到家目录。
用scp上传整个目录
如果上传的是文件夹,需要加-r参数:
scp -r /本地网站目录 root@192.168.1.100:/var/www/html/
上传目录时建议先压缩再传,尤其是里面有很多小文件的情况,小文件一个一个传会非常慢,打包成tar.gz再传,速度能提升几倍。
用rsync做增量同步和断点续传
rsync比scp强在两点:一是只传差异部分,第二次同步时速度极快;二是支持断点续传,网络断了重来不用全量重传。
典型场景:你要频繁更新服务器上的前端静态文件,本地改了几个文件,用rsync一键同步。
rsync -avz --progress /本地目录/ 用户名@服务器IP:/服务器目标目录/
参数说明:-a保留权限和时间戳,-z压缩传输,–progress显示进度,注意本地目录末尾带不带斜杠是有区别的:带斜杠表示把目录里的内容同步过去,不带斜杠是把目录本身同步过去。
如果上传大文件担心断线,加上–partial参数即可:
rsync -avz --partial --progress 大文件.tar.gz 用户名@服务器IP:/服务器目标路径/
行业共识认为,对于超过1GB的大文件,rsync比scp更稳,因为它能续传。
scp和rsync的区别,什么时候用哪个
| 对比项 | scp | rsync |
|---|---|---|
| 全量传输 | 每次都全量传 | 只传差异部分 |
| 断点续传 | 不支持 | 支持 |
| 压缩传输 | 手动加参数 | 默认可加-z |
| 安装情况 | 几乎都自带 | 服务器一般自带,没有可装 |
| 适用场景 | 临时传一次文件 | 定期同步、大量文件 |
如果你只是偶尔传个配置文件,scp够了,如果你要天天部署代码、同步网站目录,rsync更省心。
windows电脑怎么向linux服务器上传文件?图形化工具推荐
很多运维和开发者主力机是Windows,再牛的Xshell也只能开终端,没法直接把文件拖进去,这里推荐几个图形化工具,全部支持SSH协议,不需要在服务器上额外装服务端。
WinSCP:免费且轻量
WinSCP是Windows下最经典的SFTP客户端,安装包只有十几兆,打开后填上主机IP、端口、用户名、密码,点登录就能看到左边是本地目录,右边是服务器目录,直接拖拽上传。
它有一个非常实用的功能:可以记住多台服务器信息,下次连接不用重新输入,如果公司有多台Linux服务器,这个功能能省不少时间。
FileZilla:适合跨平台和FTP场景
FileZilla支持Windows、macOS、Linux,界面比WinSCP更规整,而且同时支持SFTP和普通FTP,如果你的服务器提供商给的连接方式是FTP,那就用它。
填写方式:协议选SFTP,主机填IP,端口默认22,用户名密码照常,连接成功后,把本地文件拖到右侧服务器目录即可。
用Xftp配合Xshell使用
很多人习惯Xshell登录终端,这时候再装一个Xftp会非常流畅,在Xshell的工具栏上点一下Xftp图标,它会自动继承当前SSH会话的登录信息,直接弹出文件传输界面,不用重复填密码。
需要留意的是,Xftp是商业软件,家庭版免费,但每次打开会弹更新提示,不影响使用。
Windows自带OpenSSH命令
如果实在不想装软件,Windows 10/11的PowerShell或cmd里也自带scp命令,用法和Linux端完全一样:
scp C:本地文件test.txt root@192.168.1.100:/root/
路径用反斜杠,后面服务器路径用正斜杠,别搞混,这种方式适合临时用一下,长期操作还是图形界面效率高。
上传文件时遇到权限和网络问题怎么办
权限不够,提示Permission denied
这类问题大多发生在用普通用户登录却要写/root或/var/www这类系统目录时,解决办法:
- 先确认服务器上目标目录的写权限,可以用ls -ld /目标目录查看。
- 用sudo命令在服务器端把目录所有者改成当前用户,或者直接改用root账号上传。
- 如果不想改权限,也可以先把文件传到/home/用户名下,再通过SSH登录后用sudo mv移动到目标位置。
连接被拒绝或超时
先检查IP和端口是不是正确,默认SSH端口是22,如果服务器改过端口,scp需要加-P参数(注意大写P):
scp -P 2222 本地文件 用户名@服务器IP:/目标路径
再检查服务器防火墙是否放行了对应端口,简米云、酷番云的服务器如果安全组规则没开端口,SSH怎么都连不上。
上传大文件时速度很慢
除了用rsync断点续传,还可以考虑以下办法:
- 压缩后再传:tar czf – 目录名 | ssh 用户名@服务器IP “tar xzf – -C /目标路径” 这种流式压缩命令,适合大目录。
- 调整SSH加密算法,这个对普通用户影响不大,熟悉的话可以改。
- 避开晚高峰,国内北上广深这些地区,晚上访问国际线路带宽容易拥挤。
断点续传命令推荐:lrzsz的rz和sz
如果你已经通过SSH终端登录了服务器,还有个很方便的命令:rz和sz,这是Linux下的ZModem协议工具,需要先安装:
yum install lrzsz -y # CentOS apt install lrzsz -y # Debian/Ubuntu
然后输入rz,就会弹出文件选择窗口,选择本地文件直接上传到当前服务器目录,上传大文件时可以恢复断点,但速度一般,适合传几兆到几十兆的配置文件。
云服务器场景下怎么上传文件
现在国内多数人用的是简米云、酷番云、华为云的Linux云服务器,除了SSH命令,还有几类上传方式。
通过云厂商控制台自带的文件管理功能
简米云ECS的VNC登录里带一个文件管理面板,酷番云轻量服务器控制台也有“文件管理”入口,不需要任何命令行知识,直接在网页上点上传文件按钮操作即可。
这类方式适合传小文件,比如SSL证书、配置文件,速度受网页限制,要注意:部分控制台文件管理存在单文件大小上限,不同厂商限制不同,上传大文件前先查一下官方文档。
使用对象存储中转上传
如果你人在外地,公司有对象存储(OSS/COS),可以先本地传到对象存储,再在服务器上拉到本地,例如酷番云服务器从COS拉取文件:
wget 对象存储临时链接
这种方法很适合在服务器带宽好、本地到服务器网络差的场景下使用,相当于借对象存储做中转。
需要注意的安全问题
- 不要使用默认端口22直接在公网暴露,改成随机高位端口能减少扫描攻击。
- 密钥认证比密码认证更安全,生成公钥后把私钥留在本地,服务器上配置authorized_keys。
- 上传包含数据库密码、API密钥的文件时,先确认服务器上权限要设成600,用chmod 600 文件名。
常见问题快速解答
上传多个文件时可以一条命令传完吗?
可以,scp支持多个文件源,把文件全列在后面就行:
scp file1.txt file2.txt file3.txt 用户名@服务器IP:/目标路径/
目录下所有文件可以用通配符,如scp /local/.tar.gz 用户名@服务器IP:/目标路径/。
scp命令传文件时没有写入权限怎么办?
先确认目标目录的属主,或者换有权限的用户,或者先传到/tmp,再用sudo mv移动到最终位置,如果目录是root所有且你只有普通账号,sudo是唯一办法。
上传文件后服务器上中文文件名乱码是什么原因?
多数是本地Windows文件名编码和Linux的UTF-8不一致导致,上传前先把文件名改成英文,或者用zip格式打包后在服务器上解压,zip内文件名编码能在unzip时指定,用FileZilla传输时也建议设置成UTF-8强制编码。
向Linux服务器上传文件,本质上就是找到一条从本地到服务器的数据通道,小文件用scp,大文件和重复同步用rsync,Windows用户用WinSCP或Xftp,云服务器还有控制台兜底,把这一套命令和工具混着用,基本能覆盖所有日常传输需求。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/736073.html





