把tar.gz上传到云服务器最直接的方式是用scp命令,一行代码就能搞定,不需要额外安装任何软件。
无论你是第一次操作的小白,还是被上传速度折磨过的老手,这篇文章都会把上传的完整流程、坑点和提速技巧一次说透。
上传前必须搞懂的3件事
你的服务器是什么系统
云服务器无非就两种主流系统:CentOS / Rocky Linux(红帽系)和Ubuntu / Debian(Debian系)。
不同系统默认的软件包管理器不一样,但上传tar.gz文件这一步,二者没有任何区别,因为操作走的是同一个协议。
你只需要确认一点:服务器开了SSH端口(默认22),并且你知道服务器的公网IP、用户名和密码(或者密钥)。
你本地的操作系统是什么
Windows、macOS、Linux,三种系统都能上传,但用的工具和命令略有差异。
- Windows用户:建议直接用命令提示符或PowerShell,或者用WinSCP这类图形化工具。
- macOS / Linux用户:系统自带终端,天然支持scp和rsync命令,不需要装任何东西。
tar.gz文件里装的是什么
这决定了你上传后要做什么操作。
- 如果是网站源码,上传后要解压到Web目录,比如
/var/www/html。 - 如果是软件安装包,可能要解压后执行编译或安装脚本。
- 如果是备份文件,直接传到存储目录,解不解压无所谓。
搞清楚这一点,后面选路径才不会迷茫。
scp命令上传(最常用、最推荐)
基础命令格式
scp /本地路径/文件名.tar.gz 用户名@服务器IP:/目标路径/
举个例子,把本地~/downloads下的backup.tar.gz传到服务器的/root目录:
scp ~/downloads/backup.tar.gz root@123.45.67.89:/root/
按回车后,系统会让你输入服务器密码,输完等待进度条跑完就结束了。
处理非默认SSH端口
很多云服务商为了安全会把SSH端口改掉,比如改成2222。
这时候用-P参数指定端口,注意是大写P:
scp -P 2222 ~/downloads/backup.tar.gz root@123.45.67.89:/root/
上传大文件的提速技巧
一个几百MB甚至几个GB的tar.gz,普通scp传起来确实慢。
行业共识是改用rsync命令,它支持断点续传,网络闪断后不用重新开始,而且压缩传输能节省时间。
命令格式如下:
rsync -avzP ~/downloads/backup.tar.gz root@123.45.67.89:/root/
参数解读:-a归档模式保留文件属性,-v显示详情,-z传输时压缩,-P显示进度且支持断点续传。
实测在丢包率较高的网络环境下,rsync比scp靠谱得多。
图形化工具上传(适合Windows用户)
WinSCP
老牌SFTP工具,操作逻辑和FTP软件一样,左边本地目录,右边服务器目录,拖拽就能上传。
打开软件后,文件协议选SFTP,填上IP、端口、用户名、密码,点登录就能看到文件列表。
直接把tar.gz拖到右侧窗口,上传就开始了。
宝塔面板上传
如果你用的服务器装了宝塔面板,上传体验更简洁。
登录面板后台,在左侧菜单找到文件,进入你想放压缩包的目录,点击上传按钮,选中tar.gz文件即可。
宝塔会在后台自动处理上传队列,而且支持大文件分片上传。
问一个很常见的场景:服务器网站搬家时,压缩包几百MB,FTP工具传到一半就失败。
宝塔面板的这个分片上传机制,能有效避免这类问题。
服务器之间直接拉取(免本地上传)
wget 直拉
如果你是两台服务器之间转移tar.gz,完全不需要先下载到本地再传上去。
在这台服务器上执行:
wget http://另一台服务器的IP/tar包路径/backup.tar.gz
前提是另一台服务器开了一个HTTP服务,或者你放到了对象存储、图床上。
这个技巧在多服务器数据同步场景下非常高效,省了本地中转那一步。
从GitHub或云存储拉取
如果你的tar.gz已经放在GitHub Release、简米云OSS或酷番云COS上,直接用wget或者curl下载:
wget https://oss.xxx.com/backup.tar.gz
省时省力,而且不会被本地带宽卡脖子。
上传后必做的检查清单
确认文件完整性
传完不等于传好了,对比文件大小是最基础的检查。
在本地执行:
ls -l backup.tar.gz
登录服务器,进入目标目录,再次执行ls -l,对比两边字节数是否一致。
更严谨的方式是用MD5校验:
md5sum backup.tar.gz # 服务器上执行 md5 backup.tar.gz # macOS本地执行
两边的哈希值完全相同,才说明文件没在半路上损坏。
解压到目标目录
检查无误后,执行解压命令:
tar -xzf backup.tar.gz
-x解压,-z解压gzip压缩,-f指定文件名。
如果文件已经存在且想要覆盖:
tar -xzf backup.tar.gz -C /指定目录/
-C参数指定解压目标路径,避免文件撒得乱七八糟。
处理权限问题
很多次上传后启动网站报错,原因就是文件属主和权限不对。
最常见的修复命令:
chown -R www:www /var/www/html/ # 把属主改成Web服务运行用户 chmod -R 755 /var/www/html/ # 目录权限755,文件权限644
如果你不清楚Web服务用什么用户跑,执行ps aux|grep nginx或ps aux|grep apache看一眼就能确定。
关于tar.gz上传到云服务器慢的问题
很多人卡在上传速度只有几十KB/s这一步,排查思路从这四条入手。
检查本地运营商网络
上行带宽是决定上传速度的核心瓶颈,家用宽带的上行速度普遍远低于下行,多数情况下你实际能跑满的只有标称速率的十分之一。
无解,只能靠压缩文件体积或错峰上传。
检查服务器带宽
云服务商的带宽计费一般分按固定带宽和按使用流量两种。
固定带宽的服务器,带宽值就是上限,比如5Mbps,最快只能跑约600KB/s。
这是硬件限制,别盲目优化命令,没用的。
换用压缩率高一级的工具
tar.gz已经是gzip压缩,试着改用tar.xz格式,体积能再小一些,但压缩和解压耗时更长。
如果你要传的文件里有大量图片、视频,这些已经压缩过的格式,再压也压不动。
避开晚高峰时段
网络拥堵最严重的时段集中在晚上8点到11点,错峰到凌晨上传,速度会有明显提升。
Q&A:关于tar.gz上传云服务器的几个高频问题
用scp上传tar.gz到云服务器时提示Permission denied,怎么解决?
这个错误绝大多数是目标目录没有写权限,检查你登录的用户是否对该目录拥有写入权限,比如/var/www/html通常归root用户管理,普通用户直接用scp传不进去,解决办法是先用sudo -i切换到root,或者把目录属主改成当前用户:chown -R 用户名 /目标目录。
tar.gz上传到云服务器后怎么解压到当前目录?
执行tar -xzf 文件名.tar.gz即可,解压默认覆盖同名文件,但不会删除多余文件,如果你希望解压到特定目录,加-C参数追加路径,比如tar -xzf backup.tar.gz -C /var/www/html,这个操作会把站点文件直接铺进Web目录里。
云服务器下载tar.gz和上传tar.gz有什么不同?
下载走的是下行带宽,上传走的是上行带宽,家用宽带的上下行不对称,所以上传速度通常远低于下载速度,在服务器上往本地下载一个tar.gz,感受会明显比从本地上传相同文件快得多,这和服务器端带宽配置也有关系,简米云、酷番云的入方向带宽一般不作严格限制,而出方向带宽才是计费关键。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/778607.html


